From c3a981e80973ac52b5988aca62b87409976c6fb1 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 18 六月 2026 13:09:28 +0800
Subject: [PATCH] 1.计量器具台账上传附件报错 2.质量拉的数据不对(未明确) 3.计量器具台账逾期的做标红提醒 4.设备保养定时任务和记录要加上具体的保养内容 5.质量要区分质检规则抽检还是全检,抽检的话是抽多少百分比 6.供应商管理东西太少了,没有资质文件啊这些东西(是不是可以参考pro) 7.采购审批把人从李莹莹改成龙红星

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  297 +++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 186 insertions(+), 111 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 e4e8888..59f244f 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -3,10 +3,18 @@
 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.bean.dto.purchase.PurchaseInboundDto;
+import com.ruoyi.account.bean.dto.purchase.PurchaseReturnDto;
+import com.ruoyi.account.bean.dto.sales.SalesOutboundDto;
+import com.ruoyi.account.bean.dto.sales.SalesReturnDto;
+import com.ruoyi.account.bean.vo.purchase.PurchaseInboundVo;
+import com.ruoyi.account.bean.vo.purchase.PurchaseReturnVo;
+import com.ruoyi.account.bean.vo.sales.SalesOutboundVo;
+import com.ruoyi.account.bean.vo.sales.SalesReturnVo;
 import com.ruoyi.account.mapper.AccountStatementMapper;
 import com.ruoyi.account.mapper.purchase.AccountPurchasePaymentMapper;
 import com.ruoyi.account.mapper.sales.AccountSalesCollectionMapper;
-import com.ruoyi.account.pojo.AccountStatement;
 import com.ruoyi.account.pojo.purchase.AccountPurchasePayment;
 import com.ruoyi.account.pojo.sales.AccountSalesCollection;
 import com.ruoyi.approve.mapper.ApproveProcessMapper;
@@ -29,11 +37,13 @@
 import com.ruoyi.home.dto.*;
 import com.ruoyi.home.mapper.HomeMapper;
 import com.ruoyi.home.service.HomeService;
+import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
 import com.ruoyi.production.bean.dto.ProductionProductOutputDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
@@ -45,7 +55,9 @@
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.staff.mapper.StaffOnJobMapper;
 import com.ruoyi.staff.pojo.StaffOnJob;
+import com.ruoyi.stock.mapper.StockInRecordMapper;
 import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.mapper.StockOutRecordMapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -71,6 +83,10 @@
 public class HomeServiceImpl implements HomeService {
 
     private final SalesLedgerMapper salesLedgerMapper;
+    private final StockOutRecordMapper stockOutRecordMapper;
+    private final ReturnManagementMapper returnManagementMapper;
+    private final StockInRecordMapper stockInRecordMapper;
+    private final PurchaseReturnOrdersMapper purchaseReturnOrdersMapper;
 
     private final PurchaseLedgerMapper purchaseLedgerMapper;
 
@@ -163,6 +179,34 @@
             homeBusinessDto.setMonthPurchaseMoney(receiveAmount.setScale(2, RoundingMode.HALF_UP).toString());
             homeBusinessDto.setMonthPurchaseHaveMoney(BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP).toString());
         }
