diff --git a/src/main/java/iet/ustb/sf/controller/TargetController.java b/src/main/java/iet/ustb/sf/controller/TargetController.java index c1c2413..6be3ffc 100644 --- a/src/main/java/iet/ustb/sf/controller/TargetController.java +++ b/src/main/java/iet/ustb/sf/controller/TargetController.java @@ -100,4 +100,11 @@ public class TargetController { result.put("columnList", tableColumnService.getColumnsByTableName(result.getString("tableName"))); return R.ok(result); } + + @Operation(summary = "保存衍生指标") + @PostMapping("/saveExpandTarget") + public R saveExpandTarget(@RequestBody JSONObject params) { + targetService.saveExpandTarget(params); + return R.ok(); + } } diff --git a/src/main/java/iet/ustb/sf/service/TargetService.java b/src/main/java/iet/ustb/sf/service/TargetService.java index d766d5a..ae82459 100644 --- a/src/main/java/iet/ustb/sf/service/TargetService.java +++ b/src/main/java/iet/ustb/sf/service/TargetService.java @@ -30,4 +30,6 @@ public interface TargetService extends IService { void deleteTargetById(JSONObject params); JSONObject getDetailExpandTarget(JSONObject params); + + void saveExpandTarget(JSONObject params); } diff --git a/src/main/java/iet/ustb/sf/service/impl/TargetServiceImpl.java b/src/main/java/iet/ustb/sf/service/impl/TargetServiceImpl.java index ed8a1a4..ca85098 100644 --- a/src/main/java/iet/ustb/sf/service/impl/TargetServiceImpl.java +++ b/src/main/java/iet/ustb/sf/service/impl/TargetServiceImpl.java @@ -170,11 +170,17 @@ public class TargetServiceImpl extends ServiceImpl categoryDeal(null, target); } targetMapper.insert(target); - saveData(target); } else { categoryDealByUpdate(target); saveChildSql(target); Target oldTarget = targetMapper.selectById(target.getId()); + if (!oldTarget.getName().equals(target.getName())) { + List monitorList = monitorMapper.selectList(new QueryWrapper().eq("target_id", target.getId())); + for (Monitor monitor : monitorList) { + monitor.setName(target.getName()); + } + monitorMapper.updateById(monitorList); + } if (!cycle.equals(oldTarget.getCycle())) { ThrowUtils.throwIf( hasTogeth(target.getId()), @@ -210,6 +216,7 @@ public class TargetServiceImpl extends ServiceImpl } targetMapper.insertOrUpdate(target); } + saveData(target); showList = optionsMap.values().stream().flatMap(List::stream).collect(Collectors.toList()); @@ -454,6 +461,86 @@ public class TargetServiceImpl extends ServiceImpl return getDetailTarget(optionList, target); } + @Override + @Transactional(rollbackFor = Exception.class) + public void saveExpandTarget(JSONObject params) { + Target target = params.getObject("target", Target.class); + CheckUtils.checkEmpty(target.getParent(), "父指标ID"); + CheckUtils.checkEmpty(target.getName(), "指标名称"); + CheckUtils.checkTargetNameExist(targetMapper, target); + CheckUtils.checkEmpty(target.getOrganization(), "组织"); + + TargetOption expandOption = params.getObject("option", TargetOption.class); + CheckUtils.checkSingleOption(expandOption); + List childList = targetMapper.selectList(new QueryWrapper().eq("parent", target.getParent())); + if (!childList.isEmpty()) { + List ids = childList.stream().map(Target::getId).collect(Collectors.toList()); + QueryWrapper query = new QueryWrapper<>(); + query.eq("column_name", expandOption.getColumnName()); + query.in("target_id", ids); + long cnt = targetOptionMapper.selectCount(query); + ThrowUtils.throwIf(cnt >= 0, ErrorCode.OPERATION_ERROR, "该原子指标已经衍生过该字段!"); + } + ThrowUtils.throwIf( + expandOption.getType() != 2 && expandOption.getType() != 3, + ErrorCode.OPERATION_ERROR, + "衍生指标筛选只能是文本或数值!" + ); + + Target parentTarget = targetMapper.selectById(target.getParent()); + String searchSql = parentTarget.getSearchSql(); + if (!searchSql.contains(expandOption.getColumnName())) { + searchSql = searchSql.substring(0, searchSql.indexOf("FROM") - 1) + "," + expandOption.getColumnName() + + " " + searchSql.substring(searchSql.indexOf("FROM")); + } + + Date now = new Date(); + + String[] vals = expandOption.getVal().split(","); + List targetList = new ArrayList<>(); + List optionList = new ArrayList<>(); + for (String val : vals) { + expandOption.setVal(val); + Target targetTmp = Target.builder() + .id(UUID.randomUUID().toString()) + .name(target.getName() + "-" + val) + .categoryId(parentTarget.getCategoryId()) + .unit(target.getUnit()) + .type(1) + .isKey(target.getIsKey()) + .targetInfo(target.getTargetInfo()) + .resultSql(getExpandSql(expandOption, parentTarget.getResultSql())) + .level(parentTarget.getLevel() + 1) + .parent(parentTarget.getId()) + .tableName(parentTarget.getTableName()) + .cycle(parentTarget.getCycle()) + .searchSql(getExpandSql(expandOption, searchSql)) + .createTime(now) + .updateTime(now) + .organization(target.getOrganization()) + .topic(parentTarget.getTopic()) + .build(); + targetList.add(targetTmp); + TargetOption optionTmp = TargetOption.builder() + .id(UUID.randomUUID().toString()) + .targetId(targetTmp.getId()) + .columnName(expandOption.getColumnName()) + .type(expandOption.getType()) + .op("0,1,2") + .val(val) + .createTime(now) + .updateTime(now) + .build(); + optionList.add(optionTmp); + } + categoryDeal(null, target); + targetMapper.insert(targetList); + targetOptionMapper.insert(optionList); + for (Target mbgkTarget : targetList) { + saveData(mbgkTarget); + } + } + /** * 查看指标详情 * @@ -605,11 +692,7 @@ public class TargetServiceImpl extends ServiceImpl */ private void checkTarget(Target target) { CheckUtils.checkEmpty(target.getName(), "指标名称"); - QueryWrapper query = new QueryWrapper<>(); - query.eq("name", target.getName()); - Target nameCheck = targetMapper.selectOne(query); - boolean bl = nameCheck != null && (target.getId() == null || !nameCheck.getId().equals(target.getId())); - ThrowUtils.throwIf(bl, ErrorCode.PARAMS_ERROR, "指标名称不能重复!"); + CheckUtils.checkTargetNameExist(targetMapper, target); CheckUtils.checkEmpty(String.valueOf(target.getType()), "类型"); CheckUtils.checkEmpty(String.valueOf(target.getIsKey()), "是否启用"); CheckUtils.checkEmpty(target.getOrganization(), "组织"); diff --git a/src/main/java/iet/ustb/sf/util/CheckUtils.java b/src/main/java/iet/ustb/sf/util/CheckUtils.java index 52c3c19..e5d68f6 100644 --- a/src/main/java/iet/ustb/sf/util/CheckUtils.java +++ b/src/main/java/iet/ustb/sf/util/CheckUtils.java @@ -1,10 +1,13 @@ package iet.ustb.sf.util; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import iet.ustb.sf.domain.Target; import iet.ustb.sf.domain.TargetOption; import iet.ustb.sf.exception.ErrorCode; import iet.ustb.sf.exception.MyException; import iet.ustb.sf.exception.ThrowUtils; +import iet.ustb.sf.mapper.TargetMapper; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -166,4 +169,17 @@ public class CheckUtils { bd = bd.setScale(round, RoundingMode.HALF_UP); return bd.doubleValue(); } + + /** + * 验证指标名称是否重复 + * @param targetMapper mapper类 + * @param target 指标 + */ + public static void checkTargetNameExist(TargetMapper targetMapper, Target target) { + QueryWrapper query = new QueryWrapper<>(); + query.eq("name", target.getName()); + Target nameCheck = targetMapper.selectOne(query); + boolean bl = nameCheck != null && (target.getId() == null || !nameCheck.getId().equals(target.getId())); + ThrowUtils.throwIf(bl, ErrorCode.PARAMS_ERROR, "指标名称不能重复!"); + } }