指标库:保存衍生指标
This commit is contained in:
parent
112c70fa4e
commit
948e66a369
@ -100,4 +100,11 @@ public class TargetController {
|
|||||||
result.put("columnList", tableColumnService.getColumnsByTableName(result.getString("tableName")));
|
result.put("columnList", tableColumnService.getColumnsByTableName(result.getString("tableName")));
|
||||||
return R.ok(result);
|
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);
|
void deleteTargetById(JSONObject params);
|
||||||
|
|
||||||
JSONObject getDetailExpandTarget(JSONObject params);
|
JSONObject getDetailExpandTarget(JSONObject params);
|
||||||
|
|
||||||
|
void saveExpandTarget(JSONObject params);
|
||||||
}
|
}
|
||||||
|
@ -170,11 +170,17 @@ public class TargetServiceImpl extends ServiceImpl<TargetMapper, Target>
|
|||||||
categoryDeal(null, target);
|
categoryDeal(null, target);
|
||||||
}
|
}
|
||||||
targetMapper.insert(target);
|
targetMapper.insert(target);
|
||||||
saveData(target);
|
|
||||||
} else {
|
} else {
|
||||||
categoryDealByUpdate(target);
|
categoryDealByUpdate(target);
|
||||||
saveChildSql(target);
|
saveChildSql(target);
|
||||||
Target oldTarget = targetMapper.selectById(target.getId());
|
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())) {
|
if (!cycle.equals(oldTarget.getCycle())) {
|
||||||
ThrowUtils.throwIf(
|
ThrowUtils.throwIf(
|
||||||
hasTogeth(target.getId()),
|
hasTogeth(target.getId()),
|
||||||
@ -210,6 +216,7 @@ public class TargetServiceImpl extends ServiceImpl<TargetMapper, Target>
|
|||||||
}
|
}
|
||||||
targetMapper.insertOrUpdate(target);
|
targetMapper.insertOrUpdate(target);
|
||||||
}
|
}
|
||||||
|
saveData(target);
|
||||||
|
|
||||||
showList = optionsMap.values().stream().flatMap(List::stream).collect(Collectors.toList());
|
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);
|
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) {
|
private void checkTarget(Target target) {
|
||||||
CheckUtils.checkEmpty(target.getName(), "指标名称");
|
CheckUtils.checkEmpty(target.getName(), "指标名称");
|
||||||
QueryWrapper<Target> query = new QueryWrapper<>();
|
CheckUtils.checkTargetNameExist(targetMapper, target);
|
||||||
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.checkEmpty(String.valueOf(target.getType()), "类型");
|
CheckUtils.checkEmpty(String.valueOf(target.getType()), "类型");
|
||||||
CheckUtils.checkEmpty(String.valueOf(target.getIsKey()), "是否启用");
|
CheckUtils.checkEmpty(String.valueOf(target.getIsKey()), "是否启用");
|
||||||
CheckUtils.checkEmpty(target.getOrganization(), "组织");
|
CheckUtils.checkEmpty(target.getOrganization(), "组织");
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
package iet.ustb.sf.util;
|
package iet.ustb.sf.util;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
|
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
|
||||||
|
import iet.ustb.sf.domain.Target;
|
||||||
import iet.ustb.sf.domain.TargetOption;
|
import iet.ustb.sf.domain.TargetOption;
|
||||||
import iet.ustb.sf.exception.ErrorCode;
|
import iet.ustb.sf.exception.ErrorCode;
|
||||||
import iet.ustb.sf.exception.MyException;
|
import iet.ustb.sf.exception.MyException;
|
||||||
import iet.ustb.sf.exception.ThrowUtils;
|
import iet.ustb.sf.exception.ThrowUtils;
|
||||||
|
import iet.ustb.sf.mapper.TargetMapper;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ -166,4 +169,17 @@ public class CheckUtils {
|
|||||||
bd = bd.setScale(round, RoundingMode.HALF_UP);
|
bd = bd.setScale(round, RoundingMode.HALF_UP);
|
||||||
return bd.doubleValue();
|
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