+
+        // 涓婃湀閿�鍞噾棰�
+        YearMonth lastMonth = currentMonth.minusMonths(1);
+        LambdaQueryWrapper<SalesLedger> lastMonthSalesWrapper = new LambdaQueryWrapper<>();
+        lastMonthSalesWrapper.ge(SalesLedger::getEntryDate, lastMonth.atDay(1).atStartOfDay())
+                .lt(SalesLedger::getEntryDate, lastMonth.plusMonths(1).atDay(1).atStartOfDay());
+        List<SalesLedger> lastMonthSalesLedgers = salesLedgerMapper.selectList(lastMonthSalesWrapper);
+        if (!CollectionUtils.isEmpty(lastMonthSalesLedgers)) {
+            BigDecimal lastMonthContractAmount = lastMonthSalesLedgers.stream()
+                    .map(SalesLedger::getContractAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            homeBusinessDto.setLastMonthSaleMoney(lastMonthContractAmount.setScale(2, RoundingMode.HALF_UP).toString());
+        }
+
+        // 涓婃湀閲囪喘閲戦
+        LambdaQueryWrapper<PurchaseLedger> lastMonthPurchaseWrapper = new LambdaQueryWrapper<>();
+        lastMonthPurchaseWrapper.ge(PurchaseLedger::getEntryDate, lastMonth.atDay(1).atStartOfDay())
+                .lt(PurchaseLedger::getEntryDate, lastMonth.plusMonths(1).atDay(1).atStartOfDay());
+        List<PurchaseLedger> lastMonthPurchaseLedgers = purchaseLedgerMapper.selectList(lastMonthPurchaseWrapper);
+        if (!CollectionUtils.isEmpty(lastMonthPurchaseLedgers)) {
+            BigDecimal lastMonthPurchaseAmount = lastMonthPurchaseLedgers.stream()
+                    .map(PurchaseLedger::getContractAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            homeBusinessDto.setLastMonthPurchaseMoney(lastMonthPurchaseAmount.setScale(2, RoundingMode.HALF_UP).toString());
+        }
+
         // 缁熻搴撳瓨
         BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal();
         homeBusinessDto.setInventoryNum(stockQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
@@ -417,14 +461,26 @@
         LocalDate startDate = range[0];
         LocalDate endDate = range[1];
 
+        //閿�鍞嚭搴�
         BigDecimal receivableBase = sumSalesContractAmount(startDate, endDate);
+        //閿�鍞��璐�
+        BigDecimal salesReturnAmount = sumSalesReturnAmount(startDate, endDate);
+        //閲囪喘鍏ュ簱
         BigDecimal payableBase = sumPurchaseContractAmount(startDate, endDate);
+        //閲囪喘閫�璐�
+        BigDecimal purchaseReturnAmount = sumPurchaseReturnAmount(startDate, endDate);
+        //鏀舵
         BigDecimal advanceMoney = sumCollectionAmount(startDate, endDate);
+        //浠樻
         BigDecimal prepayMoney = sumPaymentAmount(startDate, endDate);
 
-        dto.setReceivableMoney(scaleMoney(maxZero(receivableBase.subtract(advanceMoney))));
-        dto.setPayableMoney(scaleMoney(maxZero(payableBase.subtract(prepayMoney))));
+        //搴旀敹閲戦=閿�鍞嚭搴�-閿�鍞��璐�
+        dto.setReceivableMoney(scaleMoney(maxZero(receivableBase.subtract(salesReturnAmount))));
+        //搴斾粯閲戦=閲囪喘鍏ュ簱-閲囪喘閫�璐�
+        dto.setPayableMoney(scaleMoney(maxZero(payableBase.subtract(purchaseReturnAmount))));
+        //鏀舵閲戦=鏀舵鍗�
         dto.setAdvanceMoney(scaleMoney(advanceMoney));
+        //浠樻閲戦=浠樻鍗�
         dto.setPrepayMoney(scaleMoney(prepayMoney));
         return dto;
     }
@@ -1239,33 +1295,21 @@
         YearMonth currentMonth = YearMonth.from(today);
         LocalDate startDate = currentMonth.atDay(1);
         LocalDate endDate = currentMonth.atEndOfMonth();
-
+        //鏀舵
         BigDecimal monthlyIncome = sumCollectionAmount(startDate, endDate);
+        //閿�鍞嚭搴�
         BigDecimal receivableBase = sumSalesContractAmount(startDate, endDate);
-        String collectionRate = toRateString(monthlyIncome, receivableBase);
-
-        String currentMonthText = currentMonth.toString();
-        List<AccountStatement> receivableStatements = defaultList(accountStatementMapper.selectList(
-                new LambdaQueryWrapper<AccountStatement>()
-                        .eq(AccountStatement::getAccountType, 1)
-                        .le(AccountStatement::getStatementMonth, currentMonthText)));
-
-        long overdueNum = receivableStatements.stream()
-                .filter(item -> item.getStatementMonth() != null && item.getStatementMonth().compareTo(currentMonthText) < 0)
-                .filter(item -> defaultDecimal(item.getClosingBalance()).compareTo(BigDecimal.ZERO) > 0)
-                .count();
-
-        long totalReceivableCount = receivableStatements.size();
-        String overdueRate = totalReceivableCount == 0
-                ? "0.00"
-                : BigDecimal.valueOf(overdueNum)
-                .multiply(BigDecimal.valueOf(100))
-                .divide(BigDecimal.valueOf(totalReceivableCount), 2, RoundingMode.HALF_UP)
-                .toString();
-
+        //閿�鍞��璐�
+        BigDecimal salesReturnAmount = sumSalesReturnAmount(startDate, endDate);
+        //鍥炴鐜�=鏀舵/(閿�鍞嚭搴�-閿�鍞��璐�)搴旀敹
+        String collectionRate = toRateString(monthlyIncome, receivableBase.subtract(salesReturnAmount));
+        //閫炬湡鏁�=(閿�鍞嚭搴撻噾棰�-閿�鍞��璐ч噾棰�)搴旀敹閲戦-鏀舵閲戦
+        BigDecimal overdueAmount = receivableBase.subtract(salesReturnAmount).subtract(monthlyIncome);
+        //閫炬湡鐜�=閫炬湡鏁�/搴旀敹閲戦
+        String overdueRate = toRateString(overdueAmount, receivableBase);
         dto.setMonthlyIncome(scaleMoney(monthlyIncome));
         dto.setCollectionRate(collectionRate);
-        dto.setOverdueNum(BigDecimal.valueOf(overdueNum));
+        dto.setOverdueNum(overdueAmount);
         dto.setOverdueRate(overdueRate);
         return dto;
     }
@@ -1277,16 +1321,25 @@
         YearMonth currentMonth = YearMonth.from(today);
         LocalDate startDate = currentMonth.atDay(1);
         LocalDate endDate = currentMonth.atEndOfMonth();
-
+        //鏀嚭
         BigDecimal monthlyExpenditure = sumPaymentAmount(startDate, endDate);
+        //閲囪喘鍏ュ簱
         BigDecimal payableBase = sumPurchaseContractAmount(startDate, endDate);
+        //閲囪喘閫�璐�
+        BigDecimal purchaseReturnAmount = sumPurchaseReturnAmount(startDate, endDate);
+        //浠樻鐜�=浠樻/(閲囪喘鍏ュ簱-閲囪喘閫�璐�)搴斾粯
+        String paymentRate = toRateString(monthlyExpenditure, payableBase.subtract(purchaseReturnAmount));
+        //鏀舵
         BigDecimal monthlyIncome = sumCollectionAmount(startDate, endDate);
+        //姣涘埄娑�= 鏀舵-鏀嚭
         BigDecimal grossProfit = monthlyIncome.subtract(monthlyExpenditure);
+        //鍒╂鼎鐜�=姣涘埄娑�/鏀舵
+        String profitMarginRate = toRateString(grossProfit, monthlyIncome);
 
         dto.setMonthlyExpenditure(scaleMoney(monthlyExpenditure));
-        dto.setPaymentRate(toRateString(monthlyExpenditure, payableBase));
+        dto.setPaymentRate(paymentRate);
         dto.setGrossProfit(scaleMoney(grossProfit));
-        dto.setProfitMarginRate(toRateString(grossProfit, monthlyIncome));
+        dto.setProfitMarginRate(profitMarginRate);
         return dto;
     }
 
