浏览代码

1.23代码提交

“lqy 1 周之前
父节点
当前提交
2c848922f1
共有 19 个文件被更改,包括 1112 次插入784 次删除
  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. 5 5
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOutboundController.java
  7. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerReferrerService.java
  8. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerService.java
  9. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdDeliveryService.java
  10. 2 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdMaterialService.java
  11. 2 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOrderService.java
  12. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOutboundService.java
  13. 70 51
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerReferrerServiceImpl.java
  14. 148 180
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java
  15. 147 129
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdDeliveryServiceImpl.java
  16. 270 1
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdMaterialServiceImpl.java
  17. 212 291
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java
  18. 233 105
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOutboundServiceImpl.java
  19. 0 3
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/YdHuaGaoServiceImpl.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) {

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

@@ -28,9 +28,9 @@ public class KdYdOutboundController {
     private YDClient ydClient;
     @Autowired
     private IKdYdOutboundService kdYdOutboundService;
-    @PostMapping("/kdYdOutbound")
-    McR insertkdYdOutbound(@RequestBody Map map) {
-        kdYdOutboundService.insertkdYdOutbound(map);
-        return McR.success();
-    }
+//    @PostMapping("/kdYdOutbound")
+//    Map<String, Object> insertkdYdOutbound(@RequestBody Map map) {
+//        Map<String, Object> stringObjectMap = kdYdOutboundService.insertkdYdOutbound(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);
 }

+ 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;
     }
+
 }

+ 148 - 180
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java

@@ -15,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;
@@ -33,6 +34,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 +44,165 @@ 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();
-
-        // === 提取主表字段(完全保留原有写法)===
-        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");
-
-        // === 构建客户对象 ===
-        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);
-
-        // === 判断是新增还是更新 ===
-        LambdaQueryWrapper<KdYdCustomer> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KdYdCustomer::getKhbm, khbm);
-        KdYdCustomer existing = kdYdCustomerMapper.selectOne(wrapper);
-
-        Long customerId;
-        if (existing != null) {
-            customer.setId(existing.getId());
-            kdYdCustomerMapper.updateById(customer);
-            customerId = existing.getId();
-        } else {
-            if ("2".equals(type)) {
-                throw new RuntimeException("客户不存在,无法更新: " + khbm);
+        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");
+                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();
+
+            // === 提取主表字段 ===
+            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");
+
+            // 构建主表数据
+            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);
+
+            // 处理子表数据
+            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);
 
-        // ✅【修改点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();
                 }
-            }
-        }
-
-        // ✅【新增】用于收集回写用的子表行
-        List<Map> updatedTableRowsForYD = new ArrayList<>();
-
-        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");
 
-            String finalBm;
-            if (bm != null && !bm.trim().isEmpty()) {
-                finalBm = bm.trim();
-            } else {
-                // 全局自增
-                if (currentMaxBm == null) {
-                    finalBm = "CXR00001";
-                } else {
-                    finalBm = incrementCode(currentMaxBm);
+                // 将联系人列表添加到主数据
+                customData.put("contactList", contactList);
+
+                // 回写数据到宜搭
+                try {
+//                    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());
                 }
-                currentMaxBm = finalBm; // 下一条继续递增
             }
 
-            // ✅【新增】构造回写行(复制原行并覆盖 bm)
-            Map updatedRow = new HashMap(item);
-            updatedRow.put("textField_mfkp33s5", finalBm);
-            updatedTableRowsForYD.add(updatedRow);
+            // 构建返回结果
+            result.put("table", "KD_YD_CUSTOMER");
+            result.put("action", action != null ? action : "add");
+            result.put("data", customData);
 
-            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);
-
-            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);
-                } else {
-                    kdYdCustomerLiaisonMapper.insert(liaison);
-                }
-            } else {
-                kdYdCustomerLiaisonMapper.insert(liaison);
-            }
-        }
+            log.info("客户信息同步成功: formInstId={}, khmc={}, khbm={}", formInstId, khmc, khbm);
 
-        // ✅【修改点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
-            );
         } 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

