From 7a4a00136ff933197318de096b0d318b6331484f Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期三, 17 十二月 2025 16:11:00 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/hckx' into hckx

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  213 ++++++++++++++++++++++++++++++++++------------------
 1 files changed, 138 insertions(+), 75 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 ad6ca2f..276cfb4 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -4,14 +4,20 @@
 import com.ruoyi.approve.mapper.ApproveProcessMapper;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
+import com.ruoyi.device.mapper.DeviceRepairMapper;
+import com.ruoyi.device.pojo.DeviceMaintenance;
+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.service.HomeService;
 import com.ruoyi.lavorissue.mapper.LavorIssueMapper;
 import com.ruoyi.lavorissue.pojo.LaborIssue;
+import com.ruoyi.procurementrecord.mapper.CustomStorageMapper;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
+import com.ruoyi.procurementrecord.pojo.CustomStorage;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 import com.ruoyi.project.system.domain.SysDept;
@@ -38,6 +44,7 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -65,6 +72,9 @@
 
     @Autowired
     private ProcurementRecordMapper procurementRecordStorageMapper;
+
+    @Autowired
+    private CustomStorageMapper customStorageMapper;
 
     @Autowired
     private QualityInspectMapper qualityStatisticsMapper;
@@ -95,53 +105,56 @@
         salesLedgerLambdaQueryWrapper.ge(SalesLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay())  // 澶т簬绛変簬鏈湀绗竴澶�
                 .lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
         List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(salesLedgerLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty(salesLedgers)){
-            return homeBusinessDto;
+        if(!CollectionUtils.isEmpty(salesLedgers)){
+            // 鍚堣鍚堝悓閲戦
+            BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerProduct>();
+            salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 1)
+                    .in(SalesLedgerProduct::getSalesLedgerId, salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList()));
+            List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapper);
+            // 鏈紑绁ㄩ噾棰�
+            BigDecimal noInvoiceAmountTotal = salesLedgerProducts.stream().map(SalesLedgerProduct::getNoInvoiceAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            homeBusinessDto.setMonthSaleMoney(contractAmount.setScale(2, RoundingMode.HALF_UP).toString());
+            homeBusinessDto.setMonthSaleHaveMoney(noInvoiceAmountTotal.setScale(2, RoundingMode.HALF_UP).toString());
         }
-        // 鍚堣鍚堝悓閲戦
-        BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerProduct>();
-        salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 1)
-                .in(SalesLedgerProduct::getSalesLedgerId, salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList()));
-        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapper);
-        // 鏈紑绁ㄩ噾棰�
-        BigDecimal noInvoiceAmountTotal = salesLedgerProducts.stream().map(SalesLedgerProduct::getNoInvoiceAmount)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        homeBusinessDto.setMonthSaleMoney(contractAmount.setScale(2, RoundingMode.HALF_UP).toString());
-        homeBusinessDto.setMonthSaleHaveMoney(noInvoiceAmountTotal.setScale(2, RoundingMode.HALF_UP).toString());
         // 鍒涘缓LambdaQueryWrapper
         LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.ge(PurchaseLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay())  // 澶т簬绛変簬鏈湀绗竴澶�
                 .lt(PurchaseLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
-
         // 鎵ц鏌ヨ骞惰绠楁�诲拰
         List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(queryWrapper);
-        if(CollectionUtils.isEmpty(purchaseLedgers)){
-            return homeBusinessDto;
+        if(!CollectionUtils.isEmpty(purchaseLedgers)){
+            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>();
+            salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2)
+                    .in(SalesLedgerProduct::getSalesLedgerId, purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList()));
+            List<SalesLedgerProduct> salesLedgerProductsCopy = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapperCopy);
+            // 鍚堣鍚堝悓閲戦
+            BigDecimal receiveAmount = purchaseLedgers.stream()
+                    .map(PurchaseLedger::getContractAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            // 鏈紑绁ㄩ噾棰�
+            BigDecimal unReceiptPaymentAmount = salesLedgerProductsCopy.stream()
+                    .map(SalesLedgerProduct::getNoInvoiceAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            homeBusinessDto.setMonthPurchaseMoney(receiveAmount.setScale(2, RoundingMode.HALF_UP).toString());
+            homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString());
         }
-
-        LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>();
-        salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 2)
-                .in(SalesLedgerProduct::getSalesLedgerId, purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList()));
-        List<SalesLedgerProduct> salesLedgerProductsCopy = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapperCopy);
-        // 鍚堣鍚堝悓閲戦
-        BigDecimal receiveAmount = purchaseLedgers.stream()
-                .map(PurchaseLedger::getContractAmount)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 鏈紑绁ㄩ噾棰�
-        BigDecimal unReceiptPaymentAmount = salesLedgerProductsCopy.stream()
-                .map(SalesLedgerProduct::getNoInvoiceAmount)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-
         // 缁熻搴撳瓨
         List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordStorageMapper.selectList(null);
         BigDecimal stockAmount = procurementRecordStorages.stream()
                 .map(ProcurementRecordStorage::getInboundNum)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 鑷畾涔夊簱瀛�
