指标库:保存衍生指标
This commit is contained in:
parent
112c70fa4e
commit
948e66a369
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -30,4 +30,6 @@ public interface TargetService extends IService<Target> {
|
||||
void deleteTargetById(JSONObject params);
|
||||
|
||||
JSONObject getDetailExpandTarget(JSONObject params);
|
||||
|
||||
void saveExpandTarget(JSONObject params);
|
||||
}
|
||||
|
@ -170,11 +170,17 @@ public class TargetServiceImpl extends ServiceImpl<TargetMapper, Target>
|
||||
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<Monitor> monitorList = monitorMapper.selectList(new QueryWrapper<Monitor>().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, Target>
|
||||
}
|
||||
targetMapper.insertOrUpdate(target);
|
||||
}
|
||||
saveData(target);
|
||||
|
||||
showList = optionsMap.values().stream().flatMap(List::stream).collect(Collectors.toList());
|
||||
|
||||
@ -454,6 +461,86 @@ public class TargetServiceImpl extends ServiceImpl<TargetMapper, Target>
|
||||
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<Target> childList = targetMapper.selectList(new QueryWrapper<Target>().eq("parent", target.getParent()));
|
||||
if (!childList.isEmpty()) {
|
||||
List<String> ids = childList.stream().map(Target::getId).collect(Collectors.toList());
|
||||
QueryWrapper<TargetOption> 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<Target> targetList = new ArrayList<>();
|
||||
List<TargetOption> 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<TargetMapper, Target>
|
||||
*/
|
||||
private void checkTarget(Target target) {
|
||||
CheckUtils.checkEmpty(target.getName(), "指标名称");
|
||||
QueryWrapper<Target> 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(), "组织");
|
||||
|
@ -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<Target> 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, "指标名称不能重复!");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user