From 2ab6b6860e4f7bee67a0f66831b9b1fb0f420710 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期三, 22 四月 2026 10:45:01 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' of http://114.132.189.42:9002/r/product-inventory-management-after into dev_New_pro

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  120 +++++++++++++++++++++++------------------------------------
 1 files changed, 47 insertions(+), 73 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..628dfd5 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -3,16 +3,13 @@
 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;
@@ -27,20 +24,10 @@
 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.pojo.ProductWorkOrder;
+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.PaymentRegistrationMapper;
@@ -114,10 +101,7 @@
     private NoticeMapper noticeMapper;
 
     @Autowired
-    private ProductOrderMapper productOrderMapper;
-
-    @Autowired
-    private ProductWorkOrderMapper productWorkOrderMapper;
+    private ProductionOrderMapper productionOrderMapper;
 
     @Autowired
     private ProductMapper productMapper;
@@ -144,7 +128,7 @@
     private QualityUnqualifiedMapper qualityUnqualifiedMapper;
 
     @Autowired
-    private ProductProcessMapper productProcessMapper;
+    private ProductionOperationTaskMapper productionOperationTaskMapper;
     
     @Autowired
     private AccountExpenseMapper accountExpenseMapper;
@@ -560,18 +544,15 @@
     @Override
     public ProductionProgressDto productionProgress() {
         ProductionProgressDto productionProgressDto = new ProductionProgressDto();
-        ProductOrderDto orderDto = new ProductOrderDto();
-        orderDto.setStartTime(LocalDateTime.now().minusMonths(1));
-        orderDto.setEndTime(LocalDateTime.now());
-        List<ProductOrderDto> productOrderDtos = productOrderMapper.pageProductOrder(new Page<>(1, -1), orderDto)
-                .getRecords();
-        productionProgressDto.setCompletedOrderDetails(productOrderDtos);
-        long totalCount = productOrderDtos.size();
-        long count = productOrderDtos.stream().filter(
-                        productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(productOrderDto.getQuantity()) >= 0)
+        List<ProductionProgressOrderDto> orderDetails = productionOrderMapper.selectProgressOrders(
+                LocalDateTime.now().minusMonths(1), LocalDateTime.now());
+        productionProgressDto.setCompletedOrderDetails(orderDetails);
+        long totalCount = orderDetails.size();
+        long count = orderDetails.stream().filter(
+                        item -> defaultDecimal(item.getCompleteQuantity()).compareTo(defaultDecimal(item.getQuantity())) >= 0)
                 .count();
-        long count2 = productOrderDtos.stream()
-                .filter(productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(BigDecimal.ZERO) == 0)
+        long count2 = orderDetails.stream()
+                .filter(item -> defaultDecimal(item.getCompleteQuantity()).compareTo(BigDecimal.ZERO) == 0)
                 .count();
         productionProgressDto.setTotalOrderCount(totalCount);
         productionProgressDto.setCompletedOrderCount(count);
@@ -583,15 +564,11 @@
     @Override
     public ProductionTurnoverDto workInProcessTurnover() {
         ProductionTurnoverDto productionTurnoverDto = new ProductionTurnoverDto();
-        ProductWorkOrderDto workOrder = new ProductWorkOrderDto();
-        workOrder.setPlanStartTime(LocalDate.now().minusMonths(1));
-        workOrder.setPlanEndTime(LocalDate.now());
-        List<ProductWorkOrderDto> productWorkOrders = productWorkOrderMapper
-                .pageProductWorkOrder(new Page<>(1, -1), workOrder).getRecords();
-        long sum = productWorkOrders.stream()
-                .filter(productWorkOrder -> productWorkOrder.getPlanQuantity()
-                        .compareTo(productWorkOrder.getCompleteQuantity()) > 0)
-                .map(ProductWorkOrder::getPlanQuantity)
+        List<ProductionTaskStatisticsDto> taskList = productionOperationTaskMapper
+                .selectTaskStatisticsByDate(LocalDate.now().minusMonths(1), LocalDate.now());
+        long sum = taskList.stream()
+                .filter(task -> defaultDecimal(task.getPlanQuantity()).compareTo(defaultDecimal(task.getCompleteQuantity())) > 0)
+                .map(ProductionTaskStatisticsDto::getPlanQuantity)
                 .mapToLong(BigDecimal::longValue)
                 .sum();
         if (sum == 0)
@@ -600,23 +577,21 @@
         productionTurnoverDto.setAverageTurnoverDays(BigDecimal.valueOf(sum).divide(
                 BigDecimal.valueOf(ChronoUnit.DAYS.between(LocalDateTime.now().minusMonths(1), LocalDateTime.now())), 2,
                 RoundingMode.HALF_UP));
-        long completeQuantity = productWorkOrders.stream()
-                .filter(productWorkOrder -> productWorkOrder.getCompleteQuantity()
-                        .compareTo(productWorkOrder.getPlanQuantity()) >= 0)
-                .map(ProductWorkOrder::getCompleteQuantity)
+        long completeQuantity = taskList.stream()
+                .filter(task -> defaultDecimal(task.getCompleteQuantity()).compareTo(defaultDecimal(task.getPlanQuantity())) >= 0)
+                .map(ProductionTaskStatisticsDto::getCompleteQuantity)
                 .mapToLong(BigDecimal::longValue)
                 .sum();
         productionTurnoverDto.setTurnoverEfficiency(
                 BigDecimal.valueOf(completeQuantity).divide(BigDecimal.valueOf(sum), 2, RoundingMode.HALF_UP));
-        Map<String, List<ProductWorkOrderDto>> map = productWorkOrders.stream()
-                .filter(productWorkOrder -> productWorkOrder.getPlanQuantity()
-                        .compareTo(productWorkOrder.getCompleteQuantity()) > 0)
-                .collect(Collectors.groupingBy(ProductWorkOrderDto::getProcessName));
+        Map<String, List<ProductionTaskStatisticsDto>> map = taskList.stream()
+                .filter(task -> defaultDecimal(task.getPlanQuantity()).compareTo(defaultDecimal(task.getCompleteQuantity())) > 0)
+                .collect(Collectors.groupingBy(ProductionTaskStatisticsDto::getProcessName));
         List<String> strings = new ArrayList<>();
         List<Long> processQuantityDetails = new ArrayList<>();
         map.entrySet().stream().forEach(entry -> {
             String key = entry.getKey();
-            long completeSum = entry.getValue().stream().map(ProductWorkOrderDto::getCompleteQuantity)
+            long completeSum = entry.getValue().stream().map(ProductionTaskStatisticsDto::getCompleteQuantity)
                     .mapToLong(BigDecimal::longValue).sum();
             strings.add(key);
             processQuantityDetails.add(completeSum);
@@ -1610,12 +1585,7 @@
                 break;
         }
 
-        ProductWorkOrderDto queryDto = new ProductWorkOrderDto();
-        queryDto.setPlanStartTime(startDate);
-        queryDto.setPlanEndTime(endDate);
-
-        List<ProductWorkOrderDto> list = productWorkOrderMapper.pageProductWorkOrder(new Page<>(1, -1), queryDto)
-                .getRecords();
+        List<ProductionTaskStatisticsDto> list = productionOperationTaskMapper.selectTaskStatisticsByDate(startDate, endDate);
 
         if (CollectionUtils.isEmpty(list)) {
             return new ArrayList<>();
@@ -1624,9 +1594,9 @@
         Map<String, BigDecimal> processOutputMap = list.stream()
                 .filter(item -> item.getProcessName() != null && item.getCompleteQuantity() != null)
                 .collect(Collectors.groupingBy(
-                        ProductWorkOrderDto::getProcessName,
+                        ProductionTaskStatisticsDto::getProcessName,
                         Collectors.reducing(BigDecimal.ZERO,
-                                ProductWorkOrderDto::getCompleteQuantity,
+                                ProductionTaskStatisticsDto::getCompleteQuantity,
                                 BigDecimal::add)));
 
         BigDecimal total = processOutputMap.values().stream()
@@ -1680,17 +1650,17 @@
         String startStr = startDate.atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
         String endStr = endDate.atTime(LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
 
-        List<ProductWorkOrderDto> startList = productWorkOrderMapper.selectWorkOrderStartStats(startStr, endStr);
+        List<ProductionTaskStatisticsDto> startList = productionOperationTaskMapper.selectTaskStartStats(startStr, endStr);
 
-        List<com.ruoyi.production.dto.ProductionProductOutputDto> outputList = productionProductOutputMapper
+        List<ProductionProductOutputDto> outputList = productionProductOutputMapper
                 .selectOutputStats(startStr, endStr);
 
         Map<String, WorkOrderEfficiencyDto> dateMap = new HashMap<>();
 
         if (!CollectionUtils.isEmpty(startList)) {
-            for (ProductWorkOrderDto item : startList) {
-                if (item.getPlanStartTime() != null) {
-                    String date = item.getPlanStartTime().toString();
+            for (ProductionTaskStatisticsDto item : startList) {
+                if (item.getActualStartTime() != null) {
+                    String date = item.getActualStartTime().toString();
                     WorkOrderEfficiencyDto dto = dateMap.getOrDefault(date, new WorkOrderEfficiencyDto());
                     dto.setDate(date);
                     BigDecimal qty = item.getPlanQuantity() != null ? item.getPlanQuantity() : BigDecimal.ZERO;
@@ -1702,7 +1672,7 @@
 
         // 瀹屽伐鏁伴噺鍜岃壇鍝佺巼
         if (!CollectionUtils.isEmpty(outputList)) {
-            for (com.ruoyi.production.dto.ProductionProductOutputDto item : outputList) {
+            for (ProductionProductOutputDto item : outputList) {
                 if (item.getCreateTime() != null) {
                     String date = item.getCreateTime().toLocalDate().toString();
                     WorkOrderEfficiencyDto dto = dateMap.getOrDefault(date, new WorkOrderEfficiencyDto());
@@ -1776,7 +1746,7 @@
     }
 
     @Autowired
-    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+    private ProductionAccountMapper salesLedgerProductionAccountingMapper;
 
     @Override
     public List<ProductionAccountingDto> productionAccountingAnalysis(Integer type) {
@@ -1841,16 +1811,16 @@
         String lastEnd = lastMonthDate.withDayOfMonth(lastMonthDate.lengthOfMonth()).atTime(LocalTime.MAX)
                 .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
 
-        int currentCreated = productOrderMapper.countCreated(currentStart, currentEnd);
-        int lastCreated = productOrderMapper.countCreated(lastStart, lastEnd);
+        int currentCreated = productionOrderMapper.countCreated(currentStart, currentEnd);
+        int lastCreated = productionOrderMapper.countCreated(lastStart, lastEnd);
         MapDto createdDto = createOrderCountDto("鐢熶骇璁㈠崟鏁�", currentCreated, lastCreated);
 
-        int currentCompleted = productOrderMapper.countCompleted(currentStart, currentEnd);
-        int lastCompleted = productOrderMapper.countCompleted(lastStart, lastEnd);
+        int currentCompleted = productionOrderMapper.countCompleted(currentStart, currentEnd);
+        int lastCompleted = productionOrderMapper.countCompleted(lastStart, lastEnd);
         MapDto completedDto = createOrderCountDto("宸插畬鎴愯鍗曟暟", currentCompleted, lastCompleted);
 
-        int currentPending = productOrderMapper.countPending(currentStart, currentEnd);
-        int lastPending = productOrderMapper.countPending(lastStart, lastEnd);
+        int currentPending = productionOrderMapper.countPending(currentStart, currentEnd);
+        int lastPending = productionOrderMapper.countPending(lastStart, lastEnd);
         MapDto pendingDto = createOrderCountDto("寰呯敓浜ц鍗曟暟", currentPending, lastPending);
 
         return Arrays.asList(createdDto, completedDto, pendingDto);
@@ -2510,6 +2480,10 @@
         LocalDateTime startDateTime = startDate.atStartOfDay();
         LocalDateTime endDateTime = endDate.atTime(LocalTime.MAX);
 
-        return productProcessMapper.calculateProductionStatistics(startDateTime, endDateTime, userId, processIds);
+        return productionOperationTaskMapper.calculateProductionStatistics(startDateTime, endDateTime, userId, processIds);
+    }
+
+    private BigDecimal defaultDecimal(BigDecimal value) {
+        return value == null ? BigDecimal.ZERO : value;
     }
 }

--
Gitblit v1.9.3