| @@ -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; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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<WxCUserTags> 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<WxTags> assign(WxCUserBasicInfo user, EnumTag tag){ | |||
| WxCUserTags record = new WxCUserTags(); | |||
| record.setUserId(user.getId()); | |||
| record.setTenantId(user.getTenantId()); | |||
| List<WxCUserTags> cUserTagsList = wxCUserTagsMapper.findList(record); | |||
| if (cUserTagsList.size() > 0) { | |||
| record.setId(cUserTagsList.get(0).getId()); | |||
| } | |||
| String tags = record.getTags(); | |||
| List<Long> 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<WxTags> resign(WxCUserBasicInfo user, EnumTag tag){ | |||
| WxCUserTags record = new WxCUserTags(); | |||
| record.setUserId(user.getId()); | |||
| record.setTenantId(user.getTenantId()); | |||
| 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); | |||
| } | |||
| //@Override | |||
| private List<WxTags> 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; | |||
| } | |||
| } | |||