From b360cb8bbd470a78fca1f576536b5e09ca5e9d43 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 10 三月 2026 11:34:12 +0800
Subject: [PATCH] bug修复

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java |  128 ++++++++++++++++++++++++++++++++++--------
 1 files changed, 104 insertions(+), 24 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
index 07ad4b6..a647b93 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
@@ -17,6 +17,7 @@
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.system.constant.DictTypeCode;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.entity.DictData;
 import com.vincent.rsf.server.system.entity.FieldsItem;
 import com.vincent.rsf.server.system.entity.User;
@@ -26,12 +27,17 @@
 import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.service.impl.FieldsItemServiceImpl;
 import com.vincent.rsf.server.system.service.impl.UserServiceImpl;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class PdaCheckOrderServiceImpl implements PdaCheckOrderService {
@@ -60,6 +66,12 @@
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private CheckOrderItemService checkOrderItemService;
+
+    @Autowired
+    private CheckOrderService checkOrderService;
+
 
     @Override
     public R getCheckList(String code) {
@@ -85,7 +97,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
@@ -113,7 +125,7 @@
         }
         Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()));
         if (null == task) {
-            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌瀹瑰櫒鐮佸搴旂洏鐐逛换鍔�");
+            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌鏂欑鐮佸搴旂洏鐐逛换鍔�");
         }
         for (CheckDiffItem ckDiffItem : params.getCheckDiffItems()) {
             CheckDiffItem diffItem = new CheckDiffItem();
@@ -199,6 +211,43 @@
             throw new CoolException("鏇存柊宸紓鍗曞け璐�");
         }
 
+        // 鎸夌洏鐐瑰崟鏄庣粏姹囨�诲疄鐩樻暟閲忓苟鍥炲啓
+        Set<Long> taskItemIds = diffItems.stream().map(CheckDiffItem::getTaskItemId).filter(Objects::nonNull).collect(Collectors.toSet());
+        if (!taskItemIds.isEmpty()) {
+            List<TaskItem> taskItems = taskItemService.listByIds(taskItemIds);
+            Map<Long, BigDecimal> orderItemIdToCheckQty = new HashMap<>();
+            for (CheckDiffItem di : diffItems) {
+                if (di.getTaskItemId() == null) {
+                    continue;
+                }
+                TaskItem ti = taskItems.stream().filter(t -> t.getId().equals(di.getTaskItemId())).findFirst().orElse(null);
+                if (ti == null || ti.getOrderItemId() == null) {
+                    continue;
+                }
+                Double cq = di.getCheckQty() != null ? di.getCheckQty() : 0.0;
+                orderItemIdToCheckQty.merge(ti.getOrderItemId(), BigDecimal.valueOf(cq), BigDecimal::add);
+            }
+            for (Map.Entry<Long, BigDecimal> e : orderItemIdToCheckQty.entrySet()) {
+                double workQty = e.getValue().setScale(6, RoundingMode.HALF_UP).doubleValue();
+                if (!checkOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>()
+                        .eq(WkOrderItem::getId, e.getKey())
+                        .set(WkOrderItem::getWorkQty, workQty))) {
+                    throw new CoolException("鐩樼偣鍗曟槑缁嗗疄鐩樻暟閲忔洿鏂板け璐�");
+                }
+            }
+            if (checkDiff.getOrderId() != null) {
+                List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, checkDiff.getOrderId()));
+                BigDecimal orderWorkQty = orderItems.stream()
+                        .map(oi -> oi.getWorkQty() != null ? BigDecimal.valueOf(oi.getWorkQty()) : BigDecimal.ZERO)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+                if (!checkOrderService.update(new LambdaUpdateWrapper<WkOrder>()
+                        .eq(WkOrder::getId, checkDiff.getOrderId())
+                        .set(WkOrder::getWorkQty, orderWorkQty.setScale(6, RoundingMode.HALF_UP).doubleValue()))) {
+                    throw new CoolException("鐩樼偣鍗曚富琛ㄥ疄鐩樻暟閲忔洿鏂板け璐�");
+                }
+            }
+        }
+
         task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
         task.setUpdateBy(loginUserId);
         task.setUpdateTime(new Date());
