提交 16b65c18 作者: 沈振路

根据人群包找用户

上级 b835bc88
...@@ -24,4 +24,14 @@ public interface KanbanCommonMapper { ...@@ -24,4 +24,14 @@ public interface KanbanCommonMapper {
*/ */
List<CommonOptionResponseVO> getConditionOptionByConfig(@Param("conditionItem") CrowdPackageCondition conditionItem); List<CommonOptionResponseVO> getConditionOptionByConfig(@Param("conditionItem") CrowdPackageCondition conditionItem);
/**
* 得到从静态条件设置id列表
*
* @param expressList 表达列表
* @return {@link List}<{@link Long}>
*/
List<Long> getSetupIdListFromStaticCondition(@Param("expressList") List<String> expressList);
} }
...@@ -2,10 +2,22 @@ package com.yaoyaozw.customer.service; ...@@ -2,10 +2,22 @@ package com.yaoyaozw.customer.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yaoyaozw.customer.entity.CrowdPackageConditionMatch; import com.yaoyaozw.customer.entity.CrowdPackageConditionMatch;
import com.yaoyaozw.customer.entity.RegisterUserEntity;
import java.util.List;
/** /**
* @author darker * @author darker
* @date 2022/9/21 15:08 * @date 2022/9/21 15:08
*/ */
public interface CrowdPackageConditionMatchService extends IService<CrowdPackageConditionMatch> { public interface CrowdPackageConditionMatchService extends IService<CrowdPackageConditionMatch> {
/**
* 从包中获取用户列表
*
* @param packageId 包id
* @return {@link List}<{@link RegisterUserEntity}>
*/
List<RegisterUserEntity> getUserListFromPackage(Long packageId);
} }
package com.yaoyaozw.customer.service;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author darker
* @date 2022/9/28 19:01
*/
public interface CustomerServiceCommonService {
/**
* 得到从静态条件设置id列表
*
* @param expressList 表达列表
* @return {@link List}<{@link Long}>
*/
List<Long> getSetupIdListFromStaticCondition(List<String> expressList);
}
package com.yaoyaozw.customer.service.impl; package com.yaoyaozw.customer.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yaoyaozw.customer.constants.CrowdPackageCommonConstant;
import com.yaoyaozw.customer.entity.CrowdPackageConditionMatch; import com.yaoyaozw.customer.entity.CrowdPackageConditionMatch;
import com.yaoyaozw.customer.entity.RegisterUserEntity;
import com.yaoyaozw.customer.mapper.KanbanCommonMapper;
import com.yaoyaozw.customer.mapper.MaterialCrowdConditionMatchMapper; import com.yaoyaozw.customer.mapper.MaterialCrowdConditionMatchMapper;
import com.yaoyaozw.customer.service.CrowdPackageConditionMatchService; import com.yaoyaozw.customer.service.CrowdPackageConditionMatchService;
import com.yaoyaozw.customer.service.CustomerServiceCommonService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* @author darker * @author darker
* @date 2022/9/21 15:09 * @date 2022/9/21 15:09
*/ */
@Service @Service
public class CrowdPackageConditionMatchServiceImpl extends ServiceImpl<MaterialCrowdConditionMatchMapper, CrowdPackageConditionMatch> implements CrowdPackageConditionMatchService { public class CrowdPackageConditionMatchServiceImpl extends ServiceImpl<MaterialCrowdConditionMatchMapper, CrowdPackageConditionMatch> implements CrowdPackageConditionMatchService {
private final static Logger LOCAL_LOG = LoggerFactory.getLogger(CrowdPackageConditionMatchServiceImpl.class);
@Autowired
private CustomerServiceCommonService commonService;
@Override
public List<RegisterUserEntity> getUserListFromPackage(Long packageId) {
long startTime = System.currentTimeMillis();
// 获取人群包下的条件
List<CrowdPackageConditionMatch> packageConditionList = super.list(new QueryWrapper<CrowdPackageConditionMatch>().eq("package_id", packageId));
List<String> staticConditionList = packageConditionList.stream().filter(item -> CrowdPackageCommonConstant.STATIC_CONDITION.equals(item.getIsStatic())).map(CrowdPackageConditionMatch::getOperatorExpression).collect(Collectors.toList());
List<String> nonStaticConditionList = packageConditionList.stream().filter(item -> CrowdPackageCommonConstant.NON_STATIC_CONDITION.equals(item.getIsStatic())).map(CrowdPackageConditionMatch::getOperatorExpression).collect(Collectors.toList());
LOCAL_LOG.info("静态条件: {}条, 动态条件: {}条", staticConditionList.size(), nonStaticConditionList.size());
long getConditionTime = System.currentTimeMillis();
LOCAL_LOG.info("获取条件列表耗时 {}ms", getConditionTime - startTime);
// 根据静态条件获取setupId
List<Long> setupIdList = commonService.getSetupIdListFromStaticCondition(staticConditionList);
long getSetupIdTime = System.currentTimeMillis();
LOCAL_LOG.info("获取SetupId列表耗时 {}ms, setupId列表长度: {}", getSetupIdTime - getConditionTime, setupIdList.size());
// 根据动态条件获取用户列表
List<RegisterUserEntity> userList = new ArrayList<>();
long dynamicUserTime = System.currentTimeMillis();
LOCAL_LOG.info("获取SetupId列表符合动态条件的用户耗时 {}ms, 符合动态条件的用户: {}个", dynamicUserTime - getSetupIdTime, userList.size());
// 筛选所属setupId在列表中的用户
if (CollectionUtil.isNotEmpty(setupIdList)) {
userList = userList.stream().filter(item -> setupIdList.contains(item.getSetupId())).collect(Collectors.toList());
}
long allUserTime = System.currentTimeMillis();
LOCAL_LOG.info("获取符合全部条件的用户耗时: {}ms, 符合全部条件的用户: {}个", allUserTime - dynamicUserTime, userList.size());
return userList;
}
} }
...@@ -5,6 +5,8 @@ import com.yaoyaozw.customer.common.GenericsResult; ...@@ -5,6 +5,8 @@ import com.yaoyaozw.customer.common.GenericsResult;
import com.yaoyaozw.customer.dto.customer.CustomerMessageQueryDTO; import com.yaoyaozw.customer.dto.customer.CustomerMessageQueryDTO;
import com.yaoyaozw.customer.dto.customer.CustomerMessageSaveDTO; import com.yaoyaozw.customer.dto.customer.CustomerMessageSaveDTO;
import com.yaoyaozw.customer.vo.customer.CustomerMessageListVO; import com.yaoyaozw.customer.vo.customer.CustomerMessageListVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
...@@ -21,9 +23,13 @@ import com.yaoyaozw.customer.service.CustomerGraphicsService; ...@@ -21,9 +23,13 @@ import com.yaoyaozw.customer.service.CustomerGraphicsService;
@Service @Service
public class CustomerGraphicsServiceImpl extends ServiceImpl<CustomerGraphicsMapper, CustomerGraphics> implements CustomerGraphicsService { public class CustomerGraphicsServiceImpl extends ServiceImpl<CustomerGraphicsMapper, CustomerGraphics> implements CustomerGraphicsService {
private final static Logger LOCAL_LOG = LoggerFactory.getLogger(CustomerGraphicsServiceImpl.class);
@Override @Override
public BaseResult insertCustomerMessage(CustomerMessageSaveDTO saveDto) { public BaseResult insertCustomerMessage(CustomerMessageSaveDTO saveDto) {
LOCAL_LOG.info("根据人群包找到符合条件的用户数据");
// TODO: 2022/9/28 根据人群包找到下面的人所在的公众号,进行链接获取 // TODO: 2022/9/28 根据人群包找到下面的人所在的公众号,进行链接获取
......
package com.yaoyaozw.customer.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.yaoyaozw.customer.mapper.KanbanCommonMapper;
import com.yaoyaozw.customer.service.CustomerServiceCommonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author darker
* @date 2022/9/28 19:01
*/
@Service
public class CustomerServiceCommonServiceImpl implements CustomerServiceCommonService {
@Autowired
private KanbanCommonMapper kanbanCommonMapper;
@Override
public List<Long> getSetupIdListFromStaticCondition(List<String> expressList) {
if (CollectionUtil.isEmpty(expressList)) {
return new ArrayList<>();
}
return kanbanCommonMapper.getSetupIdListFromStaticCondition(expressList);
}
}
...@@ -14,4 +14,14 @@ ...@@ -14,4 +14,14 @@
</if> </if>
</select> </select>
<select id="getSetupIdListFromStaticCondition" resultType="java.lang.Long">
select distinct id
from account_cost_setup
<where>
<foreach collection="expressList" item="express" separator=" and ">
${express}
</foreach>
</where>
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论