ソースを参照

Merge branch 'master' of https://mc.cloudpure.cn/mjava/cont

wzy 4 日 前
コミット
6c9d7b2181
共有29 個のファイルを変更した2471 個の追加815 個の削除を含む
  1. 3 3
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerController.java
  2. 3 3
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerReferrerController.java
  3. 3 3
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdDeliveryController.java
  4. 7 2
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdMaterialController.java
  5. 3 3
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOrderController.java
  6. 3 3
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOutboundController.java
  7. 13 2
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdReceivableController.java
  8. 8 2
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdTransferController.java
  9. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerReferrerService.java
  10. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerService.java
  11. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdDeliveryService.java
  12. 2 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdMaterialService.java
  13. 2 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOrderService.java
  14. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOutboundService.java
  15. 4 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdReceivableService.java
  16. 1 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdTransferService.java
  17. 70 51
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerReferrerServiceImpl.java
  18. 198 172
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java
  19. 147 129
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdDeliveryServiceImpl.java
  20. 268 1
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdMaterialServiceImpl.java
  21. 292 293
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java
  22. 356 102
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOutboundServiceImpl.java
  23. 615 2
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdReceivableServiceImpl.java
  24. 389 3
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdTransferServiceImpl.java
  25. 0 3
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/YdHuaGaoServiceImpl.java
  26. 1 1
      mjava-huagao/src/main/resources/application.yml
  27. 26 7
      mjava-huagao/src/test/java/com/malk/huagao/EqbTest.java
  28. 24 15
      mjava-lilin/src/main/java/com/malk/lilin/Service/impl/LiLinServiceImpl.java
  29. 29 10
      mjava-ounuo/src/main/java/com/malk/tuosi/event/McTbEventImpl.java

+ 3 - 3
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerController.java

@@ -101,8 +101,8 @@ private YDClient ydClient;
         return McR.success();
     }
     @PostMapping("/kdYdCustomer")
-    McR insertCustomer(@RequestBody Map map) {
-        kdYdCustomerService.insertCustomer(map);
-        return McR.success();
+    Map<String, Object> insertCustomer(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap = kdYdCustomerService.insertCustomer(map);
+        return stringObjectMap;
     }
 }

+ 3 - 3
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerReferrerController.java