+        List<CustomStorage> customStorages = customStorageMapper.selectList(null);
+        BigDecimal customStockAmount = customStorages.stream()
+                .map(CustomStorage::getInboundNum)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
         List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(null);
@@ -149,7 +162,7 @@
                 .map(ProcurementRecordOut::getInboundNum)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
-        BigDecimal stock = stockAmount.subtract(outboundAmount);
+        BigDecimal stock = stockAmount.add(customStockAmount).subtract(outboundAmount);
         // 鑾峰彇褰撳ぉ鍏ュ簱鏁伴噺
         LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
         procurementRecordStorageLambdaQueryWrapper.ge(ProcurementRecordStorage::getCreateTime, now)  // 澶т簬绛変簬褰撳ぉ
@@ -159,9 +172,6 @@
                 .map(ProcurementRecordStorage::getInboundNum)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
-
-        homeBusinessDto.setMonthPurchaseMoney(receiveAmount.setScale(2, RoundingMode.HALF_UP).toString());
-        homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString());
         homeBusinessDto.setInventoryNum(stock.setScale(2, RoundingMode.HALF_UP).toString());
         homeBusinessDto.setTodayInventoryNum(stockAmount1.setScale(2, RoundingMode.HALF_UP).toString());
         return homeBusinessDto;
@@ -261,50 +271,83 @@
 
     @Override
     public QualityStatisticsDto qualityStatistics() {
-        // 鑾峰彇涓�鍛ㄦ暟鎹�
-        // 鑾峰彇褰撳墠鏃堕棿
+        // 鑾峰彇杩戝洓涓湀鏁版嵁锛堝線鍓嶆帹涓変釜鏈堬紝鍏�4涓畬鏁存湀浠斤級
         LocalDate today = LocalDate.now();
-        // 鑾峰彇鏈懆鍛ㄤ竴
-        LocalDate startOfWeek = today.with(DayOfWeek.MONDAY);
-        // 鑾峰彇鏈懆鍛ㄦ棩
-        LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY);
-        LambdaQueryWrapper<QualityInspect> qualityInspectLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        qualityInspectLambdaQueryWrapper.ge(QualityInspect::getCheckTime, startOfWeek)
-                .gt(QualityInspect::getCheckTime, endOfWeek);
-        List<QualityInspect> qualityInspects = qualityStatisticsMapper.selectList(qualityInspectLambdaQueryWrapper);
+        // 瀹氫箟鏃ユ湡鏍煎紡鍖栧櫒锛堢敤浜庢樉绀衡�滃勾鏈堚�濇牸寮忥級
+        DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
+
         QualityStatisticsDto qualityStatisticsDto = new QualityStatisticsDto();
-        qualityStatisticsDto.setSupplierNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(0)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
-        qualityStatisticsDto.setProcessNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(1)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
-        qualityStatisticsDto.setFactoryNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(2)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
         List<QualityStatisticsItem> qualityStatisticsItems = new ArrayList<>();
