From 1fd7a7d67a5df84b57af4fbcc310aa66da3cd8ca Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 25 三月 2026 17:51:16 +0800
Subject: [PATCH] feat:1.出入库单位转换 2.仓储/耗材导出字段值优化 3.仓储/耗材库存为0不展示

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  135 ++++++++++++++++++++++++---------------------
 1 files changed, 72 insertions(+), 63 deletions(-)

diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index 2d3e608..ddb36b9 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -2,17 +2,14 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.mapper.AccountExpenseMapper;
 import com.ruoyi.account.mapper.AccountIncomeMapper;
 import com.ruoyi.account.pojo.AccountExpense;
-import com.ruoyi.home.mapper.HomeMapper;
-import com.ruoyi.account.mapper.AccountExpenseMapper;
 import com.ruoyi.approve.mapper.ApproveProcessMapper;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.basic.mapper.ProductMapper;
-import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.mapper.SupplierManageMapper;
 import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.basic.pojo.Product;
@@ -22,24 +19,17 @@
 import com.ruoyi.common.enums.ApproveTypeEnum;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.consumables.mapper.ConsumablesInventoryMapper;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
 import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.dto.MapDto;
 import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.home.dto.*;
+import com.ruoyi.home.mapper.HomeMapper;
 import com.ruoyi.home.service.HomeService;
-import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
-import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
-import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.mapper.ProductOrderMapper;
-import com.ruoyi.production.mapper.ProductProcessMapper;
-import com.ruoyi.production.mapper.ProductWorkOrderMapper;
-import com.ruoyi.production.mapper.ProductionProductInputMapper;
-import com.ruoyi.production.mapper.ProductionProductOutputMapper;
-import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
-import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.ProductWorkOrder;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
@@ -49,8 +39,10 @@
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
+import com.ruoyi.quality.mapper.RawMaterialMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.quality.pojo.QualityUnqualified;
+import com.ruoyi.quality.pojo.RawMaterial;
 import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
@@ -96,6 +88,9 @@
     private StockInventoryMapper stockInventoryMapper;
 
     @Autowired
+    private ConsumablesInventoryMapper consumablesInventoryMapper;
+
+    @Autowired
     private QualityInspectMapper qualityStatisticsMapper;
 
     @Autowired
@@ -139,6 +134,9 @@
 
     @Autowired
     private QualityInspectMapper qualityInspectMapper;
+
+    @Autowired
+    private RawMaterialMapper rawMaterialMapper;
 
     @Autowired
     private QualityUnqualifiedMapper qualityUnqualifiedMapper;
@@ -213,11 +211,15 @@
         }
         // 缁熻搴撳瓨
         BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal();
+        BigDecimal consumablesQuantityTotal = consumablesInventoryMapper.selectTotal();
         homeBusinessDto.setInventoryNum(stockQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
+        homeBusinessDto.setConsumablesQuantityTotal(consumablesQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
 
         // 鑾峰彇褰撳ぉ鍏ュ簱鏁伴噺
         BigDecimal bigDecimal = stockInventoryMapper.selectTotalByDate(LocalDate.now());
+        BigDecimal consumablesTodayNum = consumablesInventoryMapper.selectTotalByDate(LocalDate.now());
         homeBusinessDto.setTodayInventoryNum(bigDecimal.setScale(2, RoundingMode.HALF_UP).toString());
+        homeBusinessDto.setConsumablesTodayNum(consumablesTodayNum.setScale(2, RoundingMode.HALF_UP).toString());
         return homeBusinessDto;
     }
 
@@ -2400,81 +2402,88 @@
                 endDate = today.with(DayOfWeek.SUNDAY);
         }
 
-        List<QualityInspect> qualityInspectList = qualityInspectMapper
-                .selectList(new LambdaQueryWrapper<QualityInspect>()
-                        .ge(QualityInspect::getCheckTime, startDate.toString())
-                        .le(QualityInspect::getCheckTime, endDate.toString())
-                        .eq(QualityInspect::getInspectState, 1));
+        List<RawMaterial> rawMaterialList = rawMaterialMapper
+                .selectList(new LambdaQueryWrapper<RawMaterial>()
+                        .ge(RawMaterial::getCheckTime, startDate.toString())
+                        .le(RawMaterial::getCheckTime, endDate.toString())
+                        .eq(RawMaterial::getInspectState, 1));
 
         QualityStatisticsDto dto = new QualityStatisticsDto();
-        dto.setSupplierNum(sumQuantity(qualityInspectList, 0)); // 鍘熸潗鏂�
-        dto.setProcessNum(sumQuantity(qualityInspectList, 1)); // 杩囩▼
-        dto.setFactoryNum(sumQuantity(qualityInspectList, 2)); // 鍑哄巶
+        Map<Integer, BigDecimal> countMap = rawMaterialList.stream()
+                .collect(Collectors.groupingBy(
+                        RawMaterial::getCheckType,
+                        Collectors.collectingAndThen(
+                                Collectors.counting(),
+                                count -> BigDecimal.valueOf(count)
+                        )
+                ));
 
