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

[会员][更改]:会员标签发短信和定向投放查找规则升级

release_toaliyun_real
hupeng 7 лет назад
Родитель
Сommit
857bd33be4
11 измененных файлов: 165 добавлений и 65 удалений
  1. +1
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/CouponInjectController.java
  2. +1
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java
  3. +1
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/WxTagsController.java
  4. +7
    -1
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  5. +40
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumCouponInjectStatus.java
  6. +5
    -4
      mallinkService/src/main/java/com/iformall/mapper/WxCUserTagsMapper.java
  7. +24
    -7
      mallinkService/src/main/java/com/iformall/service/WxCUserTagsService.java
  8. +16
    -16
      mallinkService/src/main/java/com/iformall/service/impl/CouponInjectServiceImpl.java
  9. +33
    -7
      mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java
  10. +14
    -19
      mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java
  11. +23
    -8
      mallinkService/src/main/resources/mapper/WxCUserTagsMapper.xml

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

@@ -89,7 +89,7 @@ public class CouponInjectController extends BaseController {
CouponInject couponInject = couponInjectService.getById(id);
if (couponInject != null) {
List<Long> tagids = JSON.parseArray(couponInject.getTags(), Long.class);
couponInject.setWxChooseTagVo(wxCUserTagsService.findChooseTag(tagids));
couponInject.setWxChooseTagVo(wxCUserTagsService.findChooseTag(getTenantId(), tagids));
}
return new ResultData(Result.SUCCESS, "查询成功", couponInject);
}


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

@@ -159,7 +159,7 @@ public class WxCUserBasicInfoController extends BaseController {
if (StringUtils.isNoneBlank(tagIds)) {
info.setTagIds(tagIds.substring(0, tagIds.length() - 1));
}
long count = wxCUserTagsService.findCountByTag(tagIdList);
long count = wxCUserTagsService.findCountByTag(getTenantId(), tagIdList);
info.setCount(count);
}
}


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

@@ -113,7 +113,7 @@ public class WxTagsController extends BaseController {
// }
// map.put("names",endName );
// map.put("tagIds", ids);
long count = wxCUserTagsService.findCountByTag(Arrays.asList(tagIds));
long count = wxCUserTagsService.findCountByTag(getTenantId(), Arrays.asList(tagIds));
return new ResultData(Result.SUCCESS,"查询成功",count);
}


+ 7
- 1
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Просмотреть файл