-        for (int j = 1; j < 8; j++) {
-            LocalDate endTime = startOfWeek.plusDays(j);
-            LocalDate startTime = endTime.minusDays(1);
-            QualityStatisticsItem qualityStatisticsItem = new QualityStatisticsItem();
-            qualityStatisticsItem.setDate(startTime.toString());
-            qualityStatisticsItem.setSupplierNum(qualityInspects.stream()
-                    .filter(item -> item.getInspectType().equals(0) && "涓嶅悎鏍�".equals(item.getCheckResult())
-                            && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
-                            && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+
+        BigDecimal supplierNum = new BigDecimal(0);
+        BigDecimal factoryNum = new BigDecimal(0);
+        BigDecimal processNum = new BigDecimal(0);
+        // 寰幆4娆★紝鍒嗗埆缁熻杩�4涓湀鐨勬暟鎹紙褰撳墠鏈堛�佸墠1涓湀銆佸墠2涓湀銆佸墠3涓湀锛�
+        for (int i = 3; i >= 0; i--) {
+            // 璁$畻褰撳墠寰幆瀵瑰簲鐨勬湀浠斤紙i=0锛氬綋鍓嶆湀锛宨=1锛氬墠1涓湀锛屼互姝ょ被鎺級
+            LocalDate currentMonth = today.minusMonths(i);
+            // 褰撴湀鐨勫紑濮嬫棩鏈燂紙姣忔湀1鍙凤級
+            LocalDate monthStart = currentMonth.withDayOfMonth(1);
+            // 褰撴湀鐨勭粨鏉熸棩鏈燂紙姣忔湀鏈�鍚庝竴澶╋級
+            LocalDate monthEnd = currentMonth.withDayOfMonth(currentMonth.lengthOfMonth());
+
+            // 鏋勫缓褰撴湀鐨勬煡璇㈡潯浠讹紙濡傛灉鎯充竴娆℃�ф煡鍏�4涓湀鏁版嵁鍐嶅唴瀛樼瓫閫夛紝鍙紭鍖栦负鍏堟煡鍏ㄥ啀寰幆绛涢�夛級
+            LambdaQueryWrapper<QualityInspect> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.ge(QualityInspect::getCheckTime, monthStart)
+                    .le(QualityInspect::getCheckTime, monthEnd); // 绛涢�夊綋鏈堟暟鎹�
+            List<QualityInspect> monthInspects = qualityStatisticsMapper.selectList(queryWrapper);
+            BigDecimal reduce = monthInspects.stream()
+                    .filter(inspect -> inspect.getInspectType().equals(0))
                     .map(QualityInspect::getQuantity)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add)
-            );
-            qualityStatisticsItem.setFactoryNum(qualityInspects.stream()
-                    .filter(item -> item.getInspectType().equals(1) && "涓嶅悎鏍�".equals(item.getCheckResult())
-                            && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
-                            && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            supplierNum = supplierNum.add(reduce);
+            BigDecimal reduce1 = monthInspects.stream()
+                    .filter(inspect -> inspect.getInspectType().equals(1))
                     .map(QualityInspect::getQuantity)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add)
-            );
-            qualityStatisticsItem.setProcessNum(qualityInspects.stream()
-                    .filter(item -> item.getInspectType().equals(2) && "涓嶅悎鏍�".equals(item.getCheckResult())
-                            && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
-                            && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            processNum= processNum.add(reduce1);
+            BigDecimal reduce2 = monthInspects.stream()
+                    .filter(inspect -> inspect.getInspectType().equals(2))
                     .map(QualityInspect::getQuantity)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add));
-            qualityStatisticsItems.add(qualityStatisticsItem);
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            factoryNum = factoryNum.add(reduce2);
+
+            // 鏋勫缓褰撴湀缁熻椤�
+            QualityStatisticsItem item = new QualityStatisticsItem();
+            item.setDate(monthStart.format(monthFormatter)); // 鏃ユ湡鏄剧ず涓衡�滃勾鏈堚�濓紙濡� 2025-10锛�
+
+            // 1. 渚涘簲鍟嗘楠岋紙绫诲瀷0锛�- 鍚堟牸鏁伴噺
+            BigDecimal supplierQualified = monthInspects.stream()
+                    .filter(inspect -> inspect.getInspectType().equals(0)
+                            && "鍚堟牸".equals(inspect.getCheckResult()))
+                    .map(QualityInspect::getQuantity)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            item.setSupplierNum(supplierQualified);
+
+            // 2. 宸ュ簭妫�楠岋紙绫诲瀷1锛�- 鍚堟牸鏁伴噺
+            BigDecimal processQualified = monthInspects.stream()
+                    .filter(inspect -> inspect.getInspectType().equals(1)
+                            && "鍚堟牸".equals(inspect.getCheckResult()))
+                    .map(QualityInspect::getQuantity)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            item.setProcessNum(processQualified);
+
+            // 3. 宸ュ巶妫�楠岋紙绫诲瀷2锛�- 鍚堟牸鏁伴噺
+            BigDecimal factoryQualified = monthInspects.stream()
+                    .filter(inspect -> inspect.getInspectType().equals(2)
+                            && "鍚堟牸".equals(inspect.getCheckResult()))
+                    .map(QualityInspect::getQuantity)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            item.setFactoryNum(factoryQualified);
+
+            qualityStatisticsItems.add(item);
         }
+        // 缁熻杩�4涓湀鎬绘暟鎹紙鎵�鏈夋湀浠芥眹鎬伙級
+        qualityStatisticsDto.setProcessNum(processNum);
+        qualityStatisticsDto.setSupplierNum(supplierNum);
+        qualityStatisticsDto.setFactoryNum(factoryNum);
         qualityStatisticsDto.setItem(qualityStatisticsItems);
+
         return qualityStatisticsDto;
     }
 
@@ -404,4 +447,24 @@
 
         return statisticsReceivablePayableDto;
     }
+
+    @Autowired
+    private DeviceRepairMapper deviceRepairMapper;
+
+    @Override
+    public Map<String, Object> approveAndDeviceTodos() {
+        // 瀹℃壒鍗忓悓寰呭姙
+        Long aLong = approveProcessMapper.selectCount(new LambdaQueryWrapper<ApproveProcess>()
+                .eq(ApproveProcess::getApproveUserCurrentId, SecurityUtils.getUserId())
+                .eq(ApproveProcess::getApproveDelete, 0)
+                .in(ApproveProcess::getApproveStatus, 0, 1, 3));
+        // 璁惧鎶ヤ慨寰呭姙
+        Long aLong1 = deviceRepairMapper.selectCount(new LambdaQueryWrapper<DeviceRepair>()
+                .eq(DeviceRepair::getStatus, 0)
+                .eq(DeviceRepair::getRepairName, SecurityUtils.getLoginUser().getNickName()));
+        return new HashMap<String, Object>() {{
+            put("approveTodo", aLong);
+            put("deviceRepairTodo", aLong1);
+        }};
+    }
 }

--
Gitblit v1.9.3