From e8aca82ba390af090240ef7fda8d6f5fc5d3fe07 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 03 六月 2026 17:04:51 +0800
Subject: [PATCH] 生产报工报废后不入库

---
 src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java |  131 +++++++++++++++++++++++++++++++++++++++----
 1 files changed, 118 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
index ee11f8e..cc5c01a 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
@@ -1,13 +1,10 @@
 package com.ruoyi.quality.service.impl;
 
+import com.ruoyi.basic.service.IProductModelService;
+import com.ruoyi.basic.service.IProductService;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.quality.dto.QualityPassRateDto;
-import com.ruoyi.quality.dto.QualityInspectStatDto;
-import com.ruoyi.quality.dto.QualityMonthlyPassRateDto;
-import com.ruoyi.quality.dto.QualityMonthlyDetailDto;
-import com.ruoyi.quality.dto.QualityParameterStatDto;
-import com.ruoyi.quality.dto.QualityMonthlyPassRateWrapperDto;
-import com.ruoyi.quality.dto.QualityTopParameterDto;
+import com.ruoyi.production.service.ProductOrderService;
+import com.ruoyi.quality.dto.*;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.service.QualityReportService;
 import org.springframework.beans.BeanUtils;
@@ -59,11 +56,11 @@
                 QualityPassRateDto passRateDto = new QualityPassRateDto();
                 BeanUtils.copyProperties(dto, passRateDto);
 
-                if (dto.getInspectType() == 0) {
+                if (dto.getModelType() == 0) {
                     wrapper.setRawMaterial(passRateDto);
-                } else if (dto.getInspectType() == 1) {
+                } else if (dto.getModelType() == 1) {
                     wrapper.setProcess(passRateDto);
-                } else if (dto.getInspectType() == 2) {
+                } else if (dto.getModelType() == 2) {
                     wrapper.setOutgoing(passRateDto);
                 }
             }
@@ -90,11 +87,11 @@
     }
 
     @Override