@@ -207,7 +207,13 @@ public enum ErrorCode{
/**
* 会员
*/
MEM_IMPORT_ERR(13000, "模板导入失败")
MEM_IMPORT_ERR(13000, "模板导入失败"),

/**
* 标签
*/
TAGS_MATCHED_NULL(14000, "此标签没命中用户")

;

private int code;


+ 40
- 0
mallinkService/src/main/java/com/iformall/enums/EnumCouponInjectStatus.java Просмотреть файл

@@ -0,0 +1,40 @@
package com.iformall.enums;

/**
* Created by Stormeye on 2018/08/09.
*/
public enum EnumCouponInjectStatus {

//0:待发送1:发送中2:已发送3:发送失败4已作废
PENDING(0, "待发送"),
SENDING(1, "发送中"),
HAS_SENT(2, "已发送"),
SEND_FAILED(3, "发送失败"),
INVALID(4, "已作废")
;

public static EnumCouponInjectStatus getEnum(Integer code) {
for (EnumCouponInjectStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumCouponInjectStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 5
- 4
mallinkService/src/main/java/com/iformall/mapper/WxCUserTagsMapper.java Просмотреть файл

@@ -10,10 +10,11 @@ public interface WxCUserTagsMapper extends CommonMapper<WxCUserTags, String> {

List<WxCUserTags> findList(WxCUserTags wxCUserTags);

List<Long> findUserByTag(@Param("tagIds")String tagIds);
long findCountByTags(@Param("tagIds")String tagIds, @Param("tenantId")String tenantId);

long findCountByTags(@Param("tagIds")String tagIds);
long findCUserCountByTags(@Param("tagIds")String tagIds, @Param("tenantId")String tenantId);

List<Long> findUserByTags(@Param("tagIds")String tagIds);
List<Long> findByTags(@Param("tagIds")String tagIds,@Param("tenantId")String tenantId);

List<Long> findCUserByTags(@Param("tagIds")String tagIds,@Param("tenantId")String tenantId);
}

+ 24
- 7
mallinkService/src/main/java/com/iformall/service/WxCUserTagsService.java Просмотреть файл

@@ -4,6 +4,7 @@ import java.util.List;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCUserTags;
import com.iformall.domain.vo.WxChooseTagVo;

@@ -42,25 +43,41 @@ public interface WxCUserTagsService {
void deleteById(Long id);
/**
* tagIds查询 用户数量
* tagIds查询 用户数量(会员列表中的user)
* @param tagIds
* @return
*/
long findCountByTag(List<Long> tagIds);
long findCountByTag(String tenantId, List<Long> tagIds);

/**
/**
*
* tagIds查询用户user信息集合(会员列表中的user)
* @param tagIds
* @return
*/
List<WxCUserBasicInfo> findByTag(String tenantId, List<Long> tagIds);


/**
* tagIds查询 用户数量(登陆过C端的用户,并且保有手机号)
* @param tagIds
* @return
*/
long findCUserCountByTag(String tenantId, List<Long> tagIds);

/**
*
* tagIds查询用户user信息集合
* tagIds查询用户user信息集合(登陆过C端的用户,并且保有手机号)
* @param tagIds
* @return
*/
List<WxCUser> findUserByTag(List<Long> tagIds);
List<WxCUser> findCUserByTag(String tenantId, List<Long> tagIds);
/**
* 获取用户数量和tags name
* 获取用户数量和tags name(登陆过C端的用户,并且保有手机号)
* @param tagIds
* @return
*/
WxChooseTagVo findChooseTag(List<Long> tagIds);
WxChooseTagVo findChooseTag(String tenantId, List<Long> tagIds);
}

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

@@ -8,9 +8,7 @@ import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.*;
import com.iformall.enums.EnumCouponSendType;
import com.iformall.enums.EnumCouponStatus;
import com.iformall.enums.EnumCouponValidType;
import com.iformall.enums.*;
import com.iformall.mapper.CouponInjectMapper;
import com.iformall.service.*;
import org.apache.commons.lang3.time.DateUtils;
@@ -77,36 +75,38 @@ public class CouponInjectServiceImpl implements CouponInjectService {
if(wxCoupon.getStatus() != EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode()){
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
}
if(wxCoupon.getSendType()!=EnumCouponSendType.PASSIVE.getCode()) {
if(wxCoupon.getSendType()!= EnumCouponSendType.PASSIVE.getCode()) {
return new ResultData(ErrorCode.COUPON_TYPE_IS_NOT_PASSIVE);
}


//解析前台tags,并转换json
String[] arys = record.getTags().split(",");
List<Long> tagids = new ArrayList<>();
for (int i = 0; i < arys.length; i++) {
tagids.add(Long.parseLong(arys[i]));
}

List<WxCUser> cUsers = wxCUserTagsService.findCUserByTag(record.getTenantId(), tagids);
if(cUsers.isEmpty()){
return new ResultData(ErrorCode.TAGS_MATCHED_NULL);
}
int inventory = wxCoupon.getRemainInventory();//库存数量
if(cUsers.size()>inventory){
return new ResultData(ErrorCode.COUPON_IS_SELL_OUT);
}

record.setTags(JSON.toJSONString(arys));

//生成雪花id
final IdWorker idWorker = new IdWorker(0, 0);
record.setId(idWorker.nextId());
if(record.getSendType()==0){
record.setStatus(1);
if(record.getSendType() == EnumCouponInjectSendType.IMMEDIATE.getCode()){
record.setStatus(EnumCouponInjectStatus.SENDING.getCode());
record.setSendTime(new Date());
}else{
record.setStatus(0);
}
List<WxCUser> cUsers = wxCUserTagsService.findUserByTag(tagids);
if(cUsers.isEmpty()){
return new ResultData(Result.ERROR,"标签下没有用户");
}
int inventory = wxCoupon.getRemainInventory();//库存数量
if(cUsers.size()>inventory){
return new ResultData(ErrorCode.COUPON_IS_SELL_OUT);
record.setStatus(EnumCouponInjectStatus.PENDING.getCode());
}

record.setCouponName(wxCoupon.getTitle());
record.setSendAmount(cUsers.size());
couponInjectMapper.insertSelective(record);


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

@@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.mapper.WxCUserBasicInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@@ -25,9 +27,12 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService {
@Autowired
WxCUserTagsMapper wxCUserTagsMapper;
@Autowired
WxCUserBasicInfoMapper wxCUserBasicInfoMapper;

@Autowired
WxCUserMapper wxCUserMapper;
@Autowired
WxTagsMapper wxTagsMapper;

@@ -60,25 +65,46 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService {
}

@Override
public long findCountByTag(List<Long> tagIds) {
public long findCountByTag(String tenantId, List<Long> tagIds) {
String str = JSON.toJSONString(tagIds);
return wxCUserTagsMapper.findCountByTags(str);
return wxCUserTagsMapper.findCountByTags(str,tenantId);
}

@Override
public List<WxCUser> findUserByTag(List<Long> tagIds) {
public long findCUserCountByTag(String tenantId, List<Long> tagIds) {
String str = JSON.toJSONString(tagIds);
List<Long> userIds = wxCUserTagsMapper.findUserByTags(str);
return wxCUserTagsMapper.findCUserCountByTags(str,tenantId);
}

@Override
public List<WxCUser> findCUserByTag(String tenantId, List<Long> tagIds) {
String str = JSON.toJSONString(tagIds);
List<Long> userIds = wxCUserTagsMapper.findCUserByTags(str,tenantId);
if(userIds.size()==0) {
return new ArrayList<>();
}

WxCUser wxCUser = new WxCUser();
wxCUser.setIds(userIds);
return wxCUserMapper.findList(wxCUser);
}

@Override
public WxChooseTagVo findChooseTag(List<Long> tagIds) {
public List<WxCUserBasicInfo> findByTag(String tenantId, List<Long> tagIds) {
String str = JSON.toJSONString(tagIds);
List<Long> userIds = wxCUserTagsMapper.findByTags(str,tenantId);
if(userIds.size()==0) {
return new ArrayList<>();
}

WxCUserBasicInfo wxCUserBasicInfo = new WxCUserBasicInfo();
wxCUserBasicInfo.setIds(userIds);
return wxCUserBasicInfoMapper.findList(wxCUserBasicInfo);
}


@Override
public WxChooseTagVo findChooseTag(String tenantId, List<Long> tagIds) {
WxTags wxTags =new WxTags();
wxTags.setIds(tagIds);
List<WxTags> list = wxTagsMapper.findList(wxTags);
@@ -92,7 +118,7 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService {
}
WxChooseTagVo vo =new WxChooseTagVo();
vo.setNames(endName);
vo.setUserCount(findCountByTag(tagIds));
vo.setUserCount(findCUserCountByTag(tenantId,tagIds));
return vo;
}


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

@@ -9,12 +9,12 @@ import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxMsg;
import com.iformall.domain.po.WxMsgConfig;
import com.iformall.mapper.WxCUserMapper;
import com.iformall.mapper.WxCUserTagsMapper;
import com.iformall.mapper.WxMsgConfigMapper;
import com.iformall.mapper.WxMsgMapper;
import com.iformall.mapper.*;
import com.iformall.service.WxCUserService;
import com.iformall.service.WxCUserTagsService;
import com.iformall.service.WxMsgService;
import com.iformall.utils.AesUtil;
import com.iformall.utils.HMACSHA256;
@@ -35,10 +35,10 @@ public class WxMsgServiceImpl implements WxMsgService {
WxMsgConfigMapper wxMsgConfigMapper;

@Autowired
WxCUserTagsMapper wxCUserTagsMapper;
WxCUserTagsService wxCUserTagsService;

@Autowired
WxCUserMapper wxCUserMapper;
WxCUserBasicInfoMapper wxCUserBasicInfoMapper;

@Override
public PageInfo<WxMsg> listAsPage(WxMsg record, Integer pageIndex, Integer pageSize) {
@@ -60,9 +60,9 @@ public class WxMsgServiceImpl implements WxMsgService {
String phones=wxMsg.getPhones();
if(phones.equals("")){
if(null!=wxMsg.getExcelpath() && !wxMsg.getExcelpath().equals(""))
phones=parseexcle(wxMsg.getExcelpath());
phones=parseexcle(wxMsg.getTenantId(), wxMsg.getExcelpath());
else
phones=parselabel(wxMsg.getLabel());
phones=parselabel(wxMsg.getTenantId(), wxMsg.getLabel());
}

if(phones.equals("")){
@@ -118,30 +118,25 @@ public class WxMsgServiceImpl implements WxMsgService {
return new ResultData();
}

private String parselabel(String label) {
private String parselabel(String tenantId, String label) {
String[] arys = label.split(",");
List<Long> tagids = new ArrayList<>();
for (int i = 0; i < arys.length; i++) {
tagids.add(Long.parseLong(arys[i]));
}
List<Long> userIds = wxCUserTagsMapper.findUserByTag(JSON.toJSONString(tagids));
if(userIds.size()==0) {
return "";
}
WxCUser wxCUser = new WxCUser();
wxCUser.setIds(userIds);
List<WxCUser> list = wxCUserMapper.findList(wxCUser);
List<WxCUserBasicInfo> list = wxCUserTagsService.findByTag(tenantId,tagids);

StringBuilder sb=new StringBuilder();
if(list.size()>0){
for(WxCUser cuser:list){
sb.append(cuser.getPhone()).append(",");
for(WxCUserBasicInfo cUserInfo:list){
sb.append(cUserInfo.getPhone()).append(",");
}
return sb.toString();
}
return "";
}

private String parseexcle(String excelpath) {
private String parseexcle(String tenantId, String excelpath) {

return null;
}


+ 23
- 8
mallinkService/src/main/resources/mapper/WxCUserTagsMapper.xml Просмотреть файл

@@ -59,17 +59,32 @@
select <include refid="allColumns" /> from wx_c_user_tags
<include refid="dynamicWhereConditions" />
</select>
<select id ="findUserByTag" resultType="java.lang.Long">
select user_id from wx_c_user_tags where JSON_CONTAINS(tags,#{tagIds} );
</select>


<select id ="findCountByTags" resultType="java.lang.Long">
select count(user_id) from wx_c_user_tags where JSON_CONTAINS(tags,#{tagIds} );
select count(user_id) from wx_c_user_tags cut
where JSON_CONTAINS(tags,#{tagIds} )
and cut.tenant_id = #{tenantId};
</select>

<select id ="findUserByTags" resultType="java.lang.Long">
select user_id from wx_c_user_tags where JSON_CONTAINS(tags,#{tagIds} );
<select id ="findCUserCountByTags" resultType="java.lang.Long">
select count(user_id) from wx_c_user_tags cut, wx_c_user cu
where cut.id = cu.id
and JSON_CONTAINS(tags,#{tagIds} )
and cut.tenant_id = #{tenantId};
</select>

<select id ="findByTags" resultType="java.lang.Long">
select user_id from wx_c_user_tags cut
where JSON_CONTAINS(tags,#{tagIds} )
and cut.tenant_id = #{tenantId};
</select>

<select id ="findCUserByTags" resultType="java.lang.Long">
select user_id from wx_c_user_tags cut, wx_c_user cu
where cut.user_id = cu.id
and JSON_CONTAINS(tags,#{tagIds} )
and cut.tenant_id = #{tenantId};
</select>

</mapper>

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