diff --git a/mallinkAdmin/src/main/resources/db/migration/V202009161600__ppsRegulator.sql b/mallinkAdmin/src/main/resources/db/migration/V202009161600__ppsRegulator.sql index 7ad4c0530..c22544882 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202009161600__ppsRegulator.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202009161600__ppsRegulator.sql @@ -13,3 +13,6 @@ from mall_user_info mui left join mall_user_role mur on mui.id = mur.uid where mui.is_admin = 1 and mur.role_id is not null GROUP BY mur.role_id; +ALTER TABLE `wx_c_user_basic_info` +ADD COLUMN `tag_scan_time` DATETIME COMMENT '标签定时扫描时间'; + diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java index 7ac17824f..1c19d066a 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java @@ -1,16 +1,24 @@ package com.iformall.schedule; -import com.github.pagehelper.PageInfo; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.enums.EnumAssignTagsTrigger; -import com.iformall.service.WxCUserBasicInfoService; -import com.iformall.service.WxCUserTagsService; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxMall; +import com.iformall.enums.EnumAssignTagsTrigger; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCUserTagsService; +import com.iformall.service.WxMallService; + @Component public class WxCUserTagsSchedule { @@ -21,22 +29,57 @@ public class WxCUserTagsSchedule { @Autowired WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + WxMallService wxMallService; // TODO 先不执行打标签操作了, 数据量太大,导致数据库CPU 100% //@Scheduled(cron = "0 0 0 25 * ?") // 每月25日凌晨01:00对会员列表扫描补录标签 - //@Scheduled(cron = "0 */5 * * * ?") // 测试1分钟一次 + @Scheduled(cron = "0 0 2 * * ?") // 测试1分钟一次 public void wxCUserTagsSchedule() { - WxCUserBasicInfo wxCUserBasicInfo = new WxCUserBasicInfo(); - - int pageIndex = 1; - final int pageSize = 1000; - - PageInfo page; - do{ - page = wxCUserBasicInfoService.listAsPage(wxCUserBasicInfo, pageIndex++, pageSize); - page.getList().stream().forEach(cubi -> { - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_SCAN, cubi); - }); - } while ((page.isHasNextPage())); + + WxMall wxMall = new WxMall(); + List malls = wxMallService.findList(wxMall); + for (WxMall mall : malls) { + WxCUserBasicInfo wxCUserBasicInfo = new WxCUserBasicInfo(); + if (StringUtils.isBlank(mall.getParentTenantId())) { + wxCUserBasicInfo.setFinalTenantId(mall.getTenantId()); + }else { + wxCUserBasicInfo.setFinalTenantId(mall.getParentTenantId()); + } + Date curDate = new Date(); + Calendar startC = Calendar.getInstance(); + startC.setTime(curDate); + startC.add(Calendar.DAY_OF_YEAR, -30); + + Calendar endC = Calendar.getInstance(); + endC.setTime(curDate); + endC.add(Calendar.DAY_OF_YEAR, -5); + //5天内未扫描的,且只扫描1个月内未扫描的 + wxCUserBasicInfo.setScanStartTime(startC.getTime()); + wxCUserBasicInfo.setScanEndTime(endC.getTime()); + + //活跃时间在10天内的 + Calendar startA = Calendar.getInstance(); + startA.setTime(curDate); + startA.add(Calendar.DAY_OF_YEAR, -10); + wxCUserBasicInfo.setActiveStartTime(startA.getTime()); + wxCUserBasicInfo.setActiveEndTime(curDate); + int pageIndex = 1; + final int pageSize = 5000; + + PageInfo page; + do{ + page = wxCUserBasicInfoService.listAsPage(wxCUserBasicInfo, pageIndex++, pageSize); + page.getList().stream().forEach(cubi -> { + try { + wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_SCAN, cubi); + }catch(Exception e) { + logger.error("wxCUserTagsSchedule error."+cubi.toString(),e); + } + }); + } while ((page.isHasNextPage())); + + } } } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java index 6651b6e1e..c1cb1d851 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -73,6 +73,10 @@ public class WxCUserBasicInfo extends TenantEntity { @Excel(name="上次活跃时间",width = 20,format="yyyy-MM-dd", orderNum = "8") @io.swagger.annotations.ApiModelProperty(value="上次活跃时间",name="activeTime") private Date activeTime; + @TableField(exist = false) + private Date activeStartTime; + @TableField(exist = false) + private Date activeEndTime; @Excel(name="注册时间",width = 20,format="yyyy-MM-dd", orderNum = "9") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") @@ -106,9 +110,16 @@ public class WxCUserBasicInfo extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "状态0正常1锁定", name = "status") private Integer status; + + @io.swagger.annotations.ApiModelProperty(value = "标签扫描时间", name = "tagScanTime") + private Date tagScanTime; + @TableField(exist = false) + private Date scanStartTime; + @TableField(exist = false) + private Date scanEndTime; @TableField(exist = false) - //@Excel(name="标签",width = 50,orderNum = "10") + @Excel(name="标签",width = 50,orderNum = "10") private String tagNames; diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index 724401818..b04edf76f 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -26,13 +26,13 @@ - + distinct wcubi.`id`,wcubi.`phone`,wcubi.`birthdate`,wcubi.`education`,wcubi.`sex`,wcubi.`email`, wcubi.`address`,wcubi.`poins`,wcubi.`tag_id`,wcubi.`create_date`,wcubi.`update_date`, - wcubi.`final_tenant_id`,wcubi.`name`,wcubi.`nick_name`, + wcubi.`final_tenant_id`,wcubi.`name`,wcubi.`nick_name`,wcubi.`tag_scan_time`, wcubi.`avatar_url`,wcubi.`credit`,wcubi.`active_time`,wcubi.`login_count`,wcubi.`act_record` ,(select level from wx_level_config where poins >= points and tenant_id=wcubi.final_tenant_id @@ -40,7 +40,7 @@ - `id`,`phone`,`birthdate`,`education`,`sex`,`email`,`address`,`poins`,`tag_id`, + `id`,`phone`,`birthdate`,`education`,`sex`,`email`,`address`,`poins`,`tag_id`,`tag_scan_time`, `create_date`,`update_date`,`tenant_id`,`parent_tenant_id`,`name`,`nick_name`,`credit`,`active_time`,`act_record` @@ -109,6 +109,14 @@ and wcubi.`create_date` between #{startTime} and #{endTime} + + + and wcubi.`tag_scan_time` between #{scanStartTime} and #{scanEndTime} + + + + and wcubi.`active_time` between #{activeStartTime} and #{activeEndTime} + and wcubi.`status` = #{status} @@ -204,6 +212,14 @@ and wcubi.`create_date` between #{basicInfo.startTime} and #{basicInfo.endTime} + + and wcubi.`tag_scan_time` between #{scanStartTime} and #{scanEndTime} + + + + and wcubi.`active_time` between #{activeStartTime} and #{activeEndTime} + + and wcubi.`status` = #{basicInfo.status} @@ -390,7 +406,7 @@ distinct cub.id,cub.phone,cub.birthdate,cub.education,cub.sex,cub.email,cub.address,cub.poins,cub.tag_id, - cub.create_date,cub.update_date,cub.name,cub.level,cub.nick_name,cub.score_date,cub.final_tenant_id + cub.create_date,cub.update_date,cub.name,cub.level,cub.nick_name,cub.score_date,cub.final_tenant_id,cub.tag_scan_time