Просмотр исходного кода

[标签][新增]:自动打标签逻辑,获取C端系统信息

release_toaliyun_real
hupeng 7 лет назад
Родитель
Сommit
3a9a05af6c
5 измененных файлов: 254 добавлений и 59 удалений
  1. +14
    -2
      mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java
  2. +15
    -1
      mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java
  3. +5
    -5
      mallinkService/src/main/java/com/iformall/enums/EnumTag.java
  4. +210
    -50
      mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java
  5. +10
    -1
      mallinkService/src/main/resources/mapper/WxCUserMapper.xml

+ 14
- 2
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<String, String> 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 {


+ 15
- 1
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){


+ 5
- 5
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, "电信"),


+ 210
- 50
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<WxTags> assignTypeId1(WxCUserBasicInfo user, Integer sex) {
List<WxTags> 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<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;
}

private 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;
}

private 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;
}

private 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> assignTypeId11(WxCUserBasicInfo user) {
return assign(user, EnumTag.ID_58);
}


//@Override
private List<WxTags> triggerAssignTags(WxCUserBasicInfo user, EnumAssignTagsTrigger trigger, Object obj) {
if (user == null)
private List<WxTags> triggerAssignTags(EnumAssignTagsTrigger trigger, Object obj) {
if (obj != null)
return null;

List<WxTags> 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;
}




+ 10
- 1
mallinkService/src/main/resources/mapper/WxCUserMapper.xml Просмотреть файл

@@ -30,10 +30,11 @@
<result column="latitude" jdbcType="DECIMAL" property="latitude"/>
<result column="longitude" jdbcType="DECIMAL" property="longitude"/>
<result column="login_count" jdbcType="INTEGER" property="loginCount"/>
<result column="extra_info" jdbcType="VARCHAR" property="extraInfo"/>
</resultMap>

<sql id="allColumns">
`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`
</sql>

<sql id="dynamicWhereConditions">
@@ -138,15 +139,23 @@
<if test=" null != expireTime ">
and `expire_time` = #{expireTime}
</if>

<if test=" null != latitude ">
and `latitude` = #{latitude}
</if>

<if test=" null != longitude ">
and `longitude` = #{longitude}
</if>

<if test=" null != loginCount ">
and `login_count` = #{loginCount}
</if>

<if test=" null != extraInfo ">
and `extra_info` = #{extraInfo}
</if>

<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">


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