@@ -1668,14 +1721,15 @@
         LocalDate endDate = range[1];
 
         String startStr = startDate.toString();
-        String endStr = endDate.toString();
+        // 浣跨敤鍖洪棿鍙冲紑锛�< endDate + 1 澶╋級淇濊瘉妫�娴嬫椂闂村惈鏃跺垎绉掓椂涔熻兘瑕嗙洊鍒� endDate 褰撳ぉ
+        String endExclusiveStr = endDate.plusDays(1).toString();
 
         List<QualityInspect> list = qualityInspectMapper.selectList(
                 new LambdaQueryWrapper<QualityInspect>()
                         .eq(QualityInspect::getInspectType, inspectType)
                         .eq(QualityInspect::getInspectState, 1)
                         .ge(QualityInspect::getCheckTime, startStr)
-                        .le(QualityInspect::getCheckTime, endStr));
+                        .lt(QualityInspect::getCheckTime, endExclusiveStr));
 
         return buildQualifiedAnalysis(list);
     }
@@ -1714,8 +1768,8 @@
         QualityQualifiedAnalysisDto dto = new QualityQualifiedAnalysisDto();
 
         if (CollectionUtils.isEmpty(list)) {
-            dto.setQualifiedCount(0);
-            dto.setUnqualifiedCount(0);
+            dto.setQualifiedCount(BigDecimal.valueOf(0));
+            dto.setUnqualifiedCount(BigDecimal.valueOf(0));
             dto.setQualifiedRate(BigDecimal.ZERO.setScale(2));
             dto.setUnqualifiedRate(BigDecimal.ZERO.setScale(2));
             return dto;
@@ -1731,8 +1785,8 @@
 
         BigDecimal totalCount = qualifiedCount.add(unqualifiedCount);
 
-        dto.setQualifiedCount(qualifiedCount.intValue());
-        dto.setUnqualifiedCount(unqualifiedCount.intValue());
+        dto.setQualifiedCount(qualifiedCount);
+        dto.setUnqualifiedCount(unqualifiedCount);
 
         if (totalCount.compareTo(BigDecimal.ZERO) == 0) {
             dto.setQualifiedRate(BigDecimal.ZERO.setScale(2));
@@ -1755,74 +1809,64 @@
 
     @Override
     public QualityInspectionCountDto qualityInspectionCount() {
-        String todayStr = LocalDate.now().toString();
-        String prevDayStr = LocalDate.now().minusDays(1).toString();
-        // 鏌ヨ鍑烘埅姝粖鏃ョ殑鎬绘楠屾暟
-        List<QualityInspect> todayList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
-                .le(QualityInspect::getCheckTime, todayStr));
-        // 鏌ヨ鍑烘埅姝㈠墠涓�澶╃殑鎬绘楠屾暟
-        List<QualityInspect> prevList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
-                .le(QualityInspect::getCheckTime, prevDayStr));
-        // 璁$畻浠婃棩鐨勬�绘楠屾暟
-        BigDecimal todayCount = todayList.stream()
-                .map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 璁$畻鍓嶄竴澶╃殑鎬绘楠屾暟
-        BigDecimal prevCount = prevList.stream()
-                .map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        LocalDate today = LocalDate.now();
+        String todayStartStr = today.toString();
+        String tomorrowStartStr = today.plusDays(1).toString();
+        String yesterdayStartStr = today.minusDays(1).toString();
 
-        // 璁$畻浠婃棩鐩稿鏄ㄥぉ鐨勪竴涓�绘瘮澧為暱
-        BigDecimal growthRate = calcGrowthRate(todayCount, prevCount);
+        // 绱鎬绘楠屾暟锛堟埅姝粖鏃� 24:00 涔嬪墠鐨勬墍鏈夎褰曪級
+        BigDecimal totalCount = sumInspectQuantity(null, tomorrowStartStr, null);
+        // 浠婃棩鍗曟棩妫�楠屾暟
+        BigDecimal todayCount = sumInspectQuantity(todayStartStr, tomorrowStartStr, null);
+        // 鏄ㄦ棩鍗曟棩妫�楠屾暟
+        BigDecimal yesterdayCount = sumInspectQuantity(yesterdayStartStr, todayStartStr, null);
+        // 鎬绘楠屾暟鍚屾瘮澧為暱 = (浠婃棩鍗曟棩 - 鏄ㄦ棩鍗曟棩) / 鏄ㄦ棩鍗曟棩 脳 100%
+        BigDecimal growthRate = calcGrowthRate(todayCount, yesterdayCount);
 
-        // 璁$畻浠婂ぉ鐨勫緟瀹屾垚鏁伴噺
-        List<QualityInspect> todayPendingList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
-                .eq(QualityInspect::getInspectState, 0)
-                .eq(QualityInspect::getCheckTime, todayStr));
+        // 浠婃棩寰呭畬鎴愶紙inspectState=0锛�
+        BigDecimal todayPendingCount = sumInspectQuantity(todayStartStr, tomorrowStartStr, 0);
+        BigDecimal yesterdayPendingCount = sumInspectQuantity(yesterdayStartStr, todayStartStr, 0);
+        BigDecimal todayPendingCountGrowthRate = calcGrowthRate(todayPendingCount, yesterdayPendingCount);
 
