| @@ -1,5 +1,5 @@ | |||
| INSERT INTO `mallink`.`wx_score_rules`(`id`, `tenant_id`, `type`, `scale`) | |||
| select CEILING(RAND()*90000000000+10000000000),`tenant_id`,4,`scale` from wx_score_rules where type = 2 and scale > 10; | |||
| --集团版手动处理,(集团版不存在这类数据,子集团数据与原集团规则相等) | |||
| --集团版手动处理,(集团版不存在这类数据,子集团生日倍率数据与原集团规则相等) | |||
| --目前集团版(1008-1020-----1028)(1026-1027-----1025) | |||
| @@ -0,0 +1,85 @@ | |||
| package com.iformall.controller; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCUserBasicSign; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.service.WxCUserBasicSignService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| @RestController | |||
| @RequestMapping("/api/userSign") | |||
| @Api(description = "签到接口") | |||
| public class WxCUserBasicSignController extends BaseController { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| private WxCUserBasicSignService wxCUserBasicSignService; | |||
| @ApiOperation("用户签到列表") | |||
| @GetMapping("list") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name="pageNum",value="页数",dataType="int", paramType = "query",required=true), | |||
| @ApiImplicitParam(name="pageSize",value="每页条数",dataType="int", paramType = "query",required=true)}) | |||
| public ResultData list(@ModelAttribute WxCUserBasicSign wxCUserBasicSign, Integer pageNum, Integer pageSize) { | |||
| logger.debug("[" + getIpAddr() + "] WxCUserBasicSignController::list"); | |||
| if (null == wxCUserBasicSign){ | |||
| wxCUserBasicSign = new WxCUserBasicSign(); | |||
| } | |||
| Long memberId; | |||
| try { | |||
| memberId = getMemberId(); | |||
| } catch (MallinkException me) { | |||
| return new ResultData(ErrorCode.getByCode(me.getErrorCode())); | |||
| } | |||
| wxCUserBasicSign.updateTenantInfo(getTenantInfo()); | |||
| wxCUserBasicSign.setUserId(memberId); | |||
| final PageInfo<WxCUserBasicSign> page = wxCUserBasicSignService.listAsPage(wxCUserBasicSign, pageNum, pageSize); | |||
| return new ResultData(page); | |||
| } | |||
| @ApiOperation("签到") | |||
| @PostMapping("signIn") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "gameId", value = "游戏ID", dataType = "String", paramType = "query", required = true)}) | |||
| public ResultData signIn(@RequestBody WxCUserBasicSign wxCUserBasicSign) { | |||
| logger.debug("[" + getIpAddr() + "] WxCUserBasicSignController::signIn"); | |||
| if (null == wxCUserBasicSign){ | |||
| wxCUserBasicSign = new WxCUserBasicSign(); | |||
| } | |||
| Long memberId; | |||
| try { | |||
| memberId = getMemberId(); | |||
| } catch (MallinkException me) { | |||
| return new ResultData(ErrorCode.getByCode(me.getErrorCode())); | |||
| } | |||
| wxCUserBasicSign.updateTenantInfo(getTenantInfo()); | |||
| wxCUserBasicSign.setUserId(memberId); | |||
| WxCUserBasicSign todaySign = wxCUserBasicSignService.getTodaySignIn(wxCUserBasicSign); | |||
| if(todaySign == null){ | |||
| try { | |||
| todaySign = wxCUserBasicSignService.signIn(wxCUserBasicSign); | |||
| }catch(Exception e){ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR); | |||
| } | |||
| if(todaySign == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR,"type"); | |||
| } | |||
| return new ResultData(todaySign); | |||
| }else{ | |||
| return new ResultData(ErrorCode.MEM_IS_SIGNIN,todaySign); | |||
| } | |||
| } | |||
| } | |||
| @@ -396,6 +396,7 @@ public enum ErrorCode{ | |||
| CREDIT_NOT_ENOUGH(13101, "积分不够扣减值"), | |||
| USER_NOT_MEMBER(13102, "该用户不是小程序会员"), | |||
| OUT_OF_CREDIT(13103, "超出最大积分"), | |||
| MEM_IS_SIGNIN(13104, "该用户已签到"), | |||
| /** | |||
| @@ -76,6 +76,13 @@ public class BaseMyBatisConfiguration { | |||
| basicInfoSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(basicInfoSharding); | |||
| ShardingSphere basicSignSharding = new ShardingSphere(); | |||
| basicSignSharding.setColumn("tenant_id"); | |||
| basicSignSharding.setTableName("wx_c_user_basic_sign"); | |||
| basicSignSharding.setCount(100); | |||
| basicSignSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(basicSignSharding); | |||
| ShardingSphere wxbasicChildSharding = new ShardingSphere(); | |||
| wxbasicChildSharding.setColumn("tenant_id"); | |||
| wxbasicChildSharding.setTableName("wx_c_user_basic_child"); | |||
| @@ -0,0 +1,67 @@ | |||
| package com.iformall.domain.po; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| import java.util.Date; | |||
| @TableName(value = "wx_c_user_basic_sign") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class WxCUserBasicSign extends TenantEntity { | |||
| @TableField(exist = false) | |||
| public static final Integer SIGNIN_TYPE = 1; | |||
| protected Long id; | |||
| @io.swagger.annotations.ApiModelProperty(value="userId",name="userId") | |||
| private Long userId; | |||
| @io.swagger.annotations.ApiModelProperty(value="1:签到",name="type") | |||
| private Integer type; | |||
| @io.swagger.annotations.ApiModelProperty(value="签到时间",name="signinDate") | |||
| private Date signinDate; | |||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||
| private Date createDate; | |||
| @io.swagger.annotations.ApiModelProperty(value="修改时间",name="updateDate") | |||
| private Date updateDate; | |||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当月连续签到天数",name="continueMonthSign") | |||
| private Integer continueMonthSign; | |||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当月累计签到天数",name="countMonthSign") | |||
| private Integer countMonthSign; | |||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当年连续签到天数",name="continueYearSign") | |||
| private Integer continueYearSign; | |||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当年累计签到天数",name="countYearSign") | |||
| private Integer countYearSign; | |||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间连续签到天数",name="continueSign") | |||
| private Integer continueSign; | |||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间累计签到天数",name="countSign") | |||
| private Integer countSign; | |||
| @io.swagger.annotations.ApiModelProperty(value="备注",name="mark") | |||
| private String mark; | |||
| @TableField(exist = false) | |||
| private Date startDate; | |||
| @TableField(exist = false) | |||
| private Date endDate; | |||
| @TableField(exist = false) | |||
| private Integer begin; | |||
| @TableField(exist = false) | |||
| private Integer limit; | |||
| } | |||
| @@ -0,0 +1,13 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxCUserBasicSign; | |||
| import java.util.List; | |||
| public interface WxCUserBasicSignMapper extends CommonMapper<WxCUserBasicSign, Long> { | |||
| List<WxCUserBasicSign> findList(WxCUserBasicSign record); | |||
| WxCUserBasicSign getLastSignIn(WxCUserBasicSign record); | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.domain.po.WxCUserBasicSign; | |||
| public interface WxCUserBasicSignService { | |||
| /** | |||
| * 根据实体查询分页列表 | |||
| * | |||
| * @param record | |||
| * @param pageIndex | |||
| * @param pageSize | |||
| * @return | |||
| */ | |||
| PageInfo<WxCUserBasicSign> listAsPage(WxCUserBasicSign record, Integer pageIndex, Integer pageSize); | |||
| WxCUserBasicSign signIn(WxCUserBasicSign record); | |||
| WxCUserBasicSign getTodaySignIn(WxCUserBasicSign record); | |||
| WxCUserBasicSign getLastSignIn(WxCUserBasicSign record); | |||
| } | |||
| @@ -0,0 +1,140 @@ | |||
| package com.iformall.service.impl; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.WxCUserBasicSign; | |||
| import com.iformall.mapper.WxCUserBasicSignMapper; | |||
| import com.iformall.service.WxCUserBasicSignService; | |||
| import com.iformall.utils.DateUtils; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.text.DateFormat; | |||
| import java.text.SimpleDateFormat; | |||
| import java.util.Calendar; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import static java.util.Calendar.DAY_OF_MONTH; | |||
| @Service | |||
| @Slf4j | |||
| public class WxCUserBasicSignServiceImpl implements WxCUserBasicSignService { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| WxCUserBasicSignMapper wxCUserBasicSignMapper; | |||
| @Override | |||
| public PageInfo<WxCUserBasicSign> listAsPage(WxCUserBasicSign record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserBasicSignMapper.findList(record)); | |||
| } | |||
| @Transactional(rollbackFor = {Exception.class}) | |||
| @Override | |||
| public WxCUserBasicSign signIn(WxCUserBasicSign record) { | |||
| if(record.getType() == null){ | |||
| record.setType(WxCUserBasicSign.SIGNIN_TYPE); | |||
| } | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| Date today = new Date(); | |||
| record.setCreateDate(today); | |||
| record.setUpdateDate(today); | |||
| if(record.getType().equals(WxCUserBasicSign.SIGNIN_TYPE)){ | |||
| record.setSigninDate(DateUtils.getDateZero(today)); | |||
| WxCUserBasicSign lastSignIn = wxCUserBasicSignMapper.getLastSignIn(record); | |||
| if(lastSignIn == null){ | |||
| record.setContinueMonthSign(1); | |||
| record.setCountMonthSign(1); | |||
| record.setContinueYearSign(1); | |||
| record.setCountYearSign(1); | |||
| record.setContinueSign(1); | |||
| record.setCountSign(1); | |||
| wxCUserBasicSignMapper.insert(record); | |||
| }else{ | |||
| long daysL = DateUtils.startToEnd(lastSignIn.getSigninDate(), today); | |||
| int daysI = new Long(daysL).intValue(); | |||
| record.setCountSign(lastSignIn.getCountSign() + 1); | |||
| if(daysI == 1){ | |||
| record.setContinueSign(lastSignIn.getContinueSign() + 1); | |||
| }else{ | |||
| record.setContinueSign(1); | |||
| } | |||
| if(DateUtils.getYear(today) == DateUtils.getYear(lastSignIn.getSigninDate())){ | |||
| record.setCountYearSign(lastSignIn.getCountYearSign() + 1); | |||
| if(daysI == 1){ | |||
| record.setContinueYearSign(lastSignIn.getContinueYearSign() + 1); | |||
| }else{ | |||
| record.setContinueYearSign(1); | |||
| } | |||
| if(DateUtils.getMonth(today) == DateUtils.getMonth(lastSignIn.getSigninDate())){ | |||
| record.setCountMonthSign(lastSignIn.getCountMonthSign() + 1); | |||
| if(daysI == 1){ | |||
| record.setContinueMonthSign(lastSignIn.getContinueMonthSign() + 1); | |||
| }else{ | |||
| record.setContinueMonthSign(1); | |||
| } | |||
| }else{ | |||
| record.setCountMonthSign(1); | |||
| record.setContinueMonthSign(1); | |||
| } | |||
| }else{ | |||
| record.setContinueMonthSign(1); | |||
| record.setCountMonthSign(1); | |||
| record.setContinueYearSign(1); | |||
| record.setCountYearSign(1); | |||
| } | |||
| wxCUserBasicSignMapper.insert(record); | |||
| } | |||
| return record; | |||
| }else{ | |||
| //补签 | |||
| return null; | |||
| } | |||
| } | |||
| @Override | |||
| public WxCUserBasicSign getTodaySignIn(WxCUserBasicSign record) { | |||
| Calendar calendar = Calendar.getInstance(); | |||
| calendar.setTime(new Date()); | |||
| calendar.set(Calendar.HOUR_OF_DAY, 0); | |||
| calendar.set(Calendar.MINUTE, 0); | |||
| calendar.set(Calendar.SECOND, 0); | |||
| Date today = calendar.getTime();//今天零点 | |||
| calendar.set(DAY_OF_MONTH,calendar.get(DAY_OF_MONTH) +1); | |||
| Date tomorrow =calendar.getTime();//明天零点 | |||
| record.setStartDate(today); | |||
| record.setEndDate(tomorrow); | |||
| List<WxCUserBasicSign> list = wxCUserBasicSignMapper.findList(record); | |||
| if(list != null && list.size() == 1){ | |||
| return list.get(0); | |||
| }else if(list.size() > 1){ | |||
| DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); | |||
| String todayString = format.format(today); | |||
| logger.error("用户签到数据异常{}"+record.getUserId()+"时间{}"+todayString); | |||
| return list.get(0); | |||
| } | |||
| return null; | |||
| } | |||
| @Override | |||
| public WxCUserBasicSign getLastSignIn(WxCUserBasicSign record) { | |||
| return wxCUserBasicSignMapper.getLastSignIn(record); | |||
| } | |||
| } | |||
| @@ -52,50 +52,18 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { | |||
| public void wxScoreRulesInit(String tenantId) { | |||
| WxScoreRules wxScoreRules = new WxScoreRules(); | |||
| wxScoreRules.setTenantId(tenantId); | |||
| wxScoreRules.setRules("[{\"id\": 1, \"desc\": \"每日登陆\", \"step\": 1, \"limit\": 0, \"score\": 0}," + | |||
| " {\"id\": 2, \"score\": null, \"childs\": " + | |||
| "[{\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"餐饮\", \"businessId\": 1}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"娱乐\", \"businessId\": 2}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服饰\", \"businessId\": 3}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"亲子\", \"businessId\": 4}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"超市\", \"businessId\": 5}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"美妆\", \"businessId\": 7}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"珠宝\", \"businessId\": 8}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服务\", \"businessId\": 9}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"家居\", \"businessId\": 10}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"数码家电\", \"businessId\": 11}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"其他\", \"businessId\": 6}]}," + | |||
| " {\"id\": 3, \"desc\": \"绑定车牌1个\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||
| " {\"id\": 6, \"desc\": \"授权手机号\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||
| " {\"id\": 7, \"desc\": \"编辑个人信息\", \"step\": 1, \"limit\": 1, \"score\": 0}]"); | |||
| wxScoreRules.setRules(WxScoreRules.getCreditDefaultRules()); | |||
| wxScoreRules.setCreateDate(new Date()); | |||
| wxScoreRules.setUpdateDate(new Date()); | |||
| wxScoreRules.setType(2); | |||
| wxScoreRules.setClearYear(1); | |||
| wxScoreRules.setScale(10); | |||
| wxScoreRules.setType(EnumScoreRules.CREDIT.getCode()); | |||
| wxScoreRules.setCreditLocked(1); | |||
| wxScoreRulesMapper.insert(wxScoreRules); | |||
| wxScoreRules = new WxScoreRules(); | |||
| wxScoreRules.setTenantId(tenantId); | |||
| wxScoreRules.setRules("[{\"id\": 1, \"desc\": \"每日登陆\", \"step\": 1, \"limit\": 0, \"score\": 0}," + | |||
| " {\"id\": 2, \"score\": 0, \"childs\": " + | |||
| "[{\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"餐饮\", \"businessId\": 1}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"娱乐\", \"businessId\": 2}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服饰\", \"businessId\": 3}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"亲子\", \"businessId\": 4}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"超市\", \"businessId\": 5}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"美妆\", \"businessId\": 7}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"珠宝\", \"businessId\": 8}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服务\", \"businessId\": 9}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"家居\", \"businessId\": 10}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"数码家电\", \"businessId\": 11}," + | |||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"其他\", \"businessId\": 6}]}," + | |||
| " {\"id\": 3, \"desc\": \"绑定车牌1个\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||
| " {\"id\": 6, \"desc\": \"授权手机号\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||
| " {\"id\": 7, \"desc\": \"编辑个人信息\", \"step\": 1, \"limit\": 1, \"score\": 0}]"); | |||
| wxScoreRules.setRules(WxScoreRules.getScoreDefaultRules()); | |||
| wxScoreRules.setCreateDate(new Date()); | |||
| wxScoreRules.setUpdateDate(new Date()); | |||
| wxScoreRules.setType(1); | |||
| wxScoreRules.setType(EnumScoreRules.SCORE.getCode()); | |||
| wxScoreRules.setCreditLocked(0); | |||
| wxScoreRulesMapper.insert(wxScoreRules); | |||
| } | |||
| @@ -104,8 +104,10 @@ public class CreditUtil { | |||
| if(Objects.nonNull(wxCUserBasicInfo.getScoreDate())){ | |||
| int scoreYear = DateUtils.getYear(wxCUserBasicInfo.getScoreDate()); | |||
| int year = DateUtils.getYear(new Date()); | |||
| if(scoreYear == year && DateUtils.isBirthdays(wxCUserBasicInfo.getScoreDate())){ | |||
| birthdayScale = getBirthdayScoreScale(tenantId, wxScoreRulesService); | |||
| if(scoreYear == year){ | |||
| if(DateUtils.isBirthdays(wxCUserBasicInfo.getScoreDate())){ | |||
| birthdayScale = getBirthdayScoreScale(tenantId, wxScoreRulesService); | |||
| } | |||
| }else{ | |||
| if (Objects.nonNull(wxCUserBasicInfo.getBirthdate()) && DateUtils.isBirthdays(wxCUserBasicInfo.getBirthdate())) { | |||
| birthdayScale = getBirthdayScoreScale(tenantId,wxScoreRulesService); | |||
| @@ -1362,4 +1362,19 @@ public class DateUtils { | |||
| return false; | |||
| } | |||
| /** | |||
| * 获取当前日期零点<br> | |||
| * | |||
| * @param date | |||
| * @return 获取当前日期零点 | |||
| */ | |||
| public static Date getDateZero(Date date) { | |||
| Calendar cal = Calendar.getInstance(); | |||
| cal.setTime(date); | |||
| cal.set(Calendar.HOUR_OF_DAY, 0); | |||
| cal.set(Calendar.MINUTE, 0); | |||
| cal.set(Calendar.SECOND, 0); | |||
| return cal.getTime(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,91 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxCUserBasicSignMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCUserBasicSign"> | |||
| <id column="id" jdbcType="BIGINT" property="id" /> | |||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId" /> | |||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId"/> | |||
| <result column="user_id" jdbcType="BIGINT" property="userId" /> | |||
| <result column="type" jdbcType="INTEGER" property="type" /> | |||
| <result column="signin_date" jdbcType="TIMESTAMP" property="signinDate"/> | |||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||
| <result column="continue_month_sign" jdbcType="INTEGER" property="continueMonthSign" /> | |||
| <result column="count_month_sign" jdbcType="INTEGER" property="countMonthSign" /> | |||
| <result column="continue_year_sign" jdbcType="INTEGER" property="continueYearSign" /> | |||
| <result column="count_year_sign" jdbcType="INTEGER" property="countYearSign" /> | |||
| <result column="continue_sign" jdbcType="INTEGER" property="continueSign" /> | |||
| <result column="count_sign" jdbcType="INTEGER" property="countSign" /> | |||
| <result column="mark" jdbcType="VARCHAR" property="mark" /> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`,`tenant_id`,`parent_tenant_id`,`user_id`,`type`,`signin_date`,`create_date`,`update_date`, | |||
| `continue_month_sign`,`count_month_sign`,`continue_year_sign`,`count_year_sign`, | |||
| `continue_sign`,`count_sign`,`mark` | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| where 1 = 1 | |||
| <if test=" null != id "> | |||
| and `id` = #{id} | |||
| </if> | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and `tenant_id` = #{tenantId} | |||
| </if> | |||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||
| and `parent_tenant_id` = #{parentTenantId} | |||
| </if> | |||
| <if test=" null != userId "> | |||
| and `user_id` = #{userId} | |||
| </if> | |||
| <if test=" null != type "> | |||
| and `type` = #{type} | |||
| </if> | |||
| <if test=" null != startDate "> | |||
| and `signin_date` >= #{startDate} | |||
| </if> | |||
| <if test=" null != endDate"> | |||
| and `signin_date` < #{endDate} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and id in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| order by `signin_date` desc | |||
| </sql> | |||
| <select id="findList" parameterType="com.iformall.domain.po.WxCUserBasicSign" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns" /> | |||
| from wx_c_user_basic_sign | |||
| <include refid="dynamicWhereConditions" /> | |||
| </select> | |||
| <select id="getLastSignIn" parameterType="com.iformall.domain.po.WxCUserBasicSign" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns" />,max(`signin_date`) from wx_c_user_basic_sign | |||
| where 1 = 1 | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and `tenant_id` = #{tenantId} | |||
| </if> | |||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||
| and `parent_tenant_id` = #{parentTenantId} | |||
| </if> | |||
| <if test=" null != userId "> | |||
| and `user_id` = #{userId} | |||
| </if> | |||
| group by user_id | |||
| </select> | |||
| </mapper> | |||