+ 270 - 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,270 @@ 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")
+                                .appType("APP_VQDMMWS6OR1VHL8VMFD3")
+                                .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
+                                .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;

+ 212 - 291
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java

@@ -53,309 +53,230 @@ 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, "action");
+
+            // 处理特殊操作类型
+            if ("del".equals(type)) {
+                String bm = UtilMap.getString(map, "bm");
+                //todo 删除逻辑
+
+                // 返回删除操作的格式
+                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");
+                //todo 作废逻辑
+
+                // 返回作废操作的格式
+                result.put("table", "KD_YD_ORDER");
+                result.put("action", "edit"); // 作废通常是修改状态
+                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 djbh = UtilMap.getString(formData, "textField_mjs6fuwo");
+
+            // 判断操作类型对应的action
+            String actionType;
+            if ("edit".equals(type)) {
+                djbh = UtilMap.getString(formData, "textField_mjs6fuwo");
+                actionType = "edit";
+            } else {
+                actionType = "add";
             }
-        }
 
-// ====== 处理付款计划子表(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 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("se", zse);
+                    table1Map.put("je", zje);
+                    table1Map.put("jshj", 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);    // 付款明细列表
+
+            // 设置返回结果
+            result.put("table", "KD_YD_ORDER");
+            result.put("action", actionType);
+            result.put("data", orderData);
+
+            // 如果需要回写到表单,可以在这里操作
+        /*
+        ydClient.operateData(
+            YDParam.builder()
+                .formInstanceId(formInstId)
+                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrmn66f", "需要回写的值")))
+                .useLatestVersion(true).build(),
+            YDConf.FORM_OPERATION.update);
+        */
+
+        } 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

+ 233 - 105
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;
@@ -44,109 +48,233 @@ public class KdYdOutboundServiceImpl extends ServiceImpl<KdYdOutboundMapper, KdY
     private KdYdOutboundMapper kdYdOutboundMapper;
     @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);
