From f72dd902d364419b9522b48d005e9501d0df250d Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期三, 08 四月 2026 09:12:38 +0800
Subject: [PATCH] 批量新增修改

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java |  100 +++++++++++++++++++++++++++++++++++++++++++++-----
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsErpController.java    |   13 ++++++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsErpService.java          |    4 ++
 3 files changed, 107 insertions(+), 10 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsErpController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsErpController.java
index 5194534..d42b4d8 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsErpController.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsErpController.java
@@ -13,6 +13,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -55,6 +56,18 @@
     }
 
     /**
+     * 澶氭潯鍏�/鍑哄簱閫氱煡鍗曚笅鍙戯紱閫愭潯绛夊悓 /order/add锛屽け璐ユ潯瑙� data.items锛屾湁澶辫触鏃舵湰鍦颁簨鍔″洖婊氥��
+     */
+    @ApiOperation("鎵归噺鏂板鍗曟嵁锛堝吋瀹逛慨鏀广�佸彇娑堬級")
+    @PostMapping("/order/addAll")
+    public CommonResponse orderAddAll(@RequestBody List<ErpOpParams> paramsList) {
+        if (paramsList == null || paramsList.isEmpty()) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return wmsErpService.addOrUpdateOrders(paramsList);
+    }
+
+    /**
      * 鍙栨秷璁㈠崟/鍙栨秷鍗曟嵁銆備笌 /order/add 浼� operateType=3 鐨勫彇娑堥�昏緫涓�鑷达紝鍧囪浆鍙戠珛搴� sync/orders/delete銆�
      * @param params 鑷冲皯鍖呭惈 orderNo锛屽彲閫� orderItems
      */
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsErpService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsErpService.java
index 4536931..a5b0c80 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsErpService.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsErpService.java
@@ -5,6 +5,7 @@
 import com.vincent.rsf.openApi.entity.params.ErpOpParams;
 import com.vincent.rsf.openApi.entity.params.ReportParams;
 
