From a1289dbbeebea2e3eec581b7c3f0cfe055127343 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Wed, 13 Aug 2025 11:37:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=87=E6=A0=87=E5=88=86=E6=9E=90=EF=BC=9A?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=88=86=E6=9E=90=E5=9B=BE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sf/controller/AnalysisController.java | 7 ++ .../iet/ustb/sf/service/AnalysisService.java | 2 + .../sf/service/impl/AnalysisServiceImpl.java | 86 +++++++++++++++++++ 3 files changed, 95 insertions(+) diff --git a/src/main/java/iet/ustb/sf/controller/AnalysisController.java b/src/main/java/iet/ustb/sf/controller/AnalysisController.java index c457cd1..4514413 100644 --- a/src/main/java/iet/ustb/sf/controller/AnalysisController.java +++ b/src/main/java/iet/ustb/sf/controller/AnalysisController.java @@ -57,4 +57,11 @@ public class AnalysisController { return R.ok(showVals); } + @Operation(summary = "保存分析图表") + @PostMapping("/saveAnalysis") + public R saveAnalysis(@RequestBody JSONObject params) { + analysisService.saveAnalysis(params); + return R.ok(); + } + } diff --git a/src/main/java/iet/ustb/sf/service/AnalysisService.java b/src/main/java/iet/ustb/sf/service/AnalysisService.java index c99296f..56451a1 100644 --- a/src/main/java/iet/ustb/sf/service/AnalysisService.java +++ b/src/main/java/iet/ustb/sf/service/AnalysisService.java @@ -22,4 +22,6 @@ public interface AnalysisService extends IService { List getColumns(JSONObject params); List getShowVals(JSONObject params); + + void saveAnalysis(JSONObject params); } diff --git a/src/main/java/iet/ustb/sf/service/impl/AnalysisServiceImpl.java b/src/main/java/iet/ustb/sf/service/impl/AnalysisServiceImpl.java index b245488..f6dbb8c 100644 --- a/src/main/java/iet/ustb/sf/service/impl/AnalysisServiceImpl.java +++ b/src/main/java/iet/ustb/sf/service/impl/AnalysisServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import iet.ustb.sf.domain.Analysis; import iet.ustb.sf.domain.Target; import iet.ustb.sf.exception.ErrorCode; +import iet.ustb.sf.exception.MyException; import iet.ustb.sf.exception.ThrowUtils; import iet.ustb.sf.mapper.TableColumnMapper; import iet.ustb.sf.mapper.TargetMapper; @@ -151,6 +152,91 @@ public class AnalysisServiceImpl extends ServiceImpl .collect(Collectors.toList()); } + @Override + public void saveAnalysis(JSONObject params) { + Analysis analysis = JSONObject.toJavaObject(params, Analysis.class); + CheckUtils.checkEmpty(analysis.getName(), "图表名称"); + CheckUtils.checkEmpty(analysis.getTargetId(), "指标ID"); + Target target = targetMapper.selectById(analysis.getTargetId()); + checkSearchAnalysis(analysis); + if (target.getType() == 2) { + ThrowUtils.throwIf( + analysis.getType() != 1 || analysis.getIsTime() != 0, + ErrorCode.OPERATION_ERROR, + "聚合指标只能添加时间折线图!" + ); + } else { + String sql = getSql(analysis, target.getType(), target.getResultSql()).get("sql"); + + try { + SqlRunner.db().selectList(sql, "2025-06-12", "2025-06-13"); + } catch (Exception e) { + throw new MyException(ErrorCode.PARAMS_ERROR, "拼接SQL异常!"); + } + analysis.setSql(sql); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("target_id", analysis.getTargetId()); + queryWrapper.eq("name", analysis.getName()); + Analysis nameAnalysis = analysisMapper.selectOne(queryWrapper); + ThrowUtils.throwIf( + nameAnalysis != null && !nameAnalysis.getId().equals(analysis.getId()), + ErrorCode.OPERATION_ERROR, + "同一指标图表分析名称不能重复!" + ); + Date now = new Date(); + if (analysis.getCreateTime() == null) { + analysis.setCreateTime(now); + } + analysis.setUpdateTime(now); + analysisMapper.insertOrUpdate(analysis); + } + + /** + * 检查查询图表的参数是否异常 + * + * @param analysis 图表分析信息 + */ + private void checkSearchAnalysis(Analysis analysis) { + CheckUtils.checkEmpty(String.valueOf(analysis.getType()), "图表类型"); + ThrowUtils.throwIf( + !Arrays.asList(1, 2, 3).contains(analysis.getType()), + ErrorCode.PARAMS_ERROR, + "图表类型不存在!" + ); + CheckUtils.checkEmpty(String.valueOf(analysis.getIsTime()), "展示维度"); + ThrowUtils.throwIf( + !Arrays.asList(0, 1).contains(analysis.getIsTime()), + ErrorCode.PARAMS_ERROR, + "展示维度不存在!" + ); + String showVal; + if (analysis.getIsTime() == 0) { + showVal = "时间范围"; + ThrowUtils.throwIf(analysis.getType() != 1, ErrorCode.PARAMS_ERROR, "只有折线图才能是时间维度!"); + } else { + CheckUtils.checkEmpty(String.valueOf(analysis.getColumnEn()), "维度选择-英文"); + CheckUtils.checkEmpty(String.valueOf(analysis.getColumnCn()), "维度选择-中文"); + if (analysis.getType() == 2) { + showVal = "展示数量"; + } else { + showVal = "展示值"; + } + } + CheckUtils.checkEmpty(analysis.getShowVal(), showVal); + if (analysis.getType() != 3) { + int num; + try { + num = Integer.parseInt(analysis.getShowVal()); + if (analysis.getIsTime() == 1 && num <= 0) { + throw new MyException(ErrorCode.PARAMS_ERROR, showVal + "需要是正整数!"); + } + } catch (NumberFormatException e) { + throw new MyException(ErrorCode.PARAMS_ERROR, showVal + "需要是整数!"); + } + } + } + /** * 通过分析图表数据获取SQL *