提交 5db358f7 作者: 沈振路

人群包配置、接口

上级 fb9b7219
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<Languages>
<language minSize="80" name="Java" />
</Languages>
</inspection_tool>
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS">
<value>
......
......@@ -27,7 +27,7 @@ public class CrowdPackageConditionDTO implements Serializable {
@ApiModelProperty("设置的条件值")
private String conditionValue;
@ApiModelProperty("设置的条件值")
@ApiModelProperty("多选选项")
private List<String> multipleOptions;
}
package com.yaoyaozw.customer.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yaoyaozw.customer.entity.CrowdPackageConditionMatch;
import org.springframework.stereotype.Repository;
......@@ -8,6 +9,7 @@ import org.springframework.stereotype.Repository;
* @author darker
* @date 2022/9/21 15:08
*/
@DS("material")
@Repository
public interface CrowdPackageConditionMatchMapper extends BaseMapper<CrowdPackageConditionMatch> {
public interface MaterialCrowdConditionMatchMapper extends BaseMapper<CrowdPackageConditionMatch> {
}
......@@ -2,7 +2,7 @@ package com.yaoyaozw.customer.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yaoyaozw.customer.entity.CrowdPackageConditionMatch;
import com.yaoyaozw.customer.mapper.CrowdPackageConditionMatchMapper;
import com.yaoyaozw.customer.mapper.MaterialCrowdConditionMatchMapper;
import com.yaoyaozw.customer.service.CrowdPackageConditionMatchService;
import org.springframework.stereotype.Service;
......@@ -11,5 +11,5 @@ import org.springframework.stereotype.Service;
* @date 2022/9/21 15:09
*/
@Service
public class CrowdPackageConditionMatchServiceImpl extends ServiceImpl<CrowdPackageConditionMatchMapper, CrowdPackageConditionMatch> implements CrowdPackageConditionMatchService {
public class CrowdPackageConditionMatchServiceImpl extends ServiceImpl<MaterialCrowdConditionMatchMapper, CrowdPackageConditionMatch> implements CrowdPackageConditionMatchService {
}
......@@ -3,6 +3,9 @@ package com.yaoyaozw.customer.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yaoyaozw.customer.common.BaseResult;
import com.yaoyaozw.customer.common.GenericsResult;
......@@ -49,8 +52,6 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
@Autowired
private TokenManager tokenManager;
@Autowired
private SnowflakeComponent snowflakeComponent;
@Autowired
private CrowdPackageConditionMatchService matchService;
......@@ -60,11 +61,11 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
boolean isCreate = ObjectUtil.isNull(id);
// 获取操作人
Long userId = tokenManager.getUserIdFromToken();
id = ObjectUtil.isNull(id) ? snowflakeComponent.snowflakeId() : id;
CrowdPackage crowdPackage = new CrowdPackage(id, name);
crowdPackage.handleInfo(new Date(), userId, isCreate);
// 执行保存
return super.saveOrUpdate(crowdPackage) ? new GenericsResult<>(new CrowdPackageCommonIdVO(id, null)) : new GenericsResult<>(false, "新增人群包失败!");
boolean result = super.saveOrUpdate(crowdPackage);
return result ? new GenericsResult<>(new CrowdPackageCommonIdVO(crowdPackage.getId(), null)) : new GenericsResult<>(false, "新增人群包失败!");
}
@Override
......@@ -85,7 +86,7 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
}
// 构造关联表的相关数据
CrowdPackageConditionMatch match = new CrowdPackageConditionMatch();
match.setPackageId(packageId);
match.setPackageId(crowdPackageCommonIdVo.getPackageId());
match.setConditionId(conditionDto.getConditionId());
// 构造条件数据
try {
......@@ -96,20 +97,28 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
}
crowdPackageCommonIdVo.setConditionDescription(match.getOperatorDescription());
// 保存关联关系
long matchId = snowflakeComponent.snowflakeId();
match.setId(matchId);
boolean matchSaveResult = matchService.save(match);
if (!matchSaveResult) {
return new GenericsResult<>(false, "向人群包保存条件失败!");
}
// 构造返回数据
crowdPackageCommonIdVo.setLinkedId(matchId);
crowdPackageCommonIdVo.setLinkedId(match.getId());
return new GenericsResult<>(crowdPackageCommonIdVo);
}
@Override
public GenericsResult<CrowdPackageDetailVO> getPackageInfo(Long id) {
return null;
CrowdPackage byId = super.getById(id);
if (ObjectUtil.isNull(byId)) {
return new GenericsResult<>(false, "无法获取主体数据");
}
CrowdPackageDetailVO vo = new CrowdPackageDetailVO(id, byId.getPackageName());
// 获取条件数据
List<CrowdPackageConditionMatch> conditionMatchList = matchService.list(new QueryWrapper<CrowdPackageConditionMatch>().eq("package_id", id));
JSONArray jsonArray = JSONUtil.parseArray(conditionMatchList);
List<CrowdPackageConditionMatchVO> parseConditionList = jsonArray.toList(CrowdPackageConditionMatchVO.class);
vo.setConditionList(parseConditionList);
return new GenericsResult<>(vo);
}
@Override
......@@ -211,14 +220,20 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
*/
private void handleCompareType(CrowdPackageConditionMatch match, CrowdPackageConditionDTO conditionDto, CrowdPackageCondition conditionInfo){
LOCAL_LOG.info("是需要比较的类型");
CrowdPackageConditionEnum operatorInfo = CrowdPackageConditionEnum.getInfoByOperator(conditionDto.getCompareOperator());
String compareOperator = conditionDto.getCompareOperator();
String conditionValue = conditionDto.getConditionValue();
LOCAL_LOG.info("比较符: {}; 条件值: {}", compareOperator, conditionValue);
match.setConditionOperator(compareOperator);
match.setOperatorValue(conditionValue);
CrowdPackageConditionEnum operatorInfo = CrowdPackageConditionEnum.getInfoByOperator(compareOperator);
if (ObjectUtil.isNull(operatorInfo)) {
throw new RuntimeException("无法获取比较类型");
}
String expression = conditionInfo.getConditionKey() + operatorInfo.getMeaning() + conditionDto.getConditionValue();
String expression = conditionInfo.getConditionKey() + " " + operatorInfo.getMeaning() + " " + conditionValue;
LOCAL_LOG.info("表达式拼接结果: {}", expression);
String description = conditionInfo.getConditionName() + operatorInfo.getDescription() + conditionDto.getConditionValue();
String description = conditionInfo.getConditionName() + operatorInfo.getDescription() + conditionValue;
LOCAL_LOG.info("条件描述: {}", description);
match.setOperatorExpression(expression);
......@@ -234,14 +249,10 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
private void handleRangeIn(CrowdPackageConditionMatch match, CrowdPackageConditionDTO conditionDto, CrowdPackageCondition conditionInfo) {
// 范围条件
LOCAL_LOG.info("是范围条件");
CrowdPackageConditionEnum operatorInfo = CrowdPackageConditionEnum.getInfoByOperator(conditionDto.getCompareOperator());
if (ObjectUtil.isNull(operatorInfo)) {
throw new RuntimeException("无法获取比较类型");
}
List<String> multipleOptions = conditionDto.getMultipleOptions();
StringBuilder expressionBuilder = new StringBuilder("in (");
StringBuilder expressionBuilder = new StringBuilder(conditionInfo.getConditionKey() + " in ( 'placeHolder'");
for (String multipleOption : multipleOptions) {
expressionBuilder.append("'").append(multipleOption).append("'");
expressionBuilder.append(", ").append("'").append(multipleOption).append("'");
}
expressionBuilder.append(")");
// 表达式
......@@ -253,9 +264,12 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
if (ObjectUtil.isNull(responseVo) || CollectionUtil.isEmpty(responseVo.getOptionList())) {
throw new RuntimeException("找不到条件的选项");
}
StringBuilder descriptionBuilder = new StringBuilder(conditionInfo.getConditionName() + " 范围: ");
StringBuilder descriptionBuilder = new StringBuilder(conditionInfo.getConditionName() + "范围: ");
for (CommonOptionResponseVO commonOptionResponseVo : responseVo.getOptionList()) {
descriptionBuilder.append(commonOptionResponseVo.getName()).append("/");
// 如果选中了这个选项,则拼接其name
if (multipleOptions.contains(commonOptionResponseVo.getKey())) {
descriptionBuilder.append(commonOptionResponseVo.getName()).append("/");
}
}
String description = descriptionBuilder.toString();
LOCAL_LOG.info("条件描述: {}", description);
......@@ -272,6 +286,36 @@ public class CrowdPackageServiceImpl extends ServiceImpl<MaterialCrowdPackageMap
*/
private void handleGroupOr(CrowdPackageConditionMatch match, CrowdPackageConditionDTO conditionDto, CrowdPackageCondition conditionInfo) {
// 分组求并条件
LOCAL_LOG.info("是分组求并条件");
List<String> multipleOptions = conditionDto.getMultipleOptions();
// 获取该条件的所有的条件
ConditionOptionResponseVO responseVo = this.getOptions(conditionInfo.getId()).getData();
if (ObjectUtil.isNull(responseVo) || CollectionUtil.isEmpty(responseVo.getOptionList())) {
throw new RuntimeException("找不到条件的选项");
}
// 构造条件描述
StringBuilder descriptionBuilder = new StringBuilder(conditionInfo.getConditionName() + "取档: ");
for (CommonOptionResponseVO commonOptionResponseVo : responseVo.getOptionList()) {
// 如果选中了这个选项,则拼接其name
if (multipleOptions.contains(commonOptionResponseVo.getKey())) {
descriptionBuilder.append(commonOptionResponseVo.getName()).append("/");
}
}
String description = descriptionBuilder.toString();
LOCAL_LOG.info("条件描述: {}", description);
StringBuilder expressionBuilder = new StringBuilder("((1 = 1)");
LOCAL_LOG.info("拼接表达式");
for (String option : multipleOptions) {
expressionBuilder.append(" or ").append("(").append(option).append(")");
}
expressionBuilder.append(")");
String expression = expressionBuilder.toString();
LOCAL_LOG.info("表达式拼接结果: {}", expression);
match.setOperatorDescription(description);
match.setOperatorExpression(expression);
}
......
package com.yaoyaozw.customer.vo.crowd;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author darker
* @date 2022/9/22 18:09
*/
@Data
@ApiModel("人群包条件匹配实体")
public class CrowdPackageConditionMatchVO implements Serializable {
/**
* 主键
*/
@ApiModelProperty("匹配主键")
private Long id;
/**
* 人群包ID
*/
@ApiModelProperty("人群包ID")
private Long packageId;
/**
* 条件表主键ID
*/
@ApiModelProperty("条件表主键ID")
private Long conditionId;
/**
* 条件描述
*/
@ApiModelProperty("条件描述")
private String operatorDescription;
}
......@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
......@@ -15,6 +16,7 @@ import java.util.List;
*/
@Data
@ApiModel("人群包详情页回显实体")
@NoArgsConstructor
public class CrowdPackageDetailVO implements Serializable {
@ApiModelProperty("人群包主键")
......@@ -25,6 +27,10 @@ public class CrowdPackageDetailVO implements Serializable {
private String packageName;
@ApiModelProperty("已配置的人群包条件")
private List<CrowdPackageConditionVO> conditionList;
private List<CrowdPackageConditionMatchVO> conditionList;
public CrowdPackageDetailVO(Long packageId, String packageName) {
this.packageId = packageId;
this.packageName = packageName;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论