+import java.util.List;
 import java.util.Map;
 
 public interface WmsErpService {
@@ -14,6 +15,9 @@
     /** 鏂板鍗曟嵁锛堝吋瀹逛慨鏀癸級锛氬叆/鍑哄簱閫氱煡鍗曚笅鍙戯紝鏈夊垯鏇存柊銆佹棤鍒欐柊澧� */
     CommonResponse addOrUpdateOrder(ErpOpParams params);
 
+    /** 澶氭潯涓嬪彂锛氶�愭潯 addOrUpdateOrder锛涙湁澶辫触鍒� failCount+items 杩斿洖骞舵爣璁版湰鍦颁簨鍔″洖婊氾紱鍏ㄦ垚鍔熷悓鍗曟潯 */
+    CommonResponse addOrUpdateOrders(List<ErpOpParams> paramsList);
+
     /** 鍙栨秷璁㈠崟/鍙栨秷鍗曟嵁锛氱鍚堝彇娑堟潯浠舵椂鎵ц鍙栨秷閫昏緫 */
     CommonResponse orderCancel(ErpOpParams params);
 
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java
index cf312d1..cab0e10 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java
@@ -26,6 +26,9 @@
 import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.*;
@@ -128,16 +131,12 @@
      * 浠� 8.3 鏂囨。瀛楁涓轰富锛岃浆鍙戠珛搴撴椂鏄犲皠涓烘湇鍔$ SyncOrderParams 瀛楁銆�
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public CommonResponse addOrUpdateOrder(ErpOpParams params) {
-        if (Objects.isNull(params.getOrderNo()) || params.getOrderNo().isEmpty()) {
-            throw new CoolException("璁㈠崟鍙蜂笉鑳戒负绌猴紒锛�");
-        }
+        assertValidForSync(params);
         if (Integer.valueOf(3).equals(params.getOperateType())) {
             log.info("order/add 鏀跺埌 operateType=3锛岃蛋缁熶竴鍙栨秷閫昏緫锛� {}", params.getOrderNo());
             return doCancel(params);
-        }
-        if (params.getOrderInternalCode() == null || params.getOrderInternalCode().trim().isEmpty()) {
-            throw new CoolException("鍗曟嵁鍐呯爜涓嶈兘涓虹┖锛侊紒");
         }
         Map<String, Object> mapParams = toServerOrderMap(params);
         List<Map<String, Object>> maps = Collections.singletonList(mapParams);
@@ -147,6 +146,76 @@
         // 8.3.3锛歞ata 浠呭惈 result锛屼笉杩斿洖涓氬姟杞借嵎
         r.setData(ResultData.success());
         return r;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public CommonResponse addOrUpdateOrders(List<ErpOpParams> paramsList) {
+        if (paramsList == null || paramsList.isEmpty()) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        List<Map<String, Object>> errorRows = new ArrayList<>();
+        for (ErpOpParams params : paramsList) {
+            String orderNo = params != null ? params.getOrderNo() : null;
+            try {
+                addOrUpdateOrder(params);
+            } catch (CoolException e) {
+                Map<String, Object> row = new LinkedHashMap<>();
+                row.put("orderNo", orderNo);
+                row.put("msg", e.getMessage());
+                errorRows.add(row);
+                log.warn("order/addAll 鍗曟潯澶辫触 orderNo={} : {}", orderNo, e.getMessage());
+            } catch (Exception e) {
+                Map<String, Object> row = new LinkedHashMap<>();
+                row.put("orderNo", orderNo);
+                row.put("msg", e.getMessage() != null ? e.getMessage() : "璇锋眰寮傚父");
+                errorRows.add(row);
+                log.warn("order/addAll 鍗曟潯寮傚父 orderNo={}", orderNo, e);
+            }
+        }
+        if (!errorRows.isEmpty()) {
+            if (TransactionSynchronizationManager.isActualTransactionActive()) {
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            }
+            Map<String, Object> data = new LinkedHashMap<>();
+            data.put("result", ResultData.FAIL);
+            data.put("failCount", errorRows.size());
+            data.put("items", errorRows);
+            CommonResponse r = new CommonResponse();
+            r.setCode(500);
+            r.setMsg("鍏� " + errorRows.size() + " 鏉″け璐ワ紝鏈湴浜嬪姟宸插洖婊氾紝璇﹁ data.items");
+            r.setData(data);
+            return r;
+        }
+        CommonResponse r = new CommonResponse();
+        r.setCode(200);
+        r.setMsg("鎿嶄綔鎴愬姛");
+        r.setData(ResultData.success());
+        return r;
+    }
+
+    /** 涓庡崟鏉� addOrUpdateOrder 鍏ュ彛涓�鑷达細涓嶉�氳繃鍒欐姏 CoolException */
+    private void assertValidForSync(ErpOpParams params) {
+        String e = validateForSync(params);
+        if (e != null) {
+            throw new CoolException(e);
+        }
+    }
+
+    /** 涓庡崟鏉′笅鍙戠浉鍚岀殑鍏ュ弬鏍¢獙锛涢�氳繃杩斿洖 null */
+    private String validateForSync(ErpOpParams params) {
+        if (params == null) {
+            return "鍗曟嵁鍙傛暟涓嶈兘涓虹┖锛侊紒";
+        }
+        if (Objects.isNull(params.getOrderNo()) || params.getOrderNo().isEmpty()) {
+            return "璁㈠崟鍙蜂笉鑳戒负绌猴紒锛�";
+        }
+        if (!Integer.valueOf(3).equals(params.getOperateType())) {
+            if (params.getOrderInternalCode() == null || params.getOrderInternalCode().trim().isEmpty()) {
+                return "鍗曟嵁鍐呯爜涓嶈兘涓虹┖锛侊紒";
+            }
+        }
+        return null;
     }
 
     /** 8.3 鍙傛暟杞负绔嬪簱 SyncOrderParams 缁撴瀯锛坥rderNo/type/wkType/anfme/arrTime/orderItems 绛夛級 */
@@ -215,6 +284,7 @@
      * 鍙栨秷璁㈠崟/鍙栨秷鍗曟嵁銆備笌 /order/add锛坥perateType=3锛夊叡鐢ㄥ悓涓�濂楀彇娑堥�昏緫锛岃浆鍙戠珛搴� sync/orders/delete銆�
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public CommonResponse orderCancel(ErpOpParams params) {
         if (Objects.isNull(params.getOrderNo()) || params.getOrderNo().isEmpty()) {
             throw new CoolException("璁㈠崟鍙蜂笉鑳戒负绌猴紒锛�");
@@ -225,15 +295,25 @@
     /** 缁熶竴鍙栨秷閫昏緫锛�/order/add(operateType=3) 涓� /order/cancel銆�/order/del 鍧囪蛋姝ゆ柟娉曪紱8.3.3 data 浠呭惈 result */
     private CommonResponse doCancel(ErpOpParams params) {
         log.info("鍙栨秷鍗曟嵁锛岃姹傚弬鏁帮細 {}", JSONObject.toJSONString(params));
+        //        Map<String, Object> one = new HashMap<>();
+        //        one.put("orderNo", params.getOrderNo());
+        //        one.put("orderItems", params.getOrderItems() != null ? params.getOrderItems().stream()
+        //                .map(this::toServerOrderItemMap)
+        //                .collect(Collectors.toList()) : Collections.emptyList());
+        //        Map<String, Object> res = wmsServerFeignClient.orderDel(Collections.singletonList(one));
+        Map<String, Object> res = wmsServerFeignClient.orderDel(Collections.singletonList(toCancelOrderMap(params)));
+        CommonResponse r = mapToCommonResponse(res);
+        r.setData(ResultData.success());
+        return r;
+    }
+
+    private Map<String, Object> toCancelOrderMap(ErpOpParams params) {
         Map<String, Object> one = new HashMap<>();
         one.put("orderNo", params.getOrderNo());
         one.put("orderItems", params.getOrderItems() != null ? params.getOrderItems().stream()
                 .map(this::toServerOrderItemMap)
                 .collect(Collectors.toList()) : Collections.emptyList());
-        Map<String, Object> res = wmsServerFeignClient.orderDel(Collections.singletonList(one));
-        CommonResponse r = mapToCommonResponse(res);
-        r.setData(ResultData.success());
-        return r;
+        return one;
     }
 
     /**

--
Gitblit v1.9.1