From bbcab977bd5234c47e97e57a8aa07e1c45421016 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Mon, 11 Aug 2025 10:29:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=87=E6=A0=87=E5=BA=93=EF=BC=9A=E8=A1=8D?= =?UTF-8?q?=E7=94=9F=E6=8C=87=E6=A0=87=E5=88=9B=E5=BB=BA=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=EF=BC=8C=E8=BE=93=E5=87=BA=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ustb/sf/controller/TargetController.java | 8 +++ .../iet/ustb/sf/service/TargetService.java | 3 ++ .../sf/service/impl/TargetServiceImpl.java | 50 +++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/src/main/java/iet/ustb/sf/controller/TargetController.java b/src/main/java/iet/ustb/sf/controller/TargetController.java index 523c4cd..fe65a14 100644 --- a/src/main/java/iet/ustb/sf/controller/TargetController.java +++ b/src/main/java/iet/ustb/sf/controller/TargetController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.List; +import java.util.Map; /** * 目标管控-指标 @@ -150,4 +151,11 @@ public class TargetController { String result = targetService.getListResult(params); return R.ok(result); } + + @Operation(summary = "衍生输出查询") + @PostMapping("/getExpandResult") + public R>> getExpandResult(@RequestBody JSONObject params) { + List> result = targetService.getExpandResult(params); + return R.ok(result); + } } diff --git a/src/main/java/iet/ustb/sf/service/TargetService.java b/src/main/java/iet/ustb/sf/service/TargetService.java index eea2522..4a920e0 100644 --- a/src/main/java/iet/ustb/sf/service/TargetService.java +++ b/src/main/java/iet/ustb/sf/service/TargetService.java @@ -7,6 +7,7 @@ import iet.ustb.sf.domain.Target; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * @author hyy @@ -40,4 +41,6 @@ public interface TargetService extends IService { JSONObject getTogethDetail(JSONObject params); String getListResult(JSONObject params); + + List> getExpandResult(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 c874f14..edaa0f8 100644 --- a/src/main/java/iet/ustb/sf/service/impl/TargetServiceImpl.java +++ b/src/main/java/iet/ustb/sf/service/impl/TargetServiceImpl.java @@ -652,6 +652,56 @@ public class TargetServiceImpl extends ServiceImpl return String.valueOf(mbgkTargetData.getVal()); } + @Override + public List> getExpandResult(JSONObject params) { + String id = params.getString("id"); + CheckUtils.checkEmpty(id, "指标ID"); + TargetOption expandOption = params.getObject("option", TargetOption.class); + CheckUtils.checkSingleOption(expandOption); + + List childTargetList = targetMapper.selectList(new QueryWrapper().eq("parent", id)); + if (!childTargetList.isEmpty()) { + List ids = childTargetList.stream().map(Target::getId).collect(Collectors.toList()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("column_name", expandOption.getColumnName()); + queryWrapper.in("target_id", ids); + List optionList = targetOptionMapper.selectList(queryWrapper); + ThrowUtils.throwIf(!optionList.isEmpty(), ErrorCode.OPERATION_ERROR, "衍生条件已经在指标中了!"); + } + + Target target = targetMapper.selectById(id); + String[] strArr = utilService.getCurrentCycleDataByCycle(new Date(), target.getCycle()); + return SqlRunner.db().selectList(getExpandResultSql( + target.getResultSql(), expandOption), + strArr[3], + strArr[4] + ); + } + + /** + * 拼接衍生指标结果SQL + * + * @param sql 父指标结果SQL + * @param expandOption 衍生字段 + * @return SQL结果 + */ + private String getExpandResultSql(String sql, TargetOption expandOption) { + sql = sql.substring(0, 7) + expandOption.getColumnName() + ", " + + sql.substring(7, sql.indexOf("FROM") - 7) + + sql.substring(sql.indexOf("CAST") + 5, sql.indexOf(" AS ")) + + sql.substring(sql.indexOf("FROM") - 1); + if (sql.contains("GROUP BY")) { + sql = sql.substring(0, sql.indexOf("GROUP BY")) + + " AND " + getWhereSql(Collections.singletonList(expandOption)) + + " " + sql.substring(sql.indexOf("GROUP BY")) + + "," + expandOption.getColumnName(); + } else { + sql += " AND " + getWhereSql(Collections.singletonList(expandOption)) + + " GROUP BY " + expandOption.getColumnName(); + } + return sql; + } + /** * 指标变更后,修改对应的监控数据 *