From 29237e8dd94c4d3cdfb0eb48bca0de7dc68d768e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 11:27:55 +0800
Subject: [PATCH] feat(mes): 出货检验单客户改为选填,未关联客户的单据不受客户数据权限限制

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcImportExcelVO.java |    2 +-
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java               |    2 +-
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java     |    3 +--
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/imports/MesQcImportHelper.java             |    8 ++++++--
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/oqc/MesQcOqcMapper.java                  |   10 +++++++---
 5 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcImportExcelVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcImportExcelVO.java
index fd13714..5d0555f 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcImportExcelVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcImportExcelVO.java
@@ -37,7 +37,7 @@
     private String itemCode;
 
     @ExcelProperty("瀹㈡埛鍚嶇О")
-    @Schema(description = "瀹㈡埛鍚嶇О锛岄渶涓� CRM 瀹㈡埛绠$悊涓殑鍚嶇О涓�鑷�", requiredMode = Schema.RequiredMode.REQUIRED, example = "绀轰緥瀹㈡埛鏈夐檺鍏徃")
+    @Schema(description = "瀹㈡埛鍚嶇О锛岄�夊~锛涘~鍐欐椂闇�涓� CRM 瀹㈡埛绠$悊涓殑鍚嶇О涓�鑷�", example = "绀轰緥瀹㈡埛鏈夐檺鍏徃")
     private String clientName;
 
     @ExcelProperty("鎵规鍙�")
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java
index c720ae8..c6514dd 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java
@@ -37,8 +37,7 @@
 
     // ========== 瀹㈡埛 ==========
 
-    @Schema(description = "瀹㈡埛 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
-    @NotNull(message = "瀹㈡埛涓嶈兘涓虹┖")
+    @Schema(description = "瀹㈡埛 ID锛屽彲涓虹┖锛氫笉鍏宠仈瀹㈡埛鐨勫嚭璐ф楠屽崟鍙仛鍐呴儴鍑鸿揣璁板綍", example = "10")
     private Long clientId;
 
     // ========== 鐗╂枡 ==========
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/oqc/MesQcOqcMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/oqc/MesQcOqcMapper.java
index 8674163..f1791f3 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/oqc/MesQcOqcMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/oqc/MesQcOqcMapper.java
@@ -43,10 +43,13 @@
                 .betweenIfPresent(MesQcOqcDO::getInspectDate, reqVO.getInspectDate())
                 .orderByDesc(MesQcOqcDO::getId);
         if (permittedClientIds != null) {
+            // 瀹㈡埛闈炲繀濉細鏈叧鑱斿鎴风殑鍑鸿揣妫�楠屽崟涓嶅睘浜庝换浣曞鎴凤紝涓嶅彈瀹㈡埛鏁版嵁鏉冮檺闄愬埗锛屽缁堝彲瑙�
             if (CollUtil.isEmpty(permittedClientIds)) {
-                return PageResult.empty();
+                wrapper.isNull(MesQcOqcDO::getClientId);
+            } else {
+                wrapper.and(w -> w.in(MesQcOqcDO::getClientId, permittedClientIds)
+                        .or().isNull(MesQcOqcDO::getClientId));
             }
-            wrapper.in(MesQcOqcDO::getClientId, permittedClientIds);
         }
         return selectPage(reqVO, wrapper);
     }
@@ -62,7 +65,8 @@
                                                    LocalDateTime outDate) {
         return selectList(new LambdaQueryWrapperX<MesQcOqcDO>()
                 .eq(MesQcOqcDO::getItemId, itemId)
-                .eq(MesQcOqcDO::getClientId, clientId)
+                .eq(clientId != null, MesQcOqcDO::getClientId, clientId)
+                .isNull(clientId == null, MesQcOqcDO::getClientId)
                 .eq(batchCode != null, MesQcOqcDO::getBatchCode, batchCode)
                 .isNull(batchCode == null, MesQcOqcDO::getBatchCode)
                 .eq(MesQcOqcDO::getOutDate, outDate)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/imports/MesQcImportHelper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/imports/MesQcImportHelper.java
index c73f087..1b1396a 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/imports/MesQcImportHelper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/imports/MesQcImportHelper.java
@@ -174,11 +174,11 @@
     }
 
     /**
-     * 瑙f瀽瀹㈡埛缂栧彿锛屽熀浜庡鎴峰悕绉�
+     * 瑙f瀽瀹㈡埛缂栧彿锛屽熀浜庡鎴峰悕绉帮紙閫夊~锛氬鎴峰悕绉扮暀绌烘椂杩斿洖 null锛岃〃绀鸿妫�楠屽崟涓嶅叧鑱斿鎴凤級
      */
     public Long resolveClientId(String clientName) {
         if (StrUtil.isBlank(clientName)) {
-            throw new IllegalArgumentException("瀹㈡埛鍚嶇О涓嶈兘涓虹┖锛氳濉啓妯℃澘涓琛岀殑銆屽鎴峰悕绉般�嶅垪");
+            return null;
         }
         if (customerNameMap == null) {
             customerNameMap = new HashMap<>();
@@ -205,6 +205,10 @@
      * 鍑鸿揣妫�楠屽崟鍒楄〃鎸夊鎴锋暟鎹潈闄愯繃婊わ紝鏉冮檺澶栫殑瀹㈡埛瀵煎叆鍚庢湰浜哄湪鍒楄〃涓湅涓嶅埌璇ュ崟鎹紝鍥犳鎻愬墠鎷︽埅銆�
      */
     public void validateClientPermission(Long clientId, String clientName) {
+        // 瀹㈡埛閫夊~锛氭湭濉啓瀹㈡埛鐨勬楠屽崟涓嶅睘浜庝换浣曞鎴凤紝涓嶅彈瀹㈡埛鏁版嵁鏉冮檺闄愬埗
+        if (clientId == null) {
+            return;
+        }
         if (!clientPermissionLoaded) {
             List<Long> permittedIds = crmCustomerApi.getPermittedCustomerIds();
             permittedClientIds = permittedIds == null ? null : new HashSet<>(permittedIds);
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java
index 52f4a8b..d48d74e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java
@@ -528,7 +528,7 @@
         reqVO.setName(row.getName().trim());
         reqVO.setItemId(qcImportHelper.resolveItemId(row.getItemCode()));
         Long clientId = qcImportHelper.resolveClientId(row.getClientName());
-        qcImportHelper.validateClientPermission(clientId, row.getClientName().trim());
+        qcImportHelper.validateClientPermission(clientId, StrUtil.trimToNull(row.getClientName()));
         reqVO.setClientId(clientId);
         reqVO.setBatchCode(StrUtil.trimToNull(row.getBatchCode()));
         reqVO.setTemplateId(qcImportHelper.resolveTemplateId(row.getTemplateName()));

--
Gitblit v1.9.3