diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java new file mode 100644 index 000000000..5a3cbc45a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java @@ -0,0 +1,672 @@ +package com.iformall.service.helper; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.WxCUserBasicTagVo; +import com.iformall.enums.*; +import com.iformall.mapper.*; +import com.iformall.service.WxCUserTagsService; +import com.iformall.service.WxTagsService; +import com.iformall.service.tags.TagsDeveloper; +import com.iformall.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Pattern; + +@Service +public class WxCUserTagsServiceHelper{ + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxCUserTagsMapper wxCUserTagsMapper; + @Autowired + WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + @Autowired + WxTagsMapper wxTagsMapper; + @Autowired + WxBusinessMapper wxBusinessMapper; + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + WxCardSpendMapper wxCardSpendMapper; + @Autowired + WxSubBusinessMapper wxSubBusinessMapper; + @Autowired + WxCUserBasicChildMapper wxCUserBasicChildMapper; + + //打标 + public List assign(WxCUserBasicInfo user, EnumTag tag, WxCUserTagsService wxCUserTagsService){ + if (tag == null || user == null) + return null; + WxCUserTags record = new WxCUserTags(); + record.setUserId(user.getId()); + record.setTenantId(user.getFinalTenantId()); + //record.updateTenantInfo(user); + List cUserTagsList = wxCUserTagsMapper.findList(record); + if (cUserTagsList.size() > 0) { + record.setId(cUserTagsList.get(0).getId()); + record.setTags(cUserTagsList.get(0).getTags()); + } + String tags = record.getTags(); + + List tagIdList; + if (tags == null) + tagIdList = new ArrayList(); + else + tagIdList = JSON.parseArray(tags, Long.class); + + Iterator it = tagIdList.iterator(); + if (tag.getType().getFlag() == EnumTagTypeFlag.FLAG_SINGLE){ + while(it.hasNext()){ + Long id = it.next(); + if(null != id && null!=EnumTag.getEnum(id) && EnumTag.getEnum(id).getType() == tag.getType()){ + it.remove(); + } + } + } else { + while(it.hasNext()){ + Long id = it.next(); + if(null != id && id.equals(tag.getCode())){ + it.remove(); + } + } + } + + tagIdList.add(tag.getCode()); + record.setTags(JSON.toJSONString(tagIdList)); + wxCUserTagsService.saveOrUpdate(record); + if (user.getTagId() == null || + !user.getTagId().equals(record.getId())) { + user.setTagId(record.getId()); + wxCUserBasicInfoMapper.updateById(user); + } + WxTags wxTags = new WxTags(); + wxTags.setIds(tagIdList); + return wxTagsMapper.findList(wxTags); + } + + //按type 替换 + private List assign(WxCUserBasicInfo user, List enumTags, EnumTagType type, WxCUserTagsService wxCUserTagsService){ + + if(user == null){ + return null; + } + WxCUserTags record = new WxCUserTags(); + record.setUserId(user.getId()); + record.setTenantId(user.getFinalTenantId()); + List cUserTagsList = wxCUserTagsMapper.findList(record); + List tagIdList; + if(cUserTagsList != null && cUserTagsList.size() > 0){ + record.setId(cUserTagsList.get(0).getId()); + record.setTags(cUserTagsList.get(0).getTags()); + } + String tags = record.getTags(); + if (tags == null){ + tagIdList = new ArrayList(); + }else{ + tagIdList = JSON.parseArray(tags, Long.class); + } + + Iterator it = tagIdList.iterator(); + while(it.hasNext()){ + Long id = it.next(); + if(null != id && null != EnumTag.getEnum(id) && EnumTag.getEnum(id).getType().equals(type)){ + it.remove(); + } + } + + if(enumTags != null && enumTags.size() > 0){ + for (EnumTag enumTag:enumTags) { + tagIdList.add(enumTag.getCode()); + } + } + + record.setTags(JSON.toJSONString(tagIdList)); + wxCUserTagsService.saveOrUpdate(record); + + if (user.getTagId() == null || !user.getTagId().equals(record.getId())) { + user.setTagId(record.getId()); + wxCUserBasicInfoMapper.updateById(user); + } + WxTags wxTags = new WxTags(); + wxTags.setIds(tagIdList); + return wxTagsMapper.findList(wxTags); + } + + //去标 + private List resign(WxCUserBasicInfo user, EnumTag tag, WxCUserTagsService wxCUserTagsService){ + if (tag == null || user == null) + return null; + WxCUserTags record = new WxCUserTags(); + record.setUserId(user.getId()); + record.setTenantId(user.getFinalTenantId()); + //record.updateTenantInfo(user); + List cUserTagsList = wxCUserTagsMapper.findList(record); + if (cUserTagsList.size() > 0) { + record.setId(cUserTagsList.get(0).getId()); + } else return null; + String tags = record.getTags(); + List tagIdList = JSON.parseArray(tags, Long.class); + Iterator it = tagIdList.iterator(); + while(it.hasNext()){ + if(it.next().equals(tag.getCode())){ + it.remove(); + } + } + record.setTags(JSON.toJSONString(tagIdList)); + wxCUserTagsService.saveOrUpdate(record); + + WxTags wxTags = new WxTags(); + wxTags.setIds(tagIdList); + return wxTagsMapper.findList(wxTags); + + } + + //类型打标 + public List assignTypeId1(WxCUserBasicInfo user, Integer sex, WxCUserTagsService wxCUserTagsService) { + List resList = null; + if (sex.equals(EnumCUserBaseInfoSex.MALE.getCode())) + resList = assign(user, EnumTag.ID_1,wxCUserTagsService); + if (sex.equals(EnumCUserBaseInfoSex.FEMALE.getCode())) + resList = assign(user, EnumTag.ID_2,wxCUserTagsService); + return resList; + } + + public List assignTypeId2(WxCUserBasicInfo user, Date date, WxCUserTagsService wxCUserTagsService) { + List resList = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + if (date.after(sdf.parse("2000-01-01"))) + resList = assign(user, EnumTag.ID_3,wxCUserTagsService); + else if (date.after(sdf.parse("1990-01-01"))) + resList = assign(user, EnumTag.ID_4,wxCUserTagsService); + else if (date.after(sdf.parse("1980-01-01"))) + resList = assign(user, EnumTag.ID_5,wxCUserTagsService); + else if (date.after(sdf.parse("1970-01-01"))) + resList = assign(user, EnumTag.ID_6,wxCUserTagsService); + else if (date.after(sdf.parse("1960-01-01"))) + resList = assign(user, EnumTag.ID_7,wxCUserTagsService); + } catch (Exception e) { + return null; + } + return resList; + } + + public List assignTypeId3(WxCUserBasicInfo user, Date date, WxCUserTagsService wxCUserTagsService) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int year = cal.get(Calendar.YEAR); + if (year > 1900) { + EnumTag[] years = new EnumTag[]{EnumTag.ID_8, + EnumTag.ID_9, + EnumTag.ID_10, + EnumTag.ID_11, + EnumTag.ID_12, + EnumTag.ID_13, + EnumTag.ID_14, + EnumTag.ID_15, + EnumTag.ID_16, + EnumTag.ID_17, + EnumTag.ID_18, + EnumTag.ID_19 + }; + return assign(user, years[(year - 1900) % years.length],wxCUserTagsService); + } + return null; + } + + public List assignTypeId4(WxCUserBasicInfo user, Date date, WxCUserTagsService wxCUserTagsService) { + final int[] dayArr = new int[]{ + 20, 19, 21, 20, + 21, 22, 23, 23, + 23, 24, 23, 22}; + final EnumTag[] constellation = new EnumTag[]{ + EnumTag.ID_29, + EnumTag.ID_30, + EnumTag.ID_31, + EnumTag.ID_20, + EnumTag.ID_21, + EnumTag.ID_22, + EnumTag.ID_23, + EnumTag.ID_24, + EnumTag.ID_25, + EnumTag.ID_26, + EnumTag.ID_27, + EnumTag.ID_28, + EnumTag.ID_29, + }; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int month = cal.get(Calendar.MONTH); + int day = cal.get(Calendar.DAY_OF_MONTH); + + return assign(user, day < dayArr[month] ? constellation[month] + : constellation[month + 1],wxCUserTagsService); + } + + public List assignTypeId5(WxCUserBasicInfo user, boolean online, WxCUserTagsService wxCUserTagsService) { + if (online) + return assign(user, EnumTag.ID_32,wxCUserTagsService); + else + return assign(user, EnumTag.ID_33,wxCUserTagsService); + } + + public List assignTypeId6(WxCUserBasicInfo user, String education, WxCUserTagsService wxCUserTagsService) { + List resList = null; + if (education.contains(EnumTag.ID_38.getMessage())) + resList = assign(user, EnumTag.ID_38,wxCUserTagsService); + else if (education.contains(EnumTag.ID_37.getMessage())) + resList = assign(user, EnumTag.ID_37,wxCUserTagsService); + else if (education.contains(EnumTag.ID_36.getMessage())) + resList = assign(user, EnumTag.ID_36,wxCUserTagsService); + else if (education.contains(EnumTag.ID_35.getMessage())) + resList = assign(user, EnumTag.ID_35,wxCUserTagsService); + else if (education.contains(EnumTag.ID_34.getMessage())) + resList = assign(user, EnumTag.ID_34,wxCUserTagsService); + return resList; + } + + public List assignTypeId7(WxCUserBasicInfo user, String phone, WxCUserTagsService wxCUserTagsService) { + + List resList = null; + /** + * 中国电信号码格式验证 手机段: 133,153,180,181,189,177,1700,173,199 + **/ + final String CHINA_TELECOM_PATTERN = "(^1(33|53|77|73|99|8[019])\\d{8}$)|(^1700\\d{7}$)"; + + /** + * 中国联通号码格式验证 手机段:130,131,132,155,156,185,186,145,176,1709 + **/ + final String CHINA_UNICOM_PATTERN = "(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\\d{8}$)|(^1709\\d{7}$)"; + + /** + * 中国移动号码格式验证 + * 手机段:134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705 + **/ + final String CHINA_MOBILE_PATTERN = "(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\\d{8}$)|(^1705\\d{7}$)"; + + if (Pattern.matches(CHINA_MOBILE_PATTERN, phone)) + resList = assign(user, EnumTag.ID_39,wxCUserTagsService); + if (Pattern.matches(CHINA_UNICOM_PATTERN, phone)) + resList = assign(user, EnumTag.ID_40,wxCUserTagsService); + if (Pattern.matches(CHINA_TELECOM_PATTERN,phone)) + resList = assign(user, EnumTag.ID_41,wxCUserTagsService); + return resList; + } + + public List assignTypeId9(WxCUserBasicInfo user, String extraInfo, WxCUserTagsService wxCUserTagsService) { + List resList = null; + JSONObject extraInfoJson = JSONObject.parseObject(extraInfo); + if (extraInfoJson == null) return null; + JSONObject systemInfoJson = extraInfoJson.getJSONObject("systemInfo"); + if (systemInfoJson == null) return null; + String brand = systemInfoJson.getString("brand"); + if(brand == null) return null; + brand = brand.toUpperCase(); + if (brand.equals("IPHONE")) + resList = assign(user, EnumTag.ID_49,wxCUserTagsService); + else if (brand.equals("HUAWEI") || brand.equals("HONOR")) + resList = assign(user, EnumTag.ID_50,wxCUserTagsService); + else if (brand.equals("VIVO") || brand.toUpperCase().equals("OPPO")) + resList = assign(user, EnumTag.ID_51,wxCUserTagsService); + else if (brand.equals("SAMSUNG")) + resList = assign(user, EnumTag.ID_52,wxCUserTagsService); + else if (brand.equals("XIAOMI")) + resList = assign(user, EnumTag.ID_53,wxCUserTagsService); + else + resList = assign(user, EnumTag.ID_54,wxCUserTagsService); + return resList; + } + + public List assignTypeId11(WxCUserBasicInfo user, WxCUserTagsService wxCUserTagsService) { + return assign(user, EnumTag.ID_58,wxCUserTagsService); + } + + + public List assignTypeId14(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) + { + List resList = null; + Calendar endC = Calendar.getInstance(); + Calendar startC = Calendar.getInstance(); + endC.setTime(new Date()); + startC.setTime(new Date()); + startC.add(Calendar.DAY_OF_YEAR, -30); + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setCUserId(user.getId()); + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + wxCouponOrder.setStartTime(startC.getTime()); + wxCouponOrder.setEndTime(endC.getTime()); + wxCouponOrder.updateTenantInfo(tenantEntity); + + WxCardSpend wxCardSpend = new WxCardSpend(); + wxCardSpend.setOwnerId(user.getId()); + wxCardSpend.setStartdate(startC.getTime()); + wxCardSpend.setEnddate(endC.getTime()); + wxCardSpend.updateTenantInfo(tenantEntity); + + WxBusiness business = new WxBusiness(); + List list = wxBusinessMapper.findList(business); + + List> cardSpendCountList = wxCardSpendMapper.getCountByBusinessId(wxCardSpend); + List> cardOrderCountList = wxCouponOrderMapper.getCountByBusinessId(wxCouponOrder); + + list.stream().forEach(b->{ + int count = 0; + if(cardSpendCountList.size() > 0) { + for (Map cardSpendCount : cardSpendCountList) { + if (cardSpendCount.get("businessId").equals(b.getId().toString())) { + count += (Integer) cardSpendCount.get("buCount"); + } + } + } + if(cardOrderCountList.size() > 0) { + for (Map cardOrderCount : cardOrderCountList) { + if (cardOrderCount.get("business").equals(b.getId().toString())) { + count += (Integer) cardOrderCount.get("buCount"); + } + } + } + if (count > 0) { + EnumTag tag = null; + if (b.getId().intValue() >= EnumBusiness.BUSINESS_ID1.getCode() && + b.getId().intValue() <= EnumBusiness.BUSINESS_ID5.getCode()){ + tag = EnumTag.getEnum(EnumTag.ID_68.getCode() + + (b.getId().intValue() - EnumBusiness.BUSINESS_ID1.getCode())); + } + + if (b.getId().intValue() >= EnumBusiness.BUSINESS_ID7.getCode() && + b.getId().intValue() <= EnumBusiness.BUSINESS_ID10.getCode()){ + tag = EnumTag.getEnum(EnumTag.ID_73.getCode() + + (b.getId().intValue() - EnumBusiness.BUSINESS_ID7.getCode())); + } + if (b.getId().intValue() == EnumBusiness.BUSINESS_ID11.getCode()){ + tag = EnumTag.ID_145; + } + resList.clear(); + resList.addAll(assign(user, tag,wxCUserTagsService)); + } + }); + + return resList; + } + + public List assignTypeId17(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) + { + List resList = null; + Calendar endC = Calendar.getInstance(); + Calendar startC = Calendar.getInstance(); + endC.setTime(new Date()); + startC.setTime(new Date()); + startC.add(Calendar.DAY_OF_YEAR, -30); + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setCUserId(user.getId()); + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + wxCouponOrder.setStartTime(startC.getTime()); + wxCouponOrder.setEndTime(endC.getTime()); + wxCouponOrder.setBusinessId(EnumBusiness.BUSINESS_ID1.getCode()); + wxCouponOrder.updateTenantInfo(tenantEntity); + + WxCardSpend wxCardSpend = new WxCardSpend(); + wxCardSpend.setOwnerId(user.getId()); + wxCardSpend.setStartdate(startC.getTime()); + wxCardSpend.setEnddate(endC.getTime()); + wxCardSpend.setBusinessId(EnumBusiness.BUSINESS_ID1.getCode()); + + WxSubBusiness subBusiness = new WxSubBusiness(); + subBusiness.setBusinessId(EnumBusiness.BUSINESS_ID1.getCode()); + List list = wxSubBusinessMapper.findList(subBusiness); + + List> cardSpendCountList = wxCardSpendMapper.getCountBySubBusinessId(wxCardSpend); + List> cardOrderCountList = wxCouponOrderMapper.getCountBySubBusinessId(wxCouponOrder); + + list.stream().forEach(sb->{ + int count = 0; + if(cardSpendCountList.size() > 0) { + for (Map cardSpendCount : cardSpendCountList) { + Long subBusinessId = (Long)cardSpendCount.get("subBusinessId"); + if (subBusinessId != null && subBusinessId.equals(sb.getId())) { + count += (Integer) cardSpendCount.get("buCount"); + } + } + } + if(cardOrderCountList.size() > 0) { + for (Map cardOrderCount : cardOrderCountList) { + Long subBusinessId = (Long)cardOrderCount.get("subBusiness"); + if (subBusinessId != null && subBusinessId.equals(sb.getId())) { + count += (Integer) cardOrderCount.get("buCount"); + } + } + } + if (count > 0) { + EnumTag tag = null; + if (sb.getId().intValue() >= EnumSubBusiness.SUB_BUSINESS_ID1.getCode() && + sb.getId().intValue() <= EnumSubBusiness.SUB_BUSINESS_ID5.getCode()){ + tag = EnumTag.getEnum(EnumTag.ID_92.getCode() + + (sb.getId().intValue() - EnumSubBusiness.SUB_BUSINESS_ID1.getCode())); + } + + if (sb.getId().intValue() >= EnumSubBusiness.SUB_BUSINESS_ID6.getCode() && + sb.getId().intValue() <= EnumSubBusiness.SUB_BUSINESS_ID21.getCode()){ + tag = EnumTag.getEnum(EnumTag.ID_129.getCode() + + (sb.getId().intValue() - EnumSubBusiness.SUB_BUSINESS_ID6.getCode())); + } + resList.clear(); + resList.addAll(assign(user, tag,wxCUserTagsService)); + } + }); + + return resList; + } + + public List assignTypeId18(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) { + List resList = null; + + final int WORK_DAY = 0; + final int WORK_NIGHT = 1; + final int WEEKEND_DAY = 2; + final int WEEKEND_NIGHT = 3; + + int workDayCount = 0; + int workNightCount = 0; + int WeekendDayCount = 0; + int WeekendNightCount = 0; + + Calendar endC = Calendar.getInstance(); + Calendar startC = Calendar.getInstance(); + endC.setTime(new Date()); + startC.setTime(new Date()); + startC.add(Calendar.DAY_OF_YEAR, -30); + + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.updateTenantInfo(tenantEntity); + wxCouponOrder.setCUserId(user.getId()); + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + wxCouponOrder.setStartTime(startC.getTime()); + wxCouponOrder.setEndTime(endC.getTime()); + + WxCardSpend wxCardSpend = new WxCardSpend(); + wxCardSpend.updateTenantInfo(tenantEntity); + wxCardSpend.setOwnerId(user.getId()); + wxCardSpend.setStartdate(startC.getTime()); + wxCardSpend.setEnddate(endC.getTime()); + + wxCardSpend.setTimeSlot(WORK_DAY); + wxCouponOrder.setTimeSlot(WORK_DAY); + workDayCount = wxCardSpendMapper.findCount(wxCardSpend); + workDayCount += wxCouponOrderMapper.findCount(wxCouponOrder); + + wxCardSpend.setTimeSlot(WORK_NIGHT); + wxCouponOrder.setTimeSlot(WORK_NIGHT); + workNightCount = wxCardSpendMapper.findCount(wxCardSpend); + workNightCount += wxCouponOrderMapper.findCount(wxCouponOrder); + + wxCardSpend.setTimeSlot(WEEKEND_DAY); + wxCouponOrder.setTimeSlot(WEEKEND_DAY); + WeekendDayCount = wxCardSpendMapper.findCount(wxCardSpend); + WeekendDayCount += wxCouponOrderMapper.findCount(wxCouponOrder); + + wxCardSpend.setTimeSlot(WEEKEND_NIGHT); + wxCouponOrder.setTimeSlot(WEEKEND_NIGHT); + WeekendNightCount = wxCardSpendMapper.findCount(wxCardSpend); + WeekendNightCount += wxCouponOrderMapper.findCount(wxCouponOrder); + + if (workDayCount > WeekendDayCount + && workDayCount > workNightCount + && workDayCount > WeekendNightCount) + resList = assign(user, EnumTag.ID_97,wxCUserTagsService); + else if (workNightCount > workDayCount + && workNightCount > WeekendDayCount + && workNightCount > WeekendNightCount) + resList = assign(user, EnumTag.ID_98,wxCUserTagsService); + else if (WeekendDayCount > workDayCount + && WeekendDayCount > workNightCount + && WeekendDayCount > WeekendNightCount) + resList = assign(user, EnumTag.ID_99,wxCUserTagsService); + else if (WeekendNightCount > workDayCount + && WeekendNightCount > workNightCount + && WeekendNightCount > WeekendDayCount) + resList = assign(user, EnumTag.ID_100,wxCUserTagsService); + return resList; + } + + public List assignTypeId21(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) { + List resList = null; + Calendar startC = Calendar.getInstance(); + startC.setTime(new Date()); + startC.add(Calendar.DAY_OF_YEAR, -30); + + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setCUserId(user.getId()); + wxCouponOrder.setStartTime(startC.getTime()); + wxCouponOrder.setEndTime(new Date()); + wxCouponOrder.updateTenantInfo(tenantEntity); + + int count = wxCouponOrderMapper.findCount(wxCouponOrder); + + float verifiedRate = (float)count/30; + if (verifiedRate > 1F/4) + resList = assign(user, EnumTag.ID_109,wxCUserTagsService); + else if (verifiedRate > 1F/7) + resList = assign(user, EnumTag.ID_108,wxCUserTagsService); + else if (verifiedRate > 1F/30) + resList = assign(user, EnumTag.ID_107,wxCUserTagsService); + + return resList; + } + + public List assignTypeId22(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) { + List resList = null; + int days = (int) ((new Date().getTime() - user.getCreateDate().getTime()) / (1000*3600*24)); + + float loginRate = (float)user.getLoginCount()/days; + if (loginRate > 1F/4) + resList = assign(user, EnumTag.ID_112,wxCUserTagsService); + else if (loginRate > 1F/7) + resList = assign(user, EnumTag.ID_111,wxCUserTagsService); + else if (loginRate > 1F/30) + resList = assign(user, EnumTag.ID_110,wxCUserTagsService); + return resList; + } + + public List assignTypeId29(WxCUserBasicInfo user, WxCUserTagsService wxCUserTagsService) { + List resList = null; + WxCUserBasicChild uChild = new WxCUserBasicChild(); + uChild.setTenantId(user.getFinalTenantId()); + uChild.setCUserId(user.getId()); + List list = wxCUserBasicChildMapper.findList(uChild); + if(list != null && list.size() > 0){ + List tags = new ArrayList<>(); + for (WxCUserBasicChild child:list) { + if(child.getBirthdate() != null){ + if (new Date().after(child.getBirthdate())) { + int age = DateUtils.getAge(child.getBirthdate()); + if(age < 1){ + if(!tags.contains(EnumTag.ID_166)){ + tags.add(EnumTag.ID_166); + } + }else if(age >= 1 && age < 3){ + if(!tags.contains(EnumTag.ID_167)){ + tags.add(EnumTag.ID_167); + } + }else if(age >= 3 && age < 6){ + if(!tags.contains(EnumTag.ID_168)){ + tags.add(EnumTag.ID_168); + } + }else if(age >= 6 && age < 12){ + if(!tags.contains(EnumTag.ID_169)){ + tags.add(EnumTag.ID_169); + } + }else if(age >= 12 && age < 15){ + if(!tags.contains(EnumTag.ID_170)){ + tags.add(EnumTag.ID_170); + } + }else if(age >= 15 && age < 18){ + if(!tags.contains(EnumTag.ID_171)){ + tags.add(EnumTag.ID_171); + } + } + } + } + } + resList = assign(user,tags,EnumTagType.ID_29,wxCUserTagsService); + }else{ + resList = assign(user,null,EnumTagType.ID_29,wxCUserTagsService); + } + return resList; + } + public List assignTypeId30(WxCUserBasicInfo user, String h,String w, WxCUserTagsService wxCUserTagsService) { + List resList = null; + //BMI=体重(kg)/(身高X身高)(㎡) +// ID_172(172L, EnumTagType.ID_30, "过轻"),//BMI<18.5  +// ID_173(173L, EnumTagType.ID_30, "标准"),//18.5<=BMI<24.9 +// ID_174(174L, EnumTagType.ID_30, "过重"),//24.9<=BMI<30 +// ID_175(175L, EnumTagType.ID_30, "肥胖"),//30<=BMI + double bmi = new BigDecimal(w) + .divide(new BigDecimal(h).divide(new BigDecimal(100)).pow(2),2,BigDecimal.ROUND_HALF_UP) + .doubleValue(); + if(bmi < 18.5d){ + resList = assign(user, EnumTag.ID_172,wxCUserTagsService); + }else if(bmi >= 18.5d && bmi < 24.9d){ + resList = assign(user, EnumTag.ID_173,wxCUserTagsService); + }else if(bmi >= 24.9d && bmi <30d){ + resList = assign(user, EnumTag.ID_174,wxCUserTagsService); + }else if(bmi >= 30d){ + resList = assign(user, EnumTag.ID_175,wxCUserTagsService); + } + return resList; + } + + public Long getTagId(List tagList, Long id, WxTags wxTags) { + List list = wxTagsMapper.findList(wxTags); + for (WxTags tag : list) { + boolean flag = false; + for (Long tagId : tagList) { + if (tag.getId().equals(tagId)) { + id = tagId; + flag = true; + break; + } + } + if (flag) { + break; + } + } + return id; + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java index be746a41a..a799d5eaa 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java @@ -13,6 +13,7 @@ import com.iformall.enums.*; import com.iformall.mapper.*; import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxTagsService; +import com.iformall.service.helper.WxCUserTagsServiceHelper; import com.iformall.service.tags.TagsDeveloper; import com.iformall.utils.DateUtils; import org.apache.commons.lang3.StringUtils; @@ -32,40 +33,16 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired - WxCUserTagsMapper wxCUserTagsMapper; + WxCUserTagsServiceHelper wxCUserTagsServiceHelper; @Autowired - WxCUserBasicInfoMapper wxCUserBasicInfoMapper; - - @Autowired - WxCUserBasicChildMapper wxCUserBasicChildMapper; - - @Autowired - WxCouponOrderMapper wxCouponOrderMapper; - - - @Autowired - WxCardSpendMapper wxCardSpendMapper; - - @Autowired - WxCUserMapper wxCUserMapper; - + WxCUserTagsMapper wxCUserTagsMapper; @Autowired - WxTagsMapper wxTagsMapper; - + WxCUserBasicInfoMapper wxCUserBasicInfoMapper; @Autowired WxCUserCarMapper wxCUserCarMapper; - @Autowired - WxSubBusinessMapper wxSubBusinessMapper; - - @Autowired - WxBusinessMapper wxBusinessMapper; - - @Autowired - WxTagsService wxTagsService; - - + WxTagsMapper wxTagsMapper; @Override public PageInfo listAsPage(WxCUserTags record, Integer pageIndex, Integer pageSize) { @@ -117,616 +94,12 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { return list; } -//**************************************************自动打标逻辑代码 ************************************************************* - - //打标 - protected List assign(WxCUserBasicInfo user, EnumTag tag){ - if (tag == null || user == null) - return null; - WxCUserTags record = new WxCUserTags(); - record.setUserId(user.getId()); - record.setTenantId(user.getFinalTenantId()); - //record.updateTenantInfo(user); - List cUserTagsList = wxCUserTagsMapper.findList(record); - if (cUserTagsList.size() > 0) { - record.setId(cUserTagsList.get(0).getId()); - record.setTags(cUserTagsList.get(0).getTags()); - } - String tags = record.getTags(); - - List tagIdList; - if (tags == null) - tagIdList = new ArrayList(); - else - tagIdList = JSON.parseArray(tags, Long.class); - - Iterator it = tagIdList.iterator(); - if (tag.getType().getFlag() == EnumTagTypeFlag.FLAG_SINGLE){ - while(it.hasNext()){ - Long id = it.next(); - if(null != id && null!=EnumTag.getEnum(id) && EnumTag.getEnum(id).getType() == tag.getType()){ - it.remove(); - } - } - } else { - while(it.hasNext()){ - Long id = it.next(); - if(null != id && id.equals(tag.getCode())){ - it.remove(); - } - } - } - - tagIdList.add(tag.getCode()); - record.setTags(JSON.toJSONString(tagIdList)); - saveOrUpdate(record); - if (user.getTagId() == null || - !user.getTagId().equals(record.getId())) { - user.setTagId(record.getId()); - wxCUserBasicInfoMapper.updateById(user); - } - WxTags wxTags = new WxTags(); - wxTags.setIds(tagIdList); - return wxTagsMapper.findList(wxTags); - } - - //按type 替换 - private List assign(WxCUserBasicInfo user, List enumTags, EnumTagType type){ - - if(user == null){ - return null; - } - WxCUserTags record = new WxCUserTags(); - record.setUserId(user.getId()); - record.setTenantId(user.getFinalTenantId()); - List cUserTagsList = wxCUserTagsMapper.findList(record); - List tagIdList; - if(cUserTagsList != null && cUserTagsList.size() > 0){ - record.setId(cUserTagsList.get(0).getId()); - record.setTags(cUserTagsList.get(0).getTags()); - } - String tags = record.getTags(); - if (tags == null){ - tagIdList = new ArrayList(); - }else{ - tagIdList = JSON.parseArray(tags, Long.class); - } - - Iterator it = tagIdList.iterator(); - while(it.hasNext()){ - Long id = it.next(); - if(null != id && null != EnumTag.getEnum(id) && EnumTag.getEnum(id).getType().equals(type)){ - it.remove(); - } - } - - if(enumTags != null && enumTags.size() > 0){ - for (EnumTag enumTag:enumTags) { - tagIdList.add(enumTag.getCode()); - } - } - - record.setTags(JSON.toJSONString(tagIdList)); - saveOrUpdate(record); - - if (user.getTagId() == null || !user.getTagId().equals(record.getId())) { - user.setTagId(record.getId()); - wxCUserBasicInfoMapper.updateById(user); - } - WxTags wxTags = new WxTags(); - wxTags.setIds(tagIdList); - return wxTagsMapper.findList(wxTags); - } - - //去标 - private List resign(WxCUserBasicInfo user, EnumTag tag){ - if (tag == null || user == null) - return null; - WxCUserTags record = new WxCUserTags(); - record.setUserId(user.getId()); - record.setTenantId(user.getFinalTenantId()); - //record.updateTenantInfo(user); - List cUserTagsList = wxCUserTagsMapper.findList(record); - if (cUserTagsList.size() > 0) { - record.setId(cUserTagsList.get(0).getId()); - } else return null; - String tags = record.getTags(); - List tagIdList = JSON.parseArray(tags, Long.class); - Iterator it = tagIdList.iterator(); - while(it.hasNext()){ - if(it.next().equals(tag.getCode())){ - it.remove(); - } - } - record.setTags(JSON.toJSONString(tagIdList)); - saveOrUpdate(record); - - WxTags wxTags = new WxTags(); - wxTags.setIds(tagIdList); - return wxTagsMapper.findList(wxTags); - - } - - //类型打标 - protected List assignTypeId1(WxCUserBasicInfo user, Integer sex) { - List resList = null; - if (sex.equals(EnumCUserBaseInfoSex.MALE.getCode())) - resList = assign(user, EnumTag.ID_1); - if (sex.equals(EnumCUserBaseInfoSex.FEMALE.getCode())) - resList = assign(user, EnumTag.ID_2); - return resList; - } - - protected List assignTypeId2(WxCUserBasicInfo user, Date date) { - List resList = null; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - try { - if (date.after(sdf.parse("2000-01-01"))) - resList = assign(user, EnumTag.ID_3); - else if (date.after(sdf.parse("1990-01-01"))) - resList = assign(user, EnumTag.ID_4); - else if (date.after(sdf.parse("1980-01-01"))) - resList = assign(user, EnumTag.ID_5); - else if (date.after(sdf.parse("1970-01-01"))) - resList = assign(user, EnumTag.ID_6); - else if (date.after(sdf.parse("1960-01-01"))) - resList = assign(user, EnumTag.ID_7); - } catch (Exception e) { - return null; - } - return resList; - } - - protected List assignTypeId3(WxCUserBasicInfo user, Date date) { - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - int year = cal.get(Calendar.YEAR); - if (year > 1900) { - EnumTag[] years = new EnumTag[]{EnumTag.ID_8, - EnumTag.ID_9, - EnumTag.ID_10, - EnumTag.ID_11, - EnumTag.ID_12, - EnumTag.ID_13, - EnumTag.ID_14, - EnumTag.ID_15, - EnumTag.ID_16, - EnumTag.ID_17, - EnumTag.ID_18, - EnumTag.ID_19 - }; - return assign(user, years[(year - 1900) % years.length]); - } - return null; - } - - protected List assignTypeId4(WxCUserBasicInfo user, Date date) { - final int[] dayArr = new int[]{ - 20, 19, 21, 20, - 21, 22, 23, 23, - 23, 24, 23, 22}; - final EnumTag[] constellation = new EnumTag[]{ - EnumTag.ID_29, - EnumTag.ID_30, - EnumTag.ID_31, - EnumTag.ID_20, - EnumTag.ID_21, - EnumTag.ID_22, - EnumTag.ID_23, - EnumTag.ID_24, - EnumTag.ID_25, - EnumTag.ID_26, - EnumTag.ID_27, - EnumTag.ID_28, - EnumTag.ID_29, - }; - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - int month = cal.get(Calendar.MONTH); - int day = cal.get(Calendar.DAY_OF_MONTH); - - return assign(user, day < dayArr[month] ? constellation[month] - : constellation[month + 1]); - } - - private List assignTypeId5(WxCUserBasicInfo user, boolean online) { - if (online) - return assign(user, EnumTag.ID_32); - else - return assign(user, EnumTag.ID_33); - } - - private List assignTypeId6(WxCUserBasicInfo user, String education) { - List resList = null; - if (education.contains(EnumTag.ID_38.getMessage())) - resList = assign(user, EnumTag.ID_38); - else if (education.contains(EnumTag.ID_37.getMessage())) - resList = assign(user, EnumTag.ID_37); - else if (education.contains(EnumTag.ID_36.getMessage())) - resList = assign(user, EnumTag.ID_36); - else if (education.contains(EnumTag.ID_35.getMessage())) - resList = assign(user, EnumTag.ID_35); - else if (education.contains(EnumTag.ID_34.getMessage())) - resList = assign(user, EnumTag.ID_34); - return resList; - } - - protected List assignTypeId7(WxCUserBasicInfo user, String phone) { - - List resList = null; - /** - * 中国电信号码格式验证 手机段: 133,153,180,181,189,177,1700,173,199 - **/ - final String CHINA_TELECOM_PATTERN = "(^1(33|53|77|73|99|8[019])\\d{8}$)|(^1700\\d{7}$)"; - - /** - * 中国联通号码格式验证 手机段:130,131,132,155,156,185,186,145,176,1709 - **/ - final String CHINA_UNICOM_PATTERN = "(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\\d{8}$)|(^1709\\d{7}$)"; - - /** - * 中国移动号码格式验证 - * 手机段:134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705 - **/ - final String CHINA_MOBILE_PATTERN = "(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\\d{8}$)|(^1705\\d{7}$)"; - - if (Pattern.matches(CHINA_MOBILE_PATTERN, phone)) - resList = assign(user, EnumTag.ID_39); - if (Pattern.matches(CHINA_UNICOM_PATTERN, phone)) - resList = assign(user, EnumTag.ID_40); - if (Pattern.matches(CHINA_TELECOM_PATTERN,phone)) - resList = assign(user, EnumTag.ID_41); - return resList; - } - - private List assignTypeId9(WxCUserBasicInfo user, String extraInfo) { - List resList = null; - JSONObject extraInfoJson = JSONObject.parseObject(extraInfo); - if (extraInfoJson == null) return null; - JSONObject systemInfoJson = extraInfoJson.getJSONObject("systemInfo"); - if (systemInfoJson == null) return null; - String brand = systemInfoJson.getString("brand"); - if(brand == null) return null; - brand = brand.toUpperCase(); - if (brand.equals("IPHONE")) - resList = assign(user, EnumTag.ID_49); - else if (brand.equals("HUAWEI") || brand.equals("HONOR")) - resList = assign(user, EnumTag.ID_50); - else if (brand.equals("VIVO") || brand.toUpperCase().equals("OPPO")) - resList = assign(user, EnumTag.ID_51); - else if (brand.equals("SAMSUNG")) - resList = assign(user, EnumTag.ID_52); - else if (brand.equals("XIAOMI")) - resList = assign(user, EnumTag.ID_53); - else - resList = assign(user, EnumTag.ID_54); - return resList; - } - - private List assignTypeId11(WxCUserBasicInfo user) { - return assign(user, EnumTag.ID_58); - } - - - private List assignTypeId14(WxCUserBasicInfo user,TenantEntity tenantEntity) - { - List resList = null; - Calendar endC = Calendar.getInstance(); - Calendar startC = Calendar.getInstance(); - endC.setTime(new Date()); - startC.setTime(new Date()); - startC.add(Calendar.DAY_OF_YEAR, -30); - WxCouponOrder wxCouponOrder = new WxCouponOrder(); - wxCouponOrder.setCUserId(user.getId()); - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); - wxCouponOrder.setStartTime(startC.getTime()); - wxCouponOrder.setEndTime(endC.getTime()); - wxCouponOrder.updateTenantInfo(tenantEntity); - - WxCardSpend wxCardSpend = new WxCardSpend(); - wxCardSpend.setOwnerId(user.getId()); - wxCardSpend.setStartdate(startC.getTime()); - wxCardSpend.setEnddate(endC.getTime()); - wxCardSpend.updateTenantInfo(tenantEntity); - - WxBusiness business = new WxBusiness(); - List list = wxBusinessMapper.findList(business); - - List> cardSpendCountList = wxCardSpendMapper.getCountByBusinessId(wxCardSpend); - List> cardOrderCountList = wxCouponOrderMapper.getCountByBusinessId(wxCouponOrder); - - list.stream().forEach(b->{ - int count = 0; - if(cardSpendCountList.size() > 0) { - for (Map cardSpendCount : cardSpendCountList) { - if (cardSpendCount.get("businessId").equals(b.getId().toString())) { - count += (Integer) cardSpendCount.get("buCount"); - } - } - } - if(cardOrderCountList.size() > 0) { - for (Map cardOrderCount : cardOrderCountList) { - if (cardOrderCount.get("business").equals(b.getId().toString())) { - count += (Integer) cardOrderCount.get("buCount"); - } - } - } - if (count > 0) { - EnumTag tag = null; - if (b.getId().intValue() >= EnumBusiness.BUSINESS_ID1.getCode() && - b.getId().intValue() <= EnumBusiness.BUSINESS_ID5.getCode()){ - tag = EnumTag.getEnum(EnumTag.ID_68.getCode() - + (b.getId().intValue() - EnumBusiness.BUSINESS_ID1.getCode())); - } - - if (b.getId().intValue() >= EnumBusiness.BUSINESS_ID7.getCode() && - b.getId().intValue() <= EnumBusiness.BUSINESS_ID10.getCode()){ - tag = EnumTag.getEnum(EnumTag.ID_73.getCode() - + (b.getId().intValue() - EnumBusiness.BUSINESS_ID7.getCode())); - } - if (b.getId().intValue() == EnumBusiness.BUSINESS_ID11.getCode()){ - tag = EnumTag.ID_145; - } - resList.clear(); - resList.addAll(assign(user, tag)); - } - }); - - return resList; - } - - private List assignTypeId17(WxCUserBasicInfo user,TenantEntity tenantEntity) - { - List resList = null; - Calendar endC = Calendar.getInstance(); - Calendar startC = Calendar.getInstance(); - endC.setTime(new Date()); - startC.setTime(new Date()); - startC.add(Calendar.DAY_OF_YEAR, -30); - WxCouponOrder wxCouponOrder = new WxCouponOrder(); - wxCouponOrder.setCUserId(user.getId()); - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); - wxCouponOrder.setStartTime(startC.getTime()); - wxCouponOrder.setEndTime(endC.getTime()); - wxCouponOrder.setBusinessId(EnumBusiness.BUSINESS_ID1.getCode()); - wxCouponOrder.updateTenantInfo(tenantEntity); - - WxCardSpend wxCardSpend = new WxCardSpend(); - wxCardSpend.setOwnerId(user.getId()); - wxCardSpend.setStartdate(startC.getTime()); - wxCardSpend.setEnddate(endC.getTime()); - wxCardSpend.setBusinessId(EnumBusiness.BUSINESS_ID1.getCode()); - - WxSubBusiness subBusiness = new WxSubBusiness(); - subBusiness.setBusinessId(EnumBusiness.BUSINESS_ID1.getCode()); - List list = wxSubBusinessMapper.findList(subBusiness); - - List> cardSpendCountList = wxCardSpendMapper.getCountBySubBusinessId(wxCardSpend); - List> cardOrderCountList = wxCouponOrderMapper.getCountBySubBusinessId(wxCouponOrder); - - list.stream().forEach(sb->{ - int count = 0; - if(cardSpendCountList.size() > 0) { - for (Map cardSpendCount : cardSpendCountList) { - Long subBusinessId = (Long)cardSpendCount.get("subBusinessId"); - if (subBusinessId != null && subBusinessId.equals(sb.getId())) { - count += (Integer) cardSpendCount.get("buCount"); - } - } - } - if(cardOrderCountList.size() > 0) { - for (Map cardOrderCount : cardOrderCountList) { - Long subBusinessId = (Long)cardOrderCount.get("subBusiness"); - if (subBusinessId != null && subBusinessId.equals(sb.getId())) { - count += (Integer) cardOrderCount.get("buCount"); - } - } - } - if (count > 0) { - EnumTag tag = null; - if (sb.getId().intValue() >= EnumSubBusiness.SUB_BUSINESS_ID1.getCode() && - sb.getId().intValue() <= EnumSubBusiness.SUB_BUSINESS_ID5.getCode()){ - tag = EnumTag.getEnum(EnumTag.ID_92.getCode() - + (sb.getId().intValue() - EnumSubBusiness.SUB_BUSINESS_ID1.getCode())); - } - - if (sb.getId().intValue() >= EnumSubBusiness.SUB_BUSINESS_ID6.getCode() && - sb.getId().intValue() <= EnumSubBusiness.SUB_BUSINESS_ID21.getCode()){ - tag = EnumTag.getEnum(EnumTag.ID_129.getCode() - + (sb.getId().intValue() - EnumSubBusiness.SUB_BUSINESS_ID6.getCode())); - } - resList.clear(); - resList.addAll(assign(user, tag)); - } - }); - - return resList; - } - - private List assignTypeId18(WxCUserBasicInfo user,TenantEntity tenantEntity) { - List resList = null; - - final int WORK_DAY = 0; - final int WORK_NIGHT = 1; - final int WEEKEND_DAY = 2; - final int WEEKEND_NIGHT = 3; - - int workDayCount = 0; - int workNightCount = 0; - int WeekendDayCount = 0; - int WeekendNightCount = 0; - - Calendar endC = Calendar.getInstance(); - Calendar startC = Calendar.getInstance(); - endC.setTime(new Date()); - startC.setTime(new Date()); - startC.add(Calendar.DAY_OF_YEAR, -30); - - WxCouponOrder wxCouponOrder = new WxCouponOrder(); - wxCouponOrder.updateTenantInfo(tenantEntity); - wxCouponOrder.setCUserId(user.getId()); - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); - wxCouponOrder.setStartTime(startC.getTime()); - wxCouponOrder.setEndTime(endC.getTime()); - - WxCardSpend wxCardSpend = new WxCardSpend(); - wxCardSpend.updateTenantInfo(tenantEntity); - wxCardSpend.setOwnerId(user.getId()); - wxCardSpend.setStartdate(startC.getTime()); - wxCardSpend.setEnddate(endC.getTime()); - - wxCardSpend.setTimeSlot(WORK_DAY); - wxCouponOrder.setTimeSlot(WORK_DAY); - workDayCount = wxCardSpendMapper.findCount(wxCardSpend); - workDayCount += wxCouponOrderMapper.findCount(wxCouponOrder); - - wxCardSpend.setTimeSlot(WORK_NIGHT); - wxCouponOrder.setTimeSlot(WORK_NIGHT); - workNightCount = wxCardSpendMapper.findCount(wxCardSpend); - workNightCount += wxCouponOrderMapper.findCount(wxCouponOrder); - - wxCardSpend.setTimeSlot(WEEKEND_DAY); - wxCouponOrder.setTimeSlot(WEEKEND_DAY); - WeekendDayCount = wxCardSpendMapper.findCount(wxCardSpend); - WeekendDayCount += wxCouponOrderMapper.findCount(wxCouponOrder); - - wxCardSpend.setTimeSlot(WEEKEND_NIGHT); - wxCouponOrder.setTimeSlot(WEEKEND_NIGHT); - WeekendNightCount = wxCardSpendMapper.findCount(wxCardSpend); - WeekendNightCount += wxCouponOrderMapper.findCount(wxCouponOrder); - - if (workDayCount > WeekendDayCount - && workDayCount > workNightCount - && workDayCount > WeekendNightCount) - resList = assign(user, EnumTag.ID_97); - else if (workNightCount > workDayCount - && workNightCount > WeekendDayCount - && workNightCount > WeekendNightCount) - resList = assign(user, EnumTag.ID_98); - else if (WeekendDayCount > workDayCount - && WeekendDayCount > workNightCount - && WeekendDayCount > WeekendNightCount) - resList = assign(user, EnumTag.ID_99); - else if (WeekendNightCount > workDayCount - && WeekendNightCount > workNightCount - && WeekendNightCount > WeekendDayCount) - resList = assign(user, EnumTag.ID_100); - return resList; - } - - private List assignTypeId21(WxCUserBasicInfo user,TenantEntity tenantEntity) { - List resList = null; - Calendar startC = Calendar.getInstance(); - startC.setTime(new Date()); - startC.add(Calendar.DAY_OF_YEAR, -30); - - WxCouponOrder wxCouponOrder = new WxCouponOrder(); - wxCouponOrder.setCUserId(user.getId()); - wxCouponOrder.setStartTime(startC.getTime()); - wxCouponOrder.setEndTime(new Date()); - wxCouponOrder.updateTenantInfo(tenantEntity); - - int count = wxCouponOrderMapper.findCount(wxCouponOrder); - - float verifiedRate = (float)count/30; - if (verifiedRate > 1F/4) - resList = assign(user, EnumTag.ID_109); - else if (verifiedRate > 1F/7) - resList = assign(user, EnumTag.ID_108); - else if (verifiedRate > 1F/30) - resList = assign(user, EnumTag.ID_107); - - return resList; - } - - private List assignTypeId22(WxCUserBasicInfo user,TenantEntity tenantEntity) { - List resList = null; - int days = (int) ((new Date().getTime() - user.getCreateDate().getTime()) / (1000*3600*24)); - - float loginRate = (float)user.getLoginCount()/days; - if (loginRate > 1F/4) - resList = assign(user, EnumTag.ID_112); - else if (loginRate > 1F/7) - resList = assign(user, EnumTag.ID_111); - else if (loginRate > 1F/30) - resList = assign(user, EnumTag.ID_110); - return resList; - } - - private List assignTypeId29(WxCUserBasicInfo user) { - List resList = null; - WxCUserBasicChild uChild = new WxCUserBasicChild(); - uChild.setTenantId(user.getFinalTenantId()); - uChild.setCUserId(user.getId()); - List list = wxCUserBasicChildMapper.findList(uChild); - if(list != null && list.size() > 0){ - List tags = new ArrayList<>(); - for (WxCUserBasicChild child:list) { - if(child.getBirthdate() != null){ - if (new Date().after(child.getBirthdate())) { - int age = DateUtils.getAge(child.getBirthdate()); - if(age < 1){ - if(!tags.contains(EnumTag.ID_166)){ - tags.add(EnumTag.ID_166); - } - }else if(age >= 1 && age < 3){ - if(!tags.contains(EnumTag.ID_167)){ - tags.add(EnumTag.ID_167); - } - }else if(age >= 3 && age < 6){ - if(!tags.contains(EnumTag.ID_168)){ - tags.add(EnumTag.ID_168); - } - }else if(age >= 6 && age < 12){ - if(!tags.contains(EnumTag.ID_169)){ - tags.add(EnumTag.ID_169); - } - }else if(age >= 12 && age < 15){ - if(!tags.contains(EnumTag.ID_170)){ - tags.add(EnumTag.ID_170); - } - }else if(age >= 15 && age < 18){ - if(!tags.contains(EnumTag.ID_171)){ - tags.add(EnumTag.ID_171); - } - } - } - } - } - resList = assign(user,tags,EnumTagType.ID_29); - }else{ - resList = assign(user,null,EnumTagType.ID_29); - } - return resList; - } - protected List assignTypeId30(WxCUserBasicInfo user, String h,String w) { - List resList = null; - //BMI=体重(kg)/(身高X身高)(㎡) -// ID_172(172L, EnumTagType.ID_30, "过轻"),//BMI<18.5  -// ID_173(173L, EnumTagType.ID_30, "标准"),//18.5<=BMI<24.9 -// ID_174(174L, EnumTagType.ID_30, "过重"),//24.9<=BMI<30 -// ID_175(175L, EnumTagType.ID_30, "肥胖"),//30<=BMI - double bmi = new BigDecimal(w) - .divide(new BigDecimal(h).divide(new BigDecimal(100)).pow(2),2,BigDecimal.ROUND_HALF_UP) - .doubleValue(); - if(bmi < 18.5d){ - resList = assign(user, EnumTag.ID_172); - }else if(bmi >= 18.5d && bmi < 24.9d){ - resList = assign(user, EnumTag.ID_173); - }else if(bmi >= 24.9d && bmi <30d){ - resList = assign(user, EnumTag.ID_174); - }else if(bmi >= 30d){ - resList = assign(user, EnumTag.ID_175); - } - return resList; - } - //打标接口 @Override public List assignTags(List tagIdList, WxCUserBasicInfo user) { List resList = null; for (Long tagId : tagIdList) { - resList = assign(user, EnumTag.getEnum(tagId)); + resList = wxCUserTagsServiceHelper.assign(user, EnumTag.getEnum(tagId),this); } return resList; } @@ -746,30 +119,30 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { if (user != null) { if (user.getSex() != null) { //性别 - resList = assignTypeId1(user, user.getSex()); + resList = wxCUserTagsServiceHelper.assignTypeId1(user, user.getSex(),this); } if (user.getBirthdate() != null) { //X0后 - resList = assignTypeId2(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId2(user, user.getBirthdate(),this); //生肖 - resList = assignTypeId3(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId3(user, user.getBirthdate(),this); //星座 - resList = assignTypeId4(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId4(user, user.getBirthdate(),this); } if (user.getPhone() != null) { //来源 - resList = assignTypeId5(user, false); + resList = wxCUserTagsServiceHelper.assignTypeId5(user, false,this); //运营商 - resList = assignTypeId7(user, user.getPhone()); + resList = wxCUserTagsServiceHelper.assignTypeId7(user, user.getPhone(),this); } if (user.getEducation() != null) { //学历 - resList = assignTypeId6(user, user.getEducation()); + resList = wxCUserTagsServiceHelper.assignTypeId6(user, user.getEducation(),this); } if (StringUtils.isNotBlank(user.getHeight()) && StringUtils.isNotBlank(user.getWeight())){ - resList = assignTypeId30(user,user.getHeight(),user.getWeight()); + resList = wxCUserTagsServiceHelper.assignTypeId30(user,user.getHeight(),user.getWeight(),this); } - resList = assignTypeId29(user); + resList = wxCUserTagsServiceHelper.assignTypeId29(user,this); } } break; @@ -778,7 +151,7 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { WxCUserBasicInfo user = wxCUserBasicInfoMapper.selectById(userCar.getCUserId(),userCar.getFinalTenantId()); if (user != null) { //车 - resList = assignTypeId11(user); + resList = wxCUserTagsServiceHelper.assignTypeId11(user,this); } } break; @@ -788,9 +161,9 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { if (user != null) { if (user.getPhone() != null) { //来源 - resList = assignTypeId5(user, true); + resList = wxCUserTagsServiceHelper.assignTypeId5(user, true,this); //运营商 - resList = assignTypeId7(user, user.getPhone()); + resList = wxCUserTagsServiceHelper.assignTypeId7(user, user.getPhone(),this); } } } @@ -799,13 +172,13 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { WxCUserBasicInfo user = (WxCUserBasicInfo) obj; if (user != null) { //消费类别 - resList = assignTypeId14(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId14(user,tenantEntity,this); //饮食偏好 - resList = assignTypeId17(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId17(user,tenantEntity,this); //消费时段 - resList = assignTypeId18(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId18(user,tenantEntity,this); //消费频度 - resList = assignTypeId22(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId22(user,tenantEntity,this); } } break; @@ -819,20 +192,20 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { if (user != null) { if (user.getSex() != null) { //性别 - resList = assignTypeId1(user, user.getSex()); + resList = wxCUserTagsServiceHelper.assignTypeId1(user, user.getSex(),this); } if (param.getExtraInfo() != null) { //手机品牌 - resList = assignTypeId9(user, param.getExtraInfo()); + resList = wxCUserTagsServiceHelper.assignTypeId9(user, param.getExtraInfo(),this); } if (user.getPhone() != null) { //来源 - resList = assignTypeId5(user, true); + resList = wxCUserTagsServiceHelper.assignTypeId5(user, true,this); //运营商 - resList = assignTypeId7(user, user.getPhone()); + resList = wxCUserTagsServiceHelper.assignTypeId7(user, user.getPhone(),this); } //活跃 - resList = assignTypeId21(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId21(user,tenantEntity,this); } } break; @@ -845,47 +218,47 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { if (user.getSex() != null) { //性别 - resList = assignTypeId1(user, user.getSex()); + resList = wxCUserTagsServiceHelper.assignTypeId1(user, user.getSex(),this); } if (user.getBirthdate() != null) { //X0后 - resList = assignTypeId2(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId2(user, user.getBirthdate(),this); //生肖 - resList = assignTypeId3(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId3(user, user.getBirthdate(),this); //星座 - resList = assignTypeId4(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId4(user, user.getBirthdate(),this); } if (user.getPhone() != null) { //运营商 - resList = assignTypeId7(user, user.getPhone()); + resList = wxCUserTagsServiceHelper.assignTypeId7(user, user.getPhone(),this); } if (user.getEducation() != null) { //学历 - resList = assignTypeId6(user, user.getEducation()); + resList = wxCUserTagsServiceHelper.assignTypeId6(user, user.getEducation(),this); } if (StringUtils.isNotBlank(user.getHeight()) && StringUtils.isNotBlank(user.getWeight())){ - resList = assignTypeId30(user,user.getHeight(),user.getWeight()); + resList = wxCUserTagsServiceHelper.assignTypeId30(user,user.getHeight(),user.getWeight(),this); } - resList = assignTypeId29(user); + resList = wxCUserTagsServiceHelper.assignTypeId29(user,this); //消费类别 - resList = assignTypeId14(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId14(user,tenantEntity,this); //饮食偏好 - resList = assignTypeId17(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId17(user,tenantEntity,this); //消费时段 - resList = assignTypeId18(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId18(user,tenantEntity,this); //消费频度 - resList = assignTypeId22(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId22(user,tenantEntity,this); //活跃 - resList = assignTypeId21(user,tenantEntity); + resList = wxCUserTagsServiceHelper.assignTypeId21(user,tenantEntity,this); //车 WxCUserCar wxCUserCar = new WxCUserCar(); wxCUserCar.setCUserId(user.getId()); if (wxCUserCarMapper.countList(wxCUserCar) > 0) { - resList = assignTypeId11(user); + resList = wxCUserTagsServiceHelper.assignTypeId11(user,this); } } } diff --git a/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoOrderTagsDeveloper.java b/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoOrderTagsDeveloper.java index 910c59ced..70e6110ff 100644 --- a/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoOrderTagsDeveloper.java +++ b/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoOrderTagsDeveloper.java @@ -14,15 +14,20 @@ import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumTag; import com.iformall.mapper.JmSportOrderMapper; import com.iformall.mapper.WxCUserBasicInfoMapper; -import com.iformall.service.impl.WxCUserTagsServiceImpl; +import com.iformall.service.WxCUserTagsService; +import com.iformall.service.helper.WxCUserTagsServiceHelper; import com.iformall.service.tags.TagsDeveloper; @Service -public class JinMaoOrderTagsDeveloper extends WxCUserTagsServiceImpl implements TagsDeveloper { +public class JinMaoOrderTagsDeveloper implements TagsDeveloper { @Autowired - private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + WxCUserTagsServiceHelper wxCUserTagsServiceHelper; + @Autowired + WxCUserTagsService wxCUserTagsService; + @Autowired + private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; @Autowired JmSportOrderMapper jmSportOrderMapper; @@ -58,11 +63,11 @@ public class JinMaoOrderTagsDeveloper extends WxCUserTagsServiceImpl implements // 1.5>平均30天订单数>0  低 float verifiedRate = (float)count/30; if (verifiedRate > 1F/10) - resList = assign(user, EnumTag.ID_178); + resList = wxCUserTagsServiceHelper.assign(user, EnumTag.ID_178,wxCUserTagsService); else if (verifiedRate > 1F/20) - resList = assign(user, EnumTag.ID_177); + resList = wxCUserTagsServiceHelper.assign(user, EnumTag.ID_177,wxCUserTagsService); else - resList = assign(user, EnumTag.ID_176); + resList = wxCUserTagsServiceHelper.assign(user, EnumTag.ID_176,wxCUserTagsService); return resList; } @@ -79,11 +84,11 @@ public class JinMaoOrderTagsDeveloper extends WxCUserTagsServiceImpl implements // 10>平均订单金额>0    弱购买力 if(avgPayment != null){ if (avgPayment.intValue() >= 30) - resList = assign(user, EnumTag.ID_181); + resList = wxCUserTagsServiceHelper.assign(user, EnumTag.ID_181,wxCUserTagsService); else if (avgPayment.intValue() >= 10) - resList = assign(user, EnumTag.ID_180); + resList = wxCUserTagsServiceHelper.assign(user, EnumTag.ID_180,wxCUserTagsService); else - resList = assign(user, EnumTag.ID_179); + resList = wxCUserTagsServiceHelper.assign(user, EnumTag.ID_179,wxCUserTagsService); } return resList; diff --git a/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoUserTagsDeveloper.java b/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoUserTagsDeveloper.java index 65d147004..43ae986fe 100644 --- a/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoUserTagsDeveloper.java +++ b/mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoUserTagsDeveloper.java @@ -10,15 +10,23 @@ import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxTags; import com.iformall.domain.po.base.TenantEntity; import com.iformall.mapper.WxCUserBasicInfoMapper; +import com.iformall.service.WxCUserTagsService; +import com.iformall.service.helper.WxCUserTagsServiceHelper; import com.iformall.service.impl.WxCUserTagsServiceImpl; import com.iformall.service.tags.TagsDeveloper; @Service -public class JinMaoUserTagsDeveloper extends WxCUserTagsServiceImpl implements TagsDeveloper{ +public class JinMaoUserTagsDeveloper implements TagsDeveloper{ + + @Autowired + WxCUserTagsServiceHelper wxCUserTagsServiceHelper; + @Autowired + WxCUserTagsService wxCUserTagsService; @Autowired private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + @Override public List getTagList(TenantEntity tenantEntity,Object obj) { List resList = null; @@ -27,22 +35,22 @@ public class JinMaoUserTagsDeveloper extends WxCUserTagsServiceImpl implements if (user != null) { if (user.getSex() != null) { //性别 - resList = assignTypeId1(user, user.getSex()); + resList = wxCUserTagsServiceHelper.assignTypeId1(user, user.getSex(),wxCUserTagsService); } if (user.getBirthdate() != null) { //X0后 - resList = assignTypeId2(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId2(user, user.getBirthdate(),wxCUserTagsService); //生肖 - resList = assignTypeId3(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId3(user, user.getBirthdate(),wxCUserTagsService); //星座 - resList = assignTypeId4(user, user.getBirthdate()); + resList = wxCUserTagsServiceHelper.assignTypeId4(user, user.getBirthdate(),wxCUserTagsService); } if (user.getPhone() != null) { //运营商 - resList = assignTypeId7(user, user.getPhone()); + resList = wxCUserTagsServiceHelper.assignTypeId7(user, user.getPhone(),wxCUserTagsService); } if (StringUtils.isNotBlank(user.getHeight()) && StringUtils.isNotBlank(user.getWeight())){ - resList = assignTypeId30(user,user.getHeight(),user.getWeight()); + resList = wxCUserTagsServiceHelper.assignTypeId30(user,user.getHeight(),user.getWeight(),wxCUserTagsService); } } return resList;