package com.ruoyi.quality.service.impl; 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.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.getInspectType() == 0) { wrapper.setRawMaterial(passRateDto); } else if (dto.getInspectType() == 1) { wrapper.setProcess(passRateDto); } else if (dto.getInspectType() == 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 inspectType) { if (inspectType == null) { return new QualityTopParameterDto(); } List list = qualityInspectMapper.getTopParameters(inspectType); BigDecimal total = list.stream() .map(QualityParameterStatDto::getCount) .reduce(BigDecimal.ZERO, BigDecimal::add); QualityTopParameterDto result = new QualityTopParameterDto(); result.setTotalCount(total); result.setList(list); return result; } }