maven
2025-12-12 38aaf481e936881b79671548d122d27e10997a72
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -507,4 +507,71 @@
        return qualityProductQualifiedRateDto;
    }
    @Override
    public QualityStatisticsDto inventoryStatistics() {
        // 获取近四个月数据(往前推三个月,共4个完整月份)
        LocalDate today = LocalDate.now();
        // 定义日期格式化器(用于显示“年月”格式)
        DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
        QualityStatisticsDto qualityStatisticsDto = new QualityStatisticsDto();
        List<QualityStatisticsItem> qualityStatisticsItems = new ArrayList<>();
        BigDecimal supplierNum = new BigDecimal(0); //入库数量
        BigDecimal factoryNum = new BigDecimal(0); //出库数量
        // 循环4次,分别统计近4个月的数据(当前月、前1个月、前2个月、前3个月)
        for (int i = 3; i >= 0; i--) {
            // 计算当前循环对应的月份(i=0:当前月,i=1:前1个月,以此类推)
            LocalDate currentMonth = today.minusMonths(i);
            // 当月的开始日期(每月1号)
            LocalDate monthStart = currentMonth.withDayOfMonth(1);
            // 当月的结束日期(每月最后一天)
            LocalDate monthEnd = currentMonth.withDayOfMonth(currentMonth.lengthOfMonth());
            // 入库数量
            // 构建当月的查询条件(如果想一次性查全4个月数据再内存筛选,可优化为先查全再循环筛选)
            LambdaQueryWrapper<ProcurementRecordStorage> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.ge(ProcurementRecordStorage::getCreateTime, monthStart)
                    .le(ProcurementRecordStorage::getCreateTime, monthEnd); // 筛选当月数据
            List<ProcurementRecordStorage> monthInspects = procurementRecordStorageMapper.selectList(queryWrapper);
            // 出库数量
            LambdaQueryWrapper<ProcurementRecordOut> queryWrapper1 = new LambdaQueryWrapper<>();
            queryWrapper1.ge(ProcurementRecordOut::getCreateTime, monthStart)
                    .le(ProcurementRecordOut::getCreateTime, monthEnd);
            List<ProcurementRecordOut> monthInspects1 = procurementRecordOutMapper.selectList(queryWrapper1);
            BigDecimal reduce = monthInspects.stream()
                    .map(ProcurementRecordStorage::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            supplierNum = supplierNum.add(reduce);
            BigDecimal reduce1 = monthInspects1.stream()
                    .map(ProcurementRecordOut::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            factoryNum= factoryNum.add(reduce1);
            // 构建当月统计项
            QualityStatisticsItem item = new QualityStatisticsItem();
            item.setDate(monthStart.format(monthFormatter)); // 日期显示为“年月”(如 2025-10)
            // 1. 供应商检验(类型0)- 合格数量
            BigDecimal supplierQualified = monthInspects.stream()
                    .map(ProcurementRecordStorage::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            item.setSupplierNum(supplierQualified);
            // 3. 工厂检验(类型2)- 合格数量
            BigDecimal factoryQualified = monthInspects1.stream()
                    .map(ProcurementRecordOut::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            item.setFactoryNum(factoryQualified);
            qualityStatisticsItems.add(item);
        }
        // 统计近4个月总数据(所有月份汇总)
        qualityStatisticsDto.setSupplierNum(supplierNum);
        qualityStatisticsDto.setFactoryNum(factoryNum);
        qualityStatisticsDto.setItem(qualityStatisticsItems);
        return qualityStatisticsDto;
    }
}