-        // 鍋囪 qualityInspectList 鏄竴涓� List<QualityInspect> 绫诲瀷鐨勯泦鍚�
-        Map<String, List<QualityInspect>> groupedByCheckResult = qualityInspectList.stream()
-                .collect(Collectors.groupingBy(QualityInspect::getCheckResult));
-        List<QualityInspect> qualityInspects = groupedByCheckResult.get("涓嶅悎鏍�");
-        if (ObjectUtils.isNull(qualityInspects) || qualityInspects.size() == 0) {
-            return null;
-        }
+        dto.setSupplierNum(countMap.getOrDefault(0, BigDecimal.ZERO)); // 鍏ュ巶
+        dto.setProcessNum(countMap.getOrDefault(1, BigDecimal.ZERO));  // 杞﹂棿
+        dto.setFactoryNum(countMap.getOrDefault(2, BigDecimal.ZERO));  // 鍑哄巶
+
+        // 3. 绛涢�変笉鍚堟牸鐨勮褰曪紙check_result = 0锛�
+        List<RawMaterial> unqualifiedList = rawMaterialList.stream()
+                .filter(i -> i.getCheckResult() == 0)  // 0琛ㄧず涓嶅悎鏍�
+                .collect(Collectors.toList());
+
         // 4. 澶勭悊鍥捐〃椤� (Item)
-        List<QualityStatisticsItem> itemList = new ArrayList<>();
+        List<RawMaterial> itemList = new ArrayList<>();
 
-        Map<QualityInspect, LocalDate> dateMap = qualityInspectList.stream()
-                .collect(Collectors.toMap(
-                        i -> i,
-                        i -> i.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()));
         if (type == 3) {
             // 瀛e害妯″紡锛氭寜鏈堝垎缁�
-            Map<String, List<QualityInspect>> groupByMonth = qualityInspects.stream()
-                    .collect(Collectors.groupingBy(i -> {
-                        LocalDate ld = dateMap.get(i);
-                        return ld.format(DateTimeFormatter.ofPattern("yyyy-MM"));
-                    }));
+            Map<String, List<RawMaterial>> groupByMonth = unqualifiedList.isEmpty() ?
+                    new HashMap<>() :
+                    unqualifiedList.stream()
+                            .collect(Collectors.groupingBy(i -> {
+                                LocalDate ld = i.getCheckTime().toInstant()
+                                        .atZone(ZoneId.systemDefault()).toLocalDate();
+                                return ld.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                            }));
 
             for (int i = 0; i < 3; i++) {
                 LocalDate monthDate = startDate.plusMonths(i);
                 String monthStr = monthDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
-                itemList.add(buildItem(monthStr, groupByMonth.getOrDefault(monthStr, new ArrayList<>())));
+                List<RawMaterial> monthData = groupByMonth.getOrDefault(monthStr, new ArrayList<>());
+                itemList.add(buildItem(monthStr, monthData));
             }
         } else {
             // 鍛ㄦ垨鏈堟ā寮忥細鎸夊ぉ鍒嗙粍
-            Map<String, List<QualityInspect>> groupByDay = qualityInspects.stream()
-                    .collect(Collectors.groupingBy(i -> {
-                        LocalDate ld = dateMap.get(i);
-                        return ld.format(DateTimeFormatter.ofPattern("MM/dd"));
-                    }));
+            Map<String, List<RawMaterial>> groupByDay = unqualifiedList.isEmpty() ?
+                    new HashMap<>() :
+                    unqualifiedList.stream()
+                            .collect(Collectors.groupingBy(i -> {
+                                LocalDate ld = i.getCheckTime().toInstant()
+                                        .atZone(ZoneId.systemDefault()).toLocalDate();
+                                return ld.format(DateTimeFormatter.ofPattern("MM/dd"));
+                            }));
+
             long days = ChronoUnit.DAYS.between(startDate, endDate);
             for (int i = 0; i <= days; i++) {
                 LocalDate tempDay = startDate.plusDays(i);
                 String dayStr = tempDay.format(DateTimeFormatter.ofPattern("MM/dd"));
-                itemList.add(buildItem(dayStr, groupByDay.getOrDefault(dayStr, new ArrayList<>())));
+                List<RawMaterial> dayData = groupByDay.getOrDefault(dayStr, new ArrayList<>());
+                itemList.add(buildItem(dayStr, dayData));
             }
         }
 
-        dto.setItem(itemList);
+        dto.setRawItem(itemList);
         return dto;
     }
 
-    private BigDecimal sumQuantity(List<QualityInspect> list, Integer type) {
-        return list.stream()
-                .filter(i -> i.getInspectType().equals(type))
-                .map(QualityInspect::getQuantity)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-    }
-
-    private QualityStatisticsItem buildItem(String dateLabel, List<QualityInspect> list) {
-        QualityStatisticsItem item = new QualityStatisticsItem();
+    private RawMaterial buildItem(String dateLabel, List<RawMaterial> list) {
+        RawMaterial item = new RawMaterial();
         item.setDate(dateLabel);
 
-        item.setSupplierNum(list.stream().filter(i -> i.getInspectType() == 0).map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add));
-        item.setProcessNum(list.stream().filter(i -> i.getInspectType() == 1).map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add));
-        item.setFactoryNum(list.stream().filter(i -> i.getInspectType() == 2).map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add));
+        item.setSupplierNum(
+                BigDecimal.valueOf(list.stream().filter(i -> i.getCheckType() == 0).count())
+        );
+        item.setProcessNum(
+                BigDecimal.valueOf(list.stream().filter(i -> i.getCheckType() == 1).count())
+        );
+        item.setFactoryNum(
+                BigDecimal.valueOf(list.stream().filter(i -> i.getCheckType() == 2).count())
+        );
 
         return item;
     }

--
Gitblit v1.9.3