-        }
-        ydClient.operateData(
-                YDParam.builder()
-                        .formInstanceId(formInstId)
-                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrsdayq", id)))
-                        .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
-    }
+//    @Override
+//    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);
+//                }
+//            }
+//
+//            return;
+//        } else {
+//            log.info("【出库单删除任务】无需要删除的数据");
+//        }
+//
+//          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());
+//
+//        int successCount = 0;
+//        int failCount = 0;
+//
+//        for (Map kdYdOutbound : kdYdOutbounds) {
+//                ArrayList<Object> tableList = new ArrayList<>();
+//                List<Map<String, Object>> tableListxlh = new ArrayList<>(); // 在循环外初始化
+//                for (KdYdOutboundDetail kdYdOutboundDetail : kdYdOutboundDetails) {
+//                    HashMap<String, String> tablemap = new HashMap<>();
+//                    HashMap<String, String> tablemapxlh = new HashMap<>();
+//                    tablemap.put("textField_mejnamff", kdYdOutboundDetail.getWlbm());
+//                    tablemap.put("textField_mejnamfg", kdYdOutboundDetail.getWlmc());
+//                    tablemap.put("textField_mg34txh1", kdYdOutboundDetail.getTpsb());
+//                    tablemap.put("textField_mejnamfh", kdYdOutboundDetail.getGgxh());
+//                    tablemap.put("textField_mejnamfk", kdYdOutboundDetail.getKcdw());
+//                    tablemap.put("numberField_mejnamfl", String.valueOf(kdYdOutboundDetail.getYfsl() != null ? kdYdOutboundDetail.getYfsl().setScale(2, java.math.RoundingMode.HALF_UP) : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP)));
+//                    tablemap.put("numberField_mg34txh2", kdYdOutboundDetail.getSfsl() != null ? kdYdOutboundDetail.getSfsl().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("numberField_mg34txh3", kdYdOutboundDetail.getDj() != null ? kdYdOutboundDetail.getDj().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("numberField_mg34txh4", kdYdOutboundDetail.getHsdj() != null ? kdYdOutboundDetail.getHsdj().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("textField_mg34txh5", kdYdOutboundDetail.getPh());
+//                    tablemap.put("numberField_mg34txh6", kdYdOutboundDetail.getSl() != null ? kdYdOutboundDetail.getSl().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("numberField_mg34txh7", kdYdOutboundDetail.getSe() != null ? kdYdOutboundDetail.getSe().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("numberField_mg34txh8", kdYdOutboundDetail.getJe() != null ? kdYdOutboundDetail.getJe().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("numberField_mg34txh9", kdYdOutboundDetail.getJshj() != null ? kdYdOutboundDetail.getJshj().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("textField_mf6a0h6l", kdYdOutboundDetail.getCk());
+//                    tablemap.put("textField_mf6a0h6k", kdYdOutboundDetail.getCw());
+//                    tablemap.put("textField_mf6a0h6p", kdYdOutboundDetail.getKczt());
+//                    tablemap.put("numberField_mg34txha", kdYdOutboundDetail.getJtc() != null ? kdYdOutboundDetail.getJtc().setScale(2, java.math.RoundingMode.HALF_UP).toString() : java.math.BigDecimal.ZERO.setScale(2, java.math.RoundingMode.HALF_UP).toString());
+//                    tablemap.put("textField_mejnamf6", kdYdOutboundDetail.getSjr());
+//                    tablemap.put("textField_mejnamf7", kdYdOutboundDetail.getSjdh());
+//                    tablemap.put("textareaField_mf6a0h5e", kdYdOutboundDetail.getSjdz());
+//                    tablemap.put("textField_mejnamfx", kdYdOutboundDetail.getSsxl());
+//                    tablemap.put("textField_mf6a0h6u", kdYdOutboundDetail.getGg());
+//                    tablemap.put("textField_mhlqeoas", kdYdOutboundDetail.getZbq());
+//                    tablemap.put("dateField_mg34txhb", kdYdOutboundDetail.getFwdqr() != null ? String.valueOf(kdYdOutboundDetail.getFwdqr().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
+//                    tablemap.put("textField_mf6a0h6w", kdYdOutboundDetail.getXlh());
+//                    tablemap.put("textField_mhlqeoat", kdYdOutboundDetail.getZbqsf());
+//                    tablemap.put("textField_mf6a0h6x", kdYdOutboundDetail.getKddh());
+//                    tablemap.put("textField_mf6a0h6y", kdYdOutboundDetail.getJx());
+//                    String xlhjh = kdYdOutboundDetail.getXlh();
+//                    if (xlhjh != null && !xlhjh.trim().isEmpty()) {
+//                        List<Map<String, Object>> currentXlhList = Arrays.stream(xlhjh.split(","))
+//                                .map(String::trim)
+//                                .filter(item -> !item.isEmpty())
+//                                .map(item -> {
+//                                    Map<String, Object> map = new HashMap<>();
+//                                    map.put("textField_mf6a0h6w", item); // 序列号
+//                                    map.put("textField_mjqst61l", kdYdOutboundDetail.getWlbm()); // 对应的物料编码
+//                                    map.put("textField_mjqst61m", kdYdOutboundDetail.getGgxh());
+//                                    return map;
+//                                })
+//                                .collect(Collectors.toList());
+//
+//                        tableListxlh.addAll(currentXlhList); // 追加到总列表
+//                    }
+//
+//                    // 主表仍保留原始 xlh(可选)
+//                    tablemap.put("textField_mf6a0h6w", kdYdOutboundDetail.getXlh());
+//                    tablemap.put("radioField_mf6a0h6h", kdYdOutboundDetail.getSfzp());
+//
+//                    tableList.add(tablemap);
+//
+//                    // 更新同步状态
+//                    kdYdOutboundDetail.setSyncStatus("1");
+//                    kdYdOutboundDetailMapper.updateById(kdYdOutboundDetail);
+//                }
+//
+//                String fhdformInstanceId = null;
+//                String fhdbh = null;
+//                try {
+//                    log.debug("开始查询出库数据: deliveryId={}", deliveryId);
+//
+//                    List<Map> ddlist = (List<Map>) ydClient.queryData(
+//                            YDParam.builder()
+//                                    .formUuid("FORM-FAE2575E112644ED914CAB4FEC9309F32AVR")
+//                                    .appType("APP_VQDMMWS6OR1VHL8VMFD3")
+//                                    .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
+//                                    .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;
+//                            }
+//                        }
+//
+//                        if (fhdformInstanceId == null) {
+//                            log.warn("未找到与fhdbh={}完全匹配的订单数据", fhdbh);
+//                        }
+//                    } else {
+//                        log.warn("未查询到订单数据: fhdbh={}", fhdbh);
+//                    }
+//
+//                } catch (Exception e) {
+//                    log.error("查询订单数据异常: fhdbh={}, 错误信息={}", fhdbh, e.getMessage(), e);
+//                }
+//                HashMap<Object, Object> updateMap = new HashMap<>();
+//                updateMap.put("tableField_mejnamfd", tableList);
+//                updateMap.put("tableField_mips137b", tableListxlh);
+//                if (fhdbh != null && fhdformInstanceId != null) {
+//                    updateMap.put("associationFormField_mejmml36",
+//                            Arrays.asList(getfhdAss(fhdformInstanceId,fhdbh)));
+//                }
+//                updateMap.put("dateField_krbgloam", kdYdOutbound.getDateTime() != null ? String.valueOf(kdYdOutbound.getDateTime().atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()) : "");
+//                updateMap.put("textField_krnn5bmr", kdYdOutbound.getXsDept());
+//                updateMap.put("textField_mhjxw689", kdYdOutbound.getFhDept());
+//                updateMap.put("textField_mhjxw686", kdYdOutbound.getCgy());
+//                updateMap.put("selectField_mejowmna", kdYdOutbound.getDjlx());
+//                updateMap.put("textField_mg34txgm", kdYdOutbound.getDjbh());
+//                updateMap.put("textField_mhlqeoar", kdYdOutbound.getJsbb());
+//                updateMap.put("textField_mejnamf2", kdYdOutbound.getKh());
+//                updateMap.put("selectField_mejowmnc", kdYdOutbound.getXslx());
+//                updateMap.put("textField_mhjxw688", kdYdOutbound.getXsy());
+//                updateMap.put("selectField_mg34txgt", kdYdOutbound.getXssx());
+//                updateMap.put("selectField_megi74y8", kdYdOutbound.getKhsx());
+//                updateMap.put("textField_mg34txgy", kdYdOutbound.getKhtjr());
+//                updateMap.put("textField_mg34txgz", kdYdOutbound.getYsdh());
+//                updateMap.put("textField_migw33w6", deliveryId);
+//
+//                // 添加同步操作(根据您的实际需求添加)
+//                ydClient.operateData(YDParam.builder()
+//                        .formUuid("FORM-AADBCDA8126F41A0ADDEE3353828583192M8")
+//                        .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mg34txgm", kdYdOutbound.getDjbh())))
+//                        .formDataJson(JSONObject.toJSONString(updateMap))
+//                        .build(), YDConf.FORM_OPERATION.upsert
+//                );
+//                // 更新同步状态
+//                kdYdOutbound.setSyncStatus("1");
+//                kdYdOutboundMapper.updateById(kdYdOutbound);
+//                successCount++;
+//
+//                log.info("出库单同步成功: 单据编号={}", djbh);
+//
+//            } catch (Exception e) {
+//                failCount++;
+//                log.error("同步单条出库单数据异常: 单据编号={}, 错误信息={}",
+//                        kdYdOutbound.getDjbh(), e.getMessage(), e);
+//            }
+//        }
+//
+//        log.info("【出库单同步任务】完成: 成功={}, 失败={}, 总计={}",
+//                successCount, failCount, kdYdOutbounds.size());
+//
+//    }
     private static LocalDateTime parseTimestamp(String timestampStr) {
         if (timestampStr == null || timestampStr.trim().isEmpty()) return null;
         try {

+ 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);