-        // 璁$畻鍓嶄竴澶╃殑寰呭畬鎴愭暟閲�
-        List<QualityInspect> prevPendingList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
-                .eq(QualityInspect::getInspectState, 0)
-                .eq(QualityInspect::getCheckTime, prevDayStr));
-        // 璁$畻浠婂ぉ鐨勫緟瀹屾垚鏁伴噺
-        BigDecimal todayPendingCount = todayPendingList.stream()
-                .map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 浠婃棩宸插畬鎴愶紙inspectState=1锛�
+        BigDecimal todayCompletedCount = sumInspectQuantity(todayStartStr, tomorrowStartStr, 1);
+        BigDecimal yesterdayCompletedCount = sumInspectQuantity(yesterdayStartStr, todayStartStr, 1);
+        BigDecimal todayCompletedCountGrowthRate = calcGrowthRate(todayCompletedCount, yesterdayCompletedCount);
 
-        // 璁$畻鍓嶄竴澶╃殑寰呭畬鎴愭暟閲�
-        BigDecimal prevPendingCount = prevPendingList.stream()
-                .map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 璁$畻浠婂ぉ鐨勫緟瀹屾垚鏁伴噺鐩稿鏄ㄥぉ鐨勪竴涓悓姣斿闀�
-        BigDecimal todayPendingCountGrowthRate = calcGrowthRate(todayPendingCount, prevPendingCount);
-        // 璁$畻浠婂ぉ鐨勫凡瀹屾垚鏁伴噺
-        List<QualityInspect> todayCompletedList = qualityInspectMapper
-                .selectList(new LambdaQueryWrapper<QualityInspect>()
-                        .eq(QualityInspect::getInspectState, 1)
-                        .eq(QualityInspect::getCheckTime, todayStr));
-        // 璁$畻鍓嶄竴澶╃殑宸插畬鎴愭暟閲�
-        List<QualityInspect> prevCompletedList = qualityInspectMapper
-                .selectList(new LambdaQueryWrapper<QualityInspect>()
-                        .eq(QualityInspect::getInspectState, 1)
-                        .eq(QualityInspect::getCheckTime, prevDayStr));
-        // 璁$畻浠婂ぉ鐨勫凡瀹屾垚鏁伴噺
-        BigDecimal todayCompletedCount = todayCompletedList.stream()
-                .map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 璁$畻鍓嶄竴澶╃殑宸插畬鎴愭暟閲�
-        BigDecimal prevCompletedCount = prevCompletedList.stream()
-                .map(QualityInspect::getQuantity)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 璁$畻浠婂ぉ鐨勫凡瀹屾垚鏁伴噺鐩稿鏄ㄥぉ鐨勪竴涓悓姣斿闀�
-        BigDecimal todayCompletedCountGrowthRate = calcGrowthRate(todayCompletedCount, prevCompletedCount);
         QualityInspectionCountDto dto = new QualityInspectionCountDto();