-    public QualityTopParameterDto getTopParameters(Integer inspectType) {
-        if (inspectType == null) {
+    public QualityTopParameterDto getTopParameters(Integer modelType) {
+        if (modelType == null) {
             return new QualityTopParameterDto();
         }
-        List<QualityParameterStatDto> list = qualityInspectMapper.getTopParameters(inspectType);
+        List<QualityParameterStatDto> list = qualityInspectMapper.getTopParameters(modelType);
 
         BigDecimal total = list.stream()
                 .map(QualityParameterStatDto::getCount)
@@ -106,4 +103,112 @@
 
         return result;
     }
+
+    @Override
+    public List<QualityPassRateDto> getMonthlyPassRateWithComparison(String year, Integer month) {
+        if (StringUtils.isEmpty(year) || month == null || month < 1 || month > 12) {
+            return new ArrayList<>();
+        }
+
+        // 鑾峰彇褰撳墠骞存湀鐨勫悎鏍肩巼鏁版嵁
+        List<QualityMonthlyPassRateDto> currentMonthData = qualityInspectMapper.getMonthlyPassRateStatistics(year);
+
+        // 璁$畻涓婃湀
+        int lastMonth = month - 1;
+        String lastMonthYear = year;
+        if (lastMonth == 0) {
+            lastMonth = 12;
+            lastMonthYear = String.valueOf(Integer.parseInt(year) - 1);
+        }
+
+        // 璁$畻鍘诲勾鍚屾湀
+        String lastYear = String.valueOf(Integer.parseInt(year) - 1);
+
+        // 鑾峰彇涓婃湀鏁版嵁
+        List<QualityMonthlyPassRateDto> lastMonthData = qualityInspectMapper.getMonthlyPassRateStatistics(lastMonthYear);
+
+        // 鑾峰彇鍘诲勾鍚屾湀鏁版嵁
+        List<QualityMonthlyPassRateDto> lastYearData = qualityInspectMapper.getMonthlyPassRateStatistics(lastYear);
+
+        // 鏈堜唤鍚嶇О鏄犲皠
+        String[] monthNames = {"涓�鏈�", "浜屾湀", "涓夋湀", "鍥涙湀", "浜旀湀", "鍏湀",
+                               "涓冩湀", "鍏湀", "涔濇湀", "鍗佹湀", "鍗佷竴鏈�", "鍗佷簩鏈�"};
+        String currentMonthName = monthNames[month - 1];
+        String lastMonthName = monthNames[lastMonth - 1];
+
+        // 鏋勫缓缁撴灉
+        List<QualityPassRateDto> result = new ArrayList<>();
+
+        for (int modelType = 0; modelType <= 2; modelType++) {
+            final int type = modelType;
+
+            QualityPassRateDto dto = new QualityPassRateDto();
+            dto.setModelType(modelType);
+
+            // 褰撳墠鏈堟暟鎹�
+            QualityMonthlyPassRateDto currentDto = currentMonthData.stream()
+                    .filter(d -> d.getMonth().equals(currentMonthName) && d.getModelType() == type)
+                    .findFirst()
+                    .orElse(null);
+
+            if (currentDto != null) {
+                dto.setTotalCount(currentDto.getTotalCount());
+                dto.setCompletedCount(currentDto.getCompletedCount());
+                dto.setQualifiedCount(currentDto.getQualifiedCount());
+                dto.setUnqualifiedCount(currentDto.getUnqualifiedCount());
+                dto.setCompletionRate(currentDto.getCompletionRate());
+                dto.setPassRate(currentDto.getPassRate());
+            } else {
+                dto.setTotalCount(BigDecimal.ZERO);
+                dto.setCompletedCount(BigDecimal.ZERO);
+                dto.setQualifiedCount(BigDecimal.ZERO);
+                dto.setUnqualifiedCount(BigDecimal.ZERO);
+                dto.setCompletionRate(BigDecimal.ZERO);
+                dto.setPassRate(BigDecimal.ZERO);
+            }
+
+            // 涓婃湀鏁版嵁
+            QualityMonthlyPassRateDto lastMonthDto = lastMonthData.stream()
+                    .filter(d -> d.getMonth().equals(lastMonthName) && d.getModelType() == type)
+                    .findFirst()
+                    .orElse(null);
+
+            BigDecimal lastMonthPassRate = lastMonthDto != null ? lastMonthDto.getPassRate() : BigDecimal.ZERO;
+            dto.setLastMonthPassRate(lastMonthPassRate);
+
+            // 鍘诲勾鍚屾湀鏁版嵁
+            QualityMonthlyPassRateDto lastYearDto = lastYearData.stream()
+                    .filter(d -> d.getMonth().equals(currentMonthName) && d.getModelType() == type)
+                    .findFirst()
+                    .orElse(null);
+
+            BigDecimal lastYearPassRate = lastYearDto != null ? lastYearDto.getPassRate() : BigDecimal.ZERO;
+            dto.setLastYearPassRate(lastYearPassRate);
+
+            // 璁$畻鐜瘮鍙樺寲
+            BigDecimal currentPassRate = dto.getPassRate() != null ? dto.getPassRate() : BigDecimal.ZERO;
+            if (lastMonthPassRate != null && lastMonthPassRate.compareTo(BigDecimal.ZERO) > 0) {
+                BigDecimal momChange = currentPassRate.subtract(lastMonthPassRate);
+                dto.setMomChange(momChange);
+                dto.setMomTrend(momChange.compareTo(BigDecimal.ZERO));
+            } else {
+                dto.setMomChange(BigDecimal.ZERO);
+                dto.setMomTrend(0);
+            }
+
+            // 璁$畻鍚屾瘮鍙樺寲
+            if (lastYearPassRate != null && lastYearPassRate.compareTo(BigDecimal.ZERO) > 0) {
+                BigDecimal yoyChange = currentPassRate.subtract(lastYearPassRate);
+                dto.setYoyChange(yoyChange);
+                dto.setYoyTrend(yoyChange.compareTo(BigDecimal.ZERO));
+            } else {
+                dto.setYoyChange(BigDecimal.ZERO);
+                dto.setYoyTrend(0);
+            }
+
+            result.add(dto);
+        }
+
+        return result;
+    }
 }

--
Gitblit v1.9.3