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

[标签][新增]:新增自动打标逻辑

release_toaliyun_real
hupeng 7 лет назад
Родитель
Сommit
6635bb2c9e
5 измененных файлов: 178 добавлений и 60 удалений
  1. +0
    -26
      mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java
  2. +1
    -1
      mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java
  3. +11
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java
  4. +150
    -33
      mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java
  5. +16
    -0
      mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml

+ 0
- 26
mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java Просмотреть файл

@@ -27,32 +27,6 @@ public class WxCouponController extends BaseController {
@Autowired
private WxCouponService wxCouponService;

@ApiOperation("根据id(coupon)查询接口")
@GetMapping("/detailC")
@ApiImplicitParams({
@ApiImplicitParam(name = "couponId", value = "couponChannelId", dataType = "String", paramType = "query", required = true)})
public ResultData detail(String couponId) {
if (StringUtils.isBlank(couponId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId为空");
}
Long couponIdL = 0L;
try {
couponIdL = Long.valueOf(couponId);
} catch (NumberFormatException e) {
logger.error("id转换失败" + couponId);
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId转换失败" + couponId);
}
WxCoupon wxCoupon = new WxCoupon();
wxCoupon.setId(couponIdL);
wxCoupon.setTenantId(getTenantId());
WxCouponCVo wxCouponCVo = wxCouponService.selectDetailForCUser(wxCoupon);
if (wxCouponCVo == null)
return new ResultData(ErrorCode.COUPON_IS_EMPTY);

return new ResultData(wxCouponCVo);

}


@ApiOperation("根据id(couponChannel)查询接口")
@GetMapping("/detail")


+ 1
- 1
mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java Просмотреть файл

@@ -134,7 +134,7 @@ public class WxUserGrantController extends BaseController {

JSONObject extraInfo = new JSONObject();
extraInfo.put("systemInfo",JSONObject.parseObject(systemInfo));
user.setExtraInfo(extraInfo.toJSONString());
user1.setExtraInfo(extraInfo.toJSONString());

wxCUserService.saveOrUpdate(user1);



+ 11
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java Просмотреть файл

@@ -71,4 +71,15 @@ public interface WxCouponOrderMapper extends CommonMapper<WxCouponOrder, Long> {


List<MarkingSceneDataVo> queryForSceneRepotyHistoryVerified(HashMap<String,Object> params);

/**
* 查询用户核销/领券数
* @param cUserId
* @param startTime
* @param endTime
* @return
*/
int findOrderedCountForCUser(@Param("cUserId")Long cUserId,@Param("startTime") Date startTime,@Param("endTime")Date endTime);
int findVerifiedCountForCUser(@Param("cUserId")Long cUserId,@Param("startTime") Date startTime,@Param("endTime")Date endTime);

}

+ 150
- 33
mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java Просмотреть файл

@@ -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;


+ 16
- 0
mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml Просмотреть файл

@@ -585,4 +585,20 @@
</if>
group by xTime
</select>

<select id="findVerifiedCountForCUser" resultType="java.lang.Integer">
select COUNT(*) FROM wx_coupon_order
where c_user_id = #{cUserId}
and update_date &gt;= #{startTime}
and update_date &lt;= #{endTime}
and c.coupon_order_status = 1
</select>

<select id="findOrderedCountForCUser" resultType="java.lang.Integer">
select COUNT(*) FROM wx_coupon_order
where c_user_id = #{cUserId}
and create_date &gt;= #{startTime}
and create_date &lt;= #{endTime}
</select>

</mapper>

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