技术要求:规则展示表格接口
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package com.solution.rule.domain.config;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ApiModel("规则聚合对象")
|
||||
public class RuleConfig {
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("规则编码")
|
||||
private String ruleCode;
|
||||
|
||||
@ApiModelProperty("规则名称")
|
||||
private String ruleName;
|
||||
|
||||
@ApiModelProperty("层级编码(task/action/platform)")
|
||||
private String levelCode;
|
||||
|
||||
@ApiModelProperty("种类编码(select/assign/deploy/config/mode/spacetime/relation/limit)")
|
||||
private String kindCode;
|
||||
|
||||
@ApiModelProperty("模块编码(equipment/target/position/track/group)")
|
||||
private String moduleCode;
|
||||
|
||||
@ApiModelProperty("优先级(数字越小越先执行)")
|
||||
private Integer priorityNo;
|
||||
|
||||
@ApiModelProperty("条件表达式")
|
||||
private String conditionExpr;
|
||||
|
||||
@ApiModelProperty("动作表达式")
|
||||
private String actionExpr;
|
||||
|
||||
@ApiModelProperty("版本号")
|
||||
private Integer versionNo;
|
||||
|
||||
@ApiModelProperty("是否启用(1是0否)")
|
||||
private Integer enabled;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
private Date createdAt;
|
||||
|
||||
@ApiModelProperty("更新时间")
|
||||
private Date updatedAt;
|
||||
|
||||
@ApiModelProperty("参数列表")
|
||||
private List<RuleConfigParam> params;
|
||||
|
||||
@ApiModelProperty("适用任务类型编码列表")
|
||||
private List<String> taskTypes;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.solution.rule.domain.config;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel("规则参数对象")
|
||||
public class RuleConfigParam {
|
||||
|
||||
@ApiModelProperty("规则编码")
|
||||
private String ruleCode;
|
||||
|
||||
@ApiModelProperty("参数键")
|
||||
private String paramKey;
|
||||
|
||||
@ApiModelProperty("参数值")
|
||||
private String paramVal;
|
||||
|
||||
@ApiModelProperty("值类型(string/number/bool/json)")
|
||||
private String valType;
|
||||
|
||||
@ApiModelProperty("参数名称")
|
||||
private String paramName;
|
||||
|
||||
@ApiModelProperty("排序号")
|
||||
private Integer sortNo;
|
||||
|
||||
@ApiModelProperty("是否启用(1是0否)")
|
||||
private Integer enabled;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.solution.rule.domain.config;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel("规则配置查询对象")
|
||||
public class RuleConfigQuery {
|
||||
|
||||
@ApiModelProperty("规则编码")
|
||||
private String ruleCode;
|
||||
|
||||
@ApiModelProperty("规则名称")
|
||||
private String ruleName;
|
||||
|
||||
@ApiModelProperty("层级编码(task/action/platform)")
|
||||
private String levelCode;
|
||||
|
||||
@ApiModelProperty("种类编码(select/assign/deploy/config/mode/spacetime/relation/limit)")
|
||||
private String kindCode;
|
||||
|
||||
@ApiModelProperty("模块编码(equipment/target/position/track/group)")
|
||||
private String moduleCode;
|
||||
|
||||
@ApiModelProperty("是否启用(1是0否)")
|
||||
private Integer enabled;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.solution.rule.domain.config;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel("规则字典项")
|
||||
public class RuleDictItem {
|
||||
|
||||
@ApiModelProperty("字典类型")
|
||||
private String dictType;
|
||||
|
||||
@ApiModelProperty("字典编码")
|
||||
private String dictCode;
|
||||
|
||||
@ApiModelProperty("字典名称")
|
||||
private String dictName;
|
||||
|
||||
@ApiModelProperty("排序号")
|
||||
private Integer sortNo;
|
||||
|
||||
@ApiModelProperty("是否启用(1是0否)")
|
||||
private Integer enabled;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.solution.rule.mapper;
|
||||
|
||||
import com.solution.rule.domain.config.RuleConfig;
|
||||
import com.solution.rule.domain.config.RuleConfigParam;
|
||||
import com.solution.rule.domain.config.RuleConfigQuery;
|
||||
import com.solution.rule.domain.config.RuleDictItem;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface RuleConfigMapper {
|
||||
|
||||
List<RuleConfig> selectRuleConfigList(RuleConfigQuery query);
|
||||
|
||||
RuleConfig selectRuleConfigByCode(@Param("ruleCode") String ruleCode);
|
||||
|
||||
int countByRuleCode(@Param("ruleCode") String ruleCode);
|
||||
|
||||
int insertRuleConfig(RuleConfig ruleConfig);
|
||||
|
||||
int updateRuleConfig(RuleConfig ruleConfig);
|
||||
|
||||
int deleteRuleConfigByCodes(@Param("ruleCodes") String[] ruleCodes);
|
||||
|
||||
List<RuleConfigParam> selectParamsByRuleCode(@Param("ruleCode") String ruleCode);
|
||||
|
||||
int deleteParamsByRuleCodes(@Param("ruleCodes") String[] ruleCodes);
|
||||
|
||||
int insertParamsBatch(@Param("params") List<RuleConfigParam> params);
|
||||
|
||||
List<String> selectTaskTypesByRuleCode(@Param("ruleCode") String ruleCode);
|
||||
|
||||
int deleteTaskTypesByRuleCodes(@Param("ruleCodes") String[] ruleCodes);
|
||||
|
||||
int insertTaskTypesBatch(@Param("ruleCode") String ruleCode, @Param("taskTypes") List<String> taskTypes);
|
||||
|
||||
List<RuleDictItem> selectDictByType(@Param("dictType") String dictType);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.solution.rule.service;
|
||||
|
||||
import com.solution.rule.domain.config.RuleConfig;
|
||||
import com.solution.rule.domain.config.RuleConfigQuery;
|
||||
import com.solution.rule.domain.config.RuleDictItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IRuleConfigService {
|
||||
|
||||
List<RuleConfig> selectRuleConfigList(RuleConfigQuery query);
|
||||
|
||||
RuleConfig selectRuleConfigByCode(String ruleCode);
|
||||
|
||||
int insertRuleConfig(RuleConfig ruleConfig);
|
||||
|
||||
int updateRuleConfig(RuleConfig ruleConfig);
|
||||
|
||||
int deleteRuleConfigByCodes(String[] ruleCodes);
|
||||
|
||||
List<RuleDictItem> selectDictByType(String dictType);
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package com.solution.rule.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.solution.common.constant.ExceptionConstants;
|
||||
import com.solution.rule.domain.config.RuleConfig;
|
||||
import com.solution.rule.domain.config.RuleConfigParam;
|
||||
import com.solution.rule.domain.config.RuleConfigQuery;
|
||||
import com.solution.rule.domain.config.RuleDictItem;
|
||||
import com.solution.rule.mapper.RuleConfigMapper;
|
||||
import com.solution.rule.service.IRuleConfigService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
public class RuleConfigServiceImpl implements IRuleConfigService {
|
||||
|
||||
@Autowired
|
||||
private RuleConfigMapper ruleConfigMapper;
|
||||
|
||||
@Override
|
||||
public List<RuleConfig> selectRuleConfigList(RuleConfigQuery query) {
|
||||
return ruleConfigMapper.selectRuleConfigList(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RuleConfig selectRuleConfigByCode(String ruleCode) {
|
||||
RuleConfig config = ruleConfigMapper.selectRuleConfigByCode(ruleCode);
|
||||
if (config == null) {
|
||||
return null;
|
||||
}
|
||||
config.setParams(ruleConfigMapper.selectParamsByRuleCode(ruleCode));
|
||||
config.setTaskTypes(ruleConfigMapper.selectTaskTypesByRuleCode(ruleCode));
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int insertRuleConfig(RuleConfig ruleConfig) {
|
||||
validateBase(ruleConfig);
|
||||
if (ruleConfigMapper.countByRuleCode(ruleConfig.getRuleCode()) > 0) {
|
||||
throw new RuntimeException("规则编码已存在");
|
||||
}
|
||||
int rows = ruleConfigMapper.insertRuleConfig(fillDefault(ruleConfig));
|
||||
saveChildren(ruleConfig);
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int updateRuleConfig(RuleConfig ruleConfig) {
|
||||
validateBase(ruleConfig);
|
||||
if (ruleConfigMapper.countByRuleCode(ruleConfig.getRuleCode()) <= 0) {
|
||||
throw new RuntimeException("规则编码不存在");
|
||||
}
|
||||
int rows = ruleConfigMapper.updateRuleConfig(fillDefault(ruleConfig));
|
||||
String[] ruleCodes = {ruleConfig.getRuleCode()};
|
||||
ruleConfigMapper.deleteParamsByRuleCodes(ruleCodes);
|
||||
ruleConfigMapper.deleteTaskTypesByRuleCodes(ruleCodes);
|
||||
saveChildren(ruleConfig);
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int deleteRuleConfigByCodes(String[] ruleCodes) {
|
||||
if (ruleCodes == null || ruleCodes.length == 0) {
|
||||
return 0;
|
||||
}
|
||||
ruleConfigMapper.deleteParamsByRuleCodes(ruleCodes);
|
||||
ruleConfigMapper.deleteTaskTypesByRuleCodes(ruleCodes);
|
||||
return ruleConfigMapper.deleteRuleConfigByCodes(ruleCodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RuleDictItem> selectDictByType(String dictType) {
|
||||
if (ObjectUtil.isEmpty(dictType)) {
|
||||
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
|
||||
}
|
||||
return ruleConfigMapper.selectDictByType(dictType);
|
||||
}
|
||||
|
||||
private void saveChildren(RuleConfig ruleConfig) {
|
||||
if (CollUtil.isNotEmpty(ruleConfig.getParams())) {
|
||||
Set<String> keys = new HashSet<>();
|
||||
for (RuleConfigParam param : ruleConfig.getParams()) {
|
||||
if (param == null || ObjectUtil.isEmpty(param.getParamKey())) {
|
||||
throw new RuntimeException("参数键不能为空");
|
||||
}
|
||||
if (!keys.add(param.getParamKey())) {
|
||||
throw new RuntimeException("参数键重复: " + param.getParamKey());
|
||||
}
|
||||
param.setRuleCode(ruleConfig.getRuleCode());
|
||||
if (param.getSortNo() == null) {
|
||||
param.setSortNo(0);
|
||||
}
|
||||
if (param.getEnabled() == null) {
|
||||
param.setEnabled(1);
|
||||
}
|
||||
if (ObjectUtil.isEmpty(param.getValType())) {
|
||||
param.setValType("string");
|
||||
}
|
||||
}
|
||||
ruleConfigMapper.insertParamsBatch(ruleConfig.getParams());
|
||||
}
|
||||
if (CollUtil.isNotEmpty(ruleConfig.getTaskTypes())) {
|
||||
ruleConfigMapper.insertTaskTypesBatch(ruleConfig.getRuleCode(), ruleConfig.getTaskTypes());
|
||||
}
|
||||
}
|
||||
|
||||
private RuleConfig fillDefault(RuleConfig ruleConfig) {
|
||||
if (ruleConfig.getPriorityNo() == null) {
|
||||
ruleConfig.setPriorityNo(100);
|
||||
}
|
||||
if (ruleConfig.getVersionNo() == null) {
|
||||
ruleConfig.setVersionNo(1);
|
||||
}
|
||||
if (ruleConfig.getEnabled() == null) {
|
||||
ruleConfig.setEnabled(1);
|
||||
}
|
||||
return ruleConfig;
|
||||
}
|
||||
|
||||
private void validateBase(RuleConfig ruleConfig) {
|
||||
if (ruleConfig == null
|
||||
|| ObjectUtil.isEmpty(ruleConfig.getRuleCode())
|
||||
|| ObjectUtil.isEmpty(ruleConfig.getRuleName())
|
||||
|| ObjectUtil.isEmpty(ruleConfig.getLevelCode())
|
||||
|| ObjectUtil.isEmpty(ruleConfig.getKindCode())
|
||||
|| ObjectUtil.isEmpty(ruleConfig.getModuleCode())) {
|
||||
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user