From 4f45f29e6b53f4c01b414409c5000ff4e212b3d9 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 05 六月 2026 13:36:54 +0800
Subject: [PATCH] 增加eip

---
 report-server/src/main/java/com/ruoyi/report/service/impl/PassRateServiceImpl.java |  122 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 122 insertions(+), 0 deletions(-)

diff --git a/report-server/src/main/java/com/ruoyi/report/service/impl/PassRateServiceImpl.java b/report-server/src/main/java/com/ruoyi/report/service/impl/PassRateServiceImpl.java
new file mode 100644
index 0000000..2015f9c
--- /dev/null
+++ b/report-server/src/main/java/com/ruoyi/report/service/impl/PassRateServiceImpl.java
@@ -0,0 +1,122 @@
+package com.ruoyi.report.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.ruoyi.report.dto.PassRateDto;
+import com.ruoyi.report.mapper.PassRateMapper;
+import com.ruoyi.report.service.PassRateService;
+import com.ruoyi.report.vo.ParetoVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+
+/**
+ * 鍚堟牸鐜囩粺璁℃湇鍔″疄鐜�
+ */
+@Service
+@AllArgsConstructor
+public class PassRateServiceImpl implements PassRateService {
+
+    private PassRateMapper passRateMapper;
+
+    @Override
+    public List<Map<String, Object>> getRawMaterialPassRate(PassRateDto dto) {
+        processDateType(dto);
+        return passRateMapper.getRawMaterialPassRate(dto);
+    }
+
+    @Override
+    public List<Map<String, Object>> getSupplierUnqualified(PassRateDto dto) {
+        processDateType(dto);
+        return passRateMapper.getSupplierUnqualified(dto);
+    }
+
+    @Override
+    public ParetoVo getPareto(PassRateDto dto) {
+        processDateType(dto);
+
+        List<Map<String, Object>> stats = passRateMapper.getUnqualifiedItemStats(dto);
+
+        ParetoVo vo = new ParetoVo();
+        List<String> categories = new ArrayList<>();
+        List<Integer> values = new ArrayList<>();
+        List<Double> cumulativePercent = new ArrayList<>();
+
+        if (stats.isEmpty()) {
+            vo.setCategories(categories);
+            vo.setValues(values);
+            vo.setCumulativePercent(cumulativePercent);
+            return vo;
+        }
+
+        // 璁$畻鎬绘暟
+        int total = stats.stream()
+                .mapToInt(m -> ((Number) m.get("unqualifiedCount")).intValue())
+                .sum();
+
+        // 璁$畻绱鐧惧垎姣�
+        BigDecimal cumulative = BigDecimal.ZERO;
+        for (Map<String, Object> stat : stats) {
+            categories.add((String) stat.get("itemName"));
+            int count = ((Number) stat.get("unqualifiedCount")).intValue();
+            values.add(count);
+
+            cumulative = cumulative.add(new BigDecimal(count));
+            double percent = cumulative.divide(new BigDecimal(total), 4, RoundingMode.HALF_UP)
+                    .multiply(new BigDecimal(100))
+                    .setScale(2, RoundingMode.HALF_UP)
+                    .doubleValue();
+            cumulativePercent.add(percent);
+        }
+
+        vo.setCategories(categories);
+        vo.setValues(values);
+        vo.setCumulativePercent(cumulativePercent);
+        return vo;
+    }
+
+    @Override
+    public List<Map<String, Object>> getProcessPassRate(PassRateDto dto) {
+        processDateType(dto);
+        return passRateMapper.getProcessPassRate(dto);
+    }
+
+    @Override
+    public List<Map<String, Object>> getMachineUnqualified(PassRateDto dto) {
+        processDateType(dto);
+        return passRateMapper.getMachineUnqualified(dto);
+    }
+
+    /**
+     * 澶勭悊鏃堕棿绫诲瀷
+     */
+    private void processDateType(PassRateDto dto) {
+        if (dto.getStartTime() != null && dto.getEndTime() != null) {
+            return;
+        }
+
+        String dateType = dto.getDateType();
+        if (dateType == null || dateType.isEmpty()) {
+            dateType = "2"; // 榛樿鏈湀
+        }
+
+        Date now = new Date();
+        switch (dateType) {
+            case "1": // 鏈懆
+                dto.setStartTime(DateUtil.format(DateUtil.beginOfWeek(now), "yyyy-MM-dd HH:mm:ss"));
+                dto.setEndTime(DateUtil.format(DateUtil.endOfWeek(now), "yyyy-MM-dd HH:mm:ss"));
+                break;
+            case "2": // 鏈湀
+                dto.setStartTime(DateUtil.format(DateUtil.beginOfMonth(now), "yyyy-MM-dd HH:mm:ss"));
+                dto.setEndTime(DateUtil.format(DateUtil.endOfMonth(now), "yyyy-MM-dd HH:mm:ss"));
+                break;
+            case "3": // 鏈勾
+                dto.setStartTime(DateUtil.format(DateUtil.beginOfYear(now), "yyyy-MM-dd HH:mm:ss"));
+                dto.setEndTime(DateUtil.format(DateUtil.endOfYear(now), "yyyy-MM-dd HH:mm:ss"));
+                break;
+        }
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.3