diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 4298f3f7e..231d5e5ff 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -67,7 +67,7 @@ public class WxUserGrantController extends BaseController { */ @AuthIgnore @PostMapping("/login") - @ApiOperation(value="用户登录", notes="{\"appId\":\"string\",\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\",\"latitude\":\"string\",\"longitude\":\"string\"}") + @ApiOperation(value="用户登录", notes="{\"appId\":\"string\",\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\",\"latitude\":\"string\",\"longitude\":\"string\",\"systemInfo\":\"string\"}") public ResultData userLogin(@RequestBody Map map) { logger.debug(map.toString()); @@ -79,6 +79,7 @@ public class WxUserGrantController extends BaseController { String scene = map.get("scene"); String longitude = map.get("longitude"); String latitude = map.get("latitude"); + String systemInfo = map.get("systemInfo"); //登录凭证不能为空 if (StringUtils.isBlank(appId)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId不能为空"); @@ -130,13 +131,19 @@ public class WxUserGrantController extends BaseController { user1.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude))); if (!StringUtils.isBlank(latitude)) user1.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); + + JSONObject extraInfo = new JSONObject(); + extraInfo.put("systemInfo",JSONObject.parseObject(systemInfo)); + user.setExtraInfo(extraInfo.toJSONString()); + + wxCUserService.saveOrUpdate(user1); + // 成长值 try { wxCUserService.scoreCalculate(user1, false); } catch (Exception e) { logger.error(e.getMessage()); } - wxCUserService.saveOrUpdate(user1); resultMap.put("token", token); } else { user.setTenantId(wxAppinfo.getTenantId()); @@ -152,6 +159,11 @@ public class WxUserGrantController extends BaseController { user.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude))); if (!StringUtils.isBlank(latitude)) user.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); + + JSONObject extraInfo = new JSONObject(); + extraInfo.put("systemInfo",JSONObject.parseObject(systemInfo)); + user.setExtraInfo(extraInfo.toJSONString()); + wxCUserService.saveOrUpdate(user); // 成长值 try { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java index a5bf31114..23c0d393c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java @@ -126,9 +126,21 @@ public class WxCUser implements Serializable { /*登录次数**/ @io.swagger.annotations.ApiModelProperty(value="登录次数",name="loginCount") private Integer loginCount; - + /*附加信息**/ + @io.swagger.annotations.ApiModelProperty(value="附加信息",name="extraInfo") + private String extraInfo; + + public String getExtraInfo() { + return extraInfo; + } + + public void setExtraInfo(String extraInfo) { + this.extraInfo = extraInfo; + } + //渠道名称 @Transient + private String channelName; //渠道描述 @Transient @@ -348,6 +360,8 @@ public class WxCUser implements Serializable { ,ExpireTime_ASC("`expire_time` ASC"),ExpireTime_DESC("`expire_time` DESC") ,Longitude_ASC("`longitude` ASC"),Longitude_DESC("`longitude` DESC") ,Latitude_ASC("`latitude` ASC"),Latitude_DESC("`latitude` DESC") + ,LoginCount_ASC("`login_count` ASC"),LoginCount_DESC("`login_count` DESC") + ,ExtraInfo_ASC("`extra_info` ASC"),ExtraInfo_DESC("`extra_info` DESC") ; private String value; Field(String value){ diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTag.java b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java index 869693a17..d60a3895c 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTag.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java @@ -31,9 +31,9 @@ public enum EnumTag { 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_27(27L, 1L, 4L, "天蝎座"), + ID_28(28L, 1L, 4L, "射手座"), + ID_29(29L, 1L, 4L, "摩羯座"), ID_30(30L, 1L, 4L, "水瓶座"), ID_31(31L, 1L, 4L, "双鱼座"), ID_32(32L, 1L, 5L, "线上"), @@ -41,8 +41,8 @@ public enum EnumTag { 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_37(37L, 1L, 6L, "硕士"), + ID_38(38L, 1L, 6L, "博士"), ID_39(39L, 1L, 7L, "移动"), ID_40(40L, 1L, 7L, "联通"), ID_41(41L, 1L, 7L, "电信"), 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 b8e044339..c67bccc71 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java @@ -1,13 +1,11 @@ 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 java.util.*; +import java.util.regex.Pattern; import com.alibaba.fastjson.JSON; -import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.*; import com.iformall.enums.EnumAssignTagsTrigger; import com.iformall.enums.EnumCUserBaseInfoSex; import com.iformall.enums.EnumTag; @@ -23,9 +21,6 @@ import org.springframework.stereotype.Service; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; -import com.iformall.domain.po.WxCUser; -import com.iformall.domain.po.WxCUserTags; -import com.iformall.domain.po.WxTags; import com.iformall.domain.vo.WxChooseTagVo; import com.iformall.mapper.WxCUserMapper; import com.iformall.mapper.WxCUserTagsMapper; @@ -189,72 +184,237 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { } + private List assignTypeId1(WxCUserBasicInfo user, Integer sex) { + List resList = null; + if (sex.equals(EnumCUserBaseInfoSex.MALE)) + resList = assign(user, EnumTag.ID_1); + if (sex.equals(EnumCUserBaseInfoSex.FEMALE)) + resList = assign(user, EnumTag.ID_2); + return resList; + } + + private List assignTypeId2(WxCUserBasicInfo user, Date date) { + List resList = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + if (date.after(sdf.parse("2000-01-01"))) + resList = assign(user, EnumTag.ID_3); + else if (date.after(sdf.parse("1990-01-01"))) + resList = assign(user, EnumTag.ID_4); + else if (date.after(sdf.parse("1980-01-01"))) + resList = assign(user, EnumTag.ID_5); + else if (date.after(sdf.parse("1970-01-01"))) + resList = assign(user, EnumTag.ID_6); + else if (date.after(sdf.parse("1960-01-01"))) + resList = assign(user, EnumTag.ID_7); + } catch (Exception e) { + return null; + } + return resList; + } + + private List assignTypeId3(WxCUserBasicInfo user, Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int year = cal.get(Calendar.YEAR); + if (year > 1900) { + EnumTag[] years = new EnumTag[]{EnumTag.ID_8, + EnumTag.ID_9, + EnumTag.ID_10, + EnumTag.ID_11, + EnumTag.ID_12, + EnumTag.ID_13, + EnumTag.ID_14, + EnumTag.ID_15, + EnumTag.ID_16, + EnumTag.ID_17, + EnumTag.ID_18, + EnumTag.ID_19 + }; + return assign(user, years[(year - 1900) % years.length]); + } + return null; + } + + private List assignTypeId4(WxCUserBasicInfo user, Date date) { + final int[] dayArr = new int[]{ + 20, 19, 21, 20, + 21, 22, 23, 23, + 23, 24, 23, 22}; + final EnumTag[] constellation = new EnumTag[]{ + EnumTag.ID_29, + EnumTag.ID_30, + EnumTag.ID_31, + EnumTag.ID_20, + EnumTag.ID_21, + EnumTag.ID_22, + EnumTag.ID_23, + EnumTag.ID_24, + EnumTag.ID_25, + EnumTag.ID_26, + EnumTag.ID_27, + EnumTag.ID_28, + EnumTag.ID_29, + }; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int month = cal.get(Calendar.MONTH); + int day = cal.get(Calendar.DAY_OF_MONTH); + + return assign(user, day < dayArr[month] ? constellation[month] + : constellation[month + 1]); + } + + private List assignTypeId5(WxCUserBasicInfo user, boolean online) { + if (online) + return assign(user, EnumTag.ID_32); + else + return assign(user, EnumTag.ID_33); + } + + private List assignTypeId6(WxCUserBasicInfo user, String education) { + List resList = null; + if (education.contains(EnumTag.ID_38.getMessage())) + resList = assign(user, EnumTag.ID_38); + else if (education.contains(EnumTag.ID_37.getMessage())) + resList = assign(user, EnumTag.ID_37); + else if (education.contains(EnumTag.ID_36.getMessage())) + resList = assign(user, EnumTag.ID_36); + else if (education.contains(EnumTag.ID_35.getMessage())) + resList = assign(user, EnumTag.ID_35); + else if (education.contains(EnumTag.ID_34.getMessage())) + resList = assign(user, EnumTag.ID_34); + return resList; + } + + private List assignTypeId7(WxCUserBasicInfo user, String phone) { + + List resList = null; + /** + * 中国电信号码格式验证 手机段: 133,153,180,181,189,177,1700,173,199 + **/ + final String CHINA_TELECOM_PATTERN = "(^1(33|53|77|73|99|8[019])\\d{8}$)|(^1700\\d{7}$)"; + + /** + * 中国联通号码格式验证 手机段:130,131,132,155,156,185,186,145,176,1709 + **/ + final String CHINA_UNICOM_PATTERN = "(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\\d{8}$)|(^1709\\d{7}$)"; + + /** + * 中国移动号码格式验证 + * 手机段:134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705 + **/ + final String CHINA_MOBILE_PATTERN = "(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\\d{8}$)|(^1705\\d{7}$)"; + + if (Pattern.matches(CHINA_MOBILE_PATTERN, phone)) + resList = assign(user, EnumTag.ID_39); + if (Pattern.matches(CHINA_UNICOM_PATTERN, phone)) + resList = assign(user, EnumTag.ID_40); + if (Pattern.matches(CHINA_TELECOM_PATTERN,phone)) + resList = assign(user, EnumTag.ID_41); + return resList; + } + + private List assignTypeId11(WxCUserBasicInfo user) { + return assign(user, EnumTag.ID_58); + } //@Override - private List triggerAssignTags(WxCUserBasicInfo user, EnumAssignTagsTrigger trigger, Object obj) { - if (user == null) + private List triggerAssignTags(EnumAssignTagsTrigger trigger, Object obj) { + if (obj != null) return null; + List resList = null; + switch (trigger) { - case ASSIGN_TAGS_TRIGGER_IMPORT: - if (obj != null) { - WxCUserBasicInfo param = (WxCUserBasicInfo) obj; + case ASSIGN_TAGS_TRIGGER_IMPORT: { + WxCUserBasicInfo param = (WxCUserBasicInfo) obj; + WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getId()); + if (user != null) { + //性别 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); + resList = assignTypeId1(user, param.getSex()); } + //X0后 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) { - - } + 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); } + //学历 + if (param.getEducation() != null) { + resList = assignTypeId6(user, param.getEducation()); + } - 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); + //运营商 + if (param.getPhone() != null) { + resList = assignTypeId7(user, param.getPhone()); + } } - 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; + } + break; + case ASSIGN_TAGS_TRIGGER_CAR:{ + WxCUserCar param = (WxCUserCar) obj; + WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getCUserId()); + if (user != null) { + resList = assignTypeId11(user); + } + } + break; + case ASSIGN_TAGS_TRIGGER_PHONE: { + 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_USE: break; - case ASSIGN_TAGS_TRIGGER_LOGIN: - break; - default: - return null; + case ASSIGN_TAGS_TRIGGER_LOGIN: { + WxCUser param = (WxCUser) obj; + WxCUserBasicInfo user = wxCUserBasicInfoService.getById(param.getId()); + if (user != null) { + + if (param.getGender() != null) { + resList = assignTypeId1(user, param.getGender()); + } + } + } + break; + default: + return null; } - return null; + return resList; } diff --git a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml index 93106772a..963502884 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml @@ -30,10 +30,11 @@ + - `id`,`tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`,`city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`,`qrcode_source`,`scene`,`scene_address`,`session_key`,`score`,`update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, `login_count` + `id`,`tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`,`city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`,`qrcode_source`,`scene`,`scene_address`,`session_key`,`score`,`update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, `login_count`, `extra_info` @@ -138,15 +139,23 @@ and `expire_time` = #{expireTime} + and `latitude` = #{latitude} + and `longitude` = #{longitude} + and `login_count` = #{loginCount} + + + and `extra_info` = #{extraInfo} + + and id in