From 86fd4ec5fd97081f212e4c35523ee3d44f233fb6 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期五, 17 四月 2026 17:07:04 +0800
Subject: [PATCH] 配置多数据源

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java |  160 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 142 insertions(+), 18 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 9252455..436fed0 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
@@ -28,12 +28,17 @@
 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 com.vincent.rsf.server.system.utils.SystemAuthUtils;
+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 {
@@ -62,6 +67,15 @@
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private CheckOrderItemService checkOrderItemService;
+
+    @Autowired
+    private CheckOrderService checkOrderService;
+
+    @Autowired
+    private CusItemSyncViewQueryService cusItemSyncViewQueryService;
+
 
     @Override
     public R getCheckList(String code) {
@@ -87,7 +101,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("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
@@ -115,7 +129,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();
@@ -141,7 +155,7 @@
                 taskItem.setTaskId(task.getId())
                         .setOrderType(OrderType.ORDER_CHECK.type)
                         .setSourceCode(diffItem.getOrderCode())
-                        .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type))
+                        .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type)
                         .setAnfme(diffItem.getCheckQty())
                         .setWorkQty(0.0)
                         .setBatch(diffItem.getBatch())
@@ -201,6 +215,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());
@@ -216,7 +267,7 @@
         if (Cools.isEmpty(matnrCode)) {
             return R.error("鐗╂枡鐮佷负绌�");
         }
-        Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, matnrCode));
+        Matnr matnr = getMatnrByCodePreferView(matnrCode);
         if (null == matnr) {
             return R.error("鏈壘鍒扮紪鐮佸搴旂殑鏄庣粏");
         }
@@ -228,20 +279,87 @@
         return R.ok(checkDiffItem);
     }
 
+    /** 鎵墿鏂欏厛鏌ヨ鍥撅紝鍛戒腑鍚庡悓姝ョ墿鏂欎富鏁版嵁 */
+    private Matnr getMatnrByCodePreferView(String matnrCode) {
+        String code = StringUtils.trimToNull(matnrCode);
+        if (code == null) {
+            return null;
+        }
+        List<Map<String, Object>> viewItems = null;
+        try {
+            viewItems = cusItemSyncViewQueryService.listByItemNos(Collections.singletonList(code));
+        } catch (Exception ignore) {
+        }
+        Map<String, Object> row = null;
+        if (viewItems != null) {
+            row = viewItems.stream()
+                    .filter(v -> StringUtils.equals(code, StringUtils.trimToNull(Objects.toString(v.get("item_no"), null))))
+                    .findFirst()
+                    .orElse(null);
+        }
+        if (row == null) {
+            return matnrService.getOneByCodeAndBatch(code, "");
+        }
+        String viewSpec = StringUtils.trimToEmpty(Objects.toString(row.get("item_spec"), ""));
+        String viewUnit = StringUtils.trimToNull(Objects.toString(row.get("unit_no"), null));
+        Long loginUserId = SystemAuthUtils.getLoginUserId() == null ? 1L : SystemAuthUtils.getLoginUserId();
+        Matnr local = matnrService.getOneByCodeAndBatch(code, "");
+        if (local == null) {
+            Matnr matnr = new Matnr();
+            matnr.setCode(code)
+                    .setBatch("")
+                    .setName(code)
+                    .setSpec(viewSpec)
+                    .setUnit(viewUnit)
+                    .setStockUnit(viewUnit)
+                    .setStatus(1)
+                    .setCreateBy(loginUserId)
+                    .setUpdateBy(loginUserId)
+                    .setCreateTime(new Date())
+                    .setUpdateTime(new Date());
+            if (!matnrService.save(matnr)) {
+                throw new CoolException("鐗╂枡淇℃伅淇濆瓨澶辫触");
+            }
+            return matnr;
+        }
+        boolean specDiff = !StringUtils.equals(StringUtils.trimToEmpty(local.getSpec()), viewSpec);
+        boolean unitDiff = viewUnit != null
+                && (!StringUtils.equals(StringUtils.trimToEmpty(local.getUnit()), viewUnit)
+                || !StringUtils.equals(StringUtils.trimToEmpty(local.getStockUnit()), viewUnit));
+        if (specDiff || unitDiff) {
+            Matnr update = new Matnr();
+            update.setId(local.getId());
+            if (specDiff) {
+                update.setSpec(viewSpec);
+                local.setSpec(viewSpec);
+            }
+            if (unitDiff) {
+                update.setUnit(viewUnit).setStockUnit(viewUnit);
+                local.setUnit(viewUnit);
+                local.setStockUnit(viewUnit);
+            }
+            update.setUpdateBy(loginUserId).setUpdateTime(new Date());
+            if (!matnrService.updateById(update)) {
+                throw new CoolException("鐗╂枡淇℃伅鏇存柊澶辫触");
+            }
+        }
+        return local;
+    }
+
     @Override
     public R getCheckTaskItemList2(String barcode) {
         LambdaQueryWrapper<Task> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         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));
@@ -275,7 +393,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         // 鍏佽WAVE_SEED锛�199锛岀瓑寰呯‘璁�/鐩樼偣涓級鍜孉WAIT锛�196锛岀瓑寰呯‘璁わ級涓ょ鐘舵��
         if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id) 
@@ -284,7 +402,7 @@
         }
         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())) {
@@ -309,7 +427,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("鏂板鐗╂枡涓嶈兘涓虹┖锛侊紒");
@@ -319,7 +437,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("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
@@ -350,11 +468,17 @@
                     .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);
         });
@@ -380,7 +504,7 @@
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         if (Objects.isNull(map.get("barcode"))) {
-            throw new CoolException("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
+            throw new CoolException("鏂欑鐮佷笉鑳戒负绌猴紒锛�");
         }
         if (Objects.isNull(map.get("items"))) {
             throw new CoolException("鏂板鐗╂枡涓嶈兘涓虹┖锛侊紒");
@@ -390,7 +514,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         // 鍏佽WAVE_SEED锛�199锛岀瓑寰呯‘璁�/鐩樼偣涓級鍜孉WAIT锛�196锛岀瓑寰呯‘璁わ級涓ょ鐘舵��
         if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id) 
@@ -446,7 +570,7 @@
         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 -> {
@@ -463,7 +587,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