diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumAssignTagsTrigger.java b/mallinkService/src/main/java/com/iformall/enums/EnumAssignTagsTrigger.java new file mode 100644 index 000000000..17cd9e300 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumAssignTagsTrigger.java @@ -0,0 +1,42 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumAssignTagsTrigger { + + // 1.时间范围(valid_start_date,valid_end_date). 2领取后几日有效(valid_days) + + ASSIGN_TAGS_TRIGGER_IMPORT(1, "导入"), + ASSIGN_TAGS_TRIGGER_LOGIN(2, "登陆"), + ASSIGN_TAGS_TRIGGER_PHONE(3, "授权手机号"), + ASSIGN_TAGS_TRIGGER_CAR(4, "停车"), + ASSIGN_TAGS_TRIGGER_BUY(5, "购买"), + ASSIGN_TAGS_TRIGGER_USE(6, "核销"), + ; + + public static EnumAssignTagsTrigger getEnum(Integer code) { + for (EnumAssignTagsTrigger value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumAssignTagsTrigger(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCUserBaseInfoSex.java b/mallinkService/src/main/java/com/iformall/enums/EnumCUserBaseInfoSex.java new file mode 100644 index 000000000..7648a0c23 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCUserBaseInfoSex.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + +public enum EnumCUserBaseInfoSex { + UNKNOWN(0, "保密"), + MALE(1, "男"), + FEMALE(2,"女"), + + ; + + private EnumCUserBaseInfoSex(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + private String message; + + + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTag.java b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java new file mode 100644 index 000000000..869693a17 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java @@ -0,0 +1,176 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumTag { + + ID_1(1L, 1L, 1L, "男"), + ID_2(2L, 1L, 1L, "女"), + ID_3(3L, 1L, 2L, "00后"), + ID_4(4L, 1L, 2L, "90后"), + ID_5(5L, 1L, 2L, "80后"), + ID_6(6L, 1L, 2L, "70后"), + ID_7(7L, 1L, 2L, "60后"), + ID_8(8L, 1L, 3L, "鼠"), + ID_9(9L, 1L, 3L, "牛"), + ID_10(10L, 1L, 3L, "虎"), + ID_11(11L, 1L, 3L, "兔"), + ID_12(12L, 1L, 3L, "龙"), + ID_13(13L, 1L, 3L, "蛇"), + ID_14(14L, 1L, 3L, "马"), + ID_15(15L, 1L, 3L, "羊"), + ID_16(16L, 1L, 3L, "猴"), + ID_17(17L, 1L, 3L, "鸡"), + ID_18(18L, 1L, 3L, "狗"), + ID_19(19L, 1L, 3L, "猪"), + ID_20(20L, 1L, 4L, "白羊座"), + ID_21(21L, 1L, 4L, "金牛座"), + ID_22(22L, 1L, 4L, "双子座"), + ID_23(23L, 1L, 4L, "巨蟹座"), + ID_24(24L, 1L, 4L, "狮子座"), + ID_25(25L, 1L, 4L, "处女座"), + ID_26(26L, 1L, 4L, "天秤座"), + ID_27(24L, 1L, 4L, "天蝎座"), + ID_28(25L, 1L, 4L, "射手座"), + ID_29(26L, 1L, 4L, "摩羯座"), + ID_30(30L, 1L, 4L, "水瓶座"), + ID_31(31L, 1L, 4L, "双鱼座"), + ID_32(32L, 1L, 5L, "线上"), + ID_33(33L, 1L, 5L, "线下"), + ID_34(34L, 1L, 6L, "高中"), + ID_35(35L, 1L, 6L, "大专"), + ID_36(36L, 1L, 6L, "本科"), + ID_37(37L, 1L, 6L, "硕士及以上"), + ID_38(38L, 1L, 6L, "博士及以上"), + ID_39(39L, 1L, 7L, "移动"), + ID_40(40L, 1L, 7L, "联通"), + ID_41(41L, 1L, 7L, "电信"), + ID_42(42L, 2L, 8L, "5000以下"), + ID_43(43L, 2L, 8L, "5000~10000"), + ID_44(44L, 2L, 8L, "10001~20000"), + ID_45(45L, 2L, 8L, "20001以上"), + ID_46(46L, 2L, 8L, "20001~30000"), + ID_47(47L, 2L, 8L, "30001~50000"), + ID_48(48L, 2L, 8L, "50001以上"), + ID_49(49L, 2L, 9L, "iphone"), + ID_50(50L, 2L, 9L, "华为"), + ID_51(51L, 2L, 9L, "VO"), + ID_52(52L, 2L, 9L, "三星"), + ID_53(53L, 2L, 9L, "小米"), + ID_54(54L, 2L, 9L, "其他"), + ID_55(55L, 2L, 10L,"未婚"), + ID_56(56L, 2L, 10L,"已婚"), + ID_57(57L, 2L, 10L,"已婚有孩"), + ID_58(58L, 2L, 11L,"有车一族"), + ID_59(59L, 2L, 12L,"学生"), + ID_60(60L, 2L, 12L,"上班族"), + ID_61(61L, 2L, 12L,"企业高管"), + ID_62(62L, 2L, 12L,"个体户"), + ID_63(63L, 2L, 12L,"自由职业"), + ID_64(64L, 2L, 12L,"其他"), + ID_65(65L, 2L, 13L,"租房"), + ID_66(66L, 2L, 13L,"自购"), + ID_67(67L, 2L, 13L,"宿舍"), + ID_68(68L, 3L, 14L,"服装"), + ID_69(69L, 3L, 14L,"服饰"), + ID_70(70L, 3L, 14L,"餐饮"), + ID_71(71L, 3L, 14L,"休闲娱乐"), + ID_72(72L, 3L, 14L,"家居"), + ID_73(73L, 3L, 14L,"图书音像"), + ID_74(74L, 3L, 14L,"母婴"), + ID_75(75L, 3L, 14L,"儿童"), + ID_76(76L, 3L, 14L,"生活服务"), + ID_77(77L, 3L, 15L,"中低端"), + ID_78(78L, 3L, 15L,"中端"), + ID_79(79L, 3L, 15L,"中高端"), + ID_80(80L, 3L, 15L,"高端"), + ID_81(81L, 3L, 16L,"快时尚"), + ID_82(82L, 3L, 16L,"轻奢"), + ID_83(83L, 3L, 16L,"奢侈品"), + ID_84(84L, 3L, 16L,"皮革"), + ID_85(85L, 3L, 16L,"化妆品"), + ID_86(86L, 3L, 16L,"电子产品"), + ID_87(87L, 3L, 16L,"影视娱乐"), + ID_88(88L, 3L, 16L,"儿童相关"), + ID_89(89L, 3L, 16L,"日本品牌"), + ID_90(90L, 3L, 16L,"韩国品牌"), + ID_91(91L, 3L, 16L,"欧美品牌等"), + ID_92(92L, 3L, 17L,"轻餐"), + ID_93(93L, 3L, 17L,"小吃快餐"), + ID_94(94L, 3L, 17L,"西餐"), + ID_95(95L, 3L, 17L,"日料,中餐,甜点/咖啡"), + ID_96(96L, 3L, 17L,"火锅"), + ID_97(97L, 3L, 18L,"工作日白天"), + ID_98(98L, 3L, 18L,"工作日晚上"), + ID_99(99L, 3L, 18L,"周末(含节假日)白天"), + ID_100(100L,3L, 18L,"周末(含节假日)晚上"), + ID_101(101L,3L, 19L,"现金"), + ID_102(102L,3L, 19L,"移动支付"), + ID_103(103L,3L, 19L,"银行卡支付"), + ID_104(104L,4L, 20L,"实惠型"), + ID_105(105L,4L, 20L,"享乐型"), + ID_106(106L,4L, 20L,"品质型"), + ID_107(107L,4L, 21L,"低频"), + ID_108(108L,4L, 21L,"中频"), + ID_109(109L,4L, 21L,"高频"), + ID_110(110L,4L, 22L,"低度"), + ID_111(111L,4L, 22L,"中度"), + ID_112(112L,4L, 22L,"高度"), + ID_113(113L,4L, 23L,"低客单价"), + ID_114(114L,4L, 23L,"中客单价"), + ID_115(115L,4L, 23L,"高客单价"), + ID_116(116L,4L, 24L,"口碑宣传型"), + ID_117(117L,4L, 24L,"纠结型客户"), + ID_118(118L,4L, 24L,"选择型客户"), + ID_119(119L,4L, 24L,"参与型客户"), + ID_120(120L,4L, 24L,"安静型客户"), + ID_121(121L,4L, 25L,"时尚"), + ID_122(122L,4L, 25L,"旅游"), + ID_123(123L,4L, 25L,"运动"), + ID_124(124L,4L, 25L,"电玩"), + ID_125(125L,4L, 25L,"看书"), + ID_126(126L,4L, 25L,"其他"), + ID_127(127L,2L, 26L,"附近住户"), + + + ; + + + public static EnumTag getEnum(Long code) { + for (EnumTag value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Long code; + private Long groupCode; + private Long typeCode; + private String message; + + EnumTag(Long code, Long groupCode, Long typeCode, String message) { + this.code = code; + this.groupCode = groupCode; + this.typeCode = typeCode; + this.message = message; + } + + public Long getCode() { + return code; + } + + public Long getGroupCode() { + return groupCode; + } + + public Long getTypeCode() { + return typeCode; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTagGroup.java b/mallinkService/src/main/java/com/iformall/enums/EnumTagGroup.java new file mode 100644 index 000000000..52a354b86 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTagGroup.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumTagGroup { + + ID_1(1L, "基础属性"), + ID_2(2L, "生活属性"), + ID_3(3L, "消费偏好"), + ID_4(4L, "行为偏好"), + + ; + + public static EnumTagGroup getEnum(Long code) { + for (EnumTagGroup value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Long code; + private String message; + + EnumTagGroup(Long code, String message) { + this.code = code; + this.message = message; + } + + public Long getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTagType.java b/mallinkService/src/main/java/com/iformall/enums/EnumTagType.java new file mode 100644 index 000000000..1651ad17d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTagType.java @@ -0,0 +1,69 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumTagType { + + ID_1(1L, 1L, "性别"), + ID_2(2L, 1L, "年龄"), + ID_3(3L, 1L, "生肖"), + ID_4(4L, 1L, "星座"), + ID_5(5L, 1L, "来源"), + ID_6(6L, 1L, "学历"), + ID_7(7L, 1L, "手机运营商"), + + ID_8(8L, 2L, "月收入"), + ID_9(9L, 2L, "手机品牌"), + ID_10(10L, 2L, "婚姻家庭"), + ID_11(11L, 2L, "车辆情况"), + ID_12(12L, 2L, "职业"), + ID_13(13L, 2L, "住房情况"), + + ID_14(14L, 3L, "消费类别"), + ID_15(15L, 3L, "消费档次"), + ID_16(16L, 3L, "品牌偏好"), + ID_17(17L, 3L, "饮食偏好"), + ID_18(18L, 3L, "消费时间段"), + ID_19(19L, 3L, "支付习惯"), + + ID_20(20L, 4L, "会员消费观"), + ID_21(21L, 4L, "消费频率"), + ID_22(22L, 4L, "活跃度"), + ID_23(23L, 4L, "客单价"), + ID_24(24L, 4L, "会员性格"), + ID_25(25L, 4L, "爱好"), + ID_26(26L, 4L, "生活半径"), + ; + + public static EnumTagType getEnum(Long code) { + for (EnumTagType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Long code; + private Long groupCode; + private String message; + + EnumTagType(Long code, Long groupCode, String message) { + this.code = code; + this.groupCode = groupCode; + this.message = message; + } + + public Long getCode() { + return code; + } + + public Long getGroupCode() { + return groupCode; + } + + public String getMessage() { + return message; + } +} 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 37ad69c6f..b8e044339 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java @@ -1,11 +1,20 @@ package com.iformall.service.impl; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; import java.util.List; import com.alibaba.fastjson.JSON; import com.iformall.domain.po.WxCUserBasicInfo; +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.service.WxCUserBasicInfoService; +import com.iformall.service.WxTagsService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -33,12 +42,17 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { @Autowired WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + @Autowired WxCUserMapper wxCUserMapper; @Autowired WxTagsMapper wxTagsMapper; + @Autowired + WxTagsService wxTagsService; @Override public PageInfo listAsPage(WxCUserTags record, Integer pageIndex, Integer pageSize) { @@ -124,7 +138,124 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { vo.setUserCount(findCUserCountByTag(tenantId,tagIds)); return vo; } - - - + + + private List assign(WxCUserBasicInfo user, EnumTag tag){ + + WxCUserTags record = new WxCUserTags(); + record.setUserId(user.getId()); + record.setTenantId(user.getTenantId()); + List cUserTagsList = wxCUserTagsMapper.findList(record); + if (cUserTagsList.size() > 0) { + record.setId(cUserTagsList.get(0).getId()); + } + String tags = record.getTags(); + List tagIdList = JSON.parseArray(tags, Long.class); + tagIdList.add(tag.getCode()); + record.setTags(JSON.toJSONString(tagIdList)); + saveOrUpdate(record); + if (!user.getTagId().equals(record.getId())) { + user.setTagId(record.getId()); + wxCUserBasicInfoService.update(user); + } + WxTags wxTags = new WxTags(); + wxTags.setIds(tagIdList); + return wxTagsMapper.findList(wxTags); + } + + private List resign(WxCUserBasicInfo user, EnumTag tag){ + + WxCUserTags record = new WxCUserTags(); + record.setUserId(user.getId()); + record.setTenantId(user.getTenantId()); + 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); + + } + + + + //@Override + private List triggerAssignTags(WxCUserBasicInfo user, EnumAssignTagsTrigger trigger, Object obj) { + if (user == null) + return null; + + switch (trigger) { + case ASSIGN_TAGS_TRIGGER_IMPORT: + if (obj != null) { + WxCUserBasicInfo param = (WxCUserBasicInfo) obj; + + if (param.getSex() != null) { + if (param.getSex().equals(EnumCUserBaseInfoSex.MALE)) + assign(user, EnumTag.ID_1); + if (param.getSex().equals(EnumCUserBaseInfoSex.FEMALE)) + assign(user, EnumTag.ID_2); + } + + if (param.getBirthdate() != null) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + if (param.getBirthdate().after(sdf.parse("2000-01-01"))) + assign(user, EnumTag.ID_3); + else if (param.getBirthdate().after(sdf.parse("1990-01-01"))) + assign(user, EnumTag.ID_4); + else if (param.getBirthdate().after(sdf.parse("1980-01-01"))) + assign(user, EnumTag.ID_5); + else if (param.getBirthdate().after(sdf.parse("1970-01-01"))) + assign(user, EnumTag.ID_6); + else if (param.getBirthdate().after(sdf.parse("1960-01-01"))) + assign(user, EnumTag.ID_7); + } catch (Exception e) { + + } + + + } + + + assign(user, EnumTag.ID_3); + assign(user, EnumTag.ID_4); + assign(user, EnumTag.ID_5); + assign(user, EnumTag.ID_6); + assign(user, EnumTag.ID_7); + } + break; + case ASSIGN_TAGS_TRIGGER_CAR: + break; + case ASSIGN_TAGS_TRIGGER_PHONE: + assign(user, EnumTag.ID_1); + assign(user, EnumTag.ID_5); + assign(user, EnumTag.ID_7); + break; + case ASSIGN_TAGS_TRIGGER_BUY: + break; + case ASSIGN_TAGS_TRIGGER_USE: + break; + case ASSIGN_TAGS_TRIGGER_LOGIN: + break; + + default: + return null; + + } + return null; + } + + }