xiaohanzi 4 лет назад
Родитель
Сommit
9655294f6e
4 измененных файлов: 742 добавлений и 684 удалений
  1. +672
    -0
      mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java
  2. +41
    -668
      mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java
  3. +14
    -9
      mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoOrderTagsDeveloper.java
  4. +15
    -7
      mallinkService/src/main/java/com/iformall/service/tags/jinmao/JinMaoUserTagsDeveloper.java

+ 672
- 0
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<WxTags> 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<WxCUserTags> 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<Long> tagIdList;
if (tags == null)
tagIdList = new ArrayList<Long>();
else
tagIdList = JSON.parseArray(tags, Long.class);

Iterator<Long> 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<WxTags> assign(WxCUserBasicInfo user, List<EnumTag> enumTags, EnumTagType type, WxCUserTagsService wxCUserTagsService){

if(user == null){
return null;
}
WxCUserTags record = new WxCUserTags();
record.setUserId(user.getId());
record.setTenantId(user.getFinalTenantId());
List<WxCUserTags> cUserTagsList = wxCUserTagsMapper.findList(record);
List<Long> 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<Long>();
}else{
tagIdList = JSON.parseArray(tags, Long.class);
}

Iterator<Long> 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<WxTags> 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<WxCUserTags> cUserTagsList = wxCUserTagsMapper.findList(record);
if (cUserTagsList.size() > 0) {
record.setId(cUserTagsList.get(0).getId());
} else return null;
String tags = record.getTags();
List<Long> tagIdList = JSON.parseArray(tags, Long.class);
Iterator<Long> 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<WxTags> assignTypeId1(WxCUserBasicInfo user, Integer sex, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<WxTags> assignTypeId2(WxCUserBasicInfo user, Date date, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<WxTags> 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<WxTags> 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<WxTags> 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<WxTags> assignTypeId6(WxCUserBasicInfo user, String education, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<WxTags> assignTypeId7(WxCUserBasicInfo user, String phone, WxCUserTagsService wxCUserTagsService) {

List<WxTags> 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<WxTags> assignTypeId9(WxCUserBasicInfo user, String extraInfo, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<WxTags> assignTypeId11(WxCUserBasicInfo user, WxCUserTagsService wxCUserTagsService) {
return assign(user, EnumTag.ID_58,wxCUserTagsService);
}


public List<WxTags> assignTypeId14(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService)
{
List<WxTags> 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<WxBusiness> list = wxBusinessMapper.findList(business);

List<Map<String, Object>> cardSpendCountList = wxCardSpendMapper.getCountByBusinessId(wxCardSpend);
List<Map<String, Object>> cardOrderCountList = wxCouponOrderMapper.getCountByBusinessId(wxCouponOrder);

list.stream().forEach(b->{
int count = 0;
if(cardSpendCountList.size() > 0) {
for (Map<String, Object> cardSpendCount : cardSpendCountList) {
if (cardSpendCount.get("businessId").equals(b.getId().toString())) {
count += (Integer) cardSpendCount.get("buCount");
}
}
}
if(cardOrderCountList.size() > 0) {
for (Map<String, Object> 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<WxTags> assignTypeId17(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService)
{
List<WxTags> 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<WxSubBusiness> list = wxSubBusinessMapper.findList(subBusiness);

List<Map<String, Object>> cardSpendCountList = wxCardSpendMapper.getCountBySubBusinessId(wxCardSpend);
List<Map<String, Object>> cardOrderCountList = wxCouponOrderMapper.getCountBySubBusinessId(wxCouponOrder);

list.stream().forEach(sb->{
int count = 0;
if(cardSpendCountList.size() > 0) {
for (Map<String, Object> 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<String, Object> 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<WxTags> assignTypeId18(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<WxTags> assignTypeId21(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<WxTags> assignTypeId22(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<WxTags> assignTypeId29(WxCUserBasicInfo user, WxCUserTagsService wxCUserTagsService) {
List<WxTags> resList = null;
WxCUserBasicChild uChild = new WxCUserBasicChild();
uChild.setTenantId(user.getFinalTenantId());
uChild.setCUserId(user.getId());
List<WxCUserBasicChild> list = wxCUserBasicChildMapper.findList(uChild);
if(list != null && list.size() > 0){
List<EnumTag> 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<WxTags> assignTypeId30(WxCUserBasicInfo user, String h,String w, WxCUserTagsService wxCUserTagsService) {
List<WxTags> 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<Long> tagList, Long id, WxTags wxTags) {
List<WxTags> 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;
}


}

+ 41
- 668
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<WxCUserTags> listAsPage(WxCUserTags record, Integer pageIndex, Integer pageSize) {
@@ -117,616 +94,12 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService {
return list;
}

//**************************************************自动打标逻辑代码 *************************************************************

//打标
protected List<WxTags> 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<WxCUserTags> 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<Long> tagIdList;
if (tags == null)
tagIdList = new ArrayList<Long>();
else
tagIdList = JSON.parseArray(tags, Long.class);

Iterator<Long> 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<WxTags> assign(WxCUserBasicInfo user, List<EnumTag> enumTags, EnumTagType type){

if(user == null){
return null;
}
WxCUserTags record = new WxCUserTags();
record.setUserId(user.getId());
record.setTenantId(user.getFinalTenantId());
List<WxCUserTags> cUserTagsList = wxCUserTagsMapper.findList(record);
List<Long> 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<Long>();
}else{
tagIdList = JSON.parseArray(tags, Long.class);
}

Iterator<Long> 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<WxTags> 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<WxCUserTags> cUserTagsList = wxCUserTagsMapper.findList(record);
if (cUserTagsList.size() > 0) {
record.setId(cUserTagsList.get(0).getId());
} else return null;
String tags = record.getTags();
List<Long> tagIdList = JSON.parseArray(tags, Long.class);
Iterator<Long> 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<WxTags> assignTypeId1(WxCUserBasicInfo user, Integer sex) {
List<WxTags> 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<WxTags> assignTypeId2(WxCUserBasicInfo user, Date date) {
List<WxTags> 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<WxTags> 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<WxTags> 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<WxTags> assignTypeId5(WxCUserBasicInfo user, boolean online) {
if (online)
return assign(user, EnumTag.ID_32);
else
return assign(user, EnumTag.ID_33);
}

private List<WxTags> assignTypeId6(WxCUserBasicInfo user, String education) {
List<WxTags> 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<WxTags> assignTypeId7(WxCUserBasicInfo user, String phone) {

List<WxTags> 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<WxTags> assignTypeId9(WxCUserBasicInfo user, String extraInfo) {
List<WxTags> 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<WxTags> assignTypeId11(WxCUserBasicInfo user) {
return assign(user, EnumTag.ID_58);
}


private List<WxTags> assignTypeId14(WxCUserBasicInfo user,TenantEntity tenantEntity)
{
List<WxTags> 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<WxBusiness> list = wxBusinessMapper.findList(business);

List<Map<String, Object>> cardSpendCountList = wxCardSpendMapper.getCountByBusinessId(wxCardSpend);
List<Map<String, Object>> cardOrderCountList = wxCouponOrderMapper.getCountByBusinessId(wxCouponOrder);

list.stream().forEach(b->{
int count = 0;
if(cardSpendCountList.size() > 0) {
for (Map<String, Object> cardSpendCount : cardSpendCountList) {
if (cardSpendCount.get("businessId").equals(b.getId().toString())) {
count += (Integer) cardSpendCount.get("buCount");
}
}
}
if(cardOrderCountList.size() > 0) {
for (Map<String, Object> 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<WxTags> assignTypeId17(WxCUserBasicInfo user,TenantEntity tenantEntity)
{
List<WxTags> 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<WxSubBusiness> list = wxSubBusinessMapper.findList(subBusiness);

List<Map<String, Object>> cardSpendCountList = wxCardSpendMapper.getCountBySubBusinessId(wxCardSpend);
List<Map<String, Object>> cardOrderCountList = wxCouponOrderMapper.getCountBySubBusinessId(wxCouponOrder);

list.stream().forEach(sb->{
int count = 0;
if(cardSpendCountList.size() > 0) {
for (Map<String, Object> 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<String, Object> 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<WxTags> assignTypeId18(WxCUserBasicInfo user,TenantEntity tenantEntity) {
List<WxTags> 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<WxTags> assignTypeId21(WxCUserBasicInfo user,TenantEntity tenantEntity) {
List<WxTags> 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<WxTags> assignTypeId22(WxCUserBasicInfo user,TenantEntity tenantEntity) {
List<WxTags> 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<WxTags> assignTypeId29(WxCUserBasicInfo user) {
List<WxTags> resList = null;
WxCUserBasicChild uChild = new WxCUserBasicChild();
uChild.setTenantId(user.getFinalTenantId());
uChild.setCUserId(user.getId());
List<WxCUserBasicChild> list = wxCUserBasicChildMapper.findList(uChild);
if(list != null && list.size() > 0){
List<EnumTag> 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<WxTags> assignTypeId30(WxCUserBasicInfo user, String h,String w) {
List<WxTags> 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<WxTags> assignTags(List<Long> tagIdList, WxCUserBasicInfo user) {
List<WxTags> 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);
}
}
}


+ 14
- 9
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;


+ 15
- 7
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<WxTags> getTagList(TenantEntity tenantEntity,Object obj) {
List<WxTags> 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;


Загрузка…
Отмена
Сохранить