|
|
|
@@ -5,12 +5,13 @@ import java.util.*; |
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.iformall.domain.po.*; |
|
|
|
import com.iformall.enums.EnumAssignTagsTrigger; |
|
|
|
import com.iformall.enums.EnumCUserBaseInfoSex; |
|
|
|
import com.iformall.enums.EnumTag; |
|
|
|
import com.iformall.enums.EnumTagType; |
|
|
|
import com.iformall.mapper.WxCUserBasicInfoMapper; |
|
|
|
import com.iformall.mapper.*; |
|
|
|
import com.iformall.service.WxCUserBasicInfoService; |
|
|
|
import com.iformall.service.WxTagsService; |
|
|
|
import org.slf4j.Logger; |
|
|
|
@@ -22,9 +23,6 @@ import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import com.iformall.common.IdWorker; |
|
|
|
import com.iformall.domain.vo.WxChooseTagVo; |
|
|
|
import com.iformall.mapper.WxCUserMapper; |
|
|
|
import com.iformall.mapper.WxCUserTagsMapper; |
|
|
|
import com.iformall.mapper.WxTagsMapper; |
|
|
|
import com.iformall.service.WxCUserTagsService; |
|
|
|
|
|
|
|
@Service |
|
|
|
@@ -40,6 +38,10 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { |
|
|
|
@Autowired |
|
|
|
WxCUserBasicInfoService wxCUserBasicInfoService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
WxCouponOrderMapper wxCouponOrderMapper; |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
WxCUserMapper wxCUserMapper; |
|
|
|
|
|
|
|
@@ -315,10 +317,125 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { |
|
|
|
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 = extraInfoJson.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")) |
|
|
|
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> assignTypeId21(WxCUserBasicInfo user, WxCUser param) { |
|
|
|
List<WxTags> resList = null; |
|
|
|
int days = (int) ((new Date().getTime() - param.getCreateDate().getTime()) / (1000*3600*24)); |
|
|
|
|
|
|
|
float loginRate = (float)param.getLoginCount()/days; |
|
|
|
if (loginRate > 1F/4) |
|
|
|
resList = assign(user, EnumTag.ID_109); |
|
|
|
else if (loginRate > 1F/7) |
|
|
|
resList = assign(user, EnumTag.ID_108); |
|
|
|
else if (loginRate > 1F/30) |
|
|
|
resList = assign(user, EnumTag.ID_107); |
|
|
|
return resList; |
|
|
|
} |
|
|
|
|
|
|
|
private List<WxTags> assignTypeId18(WxCUserBasicInfo user, WxCUser param) { |
|
|
|
List<WxTags> resList = null; |
|
|
|
|
|
|
|
int workDayCount = 0; |
|
|
|
int workNightCount = 0; |
|
|
|
int WeekendDayCount = 0; |
|
|
|
int WeekendNightCount = 0; |
|
|
|
|
|
|
|
Calendar endC = Calendar.getInstance(); |
|
|
|
Calendar startC = Calendar.getInstance(); |
|
|
|
Date endTime = new Date(); |
|
|
|
Date startTime = new Date(); |
|
|
|
endC.setTime(endTime); |
|
|
|
startC.setTime(startTime); |
|
|
|
|
|
|
|
endC.set(Calendar.HOUR_OF_DAY, 18); |
|
|
|
startC.set(Calendar.HOUR_OF_DAY, 6); |
|
|
|
|
|
|
|
for (int ago = 0; ago > -30 ; ago-- ) { |
|
|
|
if (endC.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY |
|
|
|
&& endC.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) { |
|
|
|
workDayCount += wxCouponOrderMapper.findVerifiedCountForCUser(param.getId(),startTime,endTime); |
|
|
|
} else { |
|
|
|
WeekendDayCount += wxCouponOrderMapper.findVerifiedCountForCUser(param.getId(),startTime,endTime); |
|
|
|
} |
|
|
|
|
|
|
|
endC.add(Calendar.DAY_OF_YEAR, -1); |
|
|
|
|
|
|
|
if (endC.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY |
|
|
|
&& endC.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) { |
|
|
|
workNightCount += wxCouponOrderMapper.findVerifiedCountForCUser(param.getId(),startTime,endTime); |
|
|
|
} else { |
|
|
|
WeekendNightCount += wxCouponOrderMapper.findVerifiedCountForCUser(param.getId(),startTime,endTime); |
|
|
|
} |
|
|
|
|
|
|
|
startC.add(Calendar.DAY_OF_YEAR, -1); |
|
|
|
} |
|
|
|
|
|
|
|
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> assignTypeId22(WxCUserBasicInfo user, WxCUser param) { |
|
|
|
List<WxTags> resList = null; |
|
|
|
Calendar c = Calendar.getInstance(); |
|
|
|
Date endTime = new Date(); |
|
|
|
c.setTime(endTime); |
|
|
|
c.add(Calendar.DAY_OF_YEAR, -30); |
|
|
|
Date startTime = c.getTime(); |
|
|
|
int count = wxCouponOrderMapper.findVerifiedCountForCUser(param.getId(),startTime,endTime); |
|
|
|
|
|
|
|
float verifiedRate = (float)count/30; |
|
|
|
if (verifiedRate > 1F/4) |
|
|
|
resList = assign(user, EnumTag.ID_112); |
|
|
|
else if (verifiedRate > 1F/7) |
|
|
|
resList = assign(user, EnumTag.ID_111); |
|
|
|
else if (verifiedRate > 1F/30) |
|
|
|
resList = assign(user, EnumTag.ID_110); |
|
|
|
|
|
|
|
return resList; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//@Override |
|
|
|
private List<WxTags> triggerAssignTags(EnumAssignTagsTrigger trigger, Object obj) { |
|
|
|
@@ -332,41 +449,27 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { |
|
|
|
WxCUserBasicInfo param = (WxCUserBasicInfo) obj; |
|
|
|
WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getId()); |
|
|
|
if (user != null) { |
|
|
|
|
|
|
|
//性别 |
|
|
|
if (param.getSex() != null) { |
|
|
|
//性别 |
|
|
|
resList = assignTypeId1(user, param.getSex()); |
|
|
|
} |
|
|
|
|
|
|
|
//X0后 |
|
|
|
if (param.getBirthdate() != null) { |
|
|
|
//X0后 |
|
|
|
resList = assignTypeId2(user, param.getBirthdate()); |
|
|
|
} |
|
|
|
|
|
|
|
//生肖 |
|
|
|
if (param.getBirthdate() != null) { |
|
|
|
//生肖 |
|
|
|
resList = assignTypeId3(user, param.getBirthdate()); |
|
|
|
} |
|
|
|
|
|
|
|
//星座 |
|
|
|
if (param.getBirthdate() != null) { |
|
|
|
resList = assignTypeId4(user, param.getBirthdate()); |
|
|
|
} |
|
|
|
|
|
|
|
//来源 |
|
|
|
if (param.getPhone() != null) { |
|
|
|
//来源 |
|
|
|
resList = assignTypeId5(user, false); |
|
|
|
//运营商 |
|
|
|
resList = assignTypeId7(user, param.getPhone()); |
|
|
|
} |
|
|
|
|
|
|
|
//学历 |
|
|
|
if (param.getEducation() != null) { |
|
|
|
//学历 |
|
|
|
resList = assignTypeId6(user, param.getEducation()); |
|
|
|
} |
|
|
|
|
|
|
|
//运营商 |
|
|
|
if (param.getPhone() != null) { |
|
|
|
resList = assignTypeId7(user, param.getPhone()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
@@ -374,6 +477,7 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { |
|
|
|
WxCUserCar param = (WxCUserCar) obj; |
|
|
|
WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getCUserId()); |
|
|
|
if (user != null) { |
|
|
|
//车 |
|
|
|
resList = assignTypeId11(user); |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -382,20 +486,26 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { |
|
|
|
WxCUser param = (WxCUser) obj; |
|
|
|
WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getId()); |
|
|
|
if (user != null) { |
|
|
|
//来源 |
|
|
|
if (param.getPhone() != null) { |
|
|
|
//来源 |
|
|
|
resList = assignTypeId5(user, true); |
|
|
|
} |
|
|
|
|
|
|
|
//运营商 |
|
|
|
if (param.getPhone() != null) { |
|
|
|
//运营商 |
|
|
|
resList = assignTypeId7(user, param.getPhone()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
case ASSIGN_TAGS_TRIGGER_BUY: |
|
|
|
break; |
|
|
|
case ASSIGN_TAGS_TRIGGER_BUY:{ |
|
|
|
WxCUser param = (WxCUser) obj; |
|
|
|
WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getId()); |
|
|
|
if (user != null) { |
|
|
|
//消费时段 |
|
|
|
resList = assignTypeId18(user, param); |
|
|
|
//消费频度 |
|
|
|
resList = assignTypeId22(user, param); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
case ASSIGN_TAGS_TRIGGER_USE: |
|
|
|
break; |
|
|
|
|
|
|
|
@@ -403,10 +513,17 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { |
|
|
|
WxCUser param = (WxCUser) obj; |
|
|
|
WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getId()); |
|
|
|
if (user != null) { |
|
|
|
|
|
|
|
if (param.getGender() != null) { |
|
|
|
//性别 |
|
|
|
resList = assignTypeId1(user, param.getGender()); |
|
|
|
} |
|
|
|
if (param.getExtraInfo() != null) { |
|
|
|
//手机 |
|
|
|
resList = assignTypeId9(user, param.getExtraInfo()); |
|
|
|
} |
|
|
|
//活跃 |
|
|
|
resList = assignTypeId21(user, param); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
|