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 getInspectStatistics() { return qualityInspectMapper.getInspectStatistics(); } @Override public List getPassRateStatistics() { return qualityInspectMapper.getPassRateStatistics(); } @Override public List getMonthlyPassRateStatistics(String year) { if (StringUtils.isEmpty(year)) { return new ArrayList<>(); } List flatData = qualityInspectMapper.getMonthlyPassRateStatistics(year); // 按月份分组,并保持顺序 Map> groupedByMonth = flatData.stream() .collect(Collectors.groupingBy(QualityMonthlyPassRateDto::getMonth, LinkedHashMap::new, Collectors.toList())); List 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 getYearlyPassRateStatistics(String year) { if (StringUtils.isEmpty(year)) { return new ArrayList<>(); } return qualityInspectMapper.getYearlyPassRateStatistics(year); } @Override public List 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 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; } }