diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMixTraceReportController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMixTraceReportController.java index d5760fd0..3379528f 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMixTraceReportController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMixTraceReportController.java @@ -86,6 +86,12 @@ public class ProdMixTraceReportController extends BaseController { return R.ok(mixTraceReportService.calculateSpcXbarR(normalizeParams(params))); } + /** 按时间段获取最新一条曲线(仅曲线数据) */ + @GetMapping("/curve/latest") + public R latestCurve(@RequestParam(required = false) Map params) { + return R.ok(mixTraceReportService.queryLatestCurve(normalizeParams(params))); + } + private Map normalizeParams(Map params) { return params == null ? Collections.emptyMap() : params; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMixTraceReportMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMixTraceReportMapper.java index c1cd54e1..9c75677a 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMixTraceReportMapper.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMixTraceReportMapper.java @@ -79,4 +79,6 @@ public interface ProdMixTraceReportMapper { */ List selectSpcSamples(@Param("map") Map params); + /** 按时间段获取最新一条记录的工步列表(用于曲线) */ + List selectLatestStepList(@Param("map") Map params); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMixTraceReportService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMixTraceReportService.java index 2638137e..ddc1be47 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMixTraceReportService.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMixTraceReportService.java @@ -52,4 +52,9 @@ public interface IProdMixTraceReportService { * SPC均值极差图 - 图10(Xbar-R) */ MixTraceSpcResultVo calculateSpcXbarR(Map params); + + /** + * 按时间段获取最新一条曲线(仅曲线数据,适用于单次查看) + */ + MixTraceDetailVo queryLatestCurve(Map params); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMixTraceReportServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMixTraceReportServiceImpl.java index 963db48d..870a333c 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMixTraceReportServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMixTraceReportServiceImpl.java @@ -720,4 +720,19 @@ public class ProdMixTraceReportServiceImpl implements IProdMixTraceReportService tree.add(root); return tree; } + + @Override + public MixTraceDetailVo queryLatestCurve(Map params) { + // 只关注曲线所需的工步数据,其他列表返回空集合以避免前端 NPE + List steps = mixTraceReportMapper.selectLatestStepList(params); + MixTraceDetailVo detail = new MixTraceDetailVo(); + detail.setMixingStepList(steps == null ? new ArrayList<>() : steps); + detail.setCurveSeries(buildCurveSeries(steps)); + detail.setUsageList(new ArrayList<>()); + detail.setBatchList(new ArrayList<>()); + detail.setMaterialTraceTree(new ArrayList<>()); + detail.setMixingList(new ArrayList<>()); + detail.setWeightList(new ArrayList<>()); + return detail; + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMixTraceReportMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMixTraceReportMapper.xml index 4504ff3f..d6246ecc 100644 --- a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMixTraceReportMapper.xml +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMixTraceReportMapper.xml @@ -618,27 +618,7 @@ SELECT CAST(9 AS INT) AS matchPriority, - CAST( - CASE - WHEN ISNULL(SUM(CASE WHEN t.materiel_id = w.child_code THEN 1 ELSE 0 END), 0) = 0 - AND ISNULL(SUM(CASE - WHEN w.father_code IS NOT NULL - AND w.father_code <> w.child_code - AND t.materiel_id = w.father_code THEN 1 - ELSE 0 - END), 0) = 0 - THEN NULL - ELSE - ISNULL(SUM(CASE WHEN t.materiel_id = w.child_code THEN ISNULL(t.used_amount, 0) ELSE 0 END), 0) - + ISNULL(SUM(CASE - WHEN w.father_code IS NOT NULL - AND w.father_code <> w.child_code - AND t.materiel_id = w.father_code - THEN ISNULL(t.used_amount, 0) - ELSE 0 - END), 0) - END - AS DECIMAL(18, 4)) AS actualWeight, + CAST(CASE WHEN COUNT(1) = 0 THEN NULL ELSE SUM(ISNULL(t.used_amount, 0)) END AS DECIMAL(18, 4)) AS actualWeight, MAX(t.plan_detail_id) AS tracePlanDetailId, MAX(t.recipe_id) AS traceRecipeId, MAX(t.weight_seq) AS traceWeightSeq, @@ -755,6 +735,110 @@ ORDER BY m.mix_id ASC + + +