-        dto.setTotalCount(todayCount);
+        dto.setTotalCount(totalCount);
         dto.setTotalCountGrowthRate(growthRate);
         dto.setTodayPendingCount(todayPendingCount);
         dto.setTodayPendingCountGrowthRate(todayPendingCountGrowthRate);
         dto.setTodayCompletedCount(todayCompletedCount);
         dto.setTodayCompletedCountGrowthRate(todayCompletedCountGrowthRate);
         return dto;
+    }
+
+    /**
+     * 閫氳繃 SQL SUM 鑱氬悎 quality_inspect.quantity锛岄伩鍏嶆妸鍏ㄨ〃鍔犺浇鍒板唴瀛�
+     */
+    private BigDecimal sumInspectQuantity(String startInclusive, String endExclusive, Integer inspectState) {
+        QueryWrapper<QualityInspect> wrapper = new QueryWrapper<>();
+        wrapper.select("COALESCE(SUM(quantity), 0) AS total");
+        if (startInclusive != null) {
+            wrapper.ge("check_time", startInclusive);
+        }
+        if (endExclusive != null) {
+            wrapper.lt("check_time", endExclusive);
+        }
+        if (inspectState != null) {
+            wrapper.eq("inspect_state", inspectState);
+        }
+        List<Map<String, Object>> rows = qualityInspectMapper.selectMaps(wrapper);
+        if (rows == null || rows.isEmpty()) {
+            return BigDecimal.ZERO;
+        }
+        Object total = rows.get(0).get("total");
+        if (total == null) {
+            return BigDecimal.ZERO;
+        }
+        return total instanceof BigDecimal ? (BigDecimal) total : new BigDecimal(total.toString());
     }
 
     private BigDecimal calcGrowthRate(BigDecimal today, BigDecimal prev) {
@@ -1839,14 +1883,14 @@
     public NonComplianceWarningDto nonComplianceWarning() {
         String[] range = lastSevenDaysDateRange();
         String startStr = range[0];
-        String endStr = range[1];
+        String endExclusiveStr = range[1];
 
         // 鏌ヨ杩戜竷澶╁凡澶勭悊涓嶅悎鏍兼暟鎹�
         List<QualityUnqualified> list = qualityUnqualifiedMapper.selectList(
                 new LambdaQueryWrapper<QualityUnqualified>()
                         .eq(QualityUnqualified::getInspectState, 1)
                         .ge(QualityUnqualified::getCheckTime, startStr)
-                        .le(QualityUnqualified::getCheckTime, endStr));
+                        .lt(QualityUnqualified::getCheckTime, endExclusiveStr));
 
         NonComplianceWarningDto dto = new NonComplianceWarningDto();
 
@@ -1945,24 +1989,24 @@
     }
 
     /**
-     * 鑾峰彇杩戜竷澶╃殑鏃ユ湡鍖洪棿锛堜粎鍚勾鏈堟棩锛�
+     * 鑾峰彇杩戜竷澶╃殑鏃ユ湡鍖洪棿锛堜粎鍚勾鏈堟棩锛夛細杩斿洖 [start, endExclusive] 鈥斺�� endExclusive 鏄粖澶� + 1 澶╋紝渚夸簬浣跨敤 lt 鍖呭惈浠婂ぉ鍏ㄩ儴
      */
     public static String[] lastSevenDaysDateRange() {
         LocalDate today = LocalDate.now();
-        return new String[]{today.minusDays(6).toString(), today.toString()};
+        return new String[]{today.minusDays(6).toString(), today.plusDays(1).toString()};
     }
 
     @Override
     public List<CompletedInspectionCountDto> completedInspectionCount() {
         String[] range = lastSevenDaysDateRange();
         String startStr = range[0];
-        String endStr = range[1];
+        String endExclusiveStr = range[1];
 
         // 鏌ヨ杩戜竷澶╁凡瀹屾垚鐨勬楠屾暟鎹�
         List<QualityInspect> list = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
                 .eq(QualityInspect::getInspectState, 1)
                 .ge(QualityInspect::getCheckTime, startStr)
-                .le(QualityInspect::getCheckTime, endStr));
+                .lt(QualityInspect::getCheckTime, endExclusiveStr));
 
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd");
 
