指标分析:保存分析图表

This commit is contained in:
huangge1199 2025-08-13 11:37:44 +08:00
parent 2c2eef6aee
commit a1289dbbee
3 changed files with 95 additions and 0 deletions

View File

@ -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();
}
}

View File

@ -22,4 +22,6 @@ public interface AnalysisService extends IService<Analysis> {
List<ColumnVo> getColumns(JSONObject params);
List<String> getShowVals(JSONObject params);
void saveAnalysis(JSONObject params);
}

View File

@ -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<AnalysisMapper, Analysis>
.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<Analysis> 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
*