From 2c51e2bac7e271f6bd1a7da060e4ffd327d5a8d2 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 28 四月 2026 18:06:06 +0800
Subject: [PATCH] feat(production): 更新生产核算逻辑以支持设备和工时计算

---
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   41 ++++++++++++++++++++++++++---------------
 1 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index b09e03d..b1ae21e 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -48,12 +48,15 @@
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import static cn.hutool.core.date.LocalDateTimeUtil.between;
+
 @Service
 @AllArgsConstructor
 @Transactional(rollbackFor = Exception.class)
 public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
 
     private final SalesLedgerMapper salesLedgerMapper;
+    private final ProductionMachineRecordMapper productionMachineRecordMapper;
     private IQualityInspectService qualityInspectService;
     private ProductionProductMainMapper productionProductMainMapper;
 
@@ -368,21 +371,29 @@
 
             /*娣诲姞鐢熶骇鏍哥畻        鍖哄垎宸ュ簭鏄浠惰繕鏄鏃�*/
             BigDecimal workHours = productProcess.getSalaryQuota();
-            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
-            String userIds = productWorkOrder.getUserIds();
-            if (ObjectUtils.isNotEmpty(userIds)) {
-                for (String s : userIds.split(",")) {
-                    SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
-                            .productMainId(productionProductMain.getId())
-                            .schedulingUserId(Long.parseLong(s))
-                            .schedulingUserName(userMapper.selectUserById(Long.parseLong(s)).getNickName())
-                            .finishedNum(productQty)
-                            .workHours(workHours)
-                            .process(productProcess.getName())
-                            .schedulingDate(LocalDate.now())
-                            .tenantId(productionProductOutput.getTenantId())
-                            .build();
-                    salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
+            List<ProductionMachineRecord> productionMachineRecords = productionMachineRecordMapper.selectList(Wrappers.<ProductionMachineRecord>lambdaQuery().eq(ProductionMachineRecord::getWorkOrderId, productionProductMain.getWorkOrderId()));
+            if (ObjectUtils.isNotEmpty(productionMachineRecords)) {
+                for (ProductionMachineRecord productionMachineRecord : productionMachineRecords) {
+                    for (String s : productionMachineRecord.getOperatorId().split(",")) {
+                        Long minutes = 0L;
+                        if (productionMachineRecord.getMachineStartTime() != null) {
+                            minutes = between(productionMachineRecord.getMachineStartTime(), LocalDateTime.now()).toMinutes();
+                        }
+                        SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
+                                .productMainId(productionProductMain.getId())
+                                .schedulingUserId(Long.parseLong(s))
+                                .schedulingUserName(userMapper.selectUserById(Long.parseLong(s)).getNickName())
+                                .finishedNum(productQty)
+                                .workHours(workHours)
+                                .process(productProcess.getName())
+                                .schedulingDate(LocalDate.now())
+                                .tenantId(productionProductOutput.getTenantId())
+                                .deviceId(productionMachineRecord.getMachineId())
+                                .workHour(minutes)
+                                .build();
+                        salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
+                    }
+
                 }
             }
         }

--
Gitblit v1.9.3