@@ -2014,8 +2058,15 @@
     @Override
     public List<UnqualifiedProductRankDto> unqualifiedProductRanking() {
 
+        // 闄愬畾杩� 30 澶╋紝閬垮厤鍏ㄨ〃鍔犺浇
+        LocalDate today = LocalDate.now();
+        String startStr = today.minusDays(29).toString();
+        String endExclusiveStr = today.plusDays(1).toString();
+
         List<QualityInspect> list = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
-                .eq(QualityInspect::getInspectState, 1));
+                .eq(QualityInspect::getInspectState, 1)
+                .ge(QualityInspect::getCheckTime, startStr)
+                .lt(QualityInspect::getCheckTime, endExclusiveStr));
 
         if (CollectionUtils.isEmpty(list)) {
             return new ArrayList<>();
@@ -2166,7 +2217,7 @@
         List<QualityInspect> qualityInspectList = qualityInspectMapper
                 .selectList(new LambdaQueryWrapper<QualityInspect>()
                         .ge(QualityInspect::getCheckTime, startDate.toString())
-                        .le(QualityInspect::getCheckTime, endDate.toString())
+                        .lt(QualityInspect::getCheckTime, endDate.plusDays(1).toString())
                         .eq(QualityInspect::getInspectState, 1));
 
         QualityStatisticsDto dto = new QualityStatisticsDto();
@@ -2241,15 +2292,15 @@
 
         // 缁熻姣忕妫�楠岀被鍨嬬殑涓嶅悎鏍兼暟閲�
         item.setSupplierNum(list.stream()
-                .filter(i -> i.getInspectType() == 0)
+                .filter(i -> Objects.equals(i.getInspectType(), 0))
                 .map(i -> i.getUnqualifiedQuantity() != null ? i.getUnqualifiedQuantity() : BigDecimal.ZERO)
                 .reduce(BigDecimal.ZERO, BigDecimal::add));
         item.setProcessNum(list.stream()
-                .filter(i -> i.getInspectType() == 1)
+                .filter(i -> Objects.equals(i.getInspectType(), 1))
                 .map(i -> i.getUnqualifiedQuantity() != null ? i.getUnqualifiedQuantity() : BigDecimal.ZERO)
                 .reduce(BigDecimal.ZERO, BigDecimal::add));
         item.setFactoryNum(list.stream()
-                .filter(i -> i.getInspectType() == 2)
+                .filter(i -> Objects.equals(i.getInspectType(), 2))
                 .map(i -> i.getUnqualifiedQuantity() != null ? i.getUnqualifiedQuantity() : BigDecimal.ZERO)
                 .reduce(BigDecimal.ZERO, BigDecimal::add));
 
@@ -2317,20 +2368,43 @@
         return new LocalDate[]{startDate, endDate};
     }
 