@@ -232,14 +281,14 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (Cools.isEmpty(taskItems)) {
-            throw new CoolException("鏈壘鍒拌瀹瑰櫒鐮佸搴旂殑浠诲姟鏄庣粏");
+            throw new CoolException("鏈壘鍒拌鏂欑鐮佸搴旂殑浠诲姟鏄庣粏");
         }
         String sourceCode = taskItems.stream().findFirst().map(TaskItem::getSourceCode).orElse(null);
         CheckDiff checkDiff = checkDiffService.getOne(new LambdaQueryWrapper<CheckDiff>().eq(CheckDiff::getOrderCode, sourceCode));
@@ -261,7 +310,7 @@
     /**
      * @author Ryan
      * @date 2025/11/5
-     * @description: 甯屾棩鏃犲崟鎹复鏃剁洏鐐�
+     * @description: 鏃犲崟鎹复鏃剁洏鐐�
      * @version 1.0
      */
     @Override
@@ -273,14 +322,16 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
-        if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
-            return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
+        // 鍏佽WAVE_SEED锛�199锛岀瓑寰呯‘璁�/鐩樼偣涓級鍜孉WAIT锛�196锛岀瓑寰呯‘璁わ級涓ょ鐘舵��
+        if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id) 
+                && !task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
+            return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁わ紝褰撳墠鐘舵�侊細" + task.getTaskStatus());
         }
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (Cools.isEmpty(taskItems)) {
-            throw new CoolException("鏈壘鍒拌瀹瑰櫒鐮佸搴旂殑浠诲姟鏄庣粏");
+            throw new CoolException("鏈壘鍒拌鏂欑鐮佸搴旂殑浠诲姟鏄庣粏");
         }
         taskItems.forEach(taskItem -> {
             if (!Objects.isNull(taskItem.getFieldsIndex())) {
@@ -305,7 +356,7 @@
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         if (Objects.isNull(map.get("barcode"))) {
-            throw new CoolException("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
+            throw new CoolException("鏂欑鐮佷笉鑳戒负绌猴紒锛�");
         }
         if (Objects.isNull(map.get("matnrs"))) {
             throw new CoolException("鏂板鐗╂枡涓嶈兘涓虹┖锛侊紒");
@@ -315,7 +366,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
@@ -340,15 +391,23 @@
                     .setId(null)
                     .setFieldsIndex(null)
                     .setMatnrId(matnr.getId())
+                    .setBatch(item.getBatch())
+                    .setMemo(item.getMemo())
                     .setMatnrCode(matnr.getCode())
                     .setMaktx(matnr.getName())
                     .setAnfme(item.getCheckQty());
 
-            FieldsItem fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>().eq(FieldsItem::getValue, item.getFieldsIndex()).last("limit 1"));
-            if (Objects.isNull(fieldsItem)) {
-                throw new CoolException("褰撳墠绁ㄥ彿涓嶅瓨鍦ㄥ簱瀛樹腑锛岃鎷垮嚭鍚庨噸鏂板叆搴擄紒锛�");
+            // 绁ㄥ彿鏆備笉浣跨敤锛屼笉鏍¢獙绁ㄥ彿鏄惁瀛樺湪
+            FieldsItem fieldsItem = null;
+            if (StringUtils.isNotBlank(item.getFieldsIndex())) {
+                fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>().eq(FieldsItem::getValue, item.getFieldsIndex()).last("limit 1"));
+                // if (Objects.isNull(fieldsItem)) {
+                //     throw new CoolException("褰撳墠绁ㄥ彿涓嶅瓨鍦ㄥ簱瀛樹腑锛岃鎷垮嚭鍚庨噸鏂板叆搴擄紒锛�");
+                // }
             }
-            taskItem.setFieldsIndex(fieldsItem.getUuid());
+            if (fieldsItem != null) {
+                taskItem.setFieldsIndex(fieldsItem.getUuid());
+            }
 
             taskItems.add(taskItem);
         });
@@ -374,9 +433,9 @@
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         if (Objects.isNull(map.get("barcode"))) {
-            throw new CoolException("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
+            throw new CoolException("鏂欑鐮佷笉鑳戒负绌猴紒锛�");
         }
-        if (Objects.isNull(map.get("matnrs"))) {
+        if (Objects.isNull(map.get("items"))) {
             throw new CoolException("鏂板鐗╂枡涓嶈兘涓虹┖锛侊紒");
         }
         String barcode = map.get("barcode").toString();
@@ -384,20 +443,42 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
-        if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
-            return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
+        // 鍏佽WAVE_SEED锛�199锛岀瓑寰呯‘璁�/鐩樼偣涓級鍜孉WAIT锛�196锛岀瓑寰呯‘璁わ級涓ょ鐘舵��
+        if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id) 
+                && !task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
+            return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁わ紝褰撳墠鐘舵�侊細" + task.getTaskStatus());
         }
+        //浠诲姟鍙蜂笉鑳介噸澶嶏紝鐢熸垚鏂颁换鍔″彿涓嬪彂鑷砇CS
+        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
 
         task.setTaskStatus(TaskStsType.GENERATE_IN.id)
+                .setTaskCode(ruleCode)
                 .setTargLoc(task.getOrgLoc())
+                .setOrgSite(task.getTargSite())
                 .setTaskType(TaskType.TASK_TYPE_CHECK_IN.type)
                 .setUpdateTime(new Date());
-
         if (!taskService.updateById(task)) {
             throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
         }
+
+        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        if (Objects.isNull(taskItems) || taskItems.isEmpty()) {
+            throw new CoolException("鏁版嵁閿欒锛屼换鍔℃槑缁嗕笉瀛樺湪锛侊紒");
+        }
+
+        List<TaskItem> items = JSONArray.parseArray(JSONArray.toJSONString(map.get("items")), TaskItem.class);
+        items.forEach(taskItem -> {
+            taskItems.forEach(item -> {
+                if (taskItem.getFieldsIndex().equals(item.getFieldsIndex())) {
+                    item.setAnfme(taskItem.getCheckQty());
+                    if (!taskItemService.updateById(item)) {
+                        throw new CoolException("鐩樼偣鏄庣粏淇敼澶辫触锛侊紒");
+                    }
+                }
+            });
+        });
 
         uploadCheckResult(task);
 
@@ -418,12 +499,11 @@
         ReportParams params = new ReportParams();
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (Objects.isNull(taskItems) || taskItems.isEmpty()) {
-            throw new CoolException("鎵樼洏鏄庣粏涓虹┖锛�1");
+            throw new CoolException("鏂欑鏄庣粏涓虹┖锛�1");
         }
         List<ReportDataParam> reportDataParams = new ArrayList<>();
         taskItems.forEach(taskItem -> {
             ReportDataParam dataParam = new ReportDataParam();
-
             User user = userService.getById(taskItem.getUpdateBy());
             String nickName = null;
             if (!Objects.isNull(user)) {
@@ -436,7 +516,7 @@
                     .setPDQty(taskItem.getAnfme())
                     .setEditUser(nickName)
                     .setEditDate(taskItem.getUpdateTime())
-                    .setGoodsNO(fields.get("crushNo"))
+                    // .setGoodsNO(fields.get("crushNo"))  // 绁ㄥ彿鏆備笉浣跨敤
                     .setIsBad(0 + "")
                     .setMemoDtl(taskItem.getMemo());
 

--
Gitblit v1.9.1