From f19813677afaf7b9218a6ed2dee7381a395c3ad5 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期二, 02 六月 2026 15:50:16 +0800
Subject: [PATCH] fix: 下载检查报告,时间格式化
---
src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 205 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 dfdfaf0..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,9 +1,214 @@
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.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;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
@Service
public class QualityReportServiceImpl implements QualityReportService {
+
+ @Autowired
+ private QualityInspectMapper qualityInspectMapper;
+
+ @Override
+ public List<QualityInspectStatDto> getInspectStatistics() {
+ return qualityInspectMapper.getInspectStatistics();
+ }
+
+ @Override
+ public List<QualityPassRateDto> getPassRateStatistics() {
+ return qualityInspectMapper.getPassRateStatistics();
+ }
+
+ @Override
+ public List<QualityMonthlyPassRateWrapperDto> getMonthlyPassRateStatistics(String year) {
+ if (StringUtils.isEmpty(year)) {
+ return new ArrayList<>();
+ }
+ List<QualityMonthlyPassRateDto> flatData = qualityInspectMapper.getMonthlyPassRateStatistics(year);
+
+ // 鎸夋湀浠藉垎缁勶紝骞朵繚鎸侀『搴�
+ Map<String, List<QualityMonthlyPassRateDto>> groupedByMonth = flatData.stream()
+ .collect(Collectors.groupingBy(QualityMonthlyPassRateDto::getMonth, LinkedHashMap::new, Collectors.toList()));
+
+ List<QualityMonthlyPassRateWrapperDto> result = new ArrayList<>();
+
+ groupedByMonth.forEach((month, dtos) -> {
+ QualityMonthlyPassRateWrapperDto wrapper = new QualityMonthlyPassRateWrapperDto();
+ wrapper.setMonth(month);
+
+ for (QualityMonthlyPassRateDto dto : dtos) {
+ QualityPassRateDto passRateDto = new QualityPassRateDto();
+ BeanUtils.copyProperties(dto, passRateDto);
+
+ if (dto.getModelType() == 0) {
+ wrapper.setRawMaterial(passRateDto);
+ } else if (dto.getModelType() == 1) {
+ wrapper.setProcess(passRateDto);
+ } else if (dto.getModelType() == 2) {
+ wrapper.setOutgoing(passRateDto);
+ }
+ }
+ result.add(wrapper);
+ });
+
+ return result;
+ }
+
+ @Override
+ public List<QualityPassRateDto> getYearlyPassRateStatistics(String year) {
+ if (StringUtils.isEmpty(year)) {
+ return new ArrayList<>();
+ }
+ return qualityInspectMapper.getYearlyPassRateStatistics(year);
+ }
+
+ @Override
+ public List<QualityMonthlyDetailDto> getMonthlyCompletionDetails(String year) {
+ if (StringUtils.isEmpty(year)) {
+ return new ArrayList<>();
+ }
+ return qualityInspectMapper.getMonthlyCompletionDetails(year);
+ }
+
+ @Override
+ public QualityTopParameterDto getTopParameters(Integer modelType) {
+ if (modelType == null) {
+ return new QualityTopParameterDto();
+ }
+ List<QualityParameterStatDto> list = qualityInspectMapper.getTopParameters(modelType);
+
+ BigDecimal total = list.stream()
+ .map(QualityParameterStatDto::getCount)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ QualityTopParameterDto result = new QualityTopParameterDto();
+ result.setTotalCount(total);
+ result.setList(list);
+
+ 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