+    //璁$畻鏃ユ湡鍐呯殑閿�鍞嚭搴撻噾棰�
     private BigDecimal sumSalesContractAmount(LocalDate startDate, LocalDate endDate) {
-        List<SalesLedger> salesLedgers = defaultList(salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
-                .ge(SalesLedger::getEntryDate, toDate(startDate))
-                .lt(SalesLedger::getEntryDate, toExclusiveEndDate(endDate))));
-        return sumAmount(salesLedgers, SalesLedger::getContractAmount);
+        SalesOutboundDto salesOutboundDto = new SalesOutboundDto();
+        salesOutboundDto.setStartDate(startDate);
+        salesOutboundDto.setEndDate(endDate);
+        List<SalesOutboundVo> salesOutboundVos = stockOutRecordMapper.listPageAccountSales(new Page(1, -1), salesOutboundDto).getRecords();
+        return sumAmount(salesOutboundVos, SalesOutboundVo::getOutboundAmount);
     }
 
+    //璁$畻鏃ユ湡鍐呯殑閿�鍞��璐ч噾棰�
+    private BigDecimal sumSalesReturnAmount(LocalDate startDate, LocalDate endDate) {
+        SalesReturnDto salesReturnDto = new SalesReturnDto();
+        salesReturnDto.setStartDate(startDate);
+        salesReturnDto.setEndDate(endDate);
+        List<SalesReturnVo> salesReturnVos = returnManagementMapper.listPageAccountSalesReturn(new Page(1, -1), salesReturnDto).getRecords();
+        return sumAmount(salesReturnVos, SalesReturnVo::getRefundAmount);
+    }
+
+    //璁$畻鏃ユ湡鍐呯殑閲囪喘鍏ュ簱閲戦
     private BigDecimal sumPurchaseContractAmount(LocalDate startDate, LocalDate endDate) {
-        List<PurchaseLedger> purchaseLedgers = defaultList(purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
-                .ge(PurchaseLedger::getEntryDate, toDate(startDate))
-                .lt(PurchaseLedger::getEntryDate, toExclusiveEndDate(endDate))));
-        return sumAmount(purchaseLedgers, PurchaseLedger::getContractAmount);
+        PurchaseInboundDto purchaseInboundDto = new PurchaseInboundDto();
+        purchaseInboundDto.setStartDate(startDate);
+        purchaseInboundDto.setEndDate(endDate);
+        List<PurchaseInboundVo> purchaseInboundVos = stockInRecordMapper.listPageAccountPurchase(new Page(1, -1), purchaseInboundDto).getRecords();
+        return sumAmount(purchaseInboundVos, PurchaseInboundVo::getInboundAmount);
     }
 
