From 36e970e300c42410c176b806697c86227b6b17e7 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期一, 01 六月 2026 14:15:11 +0800
Subject: [PATCH] fix:质检合格率 添加同比环比
---
src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 108 insertions(+), 0 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 f01f315..cc5c01a 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
@@ -103,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