From b8359b134e6618b154c79f4e24e700bc4affe424 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期五, 17 四月 2026 15:18:20 +0800
Subject: [PATCH] 视图兼容

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java |   73 ++++++++++++++++++++++++++++++++++++
 1 files changed, 72 insertions(+), 1 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 fac8af9..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,6 +28,7 @@
 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;
@@ -71,6 +72,9 @@
 
     @Autowired
     private CheckOrderService checkOrderService;
+
+    @Autowired
+    private CusItemSyncViewQueryService cusItemSyncViewQueryService;
 
 
     @Override
@@ -263,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("鏈壘鍒扮紪鐮佸搴旂殑鏄庣粏");
         }
@@ -275,6 +279,73 @@
         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<>();

--
Gitblit v1.9.1