+    //璁$畻鏃ユ湡鍐呯殑閲囪喘閫�璐ч噾棰�
+    private BigDecimal sumPurchaseReturnAmount(LocalDate startDate, LocalDate endDate) {
+        PurchaseReturnDto purchaseReturnDto = new PurchaseReturnDto();
+        purchaseReturnDto.setStartDate(startDate);
+        purchaseReturnDto.setEndDate(endDate);
+        List<PurchaseReturnVo> purchaseReturnVos = purchaseReturnOrdersMapper.listPageAccountPurchaseReturn(new Page(1, -1), purchaseReturnDto).getRecords();
+        return sumAmount(purchaseReturnVos, PurchaseReturnVo::getTotalAmount);
+    }
+
+    //璁$畻鏃ユ湡鍐呯殑鎬绘敹娆鹃噾棰�
     private BigDecimal sumCollectionAmount(LocalDate startDate, LocalDate endDate) {
         List<AccountSalesCollection> collections = defaultList(accountSalesCollectionMapper.selectList(
                 new LambdaQueryWrapper<AccountSalesCollection>()
@@ -2339,6 +2413,7 @@
         return sumAmount(collections, AccountSalesCollection::getCollectionAmount);
     }
 
+    //璁$畻鏃ユ湡鍐呯殑鎬讳粯娆鹃噾棰�
     private BigDecimal sumPaymentAmount(LocalDate startDate, LocalDate endDate) {
         List<AccountPurchasePayment> payments = defaultList(accountPurchasePaymentMapper.selectList(
                 new LambdaQueryWrapper<AccountPurchasePayment>()

--
Gitblit v1.9.3