@@ -25,8 +25,8 @@ public class KdYdCustomerReferrerController {
     @Autowired
     private IKdYdCustomerReferrerService kdYdCustomerReferrerService;
     @PostMapping("/kdYdCustomerReferrer")
-    McR kdYdCustomerReferrer(@RequestBody Map map) {
-        kdYdCustomerReferrerService.insertCustomerReferrer(map);
-        return McR.success();
+    Map<String, Object> kdYdCustomerReferrer(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap = kdYdCustomerReferrerService.insertCustomerReferrer(map);
+        return stringObjectMap;
     }
 }

+ 3 - 3
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdDeliveryController.java

@@ -29,9 +29,9 @@ public class KdYdDeliveryController {
     @Autowired
     private IKdYdDeliveryService kdYdDeliveryService;
     @PostMapping("/kdYdDelivery")
-    McR insertDelivery(@RequestBody Map map) {
-        kdYdDeliveryService.insertDelivery(map);
-        return McR.success();
+    Map<String, Object> insertDelivery(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap = kdYdDeliveryService.insertDelivery(map);
+        return stringObjectMap;
     }
 
     @PostMapping("/CfkdYdDelivery")

+ 7 - 2
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdMaterialController.java

@@ -28,9 +28,14 @@ public class KdYdMaterialController {
     private YDClient ydClient;
     @Autowired
     private IKdYdMaterialService kdYdMaterialService;
-    @PostMapping("/kdYdMaterial")
-    McR insertkdYdMaterial(@RequestBody Map map) {
+    @PostMapping("/kdYdMaterial1")
+    McR insertkdYdMaterial1(@RequestBody Map map) {
         kdYdMaterialService.insertkdYdMaterial(map);
         return McR.success();
     }
+    @PostMapping("/kdYdMaterial")
+    Map<String, Object> insertkdYdMaterial(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap = kdYdMaterialService.addkdYdMaterial(map);
+        return stringObjectMap;
+    }
 }

+ 3 - 3
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOrderController.java

@@ -28,9 +28,9 @@ public class KdYdOrderController {
     @Autowired
     private IKdYdOrderService kdYdOrderService;
     @PostMapping("/kdYdOrder")
-    McR insertkdYdOrder(@RequestBody Map map) {
-        kdYdOrderService.insertkdYdOrder(map);
-        return McR.success();
+    Map<String, Object> insertkdYdOrder(@RequestBody Map map) {
+       Map result = kdYdOrderService.insertkdYdOrder(map);
+        return result;
     }
     @PostMapping("/SckdYdOrder")
     McR SckdYdOrder(@RequestBody Map map) {

+ 3 - 3
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOutboundController.java

@@ -29,8 +29,8 @@ public class KdYdOutboundController {
     @Autowired
     private IKdYdOutboundService kdYdOutboundService;
     @PostMapping("/kdYdOutbound")
-    McR insertkdYdOutbound(@RequestBody Map map) {
-        kdYdOutboundService.insertkdYdOutbound(map);
-        return McR.success();
+    Map<String, Object> insertkdYdOutbound(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap = kdYdOutboundService.insertkdYdOutbound(map);
+        return stringObjectMap;
     }
 }

+ 13 - 2
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdReceivableController.java

@@ -28,9 +28,20 @@ public class KdYdReceivableController {
     private YDClient ydClient;
     @Autowired
     private IKdYdReceivableService kdYdReceivableService;
-    @PostMapping("/kdYdReceivable")
-    McR insertkdYdReceivable(@RequestBody Map map) {
+    @PostMapping("/kdYdReceivable1")
+    McR insertkdYdReceivable1(@RequestBody Map map) {
         kdYdReceivableService.insertkdYdReceivable(map);
         return McR.success();
     }
+    @PostMapping("/kdYdReceivable")
+    Map<String, Object> insertkdYdReceivable(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap =kdYdReceivableService.insertkdYdReceivable1(map);
+        return stringObjectMap;
+    }
+
+    @PostMapping("/kdYdpayment")
+    Map<String, Object> insertkdYdpayment(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap =kdYdReceivableService.insertkdYdpayment(map);
+        return stringObjectMap;
+    }
 }

+ 8 - 2
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdTransferController.java

@@ -28,9 +28,15 @@ public class KdYdTransferController {
     private YDClient ydClient;
     @Autowired
     private IKdYdTransferService kdYdTransferService;
-    @PostMapping("/kdYdTransfer")
-    McR insertTransfer(@RequestBody Map map) {
+    @PostMapping("/kdYdTransfer1")
+    McR insertTransfer1(@RequestBody Map map) {
         kdYdTransferService.insertTransfer(map);
         return McR.success();
     }
+
+    @PostMapping("/kdYdTransfer")
+    Map<String, Object> insertTransfer(@RequestBody Map map) {
+        Map<String, Object> stringObjectMap = kdYdTransferService.insertTransfer1(map);
+        return stringObjectMap;
+    }
 }

+ 1 - 1
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerReferrerService.java

@@ -15,5 +15,5 @@ import java.util.Map;
  */
 public interface IKdYdCustomerReferrerService extends IService<KdYdCustomerReferrer> {
 
-    void insertCustomerReferrer(Map map);
+    Map<String, Object> insertCustomerReferrer(Map map);
 }

+ 1 - 1
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerService.java

@@ -15,5 +15,5 @@ import java.util.Map;
  */
 public interface IKdYdCustomerService {
 
-    void insertCustomer(Map map);
+    Map<String, Object> insertCustomer(Map map);
 }

+ 1 - 1
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdDeliveryService.java

@@ -15,7 +15,7 @@ import java.util.Map;
  */
 public interface IKdYdDeliveryService extends IService<KdYdDelivery> {
 
-    void insertDelivery(Map map);
+    Map<String, Object> insertDelivery(Map map);
 
     void CfkdYdDelivery(Map map);
 }

+ 2 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdMaterialService.java

@@ -16,4 +16,6 @@ import java.util.Map;
 public interface IKdYdMaterialService extends IService<KdYdMaterial> {
 
     void insertkdYdMaterial(Map map);
+
+    Map<String, Object> addkdYdMaterial(Map map);
 }

+ 2 - 1
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOrderService.java

@@ -2,6 +2,7 @@ package com.malk.huagao.service;
 
 import com.malk.huagao.entity.KdYdOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.malk.server.common.McR;
 
 import java.util.Map;
 
@@ -15,7 +16,7 @@ import java.util.Map;
  */
 public interface IKdYdOrderService extends IService<KdYdOrder> {
 
-    void insertkdYdOrder(Map map);
+    Map<String, Object> insertkdYdOrder(Map map);
 
     void SckdYdOrder(Map map);
 }

+ 1 - 1
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOutboundService.java

@@ -15,5 +15,5 @@ import java.util.Map;
  */
 public interface IKdYdOutboundService extends IService<KdYdOutbound> {
 
-    void insertkdYdOutbound(Map map);
+    Map<String, Object> insertkdYdOutbound(Map map);
 }

+ 4 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdReceivableService.java

@@ -16,4 +16,8 @@ import java.util.Map;
 public interface IKdYdReceivableService extends IService<KdYdReceivable> {
 
     void insertkdYdReceivable(Map map);
+
+    Map<String, Object> insertkdYdReceivable1(Map map);
+
+    Map<String, Object> insertkdYdpayment(Map map);
 }

+ 1 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdTransferService.java

@@ -17,4 +17,5 @@ public interface IKdYdTransferService extends IService<KdYdTransfer> {
 
     void insertTransfer(Map map);
 
+    Map<String, Object> insertTransfer1(Map map);
 }

+ 70 - 51
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerReferrerServiceImpl.java

@@ -11,10 +11,12 @@ import com.malk.server.aliwork.YDParam;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -26,61 +28,78 @@ import java.util.Map;
  * @since 2025-10-14
  */
 @Service
+@Slf4j
 public class KdYdCustomerReferrerServiceImpl extends ServiceImpl<KdYdCustomerReferrerMapper, KdYdCustomerReferrer> implements IKdYdCustomerReferrerService {
-@Autowired
-private YDClient ydClient;
-@Autowired
-private KdYdCustomerReferrerMapper kdYdCustomerReferrerMapper;
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private KdYdCustomerReferrerMapper kdYdCustomerReferrerMapper;
+
     @Override
-    public void insertCustomerReferrer(Map map) {
-        MDC.put("MDC_KEY_PID", "1003");
-        String formInstId = UtilMap.getString(map, "formInstId");
-        String type = UtilMap.getString(map, "type");
+    public Map<String, Object> insertCustomerReferrer(Map map) {
+        Map<String, Object> result = new HashMap<>();
 
-        if ("3".equals(type)) {
-            String bm = UtilMap.getString(map, "bm");
-            KdYdCustomerReferrer kdYdCustomerReferrer = new KdYdCustomerReferrer();
-            kdYdCustomerReferrer.setOperationType("3");
-            kdYdCustomerReferrer.setSyncStatus("0");
-            kdYdCustomerReferrerMapper.update(kdYdCustomerReferrer,
-                    new LambdaQueryWrapper<KdYdCustomerReferrer>().eq(KdYdCustomerReferrer::getBm, bm));
-            return; // 或者根据你的业务逻辑返回相应的结果
-        }
-        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
-                .formInstId(formInstId)
-                .build(), YDConf.FORM_QUERY.retrieve_id);
-        Map formData = ddrNew.getFormData();
-        String mc = UtilMap.getString(formData, "textField_mgqbiouh");
-        String sfzh = UtilMap.getString(formData, "textField_mgqbioux");
-        String sjh = UtilMap.getString(formData, "textField_mgqbioui");
-        String bm = UtilMap.getString(formData, "serialNumberField_mhiycezm");
-//        String skrmc = UtilMap.getString(formData, "textField_mgqbioun");
-//        String skzh = UtilMap.getString(formData, "textField_mgqbious");
-//        String khh = UtilMap.getString(formData, "textField_mgqbiov0");
-//        String ms = UtilMap.getString(formData, "textField_mgqbiov1");
-        String tjruuid = UtilMap.getString(formData, "textField_mgqbiov3");
-        String xsy = UtilMap.getString(formData, "employeeField_mgqbiouz").replace("[\"", "").replace("\"]", "").trim();
-        KdYdCustomerReferrer kdYdCustomerReferrer = new KdYdCustomerReferrer();
-        kdYdCustomerReferrer.setMc(mc);
-        kdYdCustomerReferrer.setSfzh(sfzh);
-        kdYdCustomerReferrer.setSjh(sjh);
-//        kdYdCustomerReferrer.setSkrmc(skrmc);
-//        kdYdCustomerReferrer.setSkzh(skzh);
-//        kdYdCustomerReferrer.setKhh(khh);
-//        kdYdCustomerReferrer.setMs(ms);
-        kdYdCustomerReferrer.setXsy(xsy);
-//        kdYdCustomerReferrer.setTjruuid(tjruuid);
-        kdYdCustomerReferrer.setBm(bm);
-        kdYdCustomerReferrer.setSyncStatus("0");
-        kdYdCustomerReferrer.setOperationType("1");
-//        kdYdCustomerReferrer.setFormInstId(formInstId);
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+            String formInstId = UtilMap.getString(map, "formInstId");
+            String action = UtilMap.getString(map, "action");
+
+            // 处理特殊操作类型
+            if ("del".equals(action)) {
+                String bm = UtilMap.getString(map, "bm");
+                //todo 删除逻辑
+
+                // 返回删除操作的格式
+                result.put("table", "KD_YD_CUSTOMER_REFERRER");
+                result.put("action", "del");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("bm", bm);  // 删除的主键或标识
+                    put("msg", "删除成功");
+                }});
+                return result;
+            }
+
+            // 查询表单数据
+            DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+                    .formInstId(formInstId)
+                    .build(), YDConf.FORM_QUERY.retrieve_id);
+            Map formData = ddrNew.getFormData();
+
+            // 提取表单字段
+            String mc = UtilMap.getString(formData, "textField_mgqbiouh");
+            String sfzh = UtilMap.getString(formData, "textField_mgqbioux");
+            String sjh = UtilMap.getString(formData, "textField_mgqbioui");
+            String bm = UtilMap.getString(formData, "serialNumberField_mhiycezm");
+            String xsy = UtilMap.getString(formData, "employeeField_mgqbiouz").replace("[\"", "").replace("\"]", "").trim();
 
-        if ("2".equals(type)) {
-            kdYdCustomerReferrer.setOperationType(type);
-            kdYdCustomerReferrerMapper.update(kdYdCustomerReferrer,
-                    new LambdaQueryWrapper<KdYdCustomerReferrer>().eq(KdYdCustomerReferrer::getBm, bm));
-        } else {
-            this.save(kdYdCustomerReferrer);
+            // 构建返回数据
+            Map<String, Object> cusRefData = new HashMap<>();
+            cusRefData.put("mc", mc);
+            cusRefData.put("sfzh", sfzh);
+            cusRefData.put("sjh", sjh);
+            cusRefData.put("bm", bm);
+            cusRefData.put("xsy", xsy);
+
+            // 设置返回结果
+            result.put("table", "KD_YD_CUSTOMER_REFERRER");
+            result.put("action", action != null ? action : "add"); // 默认add操作
+            result.put("data", cusRefData);
+            //todo 添加数据到金蝶数据库
+            // 添加日志记录
+            log.info("客户推荐人信息同步成功: formInstId={}, mc={}, bm={}", formInstId, mc, bm);
+
+        } catch (Exception e) {
+            log.error("客户推荐人信息同步异常", e);
+
+            // 异常处理
+            result.put("table", "KD_YD_ORDER");
+            result.put("action", "error");
+            result.put("data", new HashMap<String, Object>() {{
+                put("errorMsg", "操作失败:" + e.getMessage());
+            }});
         }
+
+        return result;
     }
+
 }

+ 198 - 172
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java

@@ -1,5 +1,8 @@
 package com.malk.huagao.service.impl;
 
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -15,6 +18,7 @@ import com.malk.server.aliwork.YDParam;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,6 +37,7 @@ import java.util.regex.Pattern;
  * @since 2025-10-09
  */
 @Service
+@Slf4j
 public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdYdCustomer> implements IKdYdCustomerService {
     @Autowired
     private YDClient ydClient;
@@ -42,199 +47,220 @@ public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdY
     private KdYdCustomerLiaisonMapper kdYdCustomerLiaisonMapper;
 
     @Override
-    public void insertCustomer(Map map) {
-        MDC.put("MDC_KEY_PID", "1003");
-        String formInstId = UtilMap.getString(map, "formInstId");
-        String type = UtilMap.getString(map, "type");
+    public Map<String, Object> insertCustomer(Map map) {
+        Map<String, Object> result = new HashMap<>();
 
-        // === 操作类型 3:仅软删除客户(根据 khbm 标记 operation_type=3)===
-        if ("3".equals(type)) {
-            String khbm = UtilMap.getString(map, "bm"); // 注意:这里 map 中的 "bm" 实际是 khbm
-            KdYdCustomer updateObj = new KdYdCustomer();
-            updateObj.setOperationType("3");
-            updateObj.setSyncStatus("0");
-            kdYdCustomerMapper.update(updateObj,
-                    new LambdaQueryWrapper<KdYdCustomer>().eq(KdYdCustomer::getKhbm, khbm));
-            return;
-        }
-
-        // === 获取表单数据 ===
-        DDR_New ddrNew = ydClient.queryData(
-                YDParam.builder().formInstId(formInstId).build(),
-                YDConf.FORM_QUERY.retrieve_id
-        );
-        Map formData = ddrNew.getFormData();
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+            String formInstId = UtilMap.getString(map, "formInstId");
+            String action = UtilMap.getString(map, "type");
 
-        // === 提取主表字段(完全保留原有写法)===
-        String khmc = UtilMap.getString(formData, "textField_lqanqe6j");
-        String khbm = UtilMap.getString(formData, "textField_meqhqqvg");
-        String xssx = UtilMap.getString(formData, "selectField_megi74y7");
-        String khxypj = UtilMap.getString(formData, "selectField_mewirdx4");
-        String khsx = UtilMap.getString(formData, "selectField_megi74y8");
-        String jxr = UtilMap.getString(formData, "employeeField_megi74yl").replace("[\"", "").replace("\"]", "").trim();
-        String khlb = UtilMap.getString(formData, "selectField_lqanqe6l");
-        String khfz = UtilMap.getString(formData, "selectField_lqanqe6q");
-        String fptt = UtilMap.getString(formData, "textField_llujklkr");
-        String nsdjh = UtilMap.getString(formData, "textField_meqhqqvm");
-        String khyh = UtilMap.getString(formData, "textField_meqhqqvn");
-        String yhzh = UtilMap.getString(formData, "textField_meqhqqvs");
-        String jxslx = UtilMap.getString(formData, "selectField_mis6kl56");
-        String kplx = UtilMap.getString(formData, "selectField_lwopqbye");
-        String kplxdh = UtilMap.getString(formData, "textField_llujklkp");
-        String kptxdz = UtilMap.getString(formData, "textField_llujklkv");
-        String tyshxydm = UtilMap.getString(formData, "textField_mfxrrysq");
-        String spdzyx = UtilMap.getString(formData, "textField_mg0fq6l4");
-        String khtjr = UtilMap.getString(formData, "textField_mfdrrg87");
-        String sktj = UtilMap.getString(formData, "selectField_meqhqqvh");
-        String xsy = UtilMap.getString(formData, "employeeField_lqanqe6n").replace("[\"", "").replace("\"]", "").trim();
-        String jsbb = UtilMap.getString(formData, "selectField_mfxrryt0");
-        String khyxj = UtilMap.getString(formData, "numberField_mfxs7rd3");
-        String qyxygl = UtilMap.getString(formData, "radioField_mfxs7rd2");
-        String mrsl = UtilMap.getString(formData, "selectField_mfxrryt3");
-        String sfl = UtilMap.getString(formData, "selectField_mfxrryt2");
+            // 处理特殊操作类型
+            if ("del".equals(action)) {
+                String bm = UtilMap.getString(map, "bm");
+                Map<String, String> headers = new HashMap<>();
+                headers.put("Content-Type", "application/x-www-form-urlencoded");
+                Map<String, Object> formParams = new HashMap<>();
+                Map<String, Object> djbh = new HashMap<>();
+                djbh.put("djbh", bm);
+                result.put("data", djbh);
+                String jsonStr = JSON.toJSONString(result);
 
-        // === 构建客户对象 ===
-        KdYdCustomer customer = new KdYdCustomer();
-        customer.setKhmc(khmc);
-        customer.setXssx(xssx);
-        customer.setSpdzyx(spdzyx);
-        customer.setKhsx(khsx);
-        customer.setKhlb(khlb);
-        customer.setKhfz(khfz);
-        customer.setFptt(fptt);
-        customer.setNsdjh(nsdjh);
-        customer.setKhyh(khyh);
-        customer.setYhzh(yhzh);
-        customer.setKplx(kplx);
-        customer.setKhlx(jxslx);
-        customer.setKplxdh(kplxdh);
-        customer.setKptxdz(kptxdz);
-        customer.setTyshxydm(tyshxydm);
-        customer.setKhtjr(khtjr);
-        customer.setSktj(sktj);
-        customer.setXsy(xsy);
-        customer.setJsbb(jsbb);
-        customer.setKhyxj(khyxj);
-        customer.setQyxygl(qyxygl);
-        customer.setMrsl(mrsl);
-        customer.setSfl(sfl);
-        customer.setKhbm(khbm);
-        customer.setJxr(jxr);
-        customer.setKhxypj(khxypj);
-        customer.setFormInstId(formInstId);
-        customer.setSyncStatus("0");
-        customer.setOperationType(type);
+                formParams.put("jsons", jsonStr);
 
-        // === 判断是新增还是更新 ===
-        LambdaQueryWrapper<KdYdCustomer> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KdYdCustomer::getKhbm, khbm);
-        KdYdCustomer existing = kdYdCustomerMapper.selectOne(wrapper);
+                System.out.println("====" + formParams);
+                HttpResponse response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/")//todo 待完善接口
+                        .headerMap(headers, true)
+                        .form(formParams)
+                        .timeout(30000)  // 30秒超时
+                        .execute();
 
-        Long customerId;
-        if (existing != null) {
-            customer.setId(existing.getId());
-            kdYdCustomerMapper.updateById(customer);
-            customerId = existing.getId();
-        } else {
-            if ("2".equals(type)) {
-                throw new RuntimeException("客户不存在,无法更新: " + khbm);
+                String responseBody = response.body();
+                // 返回删除操作的格式
+                result.put("table", "KD_YD_CUSTOMER");
+                result.put("action", "del");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("bm", bm);  // 删除的主键或标识
+                    put("msg", "删除成功");
+                }});
+                return result;
             }
-            this.save(customer);
-            customerId = customer.getId();
-        }
 
-        // === 处理联系人子表 ===
-        List<Map> tableField = (List<Map>) formData.get("tableField_mfkks8ww");
-        if (tableField == null || tableField.isEmpty()) {
-            return;
-        }
+            // === 获取表单数据 ===
+            DDR_New ddrNew = ydClient.queryData(
+                    YDParam.builder().formInstId(formInstId).build(),
+                    YDConf.FORM_QUERY.retrieve_id
+            );
+            Map formData = ddrNew.getFormData();
 
-        // ✅【修改点1】全局查找最大 bm(不按 customer_id 筛选)
-        String currentMaxBm = null;
-        QueryWrapper<KdYdCustomerLiaison> maxBmWrapper = new QueryWrapper<>();
-        maxBmWrapper.select("MAX(bm)");
-        List<Object> maxResults = kdYdCustomerLiaisonMapper.selectObjs(maxBmWrapper);
-        if (!maxResults.isEmpty()) {
-            Object obj = maxResults.get(0);
-            if (obj != null) {
-                if (obj instanceof Object[]) {
-                    Object[] arr = (Object[]) obj;
-                    if (arr.length > 0 && arr[0] != null) {
-                        currentMaxBm = arr[0].toString();
-                    }
-                } else {
-                    currentMaxBm = obj.toString();
-                }
-            }
-        }
+            // === 提取主表字段 ===
+            String khmc = UtilMap.getString(formData, "textField_lqanqe6j");
+            String khbm = UtilMap.getString(formData, "textField_meqhqqvg");
+            String xssx = UtilMap.getString(formData, "selectField_megi74y7");
+            String khxypj = UtilMap.getString(formData, "selectField_mewirdx4");
+            String khsx = UtilMap.getString(formData, "selectField_megi74y8");
+            String jxr = cleanEmployeeField(UtilMap.getString(formData, "employeeField_megi74yl"));
+            String khlb = UtilMap.getString(formData, "selectField_lqanqe6l");
+            String khfz = UtilMap.getString(formData, "selectField_lqanqe6q");
+            String fptt = UtilMap.getString(formData, "textField_llujklkr");
+            String nsdjh = UtilMap.getString(formData, "textField_meqhqqvm");
+            String khyh = UtilMap.getString(formData, "textField_meqhqqvn");
+            String yhzh = UtilMap.getString(formData, "textField_meqhqqvs");
+            String jxslx = UtilMap.getString(formData, "selectField_mis6kl56");
+            String kplx = UtilMap.getString(formData, "selectField_lwopqbye");
+            String kplxdh = UtilMap.getString(formData, "textField_llujklkp");
+            String kptxdz = UtilMap.getString(formData, "textField_llujklkv");
+            String tyshxydm = UtilMap.getString(formData, "textField_mfxrrysq");
+            String spdzyx = UtilMap.getString(formData, "textField_mg0fq6l4");
+            String khtjr = UtilMap.getString(formData, "textField_mfdrrg87");
+            String sktj = UtilMap.getString(formData, "selectField_meqhqqvh");
+            String xsy = cleanEmployeeField(UtilMap.getString(formData, "employeeField_lqanqe6n"));
+            String jsbb = UtilMap.getString(formData, "selectField_mfxrryt0");
+            String khyxj = UtilMap.getString(formData, "numberField_mfxs7rd3");
+            String qyxygl = UtilMap.getString(formData, "radioField_mfxs7rd2");
+            String mrsl = UtilMap.getString(formData, "selectField_mfxrryt3");
+            String sfl = UtilMap.getString(formData, "selectField_mfxrryt2");
 
-        // ✅【新增】用于收集回写用的子表行
-        List<Map> updatedTableRowsForYD = new ArrayList<>();
+            // 构建主表数据
+            Map<String, Object> customData = new HashMap<>();
+            customData.put("khmc", khmc);
+            customData.put("khbm", khbm);
+            customData.put("xssx", xssx);
+            customData.put("khxypj", khxypj);
+            customData.put("khsx", khsx);
+            customData.put("jxr", jxr);
+            customData.put("khlb", khlb);
+            customData.put("khfz", khfz);
+            customData.put("fptt", fptt);
+            customData.put("nsdjh", nsdjh);
+            customData.put("khyh", khyh);
+            customData.put("yhzh", yhzh);
+            customData.put("jxslx", jxslx);
+            customData.put("kplx", kplx);
+            customData.put("kplxdh", kplxdh);
+            customData.put("kptxdz", kptxdz);
+            customData.put("tyshxydm", tyshxydm);
+            customData.put("spdzyx", spdzyx);
+            customData.put("khtjr", khtjr);
+            customData.put("sktj", sktj);
+            customData.put("xsy", xsy);
+            customData.put("jsbb", jsbb);
+            customData.put("khyxj", khyxj);
+            customData.put("qyxygl", qyxygl);
+            customData.put("mrsl", mrsl);
+            customData.put("sfl", sfl);
 
-        for (Map item : tableField) {
-            String xm = safeGetString(item, "textField_l3s6ubhq");
-            String dh = safeGetString(item, "textField_lqbzc3gq");
-            String zw = safeGetString(item, "textField_l3s6ubht");
-            String gddh = safeGetString(item, "textField_mfxu5dnk");
-            String bm = safeGetString(item, "textField_mfkp33s5");
+            // 处理子表数据
+            List<Map<String, Object>> contactList = new ArrayList<>();
+            List<Map> tableField = (List<Map>) formData.get("tableField_mfkks8ww");
+
+            if (tableField != null && !tableField.isEmpty()) {
+                // 用于收集回写用的子表行
+                List<Map> updatedTableRowsForYD = new ArrayList<>();
+
+                for (Map item : tableField) {
+                    Map<String, Object> contactData = new HashMap<>();
+                    String xm = safeGetString(item, "textField_l3s6ubhq");
+                    String yddh = safeGetString(item, "textField_lqbzc3gq");
+                    String zw = safeGetString(item, "textField_l3s6ubht");
+                    String gddh = safeGetString(item, "textField_mfxu5dnk");
+                    String bm = safeGetString(item, "textField_mfkp33s5");
+                    String yx = safeGetString(item, "textField_lqbzc3gr");
+
+                    // 添加到联系人列表
+                    contactData.put("xm", xm);
+                    contactData.put("yddh", yddh);
+                    contactData.put("zw", zw);
+                    contactData.put("gddh", gddh);
+                    contactData.put("bm", bm);
+                    contactData.put("yx", yx);
+                    contactList.add(contactData);
 
-            String finalBm;
-            if (bm != null && !bm.trim().isEmpty()) {
-                finalBm = bm.trim();
-            } else {
-                // 全局自增
-                if (currentMaxBm == null) {
-                    finalBm = "CXR00001";
-                } else {
-                    finalBm = incrementCode(currentMaxBm);
                 }
-                currentMaxBm = finalBm; // 下一条继续递增
-            }
 
-            // ✅【新增】构造回写行(复制原行并覆盖 bm)
-            Map updatedRow = new HashMap(item);
-            updatedRow.put("textField_mfkp33s5", finalBm);
-            updatedTableRowsForYD.add(updatedRow);
+                // 将联系人列表添加到主数据
+                customData.put("contactList", contactList);
 
-            KdYdCustomerLiaison liaison = new KdYdCustomerLiaison();
-            liaison.setXm(xm);
-            liaison.setZw(zw);
-            liaison.setBm(finalBm);
-            liaison.setGddh(gddh);
-            liaison.setCustomerId(customerId);
-            liaison.setSyncStatus("0");
-            liaison.setOperationType(type);
+                Map<String, String> headers = new HashMap<>();
+                headers.put("Content-Type", "application/x-www-form-urlencoded");
 
-            if ("2".equals(type)) {
-                LambdaQueryWrapper<KdYdCustomerLiaison> updateWrapper = new LambdaQueryWrapper<>();
-                updateWrapper.eq(KdYdCustomerLiaison::getBm, finalBm);
-                KdYdCustomerLiaison exists = kdYdCustomerLiaisonMapper.selectOne(updateWrapper);
-                if (exists != null) {
-                    liaison.setId(exists.getId());
-                    kdYdCustomerLiaisonMapper.updateById(liaison);
+                result.put("data", customData);
+// 将result转换为JSON字符串
+                String jsonStr = JSON.toJSONString(result);
+// 构建form参数
+                Map<String, Object> formParams = new HashMap<>();
+                formParams.put("jsons", jsonStr);
+// 发送请求
+                HttpResponse response = null;
+                if (action == "add") {
+                    response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/")//todo 修改接口
+                            .headerMap(headers, true)
+                            .form(formParams)
+                            .timeout(30000)  // 30秒超时
+                            .execute();
                 } else {
-                    kdYdCustomerLiaisonMapper.insert(liaison);
+                    response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/")
+                            .headerMap(headers, true)
+                            .form(formParams)
+                            .timeout(30000)  // 30秒超时
+                            .execute();
+                }
+
+                String responseBody = response.body();
+                try {
+                    // 一行代码提取
+                    String jdbh = JSON.parseArray(responseBody)
+                            .getJSONObject(0)
+                            .getJSONObject("data")
+                            .getString("djbh");
+                    String msg = JSON.parseArray(responseBody)
+                            .getJSONObject(0)
+                            .getString("msg");
+                    ydClient.operateData(
+                            YDParam.builder()
+                                    .formInstanceId(formInstId)
+                                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textareaField_mkxqgrvq, textField_mjs6fuwo", msg, jdbh)))
+                                    .useLatestVersion(true).build(),
+                            YDConf.FORM_OPERATION.update);
+//                    Map<String, Object> updatePayload = new HashMap<>();
+//                    updatePayload.put("tableField_mfkks8ww", updatedTableRowsForYD);
+//                    ydClient.operateData(
+//                            YDParam.builder()
+//                                    .formInstanceId(formInstId)
+//                                    .updateFormDataJson(JSONObject.toJSONString(updatePayload))
+//                                    .useLatestVersion(true)
+//                                    .build(),
+//                            YDConf.FORM_OPERATION.update
+//                    );
+                    log.info("回写数据到宜搭成功,formInstId: {}", formInstId);
+                } catch (Exception e) {
+                    log.warn("回写数据到宜搭失败,formInstId: {}, 错误: {}", formInstId, e.getMessage());
                 }
-            } else {
-                kdYdCustomerLiaisonMapper.insert(liaison);
             }
-        }
 
-        // ✅【修改点2】回写 bm 到宜搭表单(仅在此处新增)
-        try {
-            Map<String, Object> updatePayload = new HashMap<>();
-            updatePayload.put("tableField_mfkks8ww", updatedTableRowsForYD);
-            ydClient.operateData(
-                    YDParam.builder()
-                            .formInstId(formInstId)
-                            .updateFormDataJson(JSONObject.toJSONString(updatePayload))
-                            .build(),
-                    YDConf.FORM_OPERATION.update
-            );
+            // 构建返回结果
+            result.put("table", "KD_YD_CUSTOMER");
+            result.put("action", action != null ? action : "add");
+            result.put("data", customData);
+
+            log.info("客户信息同步成功: formInstId={}, khmc={}, khbm={}", formInstId, khmc, khbm);
+
         } catch (Exception e) {
-            // 使用兼容性日志写法(避免占位符问题)
-            log.warn("回写 bm 到宜搭失败,formInstId: " + formInstId + ", 错误: " + e.getMessage());
+            log.error("客户信息同步异常", e);
+            result.put("table", "KD_YD_CUSTOMER");
+            result.put("action", "error");
+            result.put("data", new HashMap<String, Object>() {{
+                put("errorMsg", "操作失败:" + e.getMessage());
+            }});
         }
+
+        return result;
+    }
+
+    // 清理员工字段格式
+    private String cleanEmployeeField(String employeeField) {
+        if (employeeField == null) return "";
+        return employeeField.replace("[\"", "").replace("\"]", "").trim();
     }
 
     // === 工具方法(保持不变)===

+ 147 - 129
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdDeliveryServiceImpl.java

@@ -38,6 +38,7 @@ import java.util.*;
  * @since 2025-10-15
  */
 @Service
+@Slf4j
 public class KdYdDeliveryServiceImpl extends ServiceImpl<KdYdDeliveryMapper, KdYdDelivery> implements IKdYdDeliveryService {
     @Autowired
     private YDClient ydClient;
@@ -47,139 +48,156 @@ public class KdYdDeliveryServiceImpl extends ServiceImpl<KdYdDeliveryMapper, KdY
     private KdYdDeliveryDetailMapper kdYdDeliveryDetailMapper;
 
     @Override
-    public void insertDelivery(Map map) {
-        MDC.put("MDC_KEY_PID", "1003");
-        String formInstId = UtilMap.getString(map, "formInstId");
-        String type = UtilMap.getString(map, "type");
-
-        if ("3".equals(type)) {
-            String bm = UtilMap.getString(map, "bm");
-            KdYdDelivery kdYdDelivery = new KdYdDelivery();
-            kdYdDelivery.setSyncStatus("0");
-            kdYdDelivery.setOperationType("3");
-            kdYdDeliveryMapper.update(kdYdDelivery, new LambdaQueryWrapper<KdYdDelivery>().eq(KdYdDelivery::getDjbh, bm));
-            return; // 或者根据你的业务逻辑返回相应的结果
-        }
-        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
-                .formInstId(formInstId)
-                .build(), YDConf.FORM_QUERY.retrieve_id);
-        Map formData = ddrNew.getFormData();
-
-        String djlx = UtilMap.getString(formData, "selectField_mg3fuqvg");
-        String orderId = UtilMap.getString(formData, "textField_mf6a0h6f");
-//        long orderId = 6L;
-        LocalDateTime rq = parseTimestamp(UtilMap.getString(formData, "dateField_krbgloam"));
-        String kh = UtilMap.getString(formData, "textField_mejnamf2");
-        String jsbb = UtilMap.getString(formData, "selectField_mg3fuqvn");
-        String djbh = UtilMap.getString(formData, "serialNumberField_mheazm7w");
-        if ("2".equals(type)) {
-            djbh = UtilMap.getString(formData, "textField_miwwha1a");
-        }
-        String xsbm = UtilMap.getString(formData, "textField_krnn5bmr");
-//        String xsy = UtilMap.getString(formData, "employeeField_mejowmng").replace("[\"", "").replace("\"]", "").trim();
-        String lllx = UtilMap.getString(formData, "selectField_mejowmnc");
-        String jjr = UtilMap.getString(formData, "textField_mf6a0h5f");
-        String jjrdh = UtilMap.getString(formData, "textField_mf6a0h5g");
-        String jjdz = UtilMap.getString(formData, "textareaField_mf6a0h5h");
-        String xslx = UtilMap.getString(formData, "selectField_mgrn6p2d");
-        String bzfs = UtilMap.getString(formData, "selectField_mf6a0h5y");
-        String bz = UtilMap.getString(formData, "textareaField_mejnamfb");
-        LocalDateTime hhsj = parseTimestamp(UtilMap.getString(formData, "dateField_mf6a0h67"));
-        String ysfs = UtilMap.getString(formData, "selectField_mf6a0h5z");
-        String hdfs = UtilMap.getString(formData, "selectField_mf6a0h60");
-        String kdgs = UtilMap.getString(formData, "selectField_mf6a0h61");
-        String fkfs = UtilMap.getString(formData, "selectField_mf6a0h66");
-
-        List<Map> tableField = (List<Map>) formData.get("tableField_mejnamfd");
-        KdYdDelivery kdYdDelivery = new KdYdDelivery();
-        kdYdDelivery.setDjlx(djlx);
-        kdYdDelivery.setOrderId(orderId);
-        kdYdDelivery.setRq(rq);
-        kdYdDelivery.setKh(kh);
-        kdYdDelivery.setDjbh(djbh);
-        kdYdDelivery.setJsbb(jsbb);
-        kdYdDelivery.setSyncStatus("0");
-        kdYdDelivery.setOperationType("1");
-        kdYdDelivery.setXsbm(xsbm);
-        kdYdDelivery.setLllx(lllx);
-        kdYdDelivery.setJjr(jjr);
-        kdYdDelivery.setJjrdh(jjrdh);
-        kdYdDelivery.setJjdz(jjdz);
-        kdYdDelivery.setXslx(xslx);
-        kdYdDelivery.setBzfs(bzfs);
-        kdYdDelivery.setBz(bz);
-        kdYdDelivery.setHhsj(hhsj);
-        kdYdDelivery.setYsfs(ysfs);
-        kdYdDelivery.setHdfs(hdfs);
-        kdYdDelivery.setKdgs(kdgs);
-        kdYdDelivery.setFkfs(fkfs);
-//        kdYdDelivery.setForminstid(formInstId);
-        if ("2".equals(type)) {
-            kdYdDelivery.setOperationType(type);
-            kdYdDeliveryMapper.update(kdYdDelivery, new LambdaQueryWrapper<KdYdDelivery>().eq(KdYdDelivery::getDjbh, djbh));
-        } else {
-            kdYdDeliveryMapper.insert(kdYdDelivery);
-        }
+    public Map<String, Object> insertDelivery(Map map) {
+        Map<String, Object> result = new HashMap<>();
 
-        Long id = kdYdDelivery.getId();
-        System.out.println("id:" + id);
-//        int count = 1;
-        for (Map item : tableField) {
-            String wlbm = safeGetString(item, "textField_mejnamff");
-            String wlmc = safeGetString(item, "textField_mejnamfg");
-            String ggxh = safeGetString(item, "textField_mejnamfh");
-            String xsdw = safeGetString(item, "textField_mejnamfk");
-            int jjsl = parseInt(safeGetString(item, "numberField_mf6a0h6r"), 0); // 如果为空或格式错误,返回 0
-            int count = parseInt(safeGetString(item, "numberField_mjzg06br"), 0); // 如果为空或格式错误,返回 0
-            String ssxl = safeGetString(item, "textField_mejnamfx");
-            String sfzp = safeGetString(item, "radioField_mf6a0h6h");
-            String ckck = safeGetString(item, "textField_mf6a0h6l");
-            String ckcw = safeGetString(item, "textField_mf6a0h6k");
-            String sjr = safeGetString(item, "textField_mejnamf6");
-            String sjdh = safeGetString(item, "textField_mejnamf7");
-            String sjdz = safeGetString(item, "textareaField_mf6a0h5e");
-            String zbq = safeGetString(item, "numberField_mf6a0h6v");
-            String kddh = safeGetString(item, "textField_mf6a0h6w");
-            String mdh = safeGetString(item, "textField_mf6a0h6y");
-            KdYdDeliveryDetail kdYdDeliveryDetail = new KdYdDeliveryDetail();
-            kdYdDeliveryDetail.setDeliveryId(id);
-            kdYdDeliveryDetail.setWlbm(wlbm);
-            kdYdDeliveryDetail.setWlmc(wlmc);
-            kdYdDeliveryDetail.setGgxh(ggxh);
-            kdYdDeliveryDetail.setDetailId(count);
-            kdYdDeliveryDetail.setXsdw(xsdw);
-            kdYdDeliveryDetail.setJjsl(jjsl);
-            kdYdDeliveryDetail.setSsxl(ssxl);
-            kdYdDeliveryDetail.setYhrq(parseTimestamp(safeGetString(item, "dateField_mejnamfo")));
-            kdYdDeliveryDetail.setGgxh(ggxh);
-            kdYdDeliveryDetail.setSfzp(sfzp);
-            kdYdDeliveryDetail.setCkck(ckck);
-            kdYdDeliveryDetail.setCkcw(ckcw);
-            kdYdDeliveryDetail.setSjr(sjr);
-            kdYdDeliveryDetail.setSjdh(sjdh);
-            kdYdDeliveryDetail.setSyncStatus("0");
-            kdYdDeliveryDetail.setOperationType("1");
-            kdYdDeliveryDetail.setSjdz(sjdz);
-            kdYdDeliveryDetail.setZbq(zbq);
-            kdYdDeliveryDetail.setKddh(kddh);
-            kdYdDeliveryDetail.setMdh(mdh);
-            if ("2".equals(type) || "3".equals(type)) {
-                kdYdDeliveryDetail.setOperationType(type);
-                kdYdDeliveryDetailMapper.update(kdYdDeliveryDetail, new LambdaQueryWrapper<KdYdDeliveryDetail>()
-                        .eq(KdYdDeliveryDetail::getWlbm, wlbm)
-                        .eq(KdYdDeliveryDetail::getDeliveryId, id));
-            } else {
-                kdYdDeliveryDetailMapper.insert(kdYdDeliveryDetail);
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+            String formInstId = UtilMap.getString(map, "formInstId");
+            String action = UtilMap.getString(map, "action");
+
+            // 处理特殊操作类型
+            if ("del".equals(action)) {
+                String bm = UtilMap.getString(map, "bm");
+                //todo 删除逻辑
+
+                // 返回删除操作的格式
+                result.put("table", "KD_YD_DELIVERY");
+                result.put("action", "del");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("bm", bm);  // 删除的主键或标识
+                    put("msg", "删除成功");
+                }});
+                return result;
             }
 
-//            count++;
-//save(kdYdDeliveryDetail);
+            // 查询表单数据
+            DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+                    .formInstId(formInstId)
+                    .build(), YDConf.FORM_QUERY.retrieve_id);
+            Map formData = ddrNew.getFormData();
+
+            // 提取主表字段
+            String djlx = UtilMap.getString(formData, "selectField_mg3fuqvg");
+            String orderId = UtilMap.getString(formData, "textField_mf6a0h6f");
+            LocalDateTime rq = parseTimestamp(UtilMap.getString(formData, "dateField_krbgloam"));
+            String kh = UtilMap.getString(formData, "textField_mejnamf2");
+            String jsbb = UtilMap.getString(formData, "selectField_mg3fuqvn");
+            String djbh = UtilMap.getString(formData, "serialNumberField_mheazm7w");
+            String xsbm = UtilMap.getString(formData, "textField_krnn5bmr");
+            String lllx = UtilMap.getString(formData, "selectField_mejowmnc");
+            String jjr = UtilMap.getString(formData, "textField_mf6a0h5f");
+            String jjrdh = UtilMap.getString(formData, "textField_mf6a0h5g");
+            String jjdz = UtilMap.getString(formData, "textareaField_mf6a0h5h");
+            String xslx = UtilMap.getString(formData, "selectField_mgrn6p2d");
+            String bzfs = UtilMap.getString(formData, "selectField_mf6a0h5y");
+            String bz = UtilMap.getString(formData, "textareaField_mejnamfb");
+            LocalDateTime hhsj = parseTimestamp(UtilMap.getString(formData, "dateField_mf6a0h67"));
+            String ysfs = UtilMap.getString(formData, "selectField_mf6a0h5z");
+            String hdfs = UtilMap.getString(formData, "selectField_mf6a0h60");
+            String kdgs = UtilMap.getString(formData, "selectField_mf6a0h61");
+            String fkfs = UtilMap.getString(formData, "selectField_mf6a0h66");
+
+            // 处理明细数据
+            List<Map<String, Object>> deliveryList = new ArrayList<>();
+            List<Map> tableField = (List<Map>) formData.get("tableField_mejnamfd");
+
+            if (tableField != null && !tableField.isEmpty()) {
+                for (Map item : tableField) {
+                    Map<String, Object> table1Map = new HashMap<>();
+                    int detailId = parseInt(safeGetString(item, "numberField_mjzg06br"), 0);
+                    String wlbm = safeGetString(item, "textField_mejnamff");
+                    String wlmc = safeGetString(item, "textField_mejnamfg");
+                    String ggxh = safeGetString(item, "textField_mejnamfh");
+                    String xsdw = safeGetString(item, "textField_mejnamfk");
+                    int jjsl = parseInt(safeGetString(item, "numberField_mf6a0h6r"), 0);
+                    int count = parseInt(safeGetString(item, "numberField_mjzg06br"), 0);
+                    String ssxl = safeGetString(item, "textField_mejnamfx");
+                    String sfzp = safeGetString(item, "radioField_mf6a0h6h");
+                    String ckck = safeGetString(item, "textField_mf6a0h6l");
+                    String ckcw = safeGetString(item, "textField_mf6a0h6k");
+                    String sjr = safeGetString(item, "textField_mejnamf6");
+                    String sjdh = safeGetString(item, "textField_mejnamf7");
+                    String sjdz = safeGetString(item, "textareaField_mf6a0h5e");
+                    String zbq = safeGetString(item, "numberField_mf6a0h6v");
+                    String kddh = safeGetString(item, "textField_mf6a0h6w");
+                    String mdh = safeGetString(item, "textField_mf6a0h6y");
+                    LocalDateTime yhrq = parseTimestamp(safeGetString(item, "dateField_mejnamfo"));
+
+                    table1Map.put("wlbm", wlbm);
+                    table1Map.put("detailId", detailId);
+                    table1Map.put("wlmc", wlmc);
+                    table1Map.put("ggxh", ggxh);
+                    table1Map.put("xsdw", xsdw);
+                    table1Map.put("jjsl", jjsl);
+                    table1Map.put("count", count);
+                    table1Map.put("ssxl", ssxl);
+                    table1Map.put("yhrq", yhrq);
+                    table1Map.put("sfzp", sfzp);
+                    table1Map.put("ckck", ckck);
+                    table1Map.put("ckcw", ckcw);
+                    table1Map.put("sjr", sjr);
+                    table1Map.put("sjdh", sjdh);
+                    table1Map.put("sjdz", sjdz);
+                    table1Map.put("zbq", zbq);
+                    table1Map.put("kddh", kddh);
+                    table1Map.put("mdh", mdh);
+
+                    deliveryList.add(table1Map);
+                }
+            }
+
+            // 构建返回数据
+            Map<String, Object> deliveryData = new HashMap<>();
+            deliveryData.put("djlx", djlx);
+            deliveryData.put("orderId", orderId);
+            deliveryData.put("rq", rq);
+            deliveryData.put("kh", kh);
+            deliveryData.put("jsbb", jsbb);
+            deliveryData.put("djbh", djbh);
+            deliveryData.put("xsbm", xsbm);
+            deliveryData.put("lllx", lllx);
+            deliveryData.put("jjr", jjr);
+            deliveryData.put("jjrdh", jjrdh);
+            deliveryData.put("jjdz", jjdz);
+            deliveryData.put("xslx", xslx);
+            deliveryData.put("bzfs", bzfs);
+            deliveryData.put("bz", bz);
+            deliveryData.put("hhsj", hhsj);
+            deliveryData.put("ysfs", ysfs);
+            deliveryData.put("hdfs", hdfs);
+            deliveryData.put("kdgs", kdgs);
+            deliveryData.put("fkfs", fkfs);
+            deliveryData.put("DeliveryList", deliveryList);
+
+            // 设置返回结果
+            result.put("table", "KD_YD_DELIVERY");
+            result.put("action", action != null ? action : "add");
+            result.put("data", deliveryData);
+
+            // 添加日志记录
+            log.info("发货通知单同步成功: formInstId={}, djbh={}, kh={}", formInstId, djbh, kh);
+
+            // 如果需要回写到表单,可以在这里操作
+        /*
+        ydClient.operateData(
+            YDParam.builder()
+                .formInstanceId(formInstId)
+                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrqnxmm", "需要回写的值")))
+                .useLatestVersion(true).build(),
+            YDConf.FORM_OPERATION.update);
+        */
+
+        } catch (Exception e) {
+            log.error("发货通知单同步异常", e);
+            result.put("table", "KD_YD_DELIVERY");
+            result.put("action", "error");
+            result.put("data", new HashMap<String, Object>() {{
+                put("errorMsg", "操作失败:" + e.getMessage());
+            }});
         }
-//        ydClient.operateData(
-//                YDParam.builder()
-//                        .formInstanceId(formInstId)
-//                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrqnxmm", id)))
-//                        .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
+
+        return result;
     }
 
     @Override

+ 268 - 1
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdMaterialServiceImpl.java

@@ -1,5 +1,7 @@
 package com.malk.huagao.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.malk.huagao.entity.KdYdCustomer;
 import com.malk.huagao.entity.KdYdMaterial;
 import com.malk.huagao.mapper.KdYdMaterialMapper;
@@ -7,16 +9,18 @@ import com.malk.huagao.service.IKdYdMaterialService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
+import com.malk.server.aliwork.YDSearch;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -27,6 +31,7 @@ import java.util.Map;
  * @since 2025-10-16
  */
 @Service
+@Slf4j
 public class KdYdMaterialServiceImpl extends ServiceImpl<KdYdMaterialMapper, KdYdMaterial> implements IKdYdMaterialService {
     @Autowired
     private YDClient ydClient;
@@ -88,6 +93,268 @@ public class KdYdMaterialServiceImpl extends ServiceImpl<KdYdMaterialMapper, KdY
 
        
     }
+
+    @Override
+    public Map<String, Object> addkdYdMaterial(Map json) {
+        Map<String, Object> result = new HashMap<>();
+
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+
+            // 查询需要删除的数据
+            List<Map<String, Object>> kdYdMaterialdels = UtilMap.getList(json ,"data");
+            String action = json.get("action").toString();
+            String table = json.get("table").toString();
+
+            // 批量删除处理
+            if (!kdYdMaterialdels.isEmpty() && action.equals("del") && table.equals("KD_YD_MATERIAL")) {
+                log.info("开始处理删除操作,共{}条数据", kdYdMaterialdels.size());
+                ArrayList<String> list = new ArrayList<>();
+
+                for (Map item : kdYdMaterialdels) {
+                    try {
+                        // 修复:使用安全的方式转换FMATERIALID
+                        Object fmaterialidObj = item.get("FMATERIALID");
+                        String fmaterialidStr = String.valueOf(fmaterialidObj);
+
+                        List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
+                                .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
+                                .appType("APP_VQDMMWS6OR1VHL8VMFD3")
+                                .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
+                                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_misfb2ft", fmaterialidStr)))
+                                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+                        if (list1 != null && !list1.isEmpty()) {
+                            for (Map map : list1) {
+                                String formInstanceId = UtilMap.getString(map, "formInstanceId");
+                                if (formInstanceId != null) {
+                                    list.add(formInstanceId);
+                                    log.info("找到待删除的表单实例: formInstanceId={}", formInstanceId);
+                                }
+                            }
+                        } else {
+                            log.info("未找到对应的物料数据: fmaterialid={}", fmaterialidStr);
+                        }
+
+                    } catch (Exception e) {
+                        log.info("删除物料数据查询异常: FMATERIALID={}", item.get("FMATERIALID"), e);
+                    }
+                }
+
+                // 执行批量删除
+                if (!list.isEmpty()) {
+                    try {
+                        Object deleteResult = ydClient.operateData(YDParam.builder()
+                                .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
+                                .formInstanceIdList(list)
+                                .build(), YDConf.FORM_OPERATION.delete_batch);
+                        // 返回删除结果
+                        result.put("code", "200");
+                        result.put("msg", "删除成功,共删除" + list.size() + "条数据");
+                        result.put("data", new HashMap<String, Object>() {{
+                            put("deleteResult", "删除成功");
+                            put("deletedCount", list.size());
+                            put("deletedIds", list);
+                        }});
+                        return result;
+
+                    } catch (Exception e) {
+                        log.error("批量删除操作异常", e);
+                        result.put("code", "500");
+                        result.put("msg", "批量删除操作异常:" + e.getMessage());
+                        result.put("data", new HashMap<>());
+                        return result;
+                    }
+                } else {
+                    result.put("code", "200");
+                    result.put("msg", "未找到需要删除的数据");
+                    result.put("data", new HashMap<>());
+                    return result;
+                }
+            }
+
+            List<Map<String, Object>> kdYdMaterials = UtilMap.getList(json ,"data");
+            // 同步新增/更新数据
+            if (kdYdMaterials.isEmpty()) {
+                log.info("【物料单同步任务】无需要同步的数据,结束");
+                result.put("code", "200");
+                result.put("msg", "无需要同步的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            // 存储所有操作的结果
+            List<Map<String, Object>> operationResults = new ArrayList<>();
+            int successCount = 0;
+            int failCount = 0;
+
+            for (Map kdYdMaterial : kdYdMaterials) {
+                Map<String, Object> singleResult = new HashMap<>();
+
+                try {
+                    // 修复:安全地获取所有字段值
+                    String wlbm = safeGetStringValue(kdYdMaterial, "wlbm");
+                    String wlmc = safeGetStringValue(kdYdMaterial, "wlmc");
+                    String xh = safeGetStringValue(kdYdMaterial, "xh");
+                    String gg = safeGetStringValue(kdYdMaterial, "gg");
+
+                    // 修复:安全处理FMATERIALID,可能为字符串或数字
+                    Object fmaterialidObj = kdYdMaterial.get("FMATERIALID");
+                    String fmaterialidStr = String.valueOf(fmaterialidObj);
+
+                    String wlfz = safeGetStringValue(kdYdMaterial, "wlfz");
+                    String wlsx = safeGetStringValue(kdYdMaterial, "wlsx");
+                    String jbdw = safeGetStringValue(kdYdMaterial, "jbdw");
+                    String ssxl = safeGetStringValue(kdYdMaterial, "ssxl");
+                    String jx = safeGetStringValue(kdYdMaterial, "jx");
+
+                    // 修复:安全处理sd字段
+                    Object sdObj = kdYdMaterial.get("sd");
+                    Integer sd = null;
+                    if (sdObj != null) {
+                        try {
+                            if (sdObj instanceof Integer) {
+                                sd = (Integer) sdObj;
+                            } else if (sdObj instanceof String) {
+                                sd = Integer.parseInt((String) sdObj);
+                            } else if (sdObj instanceof Number) {
+                                sd = ((Number) sdObj).intValue();
+                            }
+                        } catch (Exception e) {
+                            log.warn("无法解析sd字段: {}", sdObj);
+                        }
+                    }
+
+                    String mrsl = safeGetStringValue(kdYdMaterial, "mrsl");
+                    String chlb = safeGetStringValue(kdYdMaterial, "chlb");
+                    String xsy = safeGetStringValue(kdYdMaterial, "xsy");
+
+                    // 修复:安全处理xsjzj字段
+                    Object xsjzjObj = kdYdMaterial.get("xsjzj");
+                    BigDecimal xsjzj = null;
+                    if (xsjzjObj != null) {
+                        try {
+                            if (xsjzjObj instanceof BigDecimal) {
+                                xsjzj = (BigDecimal) xsjzjObj;
+                            } else if (xsjzjObj instanceof String) {
+                                xsjzj = new BigDecimal((String) xsjzjObj);
+                            } else if (xsjzjObj instanceof Number) {
+                                xsjzj = new BigDecimal(xsjzjObj.toString());
+                            }
+                        } catch (Exception e) {
+                            log.warn("无法解析xsjzj字段: {}", xsjzjObj);
+                        }
+                    }
+
+                    String smzs = safeGetStringValue(kdYdMaterial, "smzs");
+                    String sjzt = safeGetStringValue(kdYdMaterial, "sjzt");
+                    String jyzt = safeGetStringValue(kdYdMaterial, "jyzt");
+                    String dzl = safeGetStringValue(kdYdMaterial, "dzl");
+                    String wlzl = safeGetStringValue(kdYdMaterial, "wlzl");
+                    String pzzt = safeGetStringValue(kdYdMaterial, "pzzt");
+                    String sdbb = safeGetStringValue(kdYdMaterial, "sdbb");
+                    String wlbt = wlmc + wlbm;
+
+                    Map updateFormData = new HashMap();
+                    updateFormData.put("textField_l43jpnsf", wlmc);
+                    updateFormData.put("textField_mfxbtcdh", wlbm);
+                    updateFormData.put("textField_l43jpnsg", xh);
+                    updateFormData.put("textField_lqbxkzbq", gg);
+                    updateFormData.put("textField_misfb2ft", fmaterialidStr); // 使用字符串类型
+                    updateFormData.put("textField_mhlbx8hi", wlfz);
+                    updateFormData.put("textField_l43jpnsh", wlsx);
+                    updateFormData.put("textField_mfxbtcdo", jbdw);
+                    updateFormData.put("textField_mfxbtcdp", ssxl);
+                    updateFormData.put("textField_mejl9nrs", jx);
+
+                    if (sd != null) {
+                        updateFormData.put("numberField_mfxbtceb", sd);
+                    } else {
+                        updateFormData.put("numberField_mfxbtceb", 0);
+                    }
+
+                    updateFormData.put("textField_mejl9nrp", dzl);
+                    updateFormData.put("selectField_mejl9nrq", pzzt);
+                    updateFormData.put("textField_mfxbtcdq", mrsl);
+                    updateFormData.put("textField_mhabp7y0", sdbb);
+                    updateFormData.put("textField_mfxbtcdr", chlb);
+                    updateFormData.put("textField_mfxbtce5", xsy);
+
+                    // 确保金额字段保留两位小数
+                    if (xsjzj != null) {
+                        updateFormData.put("numberField_mejl9nsc", xsjzj.setScale(2, java.math.RoundingMode.HALF_UP));
+                    } else {
+                        updateFormData.put("numberField_mejl9nsc", java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP));
+                    }
+
+                    updateFormData.put("textField_mfxbtce4", smzs);
+                    updateFormData.put("textField_mfxbtcea", jyzt);
+                    updateFormData.put("textField_mg4h6mz5", wlbt);
+
+                    // 执行操作并获取结果
+                    Object operationResult = ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
+                            .appType("APP_VQDMMWS6OR1VHL8VMFD3")
+                            .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
+                            .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch(
+                                    "textField_misfb2ft", fmaterialidStr, "金蝶内码", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ))))
+                            .formDataJson(JSONObject.toJSONString(updateFormData))
+                            .build(), YDConf.FORM_OPERATION.upsert);
+
+                    log.info("物料单同步成功: wlbm={}, wlmc={}", wlbm, wlmc);
+
+                    // 记录单个操作结果
+                    singleResult.put("FMATERIALID", fmaterialidStr);
+                    singleResult.put("operationResult", operationResult);
+                    singleResult.put("status", "success");
+                    successCount++;
+
+                } catch (Exception e) {
+                    log.error("物料单同步失败", e);
+
+                    // 修复:安全获取FMATERIALID
+                    Object fmaterialidObj = kdYdMaterial.get("FMATERIALID");
+                    String fmaterialidStr = fmaterialidObj != null ? String.valueOf(fmaterialidObj) : "unknown";
+
+                    singleResult.put("FMATERIALID", fmaterialidStr);
+                    singleResult.put("errorMsg", e.getMessage());
+                    singleResult.put("status", "fail");
+                    failCount++;
+                }
+
+                operationResults.add(singleResult);
+            }
+
+            // 构建返回结果
+            Map<String, Object> data = new HashMap<>();
+            data.put("operationResults", operationResults);
+            data.put("totalCount", kdYdMaterials.size());
+            data.put("successCount", successCount);
+            data.put("failCount", failCount);
+
+            result.put("code", failCount == 0 ? "200" : "300");
+            result.put("msg", "操作完成,成功" + successCount + "条,失败" + failCount + "条");
+            result.put("data", data);
+
+            return result;
+
+        } catch (Exception e) {
+            log.error("物料单同步任务执行异常", e);
+            result.put("code", "500");
+            result.put("msg", "系统异常:" + e.getMessage());
+            result.put("data", new HashMap<>());
+            return result;
+        }
+    }
+
+    // 辅助方法:安全获取字符串值
+    private String safeGetStringValue(Map map, String key) {
+        if (map == null) return "";
+        Object value = map.get(key);
+        if (value == null) return "";
+        return String.valueOf(value);
+    }
+
     private static int parseInt(String str, int defaultValue) {
         if (str == null || str.trim().isEmpty()) {
             return defaultValue;

+ 292 - 293
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java

@@ -1,6 +1,9 @@
 package com.malk.huagao.service.impl;
 
 
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -17,6 +20,7 @@ import com.malk.server.aliwork.YDSearch;
 import com.malk.server.common.McR;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilHttp;
 import com.malk.utils.UtilMap;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.MDC;
@@ -53,309 +57,303 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
 
 
     @Override
-    public void insertkdYdOrder(Map map) {
-        MDC.put("MDC_KEY_PID", "1003");
-        String formInstId = UtilMap.getString(map, "formInstId");
-        String type = UtilMap.getString(map, "type");
-
-        if ("3".equals(type)) {
-            String bm = UtilMap.getString(map, "bm");
-            KdYdOrder kdYdOrder = new KdYdOrder();
-            kdYdOrder.setOperationType("3");
-            kdYdOrder.setSyncStatus("0");
-            kdYdOrderMapper.update(kdYdOrder, new LambdaQueryWrapper<KdYdOrder>().eq(KdYdOrder::getDjbh, bm));
-            return; // 或者根据你的业务逻辑返回相应的结果
-        }
-        if ("4".equals(type)) {
-            String bm = UtilMap.getString(map, "bm");
-            KdYdOrder kdYdOrder = new KdYdOrder();
-            kdYdOrder.setOperationType("4");
-            kdYdOrder.setSyncStatus("0");
-            kdYdOrderMapper.update(kdYdOrder, new LambdaQueryWrapper<KdYdOrder>().eq(KdYdOrder::getDjbh, bm));
-            return; // 或者根据你的业务逻辑返回相应的结果
-        }
-        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
-                .formInstId(formInstId)
-                .build(), YDConf.FORM_QUERY.retrieve_id);
-        Map formData = ddrNew.getFormData();
-
-        String djlx = UtilMap.getString(formData, "selectField_mejowmna");
-        String khmc = UtilMap.getString(formData, "textField_mejnamf2");
-        String djbh = UtilMap.getString(formData, "textField_mjs6fuwo");
-        if("2".equals(type)){
-             djbh = UtilMap.getString(formData, "textField_mjs6fuwo");
-        }
-        LocalDateTime rq = parseTimestamp(UtilMap.getString(formData, "dateField_mejowmnb"));
-        String khxypj = UtilMap.getString(formData, "selectField_mewirdx4");
-        String ywlx = UtilMap.getString(formData, "textField_mfxv2vfz");
-        String xsy = UtilMap.getString(formData, "employeeField_mejowmng").replace("[\"", "").replace("\"]", "").trim();
-        String xslx = UtilMap.getString(formData, "selectField_mejowmnc");
-        String bzq = UtilMap.getString(formData, "selectField_mf6gyfkq");
-        String xsbm = UtilMap.getString(formData, "departmentSelectField_mfxv2vfu").replace("[\"", "").replace("\"]", "").trim();
-        String bz = UtilMap.getString(formData, "textareaField_mejnamfb");
-        String jsbb = UtilMap.getString(formData, "selectField_mejowmnk");
-        String sktj = UtilMap.getString(formData, "selectField_mgisux07");
-        String zdzkestr = UtilMap.getString(formData, "numberField_mejowmni");
-        BigDecimal zdzke = toBigDecimal(zdzkestr);
-//        String fj = UtilMap.getString(formData, "attachmentField_mfoqcctz");
-//        JSONArray array = JSONObject.parseArray(fj);
-//        List<String> resultList = new ArrayList<>();
-//        if(array != null){
-//            for (int i = 0; i < array.size(); i++) {
-//                JSONObject jsonObject = array.getJSONObject(i);
-//                String url = jsonObject.getString("url");
-//                String s = ydClient.convertTemporaryUrl(url, 3600000);
-//                resultList.add(s);
-//            }
-//        }
-//        if(StringUtils.isNotBlank(fj)){
-//            List<Map> fjList =(List<Map>) JSON.parse(fj);
-//            resultList.add(ydClient.convertTemporaryUrl(UtilMap.getString(fjList.get(0),"url"), 3600000));
-//        }
-        String sestr = UtilMap.getString(formData, "numberField_mfxv2vgh");
-        BigDecimal se = toBigDecimal(sestr);
-        String jestr = UtilMap.getString(formData, "numberField_mfxv2vgj");
-        BigDecimal je = toBigDecimal(jestr);
-        String jshjstr = UtilMap.getString(formData, "numberField_mewfgzkv");
-        BigDecimal jshj = toBigDecimal(jshjstr);
-        String sfhs = UtilMap.getString(formData, "radioField_mfxv2vg4");
-        String jws = UtilMap.getString(formData, "radioField_mfxv2vgm");
-        List<Map> tableField = (List<Map>) formData.get("tableField_mfbx1pqi");
-        List<Map> tableFieldPayment = (List<Map>) formData.get("tableField_mhiui6v5");
-
-        KdYdOrder kdYdOrder = new KdYdOrder();
-        kdYdOrder.setDjlx(djlx);
-        kdYdOrder.setDjbh(djbh);
-        kdYdOrder.setKhmc(khmc);
-        kdYdOrder.setRq(rq);
-        kdYdOrder.setKhxypj(khxypj);
-        kdYdOrder.setYwlx(ywlx);
-        kdYdOrder.setXslx(xslx);
-        kdYdOrder.setBzq(bzq);
-        kdYdOrder.setXsy(xsy);
-        kdYdOrder.setXsbm(xsbm);
-        kdYdOrder.setBz(bz);
-        kdYdOrder.setJsbb(jsbb);
-        kdYdOrder.setSktj(sktj);
-        kdYdOrder.setZdzke(zdzke);
-        kdYdOrder.setSe(se);
-        kdYdOrder.setJe(je);
-        kdYdOrder.setJshj(jshj);
-        kdYdOrder.setSfhs(sfhs);
-        kdYdOrder.setJws(jws);
-        kdYdOrder.setSyncStatus("0");
-
-        Long id;
-        if ("2".equals(type)) {
-            // 查询已存在的订单
-            KdYdOrder existing = kdYdOrderMapper.selectOne(
-                    new LambdaQueryWrapper<KdYdOrder>().eq(KdYdOrder::getDjbh, djbh)
-            );
-            if (existing == null) {
-                throw new IllegalArgumentException("无法更新订单:单据编号 [" + djbh + "] 不存在");
+    public Map<String, Object> insertkdYdOrder(Map map) {
+        Map<String, Object> result = new HashMap<>();
+
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+            String formInstId = UtilMap.getString(map, "formInstId");
+            String type = UtilMap.getString(map, "type");
+
+            // 处理特殊操作类型
+            if ("del".equals(type)) {
+                String bm = UtilMap.getString(map, "bm");
+                Map<String, String> headers = new HashMap<>();
+                headers.put("Content-Type", "application/x-www-form-urlencoded");
+                Map<String, Object> formParams = new HashMap<>();
+                Map<String, Object> djbh = new HashMap<>();
+                djbh.put("djbh", bm);
+                result.put("data", djbh);
+                String jsonStr = JSON.toJSONString(result);
+
+                formParams.put("jsons", jsonStr);
+
+                System.out.println("====" + formParams);
+                HttpResponse response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbdeletexsdd")
+                        .headerMap(headers, true)
+                        .form(formParams)
+                        .timeout(30000)  // 30秒超时
+                        .execute();
+
+                String responseBody = response.body();
+                // 返回删除操作的格式
+                result.put("table", "KD_YD_ORDER");
+                result.put("action", "del");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("bm", bm);  // 删除的主键或标识
+                    put("msg", "删除成功");
+                }});
+                return result;
             }
-            id = existing.getId();
-            kdYdOrder.setId(id);
-            kdYdOrder.setOperationType("2");
-            kdYdOrderMapper.updateById(kdYdOrder); // 使用 updateById 更安全
-        } else {
-            kdYdOrder.setOperationType("1");
-            kdYdOrderMapper.insert(kdYdOrder);
-            id = kdYdOrder.getId(); // MyBatis-Plus 会自动回填主键
-        }
 
-// ====== 1. 获取数据库中当前 orderId 的所有明细(用于后续对比删除)======
-        LambdaQueryWrapper<KdYdOrderDetail> existingWrapper = new LambdaQueryWrapper<>();
-        existingWrapper.eq(KdYdOrderDetail::getOrderId, id);
-        List<KdYdOrderDetail> existingDetails = kdYdOrderDetailMapper.selectList(existingWrapper);
-        Set<Integer> incomingDetailIds = new HashSet<>(); // 用于记录本次传入的 detailId
-
-// ====== 2. 遍历传入的 tableField,逐条处理 ======
-        if (tableField != null) {
-//            for (Map item : tableField) {
-//                int detailId = parseInt(safeGetString(item, "indexField"), 0); // 建议前端传一个明确的 index 或 detailId 字段
-//                // 如果前端没有显式传 detailId,可以用循环计数(但需注意顺序稳定性)
-//                // 这里假设你用 count 作为 detailId(与前端一致)
-//                // 若前端表格支持拖拽/乱序,建议传唯一行ID,但你当前用的是序号,我们继续用 count
-//
-//                // 注意:你原代码用 count++,这里我们改用从数据中获取或维持顺序
-//                // 为兼容你原有逻辑,我们仍用递增序号,但更推荐前端传 detailId
-//            }
-
-            // 重新遍历,使用 index 作为 detailId
-            for (int i = 0; i < tableField.size(); i++) {
-                Map item = tableField.get(i);
-                int detailId = parseInt(safeGetString(item, "numberField_mjzfodew"), 0);
-                incomingDetailIds.add(detailId);
-
-                String wlbm = safeGetString(item, "textField_mfbx1pqt");
-                String wlmc = safeGetString(item, "textField_mfbx1pqs");
-                String ggxh = safeGetString(item, "textField_mfbx1pqr");
-                String xsdw = safeGetString(item, "textField_mfbx1pqq");
-                int xssl = parseInt(safeGetString(item, "numberField_mfbx1pr4"), 0);
-                String ssxl = safeGetString(item, "selectField_mfbx1pr1");
-                BigDecimal dj = toBigDecimal(safeGetString(item, "numberField_mfbx1prf"));
-                BigDecimal cxzkje = toBigDecimal(safeGetString(item, "numberField_mk56soin"));
-                BigDecimal hsdj = toBigDecimal(safeGetString(item, "numberField_mfbx1prg"));
-                String sfzp = safeGetString(item, "radioField_mfbx1prc");
-                String bz1 = safeGetString(item, "textareaField_mjryuaok");
-                int sl = parseInt(safeGetString(item, "numberField_mfbx1prb"), 0);
-                BigDecimal zse = toBigDecimal(safeGetString(item, "numberField_mfbx1prh"));
-                BigDecimal zje = toBigDecimal(safeGetString(item, "numberField_mfbx1pri"));
-                BigDecimal zjshj = toBigDecimal(safeGetString(item, "numberField_mfbx1prj"));
-                BigDecimal jj = toBigDecimal(safeGetString(item, "numberField_mfbx1prk"));
-                BigDecimal zkl = toBigDecimal(safeGetString(item, "numberField_mfbx1pru"));
-                BigDecimal zke = toBigDecimal(safeGetString(item, "numberField_mfbx1prt"));
-                LocalDateTime yhrq = parseTimestamp(UtilMap.getString(item, "dateField_mfbx1prs"));
-                BigDecimal xsjzj = toBigDecimal(safeGetString(item, "numberField_mfbx1pr0"));
-                String zmzs = safeGetString(item, "textField_mfxv2vgv");
-
-                // 查询是否已存在
-                LambdaQueryWrapper<KdYdOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
-                queryWrapper.eq(KdYdOrderDetail::getOrderId, id)
-                        .eq(KdYdOrderDetail::getDetailId, detailId);
-                KdYdOrderDetail existing = kdYdOrderDetailMapper.selectOne(queryWrapper);
-
-                if (existing != null) {
-                    // 更新
-                    existing.setWlbm(wlbm);
-                    existing.setWlmc(wlmc);
-                    existing.setGgxh(ggxh);
-                    existing.setXsdw(xsdw);
-                    existing.setXssl(xssl);
-                    existing.setSsxl(ssxl);
-                    existing.setCxzkje(cxzkje);
-                    existing.setDj(dj);
-                    existing.setHsdj(hsdj);
-                    existing.setSfzp(sfzp);
-                    existing.setSl(sl);
-                    existing.setBz(bz1);
-                    existing.setSe(zse);
-                    existing.setJe(zje);
-                    existing.setJshj(zjshj);
-                    existing.setJj(jj);
-                    existing.setZkl(zkl);
-                    existing.setZke(zke);
-                    existing.setYhrq(yhrq);
-                    existing.setXsjzj(xsjzj);
-                    existing.setSmzs(zmzs);
-                    existing.setSyncStatus("0");
-                    existing.setOperationType(type); // 注意:type 决定是 insert(1) 还是 update(2/3)
-
-                    kdYdOrderDetailMapper.updateById(existing);
-                } else {
-                    // 新增
-                    KdYdOrderDetail kdYdOrderDetail = new KdYdOrderDetail();
-                    kdYdOrderDetail.setOrderId(id);
-                    kdYdOrderDetail.setDetailId(detailId);
-                    kdYdOrderDetail.setWlbm(wlbm);
-                    kdYdOrderDetail.setCxzkje(cxzkje);
-                    kdYdOrderDetail.setWlmc(wlmc);
-                    kdYdOrderDetail.setGgxh(ggxh);
-                    kdYdOrderDetail.setXsdw(xsdw);
-                    kdYdOrderDetail.setXssl(xssl);
-                    kdYdOrderDetail.setSsxl(ssxl);
-                    kdYdOrderDetail.setDj(dj);
-                    kdYdOrderDetail.setHsdj(hsdj);
-                    kdYdOrderDetail.setSfzp(sfzp);
-                    kdYdOrderDetail.setSl(sl);
-                    kdYdOrderDetail.setSe(zse);
-                    kdYdOrderDetail.setJe(zje);
-                    kdYdOrderDetail.setBz(bz1);
-                    kdYdOrderDetail.setJshj(zjshj);
-                    kdYdOrderDetail.setJj(jj);
-                    kdYdOrderDetail.setZkl(zkl);
-                    kdYdOrderDetail.setZke(zke);
-                    kdYdOrderDetail.setYhrq(yhrq);
-                    kdYdOrderDetail.setXsjzj(xsjzj);
-                    kdYdOrderDetail.setSmzs(zmzs);
-                    kdYdOrderDetail.setSyncStatus("0");
-                    kdYdOrderDetail.setOperationType("1"); // 新增始终是 1
-
-                    kdYdOrderDetailMapper.insert(kdYdOrderDetail);
-                }
+            if ("cancel".equals(type)) {
+                String bm = UtilMap.getString(map, "bm");
+                Map<String, String> headers = new HashMap<>();
+                headers.put("Content-Type", "application/x-www-form-urlencoded");
+                Map<String, Object> formParams = new HashMap<>();
+                Map<String, Object> djbh = new HashMap<>();
+                djbh.put("djbh", bm);
+                result.put("data", djbh);
+                String jsonStr = JSON.toJSONString(result);
+                System.out.println("==" + jsonStr);
+                formParams.put("jsons", jsonStr);
+                HttpResponse response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbExcuteOperationxsdd")
+                        .headerMap(headers, true)
+                        .form(formParams)
+                        .timeout(30000)  // 30秒超时
+                        .execute();
+
+                String responseBody = response.body();
+                String msg = JSON.parseArray(responseBody)
+                        .getJSONObject(0)
+                        .getString("msg");
+                ydClient.operateData(
+                        YDParam.builder()
+                                .formInstanceId(formInstId)
+                                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textareaField_mkxqgrvq", msg)))
+                                .useLatestVersion(true).build(),
+                        YDConf.FORM_OPERATION.update);
+                // 返回作废操作的格式
+                result.put("table", "KD_YD_ORDER");
+                result.put("action", "cancel"); // 作废通常是修改状态
+                result.put("data", new HashMap<String, Object>() {{
+                    put("bm", bm); // 作废状态
+                    put("msg", "作废成功");
+                    // 其他作废需要的数据
+                }});
+                return result;
             }
-        }
 
-// ====== 3. 删除数据库中存在但本次未传入的明细 ======
-        for (KdYdOrderDetail existing : existingDetails) {
-            if (!incomingDetailIds.contains(existing.getDetailId())) {
-                kdYdOrderDetailMapper.deleteById(existing.getId());
-                // 或者软删除:update sync_status = '9' 等
+            // 查询表单数据
+            DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+                    .formInstId(formInstId)
+                    .build(), YDConf.FORM_QUERY.retrieve_id);
+            Map formData = ddrNew.getFormData();
+
+            // 提取主表字段
+            String djlx = UtilMap.getString(formData, "selectField_mejowmna");
+            String khmc = UtilMap.getString(formData, "textField_mejnamf2");
+//            String khmc = "五岳";
+//            String djbh = UtilMap.getString(formData, "textField_mjs6fuwo");
+
+            // 判断操作类型对应的action
+            String actionType;
+            String djbh = null;
+            if ("edit".equals(type)) {
+                djbh = UtilMap.getString(formData, "textField_mjs6fuwo");
+                actionType = "edit";
+            } else {
+                actionType = "add";
+                djbh = "";
             }
-        }
 
-// ====== 处理付款计划子表(KdYdOrderPayment)======
-
-// 1. 查询数据库中当前 orderId 下所有已存在的付款记录
-        LambdaQueryWrapper<KdYdOrderPayment> paymentExistingWrapper = new LambdaQueryWrapper<>();
-        paymentExistingWrapper.eq(KdYdOrderPayment::getOrderId, id);
-        List<KdYdOrderPayment> existingPayments = kdYdOrderPaymentMapper.selectList(paymentExistingWrapper);
-        Set<Integer> incomingPaymentDetailIds = new HashSet<>();
-
-        if (tableFieldPayment != null) {
-            for (int i = 0; i < tableFieldPayment.size(); i++) {
-                Map row = tableFieldPayment.get(i);
-                int detailId = i + 1; // 使用 1-based 序号作为 detailId(需与前端表格顺序一致)
-                incomingPaymentDetailIds.add(detailId);
-
-                String sfys = safeGetString(row, "radioField_mhiui6v7");
-                String gldh = safeGetString(row, "textField_mhiui6va");
-                BigDecimal ysbl = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6v6"));
-                BigDecimal ysje = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6v8"));
-                BigDecimal ssje = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6vb"));
-                LocalDateTime endTime = parseTimestamp(UtilMap.getString(row, "dateField_mhiui6v9"));
-
-                // 查询是否已存在该 (orderId, detailId)
-                LambdaQueryWrapper<KdYdOrderPayment> queryWrapper = new LambdaQueryWrapper<>();
-                queryWrapper.eq(KdYdOrderPayment::getOrderId, id)
-                        .eq(KdYdOrderPayment::getDetailId, detailId);
-                KdYdOrderPayment existingPayment = kdYdOrderPaymentMapper.selectOne(queryWrapper);
-
-                if (existingPayment != null) {
-                    // 更新
-                    existingPayment.setSfys(sfys);
-                    existingPayment.setGldh(gldh);
-                    existingPayment.setYsbl(ysbl);
-                    existingPayment.setYsje(ysje);
-                    existingPayment.setSsje(ssje);
-                    existingPayment.setEndTime(endTime);
-                    existingPayment.setSyncStatus("0");
-                    existingPayment.setOperationType(type); // 使用传入的 type("2" 或 "3")
-
-                    kdYdOrderPaymentMapper.updateById(existingPayment);
-                } else {
-                    // 新增
-                    KdYdOrderPayment payment = new KdYdOrderPayment();
-                    payment.setOrderId(id);
-                    payment.setDetailId(detailId);
-                    payment.setSfys(sfys);
-                    payment.setGldh(gldh);
-                    payment.setYsbl(ysbl);
-                    payment.setYsje(ysje);
-                    payment.setSsje(ssje);
-                    payment.setEndTime(endTime);
-                    payment.setSyncStatus("0");
-                    payment.setOperationType("1"); // 新增操作类型为 "1"
-
-                    kdYdOrderPaymentMapper.insert(payment);
+            // 提取其他字段...
+            LocalDateTime rq = parseTimestamp(UtilMap.getString(formData, "dateField_mejowmnb"));
+            String khxypj = UtilMap.getString(formData, "selectField_mewirdx4");
+            String ywlx = UtilMap.getString(formData, "textField_mfxv2vfz");
+            String xsy = UtilMap.getString(formData, "employeeField_mejowmng").replace("[\"", "").replace("\"]", "").trim();
+            String xslx = UtilMap.getString(formData, "selectField_mejowmnc");
+            String bzq = UtilMap.getString(formData, "selectField_mf6gyfkq");
+            String xsbm = UtilMap.getString(formData, "departmentSelectField_mfxv2vfu").replace("[\"", "").replace("\"]", "").trim();
+            String bz = UtilMap.getString(formData, "textareaField_mejnamfb");
+            String jsbb = UtilMap.getString(formData, "selectField_mejowmnk");
+            String sktj = UtilMap.getString(formData, "selectField_mgisux07");
+            String zdzkestr = UtilMap.getString(formData, "numberField_mejowmni");
+            BigDecimal zdzke = toBigDecimal(zdzkestr);
+            String sestr = UtilMap.getString(formData, "numberField_mfxv2vgh");
+            BigDecimal se = toBigDecimal(sestr);
+            String jestr = UtilMap.getString(formData, "numberField_mfxv2vgj");
+            BigDecimal je = toBigDecimal(jestr);
+            String jshjstr = UtilMap.getString(formData, "numberField_mewfgzkv");
+            BigDecimal jshj = toBigDecimal(jshjstr);
+            String sfhs = UtilMap.getString(formData, "radioField_mfxv2vg4");
+            String jws = UtilMap.getString(formData, "radioField_mfxv2vgm");
+            List<Map> tableField = (List<Map>) formData.get("tableField_mfbx1pqi");
+            List<Map> tableFieldPayment = (List<Map>) formData.get("tableField_mhiui6v5");
+
+            // 处理订单明细
+            List<Map<String, Object>> orderList = new ArrayList<>();
+            if (tableField != null) {
+                for (int i = 0; i < tableField.size(); i++) {
+                    Map item = tableField.get(i);
+                    Map<String, Object> table1Map = new HashMap<>();
+
+                    int detailId = parseInt(safeGetString(item, "numberField_mjzfodew"), 0);
+                    String wlbm = safeGetString(item, "textField_mfbx1pqt");
+//                    String wlbm = "010101010003";
+                    String wlmc = safeGetString(item, "textField_mfbx1pqs");
+                    String ggxh = safeGetString(item, "textField_mfbx1pqr");
+                    String xsdw = safeGetString(item, "textField_mfbx1pqq");
+                    int xssl = parseInt(safeGetString(item, "numberField_mfbx1pr4"), 0);
+                    String ssxl = safeGetString(item, "selectField_mfbx1pr1");
+                    BigDecimal dj = toBigDecimal(safeGetString(item, "numberField_mfbx1prf"));
+                    BigDecimal cxzkje = toBigDecimal(safeGetString(item, "numberField_mk56soin"));
+                    BigDecimal hsdj = toBigDecimal(safeGetString(item, "numberField_mfbx1prg"));
+                    String sfzp = safeGetString(item, "radioField_mfbx1prc");
+                    String bz1 = safeGetString(item, "textareaField_mjryuaok");
+                    int sl = parseInt(safeGetString(item, "numberField_mfbx1prb"), 0);
+                    BigDecimal zse = toBigDecimal(safeGetString(item, "numberField_mfbx1prh"));
+                    BigDecimal zje = toBigDecimal(safeGetString(item, "numberField_mfbx1pri"));
+                    BigDecimal zjshj = toBigDecimal(safeGetString(item, "numberField_mfbx1prj"));
+                    BigDecimal jj = toBigDecimal(safeGetString(item, "numberField_mfbx1prk"));
+                    BigDecimal zkl = toBigDecimal(safeGetString(item, "numberField_mfbx1pru"));
+                    BigDecimal zke = toBigDecimal(safeGetString(item, "numberField_mfbx1prt"));
+                    LocalDateTime yhrq = parseTimestamp(UtilMap.getString(item, "dateField_mfbx1prs"));
+                    BigDecimal xsjzj = toBigDecimal(safeGetString(item, "numberField_mfbx1pr0"));
+                    String zmzs = safeGetString(item, "textField_mfxv2vgv");
+
+                    // 设置明细字段
+                    table1Map.put("detailId", detailId);
+                    table1Map.put("wlbm", wlbm);
+                    table1Map.put("wlmc", wlmc);
+                    table1Map.put("ggxh", ggxh);
+                    table1Map.put("xsdw", xsdw);
+                    table1Map.put("xssl", xssl);
+                    table1Map.put("ssxl", ssxl);
+                    table1Map.put("dj", dj);
+                    table1Map.put("cxzkje", cxzkje);
+                    table1Map.put("hsdj", hsdj);
+                    table1Map.put("sfzp", sfzp);
+                    table1Map.put("bz", bz1);
+                    table1Map.put("sl", sl);
+                    table1Map.put("se1", zse);
+                    table1Map.put("je1", zje);
+                    table1Map.put("jshj1", zjshj);
+                    table1Map.put("jj", jj);
+                    table1Map.put("zkl", zkl);
+                    table1Map.put("zke", zke);
+                    table1Map.put("xsjzj", xsjzj);
+                    table1Map.put("zmzs", zmzs);
+                    table1Map.put("yhrq", yhrq);
+
+                    orderList.add(table1Map);
                 }
             }
-        }
 
-// 3. 删除数据库中存在但本次未传入的付款记录
-        for (KdYdOrderPayment existing : existingPayments) {
-            if (!incomingPaymentDetailIds.contains(existing.getDetailId())) {
-                kdYdOrderPaymentMapper.deleteById(existing.getId());
-                // 或软删除:existing.setSyncStatus("9"); updateById
+            // 处理付款明细
+            List<Map<String, Object>> OrderPayList = new ArrayList<>();
+            if (tableFieldPayment != null) {
+                for (int i = 0; i < tableFieldPayment.size(); i++) {
+                    Map row = tableFieldPayment.get(i);
+                    Map<String, Object> table2Map = new HashMap<>();
+                    int detailId = i + 1;
+
+                    String sfys = safeGetString(row, "radioField_mhiui6v7");
+                    String gldh = safeGetString(row, "textField_mhiui6va");
+                    BigDecimal ysbl = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6v6"));
+                    BigDecimal ysje = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6v8"));
+                    BigDecimal ssje = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6vb"));
+                    LocalDateTime endTime = parseTimestamp(UtilMap.getString(row, "dateField_mhiui6v9"));
+
+                    table2Map.put("detailId", detailId);
+                    table2Map.put("sfys", sfys);
+                    table2Map.put("gldh", gldh);
+                    table2Map.put("ysbl", ysbl);
+                    table2Map.put("ysje", ysje);
+                    table2Map.put("ssje", ssje);
+                    table2Map.put("endTime", endTime);
+
+                    OrderPayList.add(table2Map);
+                }
+            }
+
+            // 构建主表数据,映射到数据库表字段
+            Map<String, Object> orderData = new HashMap<>();
+
+            // 注意:这里需要将字段名映射到数据库表字段名
+            // 示例映射,实际需要根据数据库表结构调整
+            orderData.put("djlx", djlx);                    // 单据类型
+            orderData.put("djbh", djbh);                    // 单据编号
+            orderData.put("khmc", khmc);                    // 客户名称
+            orderData.put("rq", rq);                        // 日期
+            orderData.put("khxypj", khxypj);                // 客户信用评级
+            orderData.put("ywlx", ywlx);                    // 业务类型
+            orderData.put("xslx", xslx);                    // 销售类型
+            orderData.put("bzq", bzq);                      // 保质期
+            orderData.put("xsy", xsy);                      // 销售员
+            orderData.put("xsbm", xsbm);                    // 销售部门
+            orderData.put("bz", bz);                        // 备注
+            orderData.put("jsbb", jsbb);                    // 结算币别
+            orderData.put("sktj", sktj);                    // 收款条件
+            orderData.put("zdzke", zdzke);                  // 整单折扣额
+            orderData.put("se", se);                        // 税额
+            orderData.put("je", je);                        // 金额
+            orderData.put("jshj", jshj);                    // 价税合计
+            orderData.put("sfhs", sfhs);                    // 是否含税
+            orderData.put("jws", jws);                      // 价位税
+
+            // 明细数据(需要根据实际数据库设计确定存储方式)
+            // 如果明细是单独的表,可能需要单独处理
+            orderData.put("OrderDetailList", orderList);         // 订单明细列表
+            orderData.put("PaymentDetailList", OrderPayList);    // 付款明细列表
+
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Content-Type", "application/x-www-form-urlencoded");
+
+            result.put("data", orderData);
+// 将result转换为JSON字符串
+            String jsonStr = JSON.toJSONString(result);
+// 构建form参数
+            Map<String, Object> formParams = new HashMap<>();
+            formParams.put("jsons", jsonStr);
+// 发送请求
+            HttpResponse response = null;
+            if (actionType == "add") {
+                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbxsdd")
+                        .headerMap(headers, true)
+                        .form(formParams)
+                        .timeout(30000)  // 30秒超时
+                        .execute();
+            } else {
+                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbupdatexsdd")
+                        .headerMap(headers, true)
+                        .form(formParams)
+                        .timeout(30000)  // 30秒超时
+                        .execute();
+            }
+
+            String responseBody = response.body();
+            try {
+                // 一行代码提取
+                String jdbh = JSON.parseArray(responseBody)
+                        .getJSONObject(0)
+                        .getJSONObject("data")
+                        .getString("djbh");
+                String msg = JSON.parseArray(responseBody)
+                        .getJSONObject(0)
+                        .getString("msg");
+                ydClient.operateData(
+                        YDParam.builder()
+                                .formInstanceId(formInstId)
+                                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textareaField_mkxqgrvq, textField_mjs6fuwo", msg, jdbh)))
+                                .useLatestVersion(true).build(),
+                        YDConf.FORM_OPERATION.update);
+
+            } catch (Exception e) {
+                System.out.println("解析JSON失败: " + e.getMessage());
             }
+        } catch (Exception e) {
+            // 异常处理
+            result.put("table", "KD_YD_SALE_ORDER");
+            result.put("action", "error");
+            result.put("data", new HashMap<String, Object>() {{
+                put("errorMsg", "操作失败:" + e.getMessage());
+            }});
+            // 可以添加日志记录
+            // log.error("insertkdYdOrder error", e);
         }
-//        ydClient.operateData(
-//                YDParam.builder()
-//                        .formInstanceId(formInstId)
-//                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrmn66f", id)))
-//                        .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
 
+        return result;
     }
 
     @Override
@@ -454,7 +452,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
             String khsx = "";
 
 // 1. 设置客户属性(单独判断)
-            if(totalAmount >= 75000 && sfToDdDays <= 180){
+            if (totalAmount >= 75000 && sfToDdDays <= 180) {
                 khsx = "自行开发";
             }
 
@@ -549,8 +547,9 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
 
     /**
      * 计算时间戳:在基础时间戳上添加天数
+     *
      * @param baseTimestamp 基础时间戳(毫秒)
-     * @param days 要添加的天数
+     * @param days          要添加的天数
      * @return 计算后的时间戳(毫秒)
      */
     private long calculateTimestamp(long baseTimestamp, int days) {

+ 356 - 102
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOutboundServiceImpl.java

@@ -1,6 +1,8 @@
 package com.malk.huagao.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.malk.huagao.entity.KdYdDelivery;
 import com.malk.huagao.entity.KdYdDeliveryDetail;
 import com.malk.huagao.entity.KdYdOutbound;
@@ -16,6 +18,7 @@ import com.malk.server.aliwork.YDParam;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -25,8 +28,8 @@ import java.math.RoundingMode;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -37,6 +40,7 @@ import java.util.Map;
  * @since 2025-10-15
  */
 @Service
+@Slf4j
 public class KdYdOutboundServiceImpl extends ServiceImpl<KdYdOutboundMapper, KdYdOutbound> implements IKdYdOutboundService {
     @Autowired
     private YDClient ydClient;
@@ -45,107 +49,357 @@ public class KdYdOutboundServiceImpl extends ServiceImpl<KdYdOutboundMapper, KdY
     @Autowired
     private KdYdOutboundDetailMapper kdYdOutboundDetailMapper;
     @Override
-    public void insertkdYdOutbound(Map map) {
-        MDC.put("MDC_KEY_PID", "1003");
-        String formInstId = UtilMap.getString(map, "formInstId");
-        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
-                .formInstId(formInstId)
-                .build(), YDConf.FORM_QUERY.retrieve_id);
-        Map formData = ddrNew.getFormData();
-
-        String djlx = UtilMap.getString(formData, "selectField_mejowmna");
-//        String djbh = UtilMap.getString(formData, "serialNumberField_mheazm7w");
-        long deliceryId = UtilMap.getLong(formData, "textField_mgrqnxmm");
-//        long deliceryId = 6L;
-        String kh = UtilMap.getString(formData, "textField_mejnamf2");
-        String jsbb = UtilMap.getString(formData, "selectField_mg34txgn");
-        String ysdh = UtilMap.getString(formData, "textField_mg34txgz");
-        String xsy = UtilMap.getString(formData, "employeeField_mejnamf3").replace("[\"", "").replace("\"]", "").trim();
-        String xslx = UtilMap.getString(formData, "selectField_mejowmnc");
-        String khsx = UtilMap.getString(formData, "selectField_megi74y8");
-        String xssx = UtilMap.getString(formData, "selectField_mg34txgt");
-        String khtjr = UtilMap.getString(formData, "textField_mg34txgy");
-
-        List<Map> tableField = (List<Map>) formData.get("tableField_mejnamfd");
-        KdYdOutbound kdYdOutbound = new KdYdOutbound();
-        kdYdOutbound.setDjlx(djlx);
-//        kdYdOutbound.setDeliveryId(deliceryId);
-        kdYdOutbound.setKh(kh);
-        kdYdOutbound.setJsbb(jsbb);
-        kdYdOutbound.setYsdh(ysdh);
-        kdYdOutbound.setXslx(xslx);
-//        kdYdOutbound.setDjbh(djbh);
-        kdYdOutbound.setKhsx(khsx);
-        kdYdOutbound.setXssx(xssx);
-        kdYdOutbound.setKhtjr(khtjr);
-        kdYdOutbound.setXsy(xsy);
-//        kdYdOutbound.setForminstid(formInstId);
-        kdYdOutboundMapper.insert(kdYdOutbound);
-        Long id = kdYdOutbound.getId();
-        for (Map item : tableField) {
-            String wlbm = safeGetString(item, "textField_mejnamff");
-            String wlmc = safeGetString(item, "textField_mejnamfg");
-            String ggxh = safeGetString(item, "textField_mejnamfh");
-            String kcdw = safeGetString(item, "textField_mejnamfk");
-            String ssxl = safeGetString(item, "textField_mejnamfx");
-            BigDecimal dj = toBigDecimal(safeGetString(item, "numberField_mg34txh3"));
-            BigDecimal hsdj = toBigDecimal(safeGetString(item, "numberField_mg34txh4"));
-            BigDecimal sl = toBigDecimal(safeGetString(item, "numberField_mg34txh6"));
-            BigDecimal se = toBigDecimal(safeGetString(item, "numberField_mg34txh7"));
-            BigDecimal je = toBigDecimal(safeGetString(item, "numberField_mg34txh8"));
-            BigDecimal jshj = toBigDecimal(safeGetString(item, "numberField_mg34txh9"));
-            String ck = safeGetString(item, "textField_mf6a0h6l");
-            String cw = safeGetString(item, "textField_mf6a0h6k");
-            String kczt = safeGetString(item, "textField_mf6a0h6p");
-            String tpsb = safeGetString(item, "textField_mg34txh1");
-            String ph = safeGetString(item, "textField_mg34txh5");
-            BigDecimal jtc = toBigDecimal(safeGetString(item, "numberField_mg34txha"));
-            String sjr = safeGetString(item, "textField_mejnamf6");
-            String sjdh = safeGetString(item, "textField_mejnamf7");
-            String sjdz = safeGetString(item, "textareaField_mf6a0h5e");
-            String gg = safeGetString(item, "textField_mf6a0h6u");
-            String zbq = safeGetString(item, "numberField_mf6a0h6v");
-            LocalDateTime fwdqr = parseTimestamp(UtilMap.getString(item, "dateField_mg34txhb"));
-            String xlh = safeGetString(item, "textField_mf6a0h6w");
-            int zbqsf = parseInt(safeGetString(item, "numberField_mg34txhc"), 0);
-            String kddh = safeGetString(item, "textField_mf6a0h6x");
-            String jx = safeGetString(item, "textField_mf6a0h6y");
-            KdYdOutboundDetail kdYdOutboundDetail = new KdYdOutboundDetail();
-            kdYdOutboundDetail.setOutboundId(id);
-            kdYdOutboundDetail.setWlbm(wlbm);
-            kdYdOutboundDetail.setWlmc(wlmc);
-            kdYdOutboundDetail.setGgxh(ggxh);
-            kdYdOutboundDetail.setKcdw(kcdw);
-            kdYdOutboundDetail.setSsxl(ssxl);
-            kdYdOutboundDetail.setDj(dj);
-            kdYdOutboundDetail.setHsdj(hsdj);
-            kdYdOutboundDetail.setSl(sl);
-            kdYdOutboundDetail.setSe(se);
-            kdYdOutboundDetail.setJe(je);
-            kdYdOutboundDetail.setJshj(jshj);
-            kdYdOutboundDetail.setCk(ck);
-            kdYdOutboundDetail.setCw(cw);
-            kdYdOutboundDetail.setKczt(kczt);
-            kdYdOutboundDetail.setTpsb(tpsb);
-            kdYdOutboundDetail.setPh(ph);
-            kdYdOutboundDetail.setJtc(jtc);
-            kdYdOutboundDetail.setSjr(sjr);
-            kdYdOutboundDetail.setSjdh(sjdh);
-            kdYdOutboundDetail.setSjdz(sjdz);
-            kdYdOutboundDetail.setGg(gg);
-            kdYdOutboundDetail.setZbq(zbq);
-            kdYdOutboundDetail.setFwdqr(fwdqr);
-            kdYdOutboundDetail.setXlh(xlh);
-//            kdYdOutboundDetail.setZbqsf(zbqsf);
-            kdYdOutboundDetail.setKddh(kddh);
-            kdYdOutboundDetail.setJx(jx);
-            kdYdOutboundDetailMapper.insert(kdYdOutboundDetail);
+    public Map<String, Object> insertkdYdOutbound(Map json) {
+        HashMap<String, Object> result = new HashMap<>();
+
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+            List<Map<String, Object>> kdYdOutbounddels = UtilMap.getList(json, "data");
+            String action = UtilMap.getString(json, "action");
+            String table = UtilMap.getString(json, "table");
+
+            // 批量删除处理
+            if (!kdYdOutbounddels.isEmpty() && action.equals("del") && table.equals("KD_YD_OUTBOUND")) {
+                log.info("开始处理出库单删除操作,共{}条数据", kdYdOutbounddels.size());
+                ArrayList<String> deleteList = new ArrayList<>();
+                int deleteSuccessCount = 0;
+
+                for (Map item : kdYdOutbounddels) {
+                    try {
+                        String djbh = String.valueOf(item.get("djbh"));
+
+                        List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
+                                .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
+                                .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg34txgm", djbh)))
+                                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+                        if (list1 != null && !list1.isEmpty()) {
+                            for (Map map : list1) {
+                                String formInstanceId = UtilMap.getString(map, "formInstanceId");
+                                if (formInstanceId != null) {
+                                    deleteList.add(formInstanceId);
+                                }
+                            }
+                            deleteSuccessCount++;
+                        } else {
+                            log.warn("未找到对应的出库单数据: djbh={}", djbh);
+                        }
+
+                    } catch (Exception e) {
+                        log.error("删除出库单数据查询异常: djbh={}", item.get("djbh"), e);
+                    }
+                }
+
+                // 执行批量删除
+                if (!deleteList.isEmpty()) {
+                    try {
+                        ydClient.operateData(YDParam.builder()
+                                .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
+                                .formInstanceIdList(deleteList)
+                                .build(), YDConf.FORM_OPERATION.delete_batch);
+                        log.info("出库单批量删除完成,共删除{}条数据", deleteList.size());
+                    } catch (Exception e) {
+                        log.error("出库单批量删除操作异常", e);
+                    }
+                }
+
+                // 返回删除结果
+                result.put("code", "200");
+                result.put("msg", "删除成功,共删除" + deleteList.size() + "条数据");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("deletedCount", deleteList.size());
+                    put("deletedIds", deleteList);
+                }});
+                return result;
+            } else if (action.equals("del")) {
+                log.info("【出库单删除任务】无需要删除的数据");
+                result.put("code", "200");
+                result.put("msg", "无需要删除的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            List<Map<String, Object>> kdYdOutbounds = UtilMap.getList(json, "data");
+            // 同步新增/更新数据
+            if (kdYdOutbounds.isEmpty()) {
+                log.info("【出库单同步任务】无需要同步的数据,结束");
+                result.put("code", "200");
+                result.put("msg", "无需要同步的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            log.info("【出库单同步任务】开始同步,共{}条数据", kdYdOutbounds.size());
+
+            List<Map<String, Object>> operationResults = new ArrayList<>();
+            int successCount = 0;
+            int failCount = 0;
+
+            for (Map tableItem : kdYdOutbounds) {
+                Map<String, Object> singleResult = new HashMap<>();
+
+                try {
+                    String djbh = String.valueOf(tableItem.get("djbh"));
+                    List<Map<String, Object>> tableList1 = UtilMap.getList(tableItem, "tableList");
+                    String  deliveryId = UtilMap.getString(tableItem, "deliveryId");
+
+                    // 检查明细数据是否存在
+                    if (tableList1 == null || tableList1.isEmpty()) {
+                        log.warn("出库单明细数据为空: djbh={}", djbh);
+                        singleResult.put("djbh", djbh);
+                        singleResult.put("errorMsg", "明细数据为空");
+                        singleResult.put("status", "fail");
+                        failCount++;
+                        operationResults.add(singleResult);
+                        continue;
+                    }
+
+                    ArrayList<Object> tableList = new ArrayList<>();
+                    List<Map<String, Object>> tableListxlh = new ArrayList<>();
+
+                    // 处理明细数据
+                    for (Map item1 : tableList1) {
+                        HashMap<String, String> tablemap = new HashMap<>();
+//                        tablemap.put("textField_mg34txgm", String.valueOf(tableItem.get("djbh")));
+                        tablemap.put("textField_mejnamff", String.valueOf(item1.get("wlbm")));
+                        tablemap.put("textField_mejnamfg", String.valueOf(item1.get("wlmc")));
+                        tablemap.put("textField_mg34txh1", String.valueOf(item1.get("tpsb")));
+                        tablemap.put("textField_mejnamfh", String.valueOf(item1.get("ggxh")));
+                        tablemap.put("textField_mejnamfk", String.valueOf(item1.get("kcdw")));
+
+                        // 处理数值字段
+                        tablemap.put("numberField_mejnamfl", safeConvertBigDecimalToString(item1.get("yfsl")));
+                        tablemap.put("numberField_mg34txh2", safeConvertBigDecimalToString(item1.get("sfsl")));
+                        tablemap.put("numberField_mg34txh3", safeConvertBigDecimalToString(item1.get("dj")));
+                        tablemap.put("numberField_mg34txh4", safeConvertBigDecimalToString(item1.get("hsdj")));
+
+                        tablemap.put("textField_mg34txh5", String.valueOf(item1.get("ph")));
+                        tablemap.put("numberField_mg34txh6", safeConvertBigDecimalToString(item1.get("sl")));
+                        tablemap.put("numberField_mg34txh7", safeConvertBigDecimalToString(item1.get("se")));
+                        tablemap.put("numberField_mg34txh8", safeConvertBigDecimalToString(item1.get("je")));
+                        tablemap.put("numberField_mg34txh9", safeConvertBigDecimalToString(item1.get("jshj")));
+
+                        tablemap.put("textField_mf6a0h6l", String.valueOf(item1.get("ck")));
+                        tablemap.put("textField_mf6a0h6k", String.valueOf(item1.get("cw")));
+                        tablemap.put("textField_mf6a0h6p", String.valueOf(item1.get("kczt")));
+                        tablemap.put("numberField_mg34txha", safeConvertBigDecimalToString(item1.get("jtc")));
+
+                        tablemap.put("textField_mejnamf6", String.valueOf(item1.get("sjr")));
+                        tablemap.put("textField_mejnamf7", String.valueOf(item1.get("sjdh")));
+                        tablemap.put("textareaField_mf6a0h5e", String.valueOf(item1.get("sjdz")));
+                        tablemap.put("textField_mejnamfx", String.valueOf(item1.get("ssxl")));
+                        tablemap.put("textField_mf6a0h6u", String.valueOf(item1.get("gg")));
+                        tablemap.put("textField_mhlqeoas", String.valueOf(item1.get("zbq")));
+
+                        // 处理日期字段
+                        tablemap.put("dateField_mg34txhb", safeConvertDateTimeToString(item1.get("fwdqr")));
+                        tablemap.put("textField_mhlqeoat", String.valueOf(item1.get("zbqsf")));
+                        tablemap.put("textField_mf6a0h6x", String.valueOf(item1.get("kddh")));
+                        tablemap.put("textField_mf6a0h6y", String.valueOf(item1.get("jx")));
+                        tablemap.put("radioField_mf6a0h6h", String.valueOf(item1.get("sfzp")));
+
+                        tableList.add(tablemap);
+
+                        // 处理序列号明细
+                        String xlhjh = String.valueOf(item1.get("xlhjh"));
+                        if (xlhjh != null && !xlhjh.trim().isEmpty() && !"null".equals(xlhjh)) {
+                            List<Map<String, Object>> currentXlhList = Arrays.stream(xlhjh.split(","))
+                                    .map(String::trim)
+                                    .filter(item -> !item.isEmpty())
+                                    .map(item -> {
+                                        Map<String, Object> xlhMap = new HashMap<>();
+                                        xlhMap.put("textField_mf6a0h6w", item);
+                                        xlhMap.put("textField_mjqst61l", String.valueOf(item1.get("wlbm")));
+                                        xlhMap.put("textField_mjqst61m", String.valueOf(item1.get("ggxh")));
+                                        return xlhMap;
+                                    })
+                                    .collect(Collectors.toList());
+
+                            tableListxlh.addAll(currentXlhList);
+                        }
+                    }
+
+                    // 查询发货单数据
+                    String fhdformInstanceId = null;
+                    String fhdbh = null;
+                    if (deliveryId != null) {
+                        try {
+                            log.debug("开始查询发货单数据: deliveryId={}", deliveryId);
+
+                            List<Map> ddlist = (List<Map>) ydClient.queryData(
+                                    YDParam.builder()
+                                            .formUuid("FORM-FAE2575E112644ED914CAB4FEC9309F32AVR")
+                                                   .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mheazm7w", deliveryId)))
+                                            .build(),
+                                    YDConf.FORM_QUERY.retrieve_list_all
+                            ).getData();
+
+                            if (ddlist != null && !ddlist.isEmpty()) {
+                                for (Map<String, Object> khitem : ddlist) {
+                                    Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
+
+                                    if (khformData != null && deliveryId.equals(khformData.get("serialNumberField_mheazm7w"))) {
+                                        fhdformInstanceId = (String) khitem.get("formInstanceId");
+                                        fhdbh = (String) khformData.get("serialNumberField_mheazm7w");
+                                        break;
+                                    }
+                                }
+                            } else {
+                                log.warn("未查询到发货单数据: deliveryId={}", deliveryId);
+                            }
+
+                        } catch (Exception e) {
+                            log.error("查询发货单数据异常: deliveryId={}", deliveryId, e);
+                        }
+                    }
+
+                    // 构建更新数据
+                    HashMap<Object, Object> updateMap = new HashMap<>();
+                    updateMap.put("tableField_mejnamfd", tableList);
+                    updateMap.put("tableField_mips137b", tableListxlh);
+
+                    // 添加关联表单数据
+                    if (fhdbh != null && !"null".equals(fhdbh) && fhdformInstanceId != null) {
+                        updateMap.put("associationFormField_mejmml36",
+                                Arrays.asList(getfhdAss(fhdbh,fhdformInstanceId)));
+                    }
+
+                    // 添加主表字段
+                    updateMap.put("dateField_krbgloam", safeConvertDateTimeToString(tableItem.get("dateTime")));
+                    updateMap.put("textField_krnn5bmr", String.valueOf(tableItem.get("xsDept")));
+                    updateMap.put("textField_mhjxw689", String.valueOf(tableItem.get("fhDept")));
+                    updateMap.put("textField_mhjxw686", String.valueOf(tableItem.get("cgy")));
+                    updateMap.put("selectField_mejowmna", String.valueOf(tableItem.get("djlx")));
+                    updateMap.put("textField_mg34txgm", String.valueOf(tableItem.get("djbh")));
+                    updateMap.put("textField_mhlqeoar", String.valueOf(tableItem.get("jsbb")));
+                    updateMap.put("textField_mejnamf2", String.valueOf(tableItem.get("kh")));
+                    updateMap.put("selectField_mejowmnc", String.valueOf(tableItem.get("xslx")));
+                    updateMap.put("textField_mhjxw688", String.valueOf(tableItem.get("xsy")));
+                    updateMap.put("selectField_mg34txgt", String.valueOf(tableItem.get("xssx")));
+                    updateMap.put("selectField_megi74y8", String.valueOf(tableItem.get("khsx")));
+                    updateMap.put("textField_mg34txgy", String.valueOf(tableItem.get("khtjr")));
+                    updateMap.put("textField_mg34txgz", String.valueOf(tableItem.get("ysdh")));
+                    updateMap.put("textField_migw33w6", String.valueOf(deliveryId));
+
+                    // 执行同步操作
+                    Object operationResult = ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg34txgm", String.valueOf(tableItem.get("djbh")))))
+                            .formDataJson(JSONObject.toJSONString(updateMap))
+                            .build(), YDConf.FORM_OPERATION.upsert);
+
+                    // 记录成功结果
+                    singleResult.put("djbh", djbh);
+                    singleResult.put("deliveryId", deliveryId);
+                    singleResult.put("operationResult", operationResult);
+                    singleResult.put("status", "success");
+                    successCount++;
+
+                    log.info("出库单同步成功: djbh={}, deliveryId={}", djbh, deliveryId);
+
+                } catch (Exception e) {
+                    String djbh = String.valueOf(tableItem.get("djbh"));
+                    log.error("同步出库单数据异常: djbh={}", djbh, e);
+
+                    singleResult.put("djbh", djbh);
+                    singleResult.put("errorMsg", e.getMessage());
+                    singleResult.put("status", "fail");
+                    failCount++;
+                }
+
+                operationResults.add(singleResult);
+            }
+
+            // 构建返回结果
+            Map<String, Object> data = new HashMap<>();
+            data.put("operationResults", operationResults);
+            data.put("totalCount", kdYdOutbounds.size());
+            data.put("successCount", successCount);
+            data.put("failCount", failCount);
+
+            result.put("code", failCount == 0 ? "200" : "300");
+            result.put("msg", "操作完成,成功" + successCount + "条,失败" + failCount + "条");
+            result.put("data", data);
+
+            log.info("【出库单同步任务】完成,共处理{}条数据,成功{}条,失败{}条",
+                    kdYdOutbounds.size(), successCount, failCount);
+
+        } catch (Exception e) {
+            log.error("出库单同步任务执行异常", e);
+            result.put("code", "500");
+            result.put("msg", "系统异常:" + e.getMessage());
+            result.put("data", new HashMap<>());
+        }
+
+        return result;
+    }
+
+    // 辅助方法:安全转换BigDecimal为字符串(保留2位小数)
+    private String safeConvertBigDecimalToString(Object value) {
+        try {
+            if (value == null) {
+                return java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString();
+            }
+
+            if (value instanceof BigDecimal) {
+                return ((BigDecimal) value).setScale(2, java.math.RoundingMode.HALF_UP).toString();
+            } else if (value instanceof Number) {
+                return new BigDecimal(value.toString()).setScale(2, java.math.RoundingMode.HALF_UP).toString();
+            } else if (value instanceof String) {
+                return new BigDecimal((String) value).setScale(2, java.math.RoundingMode.HALF_UP).toString();
+            }
+
+            return java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString();
+        } catch (Exception e) {
+            log.warn("转换BigDecimal异常: value={}", value);
+            return java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString();
         }
-        ydClient.operateData(
-                YDParam.builder()
-                        .formInstanceId(formInstId)
-                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrsdayq", id)))
-                        .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
+    }
+
+    // 辅助方法:安全转换日期时间为字符串
+//    private String safeConvertDateTimeToString(Object dateTime) {
+//        try {
+//            if (dateTime == null) {
+//                return "";
+//            }
+//
+//            if (dateTime instanceof java.time.LocalDateTime) {
+//                java.time.LocalDateTime dt = (java.time.LocalDateTime) dateTime;
+//                return String.valueOf(dt.atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli());
+//            }
+//
+//            return String.valueOf(dateTime);
+//        } catch (Exception e) {
+//            log.warn("转换日期时间异常: dateTime={}", dateTime);
+//            return "";
+//        }
+//    }
+    /**
+     * 最简化日期转换
+     */
+    private String safeConvertDateTimeToString(Object dateTime) {
+        try {
+            if (dateTime instanceof LocalDateTime) {
+                return String.valueOf(((LocalDateTime) dateTime)
+                        .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
+            }
+            if (dateTime instanceof Date) return String.valueOf(((Date) dateTime).getTime());
+            if (dateTime instanceof Long) return String.valueOf(dateTime);
+            if (dateTime instanceof Integer) {
+                long t = ((Integer) dateTime).longValue();
+                return String.valueOf(t < 10000000000L ? t * 1000L : t);
+            }
+            if (dateTime instanceof String) {
+                String s = ((String) dateTime).trim();
+                if (s.matches("\\d+")) {
+                    return String.valueOf(s.length() == 10 ? Long.parseLong(s) * 1000L : Long.parseLong(s));
+                }
+            }
+            return "";
+        } catch (Exception e) { return ""; }
+    }
+    private Object getfhdAss(String title, String id) {
+        return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-FAE2575E112644ED914CAB4FEC9309F32AVR", "receipt", id, title, "");
     }
     private static LocalDateTime parseTimestamp(String timestampStr) {
         if (timestampStr == null || timestampStr.trim().isEmpty()) return null;

+ 615 - 2
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdReceivableServiceImpl.java

@@ -1,5 +1,6 @@
 package com.malk.huagao.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.huagao.entity.KdYdOutbound;
 import com.malk.huagao.entity.KdYdOutboundDetail;
@@ -16,6 +17,7 @@ import com.malk.server.aliwork.YDParam;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -25,8 +27,8 @@ import java.math.RoundingMode;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.List;
-import java.util.Map;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 /**
  * <p>
@@ -37,6 +39,7 @@ import java.util.Map;
  * @since 2025-10-16
  */
 @Service
+@Slf4j
 public class KdYdReceivableServiceImpl extends ServiceImpl<KdYdReceivableMapper, KdYdReceivable> implements IKdYdReceivableService {
     @Autowired
     private YDClient ydClient;
@@ -145,6 +148,616 @@ public class KdYdReceivableServiceImpl extends ServiceImpl<KdYdReceivableMapper,
                         .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
     }
 
+
+    @Override
+    public Map<String, Object> insertkdYdReceivable1(Map json) {
+        HashMap<String, Object> result = new HashMap<>();
+
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+            List<Map<String, Object>> kdYdReceivableDels = UtilMap.getList(json, "data");
+            String action = UtilMap.getString(json, "action");
+            String table = UtilMap.getString(json, "table");
+
+            // 批量删除处理
+            if (!kdYdReceivableDels.isEmpty() && "del".equals(action) && "KD_YD_RECEIVABLE".equals(table)) {
+                log.info("开始处理应收单删除操作,共{}条数据", kdYdReceivableDels.size());
+                ArrayList<String> deleteList = new ArrayList<>();
+                int deleteSuccessCount = 0;
+
+                for (Map<String, Object> item : kdYdReceivableDels) {
+                    try {
+                        String djbh = String.valueOf(item.get("djbh"));
+
+                        List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
+                                .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
+                                .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg3a0tgs", djbh)))
+                                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+                        if (list1 != null && !list1.isEmpty()) {
+                            for (Map map : list1) {
+                                String formInstanceId = UtilMap.getString(map, "formInstanceId");
+                                if (formInstanceId != null) {
+                                    deleteList.add(formInstanceId);
+                                }
+                            }
+                            deleteSuccessCount++;
+                        } else {
+                            log.warn("未找到对应的应收单数据: djbh={}", djbh);
+                        }
+
+                    } catch (Exception e) {
+                        log.error("删除应收单数据查询异常: djbh={}", item.get("djbh"), e);
+                    }
+                }
+
+                // 执行批量删除
+                if (!deleteList.isEmpty()) {
+                    try {
+                        ydClient.operateData(YDParam.builder()
+                                .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
+                                .formInstanceIdList(deleteList)
+                                .build(), YDConf.FORM_OPERATION.delete_batch);
+                        log.info("应收单批量删除完成,共删除{}条数据", deleteList.size());
+                    } catch (Exception e) {
+                        log.error("应收单批量删除操作异常", e);
+                    }
+                }
+
+                // 返回删除结果
+                result.put("code", "200");
+                result.put("msg", "删除成功,共删除" + deleteList.size() + "条数据");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("deletedCount", deleteList.size());
+                    put("deletedIds", deleteList);
+                }});
+                return result;
+            } else if ("del".equals(action)) {
+                log.info("【应收单删除任务】无需要删除的数据");
+                result.put("code", "200");
+                result.put("msg", "无需要删除的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            // 同步新增/更新数据
+            List<Map<String, Object>> kdYdReceivables = UtilMap.getList(json, "data");
+            if (kdYdReceivables.isEmpty()) {
+                log.info("【应收单同步任务】无需要同步的数据,结束");
+                result.put("code", "200");
+                result.put("msg", "无需要同步的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            log.info("【应收单同步任务】开始同步,共{}条数据", kdYdReceivables.size());
+
+            List<Map<String, Object>> operationResults = new ArrayList<>();
+            int successCount = 0;
+            int failCount = 0;
+
+            for (Map<String, Object> receivableItem : kdYdReceivables) {
+                Map<String, Object> singleResult = new HashMap<>();
+
+                try {
+                    String djbh = String.valueOf(receivableItem.get("djbh"));
+                    List<Map<String, Object>> tableListData = UtilMap.getList(receivableItem, "tableList");
+                    List<Map<String, Object>> paymentListData = UtilMap.getList(receivableItem, "paymentList");
+//                    String  receivableId = UtilMap.getString(receivableItem, "receivableId");
+
+                    // 检查应收单明细数据是否存在
+                    if (tableListData == null || tableListData.isEmpty()) {
+                        log.warn("应收单明细数据为空: djbh={}", djbh);
+                        singleResult.put("errorMsg", "明细数据为空");
+                        singleResult.put("status", "fail");
+                        failCount++;
+                        operationResults.add(singleResult);
+                        continue;
+                    }
+
+                    // 处理应收单明细
+
+                    ArrayList<Object> tableList = new ArrayList<>();
+                    for (Map<String, Object> detailItem : tableListData) {
+                        HashMap<Object, Object> tablemap = new HashMap<>();
+
+                        // 使用辅助方法安全获取和格式化数据
+                        tablemap.put("textField_mf6el3zy", String.valueOf(detailItem.get("wlbm")));
+                        tablemap.put("textField_mf6el3zz", String.valueOf(detailItem.get("wlmc")));
+                        tablemap.put("textField_mejmtic5", String.valueOf(detailItem.get("ggxh")));
+                        tablemap.put("textField_mf6el400", String.valueOf(detailItem.get("jjdw")));
+                        tablemap.put("textField_mhllijwo", String.valueOf(detailItem.get("ssxl")));
+                        tablemap.put("numberField_mf6el402", safeFormatBigDecimal(detailItem.get("dj")));
+                        tablemap.put("numberField_mejmticb", safeFormatBigDecimal(detailItem.get("hsdj")));
+                        tablemap.put("numberField_mf6el403", safeFormatBigDecimal(detailItem.get("sl")));
+                        tablemap.put("numberField_mejmtic7", safeFormatBigDecimal(detailItem.get("jshj1")));
+                        tablemap.put("textField_mf6el409", String.valueOf(detailItem.get("kcdw")));
+                        tablemap.put("textField_mf6el408", String.valueOf(detailItem.get("ph")));
+                        tablemap.put("numberField_mf6el406", safeFormatBigDecimal(detailItem.get("se")));
+                        tablemap.put("numberField_mejmtic6", safeFormatBigDecimal(detailItem.get("jjsl")));
+                        tablemap.put("numberField_mf6el404", safeFormatBigDecimal(detailItem.get("zkl")));
+                        tablemap.put("numberField_mejmticc", safeFormatBigDecimal(detailItem.get("bhsje")));
+                        tablemap.put("numberField_mf6el407", safeFormatBigDecimal(detailItem.get("jjjbsl")));
+                        tablemap.put("numberField_mf6el40a", safeFormatBigDecimal(detailItem.get("kcsl")));
+                        tablemap.put("radioField_mejnamfn", String.valueOf(detailItem.get("sfzp")));
+                        tablemap.put("numberField_mf6el40c", safeFormatBigDecimal(detailItem.get("tc")));
+                        tablemap.put("textField_mf6el40d", String.valueOf(detailItem.get("jx")));
+                        tablemap.put("textField_mf6el40b", String.valueOf(detailItem.get("gg")));
+                        tablemap.put("numberField_mf6el405", safeFormatBigDecimal(detailItem.get("zke")));
+
+
+                        tableList.add(tablemap);
+                    }
+
+                    // 处理收款计划
+                    ArrayList<Object> tableListPay = new ArrayList<>();
+                    if (paymentListData != null && !paymentListData.isEmpty()) {
+                        for (Map<String, Object> paymentItem : paymentListData) {
+                            HashMap<Object, Object> tablemap1 = new HashMap<>();
+
+                            // 处理日期字段
+                            Object endTimeObj = paymentItem.get("endTime");
+                            tablemap1.put("dateField_mhiui6v9", safeConvertDateTimeToString(endTimeObj));
+                            tablemap1.put("textField_mhiui6va", String.valueOf(paymentItem.get("xsddh")));
+                            tablemap1.put("numberField_mhiui6v8", safeFormatBigDecimal(paymentItem.get("ysje")));
+                            tablemap1.put("numberField_mhiui6v6", safeFormatBigDecimal(paymentItem.get("ysbl")));
+                            tablemap1.put("numberField_mhiui6vb", safeFormatBigDecimal(paymentItem.get("ysjebwb")));
+                            tablemap1.put("numberField_mhjy9hzj", safeFormatBigDecimal(paymentItem.get("stkdglje")));
+                            tableListPay.add(tablemap1);
+                        }
+                    }
+
+                    // 查询关联的出库单数据
+                    String ckddjbh = String.valueOf(receivableItem.get("ckddjbh"));
+                    String ckdformInstanceId = null;
+                    String ckdbh = null;
+
+                    if (ckddjbh != null && !"null".equals(ckddjbh) && !ckddjbh.trim().isEmpty()) {
+                        try {
+                            List<Map> ddlist = (List<Map>) ydClient.queryData(
+                                    YDParam.builder()
+                                            .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
+                                            .searchCondition(JSON.toJSONString(UtilMap.map("textField_mg34txgm", ckddjbh)))
+                                            .build(),
+                                    YDConf.FORM_QUERY.retrieve_list_all
+                            ).getData();
+
+                            if (ddlist != null && !ddlist.isEmpty()) {
+                                for (Map<String, Object> khitem : ddlist) {
+                                    Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
+                                    if (khformData != null) {
+                                        Object ckddjbhObj = khformData.get("textField_mg34txgm");
+                                        String ckddjbhStr = ckddjbhObj != null ? ckddjbhObj.toString() : null;
+
+                                        if (ckddjbh.equals(ckddjbhStr)) {
+                                            ckdformInstanceId = (String) khitem.get("formInstanceId");
+                                            ckdbh = ckddjbhStr;
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                        } catch (Exception e) {
+                            log.error("查询出库单数据异常: ckddjbh={}", ckddjbh, e);
+                        }
+                    }
+
+                    // 构建主表数据
+                    HashMap<Object, Object> updateData = new HashMap<>();
+                    updateData.put("tableField_mf6el3zx", tableList);
+
+                    // 添加关联表单数据
+                    if (ckdbh != null && ckdformInstanceId != null) {
+                        updateData.put("associationFormField_mejmtick",
+                                Arrays.asList(getysdAss(ckdbh, ckdformInstanceId)));
+                    }
+
+                    updateData.put("tableField_mhiui6v5", tableListPay);
+                    updateData.put("textField_mg3a0tgs", djbh);
+                    updateData.put("textField_mj15q3dk", ckddjbh);
+                    updateData.put("selectField_mg3a0th4", String.valueOf(receivableItem.get("djlx")));
+                    updateData.put("selectField_mev13l3r", String.valueOf(receivableItem.get("sktj")));
+
+                    // 处理主表日期字段
+                    Object endTimeObj1 = receivableItem.get("endTime");
+                        updateData.put("dateField_mejmtic3", safeConvertDateTimeToString(endTimeObj1));
+
+                    Object businessTimeObj = receivableItem.get("businessTime");
+                        updateData.put("dateField_mejmtic2", safeConvertDateTimeToString(endTimeObj1));
+                    updateData.put("numberField_mejmtic8", safeFormatBigDecimal(receivableItem.get("jshj")));
+                    updateData.put("textField_mejmml3k", String.valueOf(receivableItem.get("kh")));
+                    updateData.put("textField_mhjy9hzh", String.valueOf(receivableItem.get("xsy")));
+                    updateData.put("selectField_mejowmnc", String.valueOf(receivableItem.get("xslx")));
+                    updateData.put("selectField_megi74y8", String.valueOf(receivableItem.get("khsx")));
+                    updateData.put("textField_krnn5bmr", String.valueOf(receivableItem.get("xsbm")));
+                    updateData.put("textField_mhjy9hzi", String.valueOf(receivableItem.get("lzlx")));
+                    updateData.put("textareaField_mg3a0tgx", String.valueOf(receivableItem.get("bz")));
+                    updateData.put("selectField_mg3fuqvn", String.valueOf(receivableItem.get("bb")));
+
+                    // 执行同步操作
+                    Object operationResult = ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-4E1CE4550339494A9BE5498FB119FF2E9ERU")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg3a0tgs", djbh)))
+                            .formDataJson(JSONObject.toJSONString(updateData))
+                            .build(), YDConf.FORM_OPERATION.upsert
+                    );
+
+                    // 记录成功结果
+                    singleResult.put("operationResult", operationResult);
+                    singleResult.put("status", "success");
+                    singleResult.put("ckdformInstanceId", ckdformInstanceId);
+                    singleResult.put("tableCount", tableList.size());
+                    singleResult.put("paymentCount", tableListPay.size());
+                    successCount++;
+
+//                    log.info("应收单同步成功: djbh={}, receivableId={}", djbh, receivableId);
+
+                } catch (Exception e) {
+                    String djbh = String.valueOf(receivableItem.get("djbh"));
+                    log.error("同步应收单数据异常: djbh={}", djbh, e);
+
+                    singleResult.put("djbh", djbh);
+                    singleResult.put("errorMsg", e.getMessage());
+                    singleResult.put("status", "fail");
+                    failCount++;
+                }
+
+                operationResults.add(singleResult);
+            }
+
+            // 构建返回结果
+            Map<String, Object> data = new HashMap<>();
+            data.put("operationResults", operationResults);
+            data.put("totalCount", kdYdReceivables.size());
+            data.put("successCount", successCount);
+            data.put("failCount", failCount);
+
+            result.put("code", failCount == 0 ? "200" : "300");
+            result.put("msg", "操作完成,成功" + successCount + "条,失败" + failCount + "条");
+            result.put("data", data);
+
+            log.info("【应收单同步任务】完成,共处理{}条数据,成功{}条,失败{}条",
+                    kdYdReceivables.size(), successCount, failCount);
+
+        } catch (Exception e) {
+            log.error("应收单同步任务执行异常", e);
+            result.put("code", "500");
+            result.put("msg", "系统异常:" + e.getMessage());
+            result.put("data", new HashMap<>());
+        } finally {
+            MDC.remove("MDC_KEY_PID");
+        }
+
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> insertkdYdpayment(Map json) {
+
+        HashMap<String, Object> result = new HashMap<>();
+
+        try {
+            MDC.put("MDC_KEY_PID", "1003");
+            List<Map<String, Object>> kdYdPaymentReceiptDels = UtilMap.getList(json, "data");
+            String action = UtilMap.getString(json, "action");
+            String table = UtilMap.getString(json, "table");
+
+            // 批量删除处理
+            if (!kdYdPaymentReceiptDels.isEmpty() && "del".equals(action) && "KD_YD_PAYMENT_RECEIPT".equals(table)) {
+                log.info("开始处理收款单删除操作,共{}条数据", kdYdPaymentReceiptDels.size());
+                ArrayList<String> deleteList = new ArrayList<>();
+                int deleteSuccessCount = 0;
+
+                for (Map<String, Object> item : kdYdPaymentReceiptDels) {
+                    try {
+                        String djbh = String.valueOf(item.get("djbh"));
+
+                        List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
+                                .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
+                                .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", djbh)))
+                                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+                        if (list1 != null && !list1.isEmpty()) {
+                            for (Map map : list1) {
+                                String formInstanceId = UtilMap.getString(map, "formInstanceId");
+                                if (formInstanceId != null) {
+                                    deleteList.add(formInstanceId);
+                                }
+                            }
+                            deleteSuccessCount++;
+                        } else {
+                            log.warn("未找到对应的收款单数据: djbh={}", djbh);
+                        }
+
+                    } catch (Exception e) {
+                        log.error("删除收款单数据查询异常: djbh={}", item.get("djbh"), e);
+                    }
+                }
+
+                // 执行批量删除
+                if (!deleteList.isEmpty()) {
+                    try {
+                        ydClient.operateData(YDParam.builder()
+                                .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
+                                .formInstanceIdList(deleteList)
+                                .build(), YDConf.FORM_OPERATION.delete_batch);
+                        log.info("收款单批量删除完成,共删除{}条数据", deleteList.size());
+                    } catch (Exception e) {
+                        log.error("收款单批量删除操作异常", e);
+                    }
+                }
+
+                // 返回删除结果
+                result.put("code", "200");
+                result.put("msg", "删除成功,共删除" + deleteList.size() + "条数据");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("deletedCount", deleteList.size());
+                    put("deletedIds", deleteList);
+                }});
+                return result;
+            } else if ("del".equals(action)) {
+                log.info("【收款单删除任务】无需要删除的数据");
+                result.put("code", "200");
+                result.put("msg", "无需要删除的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            // 同步新增/更新数据
+            List<Map<String, Object>> kdYdPaymentReceipts = UtilMap.getList(json, "data");
+            if (kdYdPaymentReceipts.isEmpty()) {
+                log.info("【收款单同步任务】无需要同步的数据,结束");
+                result.put("code", "200");
+                result.put("msg", "无需要同步的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            log.info("【收款单同步任务】开始同步,共{}条数据", kdYdPaymentReceipts.size());
+
+            List<Map<String, Object>> operationResults = new ArrayList<>();
+            int successCount = 0;
+            int failCount = 0;
+
+            for (Map<String, Object> paymentItem : kdYdPaymentReceipts) {
+                Map<String, Object> singleResult = new HashMap<>();
+
+                try {
+                    String djbh = String.valueOf(paymentItem.get("djbh"));
+                    List<Map<String, Object>> tableListData = UtilMap.getList(paymentItem, "tableList");
+//                    String  paymentReceiptId = UtilMap.getString(paymentItem, "paymentReceiptId");
+
+                    // 检查明细数据是否存在
+                    if (tableListData == null || tableListData.isEmpty()) {
+                        log.warn("收款单明细数据为空: djbh={}", djbh);
+                        singleResult.put("errorMsg", "明细数据为空");
+                        singleResult.put("status", "fail");
+                        failCount++;
+                        operationResults.add(singleResult);
+                        continue;
+                    }
+
+                    // 处理收款单明细
+                    ArrayList<Object> tableList = new ArrayList<>();
+                    for (Map<String, Object> detailItem : tableListData) {
+                        HashMap<String, String> tablemap = new HashMap<>();
+                        tablemap.put("textField_mh9woanr", String.valueOf(detailItem.get("jsfs")));
+                        tablemap.put("textField_mh9woans", String.valueOf(detailItem.get("skyt")));
+                        tablemap.put("textField_mh9woant", String.valueOf(detailItem.get("ysxmlx")));
+                        tablemap.put("textField_mh9woanu", String.valueOf(detailItem.get("ysxsdd")));
+                        tablemap.put("numberField_mh9woanv", safeFormatBigDecimalToString(detailItem.get("ysje")));
+                        tablemap.put("numberField_mh9woanw", safeFormatBigDecimalToString(detailItem.get("sxf")));
+                        tablemap.put("textField_mhmr1ecr", String.valueOf(detailItem.get("cdk")));
+                        tablemap.put("textField_mh9woany", String.valueOf(detailItem.get("wfyhzh")));
+                        tablemap.put("textField_mh9woao2", String.valueOf(detailItem.get("xsddh")));
+                        tablemap.put("textField_mh9woao1", String.valueOf(detailItem.get("fyxm")));
+                        tablemap.put("numberField_mh9woanz", safeFormatBigDecimalToString(detailItem.get("ssje")));
+                        tablemap.put("numberField_mh9woao0", safeFormatBigDecimalToString(detailItem.get("zhje")));
+                        tableList.add(tablemap);
+                    }
+
+                    // 查询关联的订单数据
+                    String xsddbh = String.valueOf(paymentItem.get("xsddbh"));
+                    String ddformInstanceId = null;
+                    String ddbh = null;
+
+                    if (xsddbh != null && !"null".equals(xsddbh) && !xsddbh.trim().isEmpty()) {
+                        try {
+                            log.debug("开始查询订单数据: xsddbh={}", xsddbh);
+
+                            List<Map> ddlist = (List<Map>) ydClient.queryData(
+                                    YDParam.builder()
+                                            .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
+                                            .searchCondition(JSON.toJSONString(UtilMap.map("textField_mjs6fuwo", xsddbh)))
+                                            .build(),
+                                    YDConf.FORM_QUERY.retrieve_list_all
+                            ).getData();
+
+                            if (ddlist != null && !ddlist.isEmpty()) {
+                                for (Map<String, Object> khitem : ddlist) {
+                                    Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
+                                    if (khformData != null) {
+                                        Object xsddbhObj = khformData.get("textField_mjs6fuwo");
+                                        String xsddbhStr = xsddbhObj != null ? xsddbhObj.toString() : null;
+
+                                        if (xsddbh.equals(xsddbhStr)) {
+                                            ddformInstanceId = (String) khitem.get("formInstanceId");
+                                            ddbh = xsddbhStr;
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                        } catch (Exception e) {
+                            log.error("查询订单数据异常: xsddbh={}", xsddbh, e);
+                        }
+                    }
+
+                    // 构建更新数据
+                    HashMap<Object, Object> updateMap = new HashMap<>();
+                    updateMap.put("tableField_mh9woanl", tableList);
+
+                    // 添加关联表单数据
+                    if (ddbh != null && ddformInstanceId != null) {
+                        updateMap.put("associationFormField_mh9woamy",
+                                Arrays.asList(getddAss(ddbh, ddformInstanceId)));
+                    }
+
+                    // 添加主表字段
+                    updateMap.put("textField_mh9woanm", String.valueOf(paymentItem.get("djlx")));
+                    updateMap.put("textField_mh9woann", String.valueOf(paymentItem.get("fkdwlx")));
+                    updateMap.put("textField_mh9woamt", djbh);
+                    updateMap.put("textField_mh9woamz", String.valueOf(paymentItem.get("skgld")));
+                    updateMap.put("textField_mh9woano", String.valueOf(paymentItem.get("bb")));
+
+                    // 处理日期字段
+                    Object ywrqObj = paymentItem.get("ywrq");
+                                updateMap.put("dateField_mh9woan5", safeConvertDateTimeToString(ywrqObj));
+
+
+                    updateMap.put("textField_mh9woanp", String.valueOf(paymentItem.get("wldwlx")));
+                    updateMap.put("textField_mh9woanq", String.valueOf(paymentItem.get("wldw")));
+                    updateMap.put("numberField_mh9woanc", safeFormatBigDecimalToString(paymentItem.get("ysje")));
+                    updateMap.put("numberField_mh9woand", safeFormatBigDecimalToString(paymentItem.get("ssje")));
+                    updateMap.put("textField_mhjxv2tf", String.valueOf(paymentItem.get("xsy")));
+                    updateMap.put("textField_mhjxv2tg", String.valueOf(paymentItem.get("xsbm")));
+                    updateMap.put("textareaField_mh9woank", String.valueOf(paymentItem.get("bz")));
+
+                    // 执行同步操作
+                    Object operationResult = ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-0569C06E47074C2981ADEEAFCE083EDAK5AM")
+                            .appType("APP_VQDMMWS6OR1VHL8VMFD3")
+                            .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mh9woamt", djbh)))
+                            .formDataJson(JSONObject.toJSONString(updateMap))
+                            .build(), YDConf.FORM_OPERATION.upsert);
+
+                    // 记录成功结果
+                    singleResult.put("operationResult", operationResult);
+                    singleResult.put("status", "success");
+                    singleResult.put("ddformInstanceId", ddformInstanceId);
+                    successCount++;
+
+//                    log.info("收款单同步成功: djbh={}, paymentReceiptId={}", djbh, paymentReceiptId);
+
+                } catch (Exception e) {
+                    String djbh = String.valueOf(paymentItem.get("djbh"));
+                    log.error("同步收款单数据异常: djbh={}", djbh, e);
+
+                    singleResult.put("djbh", djbh);
+                    singleResult.put("errorMsg", e.getMessage());
+                    singleResult.put("status", "fail");
+                    failCount++;
+                }
+
+                operationResults.add(singleResult);
+            }
+
+            // 构建返回结果
+            Map<String, Object> data = new HashMap<>();
+            data.put("operationResults", operationResults);
+            data.put("totalCount", kdYdPaymentReceipts.size());
+            data.put("successCount", successCount);
+            data.put("failCount", failCount);
+
+            result.put("code", failCount == 0 ? "200" : "300");
+            result.put("msg", "操作完成,成功" + successCount + "条,失败" + failCount + "条");
+            result.put("data", data);
+
+            log.info("【收款单同步任务】完成,共处理{}条数据,成功{}条,失败{}条",
+                    kdYdPaymentReceipts.size(), successCount, failCount);
+
+        } catch (Exception e) {
+            log.error("收款单同步任务执行异常", e);
+            result.put("code", "500");
+            result.put("msg", "系统异常:" + e.getMessage());
+            result.put("data", new HashMap<>());
+        } finally {
+            MDC.remove("MDC_KEY_PID");
+        }
+
+        return result;
+    }
+    private String safeConvertDateTimeToString(Object dateTime) {
+        try {
+            if (dateTime instanceof LocalDateTime) {
+                return String.valueOf(((LocalDateTime) dateTime)
+                        .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
+            }
+            if (dateTime instanceof Date) return String.valueOf(((Date) dateTime).getTime());
+            if (dateTime instanceof Long) return String.valueOf(dateTime);
+            if (dateTime instanceof Integer) {
+                long t = ((Integer) dateTime).longValue();
+                return String.valueOf(t < 10000000000L ? t * 1000L : t);
+            }
+            if (dateTime instanceof String) {
+                String s = ((String) dateTime).trim();
+                if (s.matches("\\d+")) {
+                    return String.valueOf(s.length() == 10 ? Long.parseLong(s) * 1000L : Long.parseLong(s));
+                }
+            }
+            return "";
+        } catch (Exception e) { return ""; }
+    }
+    // 辅助方法 - 安全格式化 BigDecimal 为字符串(保留2位小数)
+    private String safeFormatBigDecimalToString(Object value) {
+        if (value == null) {
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP).toString();
+        }
+        try {
+            if (value instanceof BigDecimal) {
+                return ((BigDecimal) value).setScale(2, RoundingMode.HALF_UP).toString();
+            } else if (value instanceof Number) {
+                return BigDecimal.valueOf(((Number) value).doubleValue())
+                        .setScale(2, RoundingMode.HALF_UP).toString();
+            } else if (value instanceof String) {
+                String strVal = ((String) value).trim();
+                if (strVal.isEmpty() || "null".equalsIgnoreCase(strVal)) {
+                    return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP).toString();
+                }
+                return new BigDecimal(strVal).setScale(2, RoundingMode.HALF_UP).toString();
+            }
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP).toString();
+        } catch (Exception e) {
+            log.warn("格式化BigDecimal数据异常: value={}", value, e);
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP).toString();
+        }
+    }
+
+    // 获取订单关联数据
+    private Object getddAss(String title, String id) {
+        return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C", "receipt", id, title, "");
+    }
+
+    // 辅助方法 - 安全格式化 BigDecimal 数据(保留2位小数)
+    private BigDecimal safeFormatBigDecimal(Object value) {
+        if (value == null) {
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+        try {
+            if (value instanceof BigDecimal) {
+                return ((BigDecimal) value).setScale(2, RoundingMode.HALF_UP);
+            } else if (value instanceof Number) {
+                return BigDecimal.valueOf(((Number) value).doubleValue()).setScale(2, RoundingMode.HALF_UP);
+            } else if (value instanceof String) {
+                String strVal = ((String) value).trim();
+                if (strVal.isEmpty() || "null".equalsIgnoreCase(strVal)) {
+                    return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+                }
+                return new BigDecimal(strVal).setScale(2, RoundingMode.HALF_UP);
+            }
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        } catch (Exception e) {
+            log.warn("格式化BigDecimal数据异常: value={}", value, e);
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
+
+    // 获取应收单关联数据
+    private Object getysdAss(String title, String id) {
+        return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-AADBCDA8126F41A0ADDEE3353828583192M8", "receipt", id, title, "");
+    }
+
     private static LocalDateTime parseTimestamp(String timestampStr) {
         if (timestampStr == null || timestampStr.trim().isEmpty()) return null;
         try {

+ 389 - 3
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdTransferServiceImpl.java

@@ -1,5 +1,7 @@
 package com.malk.huagao.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.malk.huagao.entity.KdYdDelivery;
 import com.malk.huagao.entity.KdYdDeliveryDetail;
@@ -13,6 +15,7 @@ import com.malk.server.aliwork.YDParam;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -22,8 +25,9 @@ import java.math.RoundingMode;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.List;
-import java.util.Map;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -34,6 +38,7 @@ import java.util.Map;
  * @since 2025-11-12
  */
 @Service
+@Slf4j
 public class KdYdTransferServiceImpl extends ServiceImpl<KdYdTransferMapper, KdYdTransfer> implements IKdYdTransferService {
     @Autowired
     private YDClient ydClient;
@@ -161,6 +166,382 @@ public class KdYdTransferServiceImpl extends ServiceImpl<KdYdTransferMapper, KdY
 //                        .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
     }
 
+    @Override
+    public Map<String, Object> insertTransfer1(Map json) {
+        HashMap<String, Object> result = new HashMap<>();
+
+        try {
+            MDC.put("MDC_KEY_PID", "1003"); // 设置不同的 PID 以便区分日志
+            List<Map<String, Object>> kdYdTransferDels = UtilMap.getList(json, "data");
+            String action = UtilMap.getString(json, "action");
+            String table = UtilMap.getString(json, "table");
+
+            // 批量删除处理
+            if (!kdYdTransferDels.isEmpty() && "del".equals(action) && "KD_YD_TRANSFER".equals(table)) {
+                log.info("开始处理调拨单删除操作,共{}条数据", kdYdTransferDels.size());
+                ArrayList<String> deleteList = new ArrayList<>();
+                int deleteSuccessCount = 0;
+
+                for (Map<String, Object> item : kdYdTransferDels) {
+                    try {
+                        String djbh = String.valueOf(item.get("djbh"));
+
+                        List<Map> list1 = (List<Map>) ydClient.queryData(YDParam.builder()
+                                .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
+                                .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", djbh)))
+                                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+                        if (list1 != null && !list1.isEmpty()) {
+                            for (Map map : list1) {
+                                String formInstanceId = UtilMap.getString(map, "formInstanceId");
+                                if (formInstanceId != null) {
+                                    deleteList.add(formInstanceId);
+                                }
+                            }
+                            deleteSuccessCount++;
+                        } else {
+                            log.warn("未找到对应的调拨单数据: djbh={}", djbh);
+                        }
+
+                    } catch (Exception e) {
+                        log.error("删除调拨单数据查询异常: djbh={}", item.get("djbh"), e);
+                    }
+                }
+
+                // 执行批量删除
+                if (!deleteList.isEmpty()) {
+                    try {
+                        ydClient.operateData(YDParam.builder()
+                                .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
+                                .formInstanceIdList(deleteList)
+                                .build(), YDConf.FORM_OPERATION.delete_batch);
+                        log.info("调拨单批量删除完成,共删除{}条数据", deleteList.size());
+                    } catch (Exception e) {
+                        log.error("调拨单批量删除操作异常", e);
+                    }
+                }
+
+                // 返回删除结果
+                result.put("code", "200");
+                result.put("msg", "删除成功,共删除" + deleteList.size() + "条数据");
+                result.put("data", new HashMap<String, Object>() {{
+                    put("deletedCount", deleteList.size());
+                    put("deletedIds", deleteList);
+                }});
+                return result;
+            } else if ("del".equals(action)) {
+                log.info("【调拨单删除任务】无需要删除的数据");
+                result.put("code", "200");
+                result.put("msg", "无需要删除的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            // 同步新增/更新数据
+            List<Map<String, Object>> kdYdTransfers = UtilMap.getList(json, "data");
+            if (kdYdTransfers.isEmpty()) {
+                log.info("【调拨单同步任务】无需要同步的数据,结束");
+                result.put("code", "200");
+                result.put("msg", "无需要同步的数据");
+                result.put("data", new HashMap<>());
+                return result;
+            }
+
+            log.info("【调拨单同步任务】开始同步,共{}条数据", kdYdTransfers.size());
+
+            List<Map<String, Object>> operationResults = new ArrayList<>();
+            int successCount = 0;
+            int failCount = 0;
+
+            for (Map<String, Object> transferItem : kdYdTransfers) {
+                Map<String, Object> singleResult = new HashMap<>();
+
+                try {
+                    String djbh = String.valueOf(transferItem.get("djbh"));
+                    List<Map<String, Object>> tableListData = UtilMap.getList(transferItem, "tableList");
+                    String  transferId = UtilMap.getString(transferItem, "transferId");
+
+                    // 检查明细数据是否存在
+                    if (tableListData == null || tableListData.isEmpty()) {
+                        log.warn("调拨单明细数据为空: djbh={}", djbh);
+                        singleResult.put("errorMsg", "明细数据为空");
+                        singleResult.put("status", "fail");
+                        failCount++;
+                        operationResults.add(singleResult);
+                        continue;
+                    }
+
+                    ArrayList<Object> tableList = new ArrayList<>();
+                    List<Map<String, Object>> tableListxlh = new ArrayList<>();
+
+                    // 处理明细数据
+                    for (Map<String, Object> detailItem : tableListData) {
+                        HashMap<String, String> tablemap = new HashMap<>();
+                        tablemap.put("textField_mhubzsav", String.valueOf(detailItem.get("wlbm")));
+                        tablemap.put("textField_mhubzsaw", String.valueOf(detailItem.get("wlmc")));
+                        tablemap.put("textField_mhubzsax", String.valueOf(detailItem.get("ggxh")));
+                        tablemap.put("textField_mhubzsay", String.valueOf(detailItem.get("dw")));
+                        tablemap.put("textareaField_mjshnw4c", String.valueOf(detailItem.get("kddh")));
+                        tablemap.put("numberField_mhubzsaz", safeConvertBigDecimalToString(detailItem.get("dbsl")));
+                        tablemap.put("textField_mhubzsb0", String.valueOf(detailItem.get("ph")));
+                        tablemap.put("textField_mhubzsb1", String.valueOf(detailItem.get("dcck")));
+                        tablemap.put("textField_mhubzsb5", String.valueOf(detailItem.get("dcckzt")));
+                        tablemap.put("textField_mhubzsb2", String.valueOf(detailItem.get("dccw")));
+                        tablemap.put("textField_mhubzsb3", String.valueOf(detailItem.get("drck")));
+                        tablemap.put("textField_mhubzsb6", String.valueOf(detailItem.get("drckzt")));
+                        tablemap.put("textField_mhubzsb4", String.valueOf(detailItem.get("drcw")));
+
+                        // 处理序列号明细
+                        String xlhjh = String.valueOf(detailItem.get("xlh"));
+                        if (xlhjh != null && !xlhjh.trim().isEmpty() && !"null".equals(xlhjh)) {
+                            List<Map<String, Object>> currentXlhList = Arrays.stream(xlhjh.split(","))
+                                    .map(String::trim)
+                                    .filter(item -> !item.isEmpty())
+                                    .map(item -> {
+                                        Map<String, Object> xlhMap = new HashMap<>();
+                                        xlhMap.put("textField_mf6a0h6w", item);
+                                        xlhMap.put("textField_mjqst61l", String.valueOf(detailItem.get("wlbm")));
+                                        xlhMap.put("textField_mjqst61m", String.valueOf(detailItem.get("ggxh")));
+                                        return xlhMap;
+                                    })
+                                    .collect(Collectors.toList());
+
+                            tableListxlh.addAll(currentXlhList);
+                            tableList.add(tablemap);
+                        }
+                    }
+
+                    // 查询关联表单数据
+                    String xsddbh = String.valueOf(transferItem.get("ddbh"));
+                    String fhtzdbh = String.valueOf(transferItem.get("fhtzdbh"));
+                    String ddformInstanceId = null;
+                    String fhdformInstanceId = null;
+                    String ddbh = null;
+                    String fhdbh = null;
+                    String jydate = null;
+                    String ghrq = null;
+                    String jyyy = null;
+                    String jtyy = null;
+                    String xsy = null;
+                    String khxypj = null;
+                    String fj = null;
+
+                    try {
+                        log.debug("开始查询订单数据: xsddbh={}", xsddbh);
+
+                        // 查询订单数据
+                        if (xsddbh != null && !"null".equals(xsddbh) && !xsddbh.trim().isEmpty()) {
+                            List<Map<String, Object>> ddlist = (List<Map<String, Object>>) ydClient.queryData(
+                                    YDParam.builder()
+                                            .formUuid("FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C")
+                                            .searchCondition(JSON.toJSONString(UtilMap.map("textField_mjs6fuwo", xsddbh)))
+                                            .build(),
+                                    YDConf.FORM_QUERY.retrieve_list_all
+                            ).getData();
+
+                            if (ddlist != null && !ddlist.isEmpty()) {
+                                for (Map<String, Object> khitem : ddlist) {
+                                    Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
+                                    if (khformData == null) continue;
+
+                                    Object serialObj = khformData.get("textField_mjs6fuwo");
+                                    String serialStr = serialObj != null ? serialObj.toString() : null;
+
+                                    if (xsddbh.equals(serialStr)) {
+                                        ddformInstanceId = safeToString(khitem.get("formInstanceId"));
+                                        ddbh = serialStr;
+                                        jydate = safeToString(khformData.get("dateField_mdya1lom"));
+                                        ghrq = safeToString(khformData.get("dateField_meqpbxsj"));
+                                        jyyy = safeToString(khformData.get("multiSelectField_meqpbxsc"));
+                                        jtyy = safeToString(khformData.get("textareaField_meqpbxsd"));
+                                        khxypj = safeToString(khformData.get("selectField_mewirdx4"));
+                                        xsy = safeToString(khformData.get("employeeField_mejowmng_id"));
+                                        fj = safeToString(khformData.get("attachmentField_mfoqcctz"));
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+
+                        // 查询发货单数据
+                        if (fhtzdbh != null && !"null".equals(fhtzdbh) && !fhtzdbh.trim().isEmpty()) {
+                            List<Map<String, Object>> fhdlist = (List<Map<String, Object>>) ydClient.queryData(
+                                    YDParam.builder()
+                                            .formUuid("FORM-FAE2575E112644ED914CAB4FEC9309F32AVR")
+                                            .searchCondition(JSON.toJSONString(UtilMap.map("serialNumberField_mheazm7w", fhtzdbh)))
+                                            .build(),
+                                    YDConf.FORM_QUERY.retrieve_list_all
+                            ).getData();
+
+                            if (fhdlist != null && !fhdlist.isEmpty()) {
+                                for (Map<String, Object> fhditem : fhdlist) {
+                                    Map<String, Object> fhdformData = (Map<String, Object>) fhditem.get("formData");
+                                    if (fhdformData == null) continue;
+
+                                    Object serialObj = fhdformData.get("serialNumberField_mheazm7w");
+                                    String serialStr = serialObj != null ? serialObj.toString() : null;
+
+                                    if (fhtzdbh.equals(serialStr)) {
+                                        fhdformInstanceId = safeToString(fhditem.get("formInstanceId"));
+                                        fhdbh = serialStr;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+
+                    } catch (Exception e) {
+                        log.error("查询关联表单数据异常: xsddbh={}, fhtzdbh={}", xsddbh, fhtzdbh, e);
+                    }
+
+                    // 构建更新数据
+                    HashMap<String, Object> updateMap = new HashMap<>();
+                    updateMap.put("tableField_mhubzsau", tableList);
+                    updateMap.put("tableField_mips137b", tableListxlh);
+
+                    // 添加关联表单数据
+                    if (ddbh != null && ddformInstanceId != null) {
+                        updateMap.put("associationFormField_mhubzsaf",
+                                Collections.singletonList(getddAss(ddbh, ddformInstanceId)));
+                    }
+                    if (fhdbh != null && fhdformInstanceId != null) {
+                        updateMap.put("associationFormField_mjzervdt",
+                                Collections.singletonList(getfhdAss(fhdbh, fhdformInstanceId)));
+                    }
+
+                    // 添加订单相关字段(如果所有字段都存在)
+                    if (jydate != null && ghrq != null && jyyy != null && jtyy != null
+                            && xsy != null && khxypj != null) {
+                        updateMap.put("dateField_mdya1lom", jydate);
+                        updateMap.put("dateField_meqpbxsj", ghrq);
+                        updateMap.put("multiSelectField_meqpbxsc", jyyy);
+                        updateMap.put("textareaField_meqpbxsd", jtyy);
+                        updateMap.put("employeeField_mejowmng", xsy);
+                        updateMap.put("selectField_mewirdx4", khxypj);
+                        updateMap.put("attachmentField_mfoqcctz", fj);
+                    }
+
+                    // 添加主表字段
+                    updateMap.put("textField_mjzervdu", fhtzdbh);
+                    updateMap.put("textField_miquh5zj", ddformInstanceId);
+                    updateMap.put("selectField_mhubzsa5", String.valueOf(transferItem.get("djlx")));
+                    updateMap.put("textField_mhubzsas", String.valueOf(transferItem.get("kh")));
+                    updateMap.put("textField_miptelgh", String.valueOf(transferItem.get("ddbh")));
+                    updateMap.put("textField_miptelgc", djbh);
+                    updateMap.put("textField_miptelgd", String.valueOf(transferItem.get("cgy")));
+                    updateMap.put("selectField_mhubzsa7", String.valueOf(transferItem.get("dchzlx")));
+                    updateMap.put("textField_mhubzsa6", String.valueOf(transferItem.get("ywlx")));
+                    // 处理日期字段
+                    Object rq = transferItem.get("rq");
+                            updateMap.put("dateField_mhubzsab", safeConvertDateTimeToString(rq));
+                    updateMap.put("selectField_mhubzsa9", String.valueOf(transferItem.get("drhzlx")));
+                    updateMap.put("selectField_mhubzsaa", String.valueOf(transferItem.get("dbfx")));
+                    updateMap.put("selectField_mhubzsac", String.valueOf(transferItem.get("dbdlx")));
+                    updateMap.put("textField_miptelge", String.valueOf(transferItem.get("dcbm")));
+                    updateMap.put("textField_miptelgf", String.valueOf(transferItem.get("dchz")));
+                    updateMap.put("textField_miptelgg", String.valueOf(transferItem.get("drbm")));
+                    updateMap.put("selectField_mhubzsah", String.valueOf(transferItem.get("hdfs")));
+                    updateMap.put("selectField_mhubzsai", String.valueOf(transferItem.get("ysfs")));
+                    updateMap.put("selectField_mhubzsar", String.valueOf(transferItem.get("kdgs")));
+                    updateMap.put("selectField_mhubzsag", String.valueOf(transferItem.get("fkfs")));
+
+                    // 执行同步操作
+                    Object operationResult = ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-F1B2BA2AF310476C88F4756F4DB50667VXDR")
+                            .noExecuteExpression(false)
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_miptelgc", djbh)))
+                            .formDataJson(JSONObject.toJSONString(updateMap))
+                            .build(), YDConf.FORM_OPERATION.upsert);
+
+                    // 记录成功结果
+                    singleResult.put("operationResult", operationResult);
+                    singleResult.put("status", "success");
+                    singleResult.put("ddformInstanceId", ddformInstanceId);
+                    singleResult.put("fhdformInstanceId", fhdformInstanceId);
+                    successCount++;
+
+                    log.info("调拨单同步成功: djbh={}, transferId={}", djbh, transferId);
+
+                } catch (Exception e) {
+                    log.error("同步单条调拨单数据异常: djbh={}", transferItem.get("djbh"), e);
+                    singleResult.put("errorMsg", e.getMessage());
+                    singleResult.put("status", "fail");
+                    failCount++;
+                }
+
+                operationResults.add(singleResult);
+            }
+
+            // 构建返回结果
+            Map<String, Object> data = new HashMap<>();
+            data.put("operationResults", operationResults);
+            data.put("totalCount", kdYdTransfers.size());
+            data.put("successCount", successCount);
+            data.put("failCount", failCount);
+
+            result.put("code", failCount == 0 ? "200" : "300");
+            result.put("msg", "操作完成,成功" + successCount + "条,失败" + failCount + "条");
+            result.put("data", data);
+
+            log.info("【调拨单同步任务】完成,共处理{}条数据,成功{}条,失败{}条",
+                    kdYdTransfers.size(), successCount, failCount);
+
+        } catch (Exception e) {
+            log.error("调拨单同步任务执行异常", e);
+            result.put("code", "500");
+            result.put("msg", "系统异常:" + e.getMessage());
+            result.put("data", new HashMap<>());
+        }
+        return result;
+    }
+//    private String safeConvertDateTimeToString(Object dateTime) {
+//        try {
+//            if (dateTime instanceof LocalDateTime) {
+//                return String.valueOf(((LocalDateTime) dateTime)
+//                        .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
+//            }
+//            if (dateTime instanceof Date) return String.valueOf(((Date) dateTime).getTime());
+//            if (dateTime instanceof Long) return String.valueOf(dateTime);
+//            if (dateTime instanceof Integer) {
+//                long t = ((Integer) dateTime).longValue();
+//                return String.valueOf(t < 10000000000L ? t * 1000L : t);
+//            }
+//            if (dateTime instanceof String) {
+//                String s = ((String) dateTime).trim();
+//                if (s.matches("\\d+")) {
+//                    return String.valueOf(s.length() == 10 ? Long.parseLong(s) * 1000L : Long.parseLong(s));
+//                }
+//            }
+//            return "";
+//        } catch (Exception e) { return ""; }
+//    }
+    // 辅助方法 - 安全转换 BigDecimal 为字符串
+    private String safeConvertBigDecimalToString(Object value) {
+        if (value == null) {
+            return "";
+        }
+        if (value instanceof BigDecimal) {
+            return ((BigDecimal) value).toPlainString();
+        }
+        return String.valueOf(value);
+    }
+
+    // 辅助方法 - 安全转换日期时间为字符串
+    private String safeConvertDateTimeToString(Object value) {
+        if (value == null) {
+            return "";
+        }
+        if (value instanceof LocalDateTime) {
+            return ((LocalDateTime) value).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
+        }
+        return String.valueOf(value);
+    }
+
+    // 辅助方法 - 安全转换为字符串
+    private String safeToString(Object obj) {
+        return obj != null ? obj.toString() : null;
+    }
+
     private static LocalDateTime parseTimestamp(String timestampStr) {
         if (timestampStr == null || timestampStr.trim().isEmpty()) return null;
         try {
@@ -184,7 +565,12 @@ public class KdYdTransferServiceImpl extends ServiceImpl<KdYdTransferMapper, KdY
             return defaultValue;
         }
     }
-
+    private Object getddAss(String title, String id) {
+        return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-B62CAE3075CE4098B17BB86C90FFA21C9B7C", "receipt", id, title, "");
+    }
+    private Object getfhdAss(String title, String id) {
+        return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_VQDMMWS6OR1VHL8VMFD3", "FORM-FAE2575E112644ED914CAB4FEC9309F32AVR", "receipt", id, title, "");
+    }
     private String safeGetString(Map formData, String key) {
         Object val = formData.get(key);
         return val == null ? "" : String.valueOf(val);

+ 0 - 3
mjava-huagao/src/main/java/com/malk/huagao/service/impl/YdHuaGaoServiceImpl.java

@@ -959,11 +959,8 @@ public class YdHuaGaoServiceImpl implements YdHuaGaoService {
                         .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
                         .appType("APP_VQDMMWS6OR1VHL8VMFD3")
                         .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
-//                        .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg4h6mz5", wlbt)))
-//                        .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_misfb2ft", jdnm)))
                         .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch(
                                 "textField_misfb2ft", jdnm, "金蝶内码", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ))))
-//
                         .formDataJson(JSONObject.toJSONString(updateFormData))
                         .build(), YDConf.FORM_OPERATION.upsert);
 

+ 1 - 1
mjava-huagao/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: prod
+    active: dev
   servlet:
     multipart:
       max-file-size: 100MB

+ 26 - 7
mjava-huagao/src/test/java/com/malk/huagao/EqbTest.java

@@ -9,13 +9,32 @@ import java.util.*;
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
 
+import com.alibaba.fastjson.JSON;
 import com.malk.huagao.utils.HTTPHelper;
 import org.apache.commons.codec.binary.Base64;
 import com.alibaba.fastjson.JSONObject;
 
 public class EqbTest {
 
+
     public static void main(String[] args) {
+
+
+        String responseBody = "[{\"code\":200,\"msg\":\"销售订单编码:DD202601280002单据同步成功\",\"data\":{\"djbh\":\"DD202601280002\"}}]";
+        System.out.println("响应内容: " + responseBody);
+
+        try {
+            // 一行代码提取
+            String djbh = JSON.parseArray(responseBody)
+                    .getJSONObject(0)
+                    .getJSONObject("data")
+                    .getString("djbh");
+
+            System.out.println("提取的djbh: " + djbh);
+
+        } catch (Exception e) {
+            System.out.println("解析JSON失败: " + e.getMessage());
+        }
         // 应用ID
         /*String appId = "7439093376";
         // 应用密钥(AppSecret)
@@ -24,12 +43,12 @@ public class EqbTest {
         String host = "https://smlopenapi.esign.cn";*/
 
 
-        // 应用ID
-        String appId = "5112033166";
-        // 应用密钥(AppSecret)
-        String appKey = "c0641a1f648a68a7014be5a490f0159a";
-        // e签宝接口调用域名(正式环境)
-        String host = "https://openapi.esign.cn";
+//        // 应用ID
+//        String appId = "5112033166";
+//        // 应用密钥(AppSecret)
+//        String appKey = "c0641a1f648a68a7014be5a490f0159a";
+//        // e签宝接口调用域名(正式环境)
+//        String host = "https://openapi.esign.cn";
 
 
         //步骤1:上传本地文件并转成HTML格式
@@ -50,7 +69,7 @@ public class EqbTest {
         //正式环境模板id 采购订单模板:a0827f8946994ebfbed7f44e6b8a6ed8
 
         //步骤4:制作含动态表格控件的HTML模板 访问【获取制作合同模板页面】接口返回的创建文件模板页面链接(docTemplateCreateUrl参数值),并在页面中拖动【动态表格】控件来制作模板,若链接失效,调用【获取编辑合同模板页面】接口
-        getDocTemplateEditUrl(appId,appKey,host,"8b7fef2257bc4093ada330dbf7c874c5");
+//        getDocTemplateEditUrl(appId,appKey,host,"8b7fef2257bc4093ada330dbf7c874c5");
 
 
         //步骤5:获取 HTML 模板中控件ID和控件Key

+ 24 - 15
mjava-lilin/src/main/java/com/malk/lilin/Service/impl/LiLinServiceImpl.java

@@ -535,12 +535,15 @@ public class LiLinServiceImpl implements LiLinService {
 
             for (Map<String, Object> row : tableField) {
                 String instructionId = String.valueOf(row.get("textField_mdnuob9a")); // 子表电子凭证号
-                String projectInfo = String.valueOf(row.get("textField_m9lfmh1o")); // 项目名称
-                String projectCode = String.valueOf(row.get("textField_m9lfmh1p")); // 项目编号
-                String businessSegment = String.valueOf(row.get("selectField_mkash8u9")); // 板块名称
-                String businessProjectStatus = String.valueOf(row.get("selectField_mkash8ua")); // 项目状态
                 String payAmount = String.valueOf(row.get("numberField_m8yf6gn1")); // 子表金额
-                String projectManager = String.valueOf(row.get("employeeField_m9lfmh1r")).replace("[\"", "").replace("\"]", "").trim(); // 项目负责人
+                String projectInfo = getStringValue(row, "textField_m9lfmh1o"); // 项目名称
+                String projectCode = getStringValue(row, "textField_m9lfmh1p"); // 项目编号
+                String businessSegment = getStringValue(row, "selectField_mkash8u9"); // 板块名称
+                String businessProjectStatus = getStringValue(row, "selectField_mkash8ua"); // 项目状态
+
+// 对于employeeField_m9lfmh1r字段的特殊处理
+                String projectManagerRaw = getStringValue(row, "employeeField_m9lfmh1r");
+                String projectManager = projectManagerRaw.replace("[\"", "").replace("\"]", "").trim(); // 项目负责人
 
                 // 构建 projectInfo
                 Map<String, Object> metaJson1 = new HashMap<>();
@@ -593,11 +596,12 @@ public class LiLinServiceImpl implements LiLinService {
             // 不是物流付款单:使用主表字段,发起一次支付
             String instructionId = String.valueOf(data.get("serialNumberField_m9ze3rjd")); // 主表电子凭证号
             String payAmount = String.valueOf(data.get("numberField_m9ze3rk4")); // 主表金额
-            String projectManager = String.valueOf(data.get("employeeField_mi647wos")).replace("[\"", "").replace("\"]", "").trim(); // 项目负责人
-            String projectCode = String.valueOf(data.get("textField_madmzxce"));
-            String businessSegment = String.valueOf(data.get("selectField_mjqhty52")); // 业务板块
-            String businessProjectStatus = String.valueOf(data.get("selectField_m9ks0c66")); // 项目状态
-            String projectInfo = String.valueOf(data.get("textField_mayubz25"));
+            String projectManager = getStringValue(data, "employeeField_mi647wos")
+                    .replace("[\"", "").replace("\"]", "").trim(); // 项目负责人
+            String projectCode = getStringValue(data, "textField_madmzxce");
+            String businessSegment = getStringValue(data, "selectField_mjqhty52"); // 业务板块
+            String businessProjectStatus = getStringValue(data, "selectField_m9ks0c66"); // 项目状态
+            String projectInfo = getStringValue(data, "textField_mayubz25");
 //            String projectInfo = xmbh + "-" + xmmc;
 
             Map<String, Object> metaJson1 = new HashMap<>();
@@ -1357,11 +1361,16 @@ public class LiLinServiceImpl implements LiLinService {
             JSONObject item = subBankStatementList1.getJSONObject(i);
             Map<String, Object> mapItem = new HashMap<>();
             mapItem.put("id", item.getInteger("id"));
-            mapItem.put("projectInfo", item.getString("projectInfo"));
-            mapItem.put("businessSegment", item.getString("businessSegment"));
-            mapItem.put("businessProjectStatus", item.getString("businessProjectStatus"));
-            mapItem.put("projectManager", item.getString("projectManager"));
-            mapItem.put("projectCode", item.getString("projectCode"));
+            String projectInfo = item.getString("projectInfo");
+            mapItem.put("projectInfo", projectInfo != null ? projectInfo : "");
+            String businessSegment = item.getString("businessSegment");
+            mapItem.put("businessSegment", businessSegment != null ? businessSegment : "");
+            String businessProjectStatus = item.getString("businessProjectStatus");
+            mapItem.put("businessProjectStatus", businessProjectStatus != null ? businessProjectStatus : "");
+            String projectManager = item.getString("projectManager");
+            mapItem.put("projectManager", projectManager != null ? projectManager : "");
+            String projectCode = item.getString("projectCode");
+            mapItem.put("projectCode", projectCode != null ? projectCode : "");
             result.add(mapItem);
         }
 

+ 29 - 10
mjava-ounuo/src/main/java/com/malk/tuosi/event/McTbEventImpl.java

@@ -31,31 +31,50 @@ public class McTbEventImpl implements TBEvent {
             String status = data.getString("status");
             String nodeId = data.getString("nodeId");
             String creatorId = data.getString("creatorId");
-            Map task = tbClient.queryTaskDetail(taskId,null,null).get(0);
-            if(!"6970a3ff4f887b90bfdbe7e3".equals(String.valueOf(task.get("projectId")))){
-                return;
-            }
+//            Map task = tbClient.queryTaskDetail(taskId,null,null).get(0);
+//            if(!"6970a3ff4f887b90bfdbe7e3".equals(String.valueOf(task.get("projectId")))){
+//                return;
+//            }
 //            if(!Arrays.asList("622ee3450cf3bb5e1a486f1f","61a9e8a36355609fb6383d40").contains(creatorId)){
 //                return;
 //            }
-            if(status.equals("finish")||status.equals("begin")){
-                boolean isBegin = status.equals("begin");
+            log.info("XXXXXX 进入节点更新流程,节点ID:{},状态:{},任务ID:{}",nodeId,status,taskId);
+            if(status.equals("finish")){
                 List<Map> list=tbClient.queryNodeList(taskId);
                 Map node = _getNodeDetail(list,nodeId);
                 if(String.valueOf(node.get("name")).contains("接单")){
-                    List<String> assigneeIds = isBegin? new ArrayList<>() :UtilMap.getList(node,"assigneeIds");
-                    String startDate = isBegin? null: UtilMap.getString(node,"startDate");
-                    String dueDate = isBegin? null: UtilMap.getString(node,"dueDate");
+                    List<String> assigneeIds =  UtilMap.getList(node,"assigneeIds");
+                    String startDate = UtilMap.getString(node,"startDate");
+                    String dueDate = UtilMap.getString(node,"dueDate");
                     Map nextMap=_getNextNode(list,nodeId);
+                    log.info("XXXXXX 接单完成,更新下一节点数据:{},{}-{}",assigneeIds,startDate,dueDate);
                     if(nextMap!=null){
                         String nextId = UtilMap.getString(nextMap,"id");
-                        tbClient.updateNodeById(taskId,nextId,assigneeIds,startDate,dueDate,creatorId);
+                        Map result=tbClient.updateNodeById(taskId,nextId,assigneeIds,startDate,dueDate,creatorId);
+                        log.info("XXXXXX 更新结果{}:{}",nextId,result);
                     }
                 }
+            }else if(status.equals("begin")){
+                log.info("XXXXXX 接单开始,清空后续节点数据");
+                List<Map> list=tbClient.queryNodeList(taskId);
+//                Map node = _getNodeDetail(list,nodeId);
+//                if(String.valueOf(node.get("name")).contains("接单")){
+                    nextNode(taskId,list,nodeId,creatorId);
+//                }
             }
         }
     }
 
+    private void nextNode(String taskId,List<Map> list,String nodeId,String creatorId){
+        Map nextMap=_getNextNode(list,nodeId);
+        if(nextMap!=null){
+            String nextId = UtilMap.getString(nextMap,"id");
+            Map result=tbClient.updateNodeById(taskId,nextId,new ArrayList<>(),null,null,creatorId);
+            log.info("XXXXXX 清空结果{}:{}",nextId,result);
+            nextNode(taskId,list,nextId,creatorId);
+        }
+    }
+
     @Override
     public void callBackProject(JSONObject eventJson) {