Просмотр исходного кода

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

wzy 1 месяц назад
Родитель
Сommit
c606af3f0c

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

@@ -59,27 +59,27 @@ private YDClient ydClient;
 //                .formInstanceIdList((List<String>) ddrNew.getData())
 //                .build(), YDConf.FORM_OPERATION.delete_batch);
 
-        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
-                .formInstId("FINST-S2666U81RZA18BDUNZO2U8URNQ8H3X0D2GMJMW932")
-                .build(), YDConf.FORM_QUERY.retrieve_id);
-
-        if (ddrNew == null || ddrNew.getFormData() == null) {
-            throw new RuntimeException("未找到订单信息");
-        }
-
-        Map formData1 = ddrNew.getFormData();
-        String ddje = UtilMap.getString(formData1, "numberField_mjm9k35k");
-        String dddate = UtilMap.getString(formData1, "dateField_mjm9k35j");
-
-        System.out.println(dddate);
-        System.out.println(ddje);
+//        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+//                .formInstId("FINST-S2666U81RZA18BDUNZO2U8URNQ8H3X0D2GMJMW932")
+//                .build(), YDConf.FORM_QUERY.retrieve_id);
+//
+//        if (ddrNew == null || ddrNew.getFormData() == null) {
+//            throw new RuntimeException("未找到订单信息");
+//        }
+//
+//        Map formData1 = ddrNew.getFormData();
+//        String ddje = UtilMap.getString(formData1, "numberField_mjm9k35k");
+//        String dddate = UtilMap.getString(formData1, "dateField_mjm9k35j");
+//
+//        System.out.println(dddate);
+//        System.out.println(ddje);
 //        ydClient.operateData(YDParam.builder()
 //                .formInstanceId(ins)
 //      .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_mhirg0kz","156")))//xz04
 ////                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map(employ,id)))//xz04
 //                .useLatestVersion(true)
 //                .build(), YDConf.FORM_OPERATION.update);
-//        ydHuaGaoService.synckdYdMaterial();
+        ydHuaGaoService.synckdYdMaterial();
 //        ydHuaGaoService.synckdYdPayment();
 //        ydHuaGaoService.synckdYdTRANSFER();
 //        ydHuaGaoService.syncKdYdReceivable();

+ 2 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrderDetail.java

@@ -47,6 +47,8 @@ public class KdYdOrderDetail implements Serializable {
 
     private String sfzp;
 
+    private String bz;
+
     private Integer sl;
 
     private BigDecimal se;

+ 2 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdTransferDetail.java

@@ -48,6 +48,8 @@ public class KdYdTransferDetail implements Serializable {
 
     private String drck;
 
+    private String xlh;
+
     private String drcw;
 
     private String drckzt;

+ 185 - 79
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java

@@ -75,7 +75,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
         String khmc = UtilMap.getString(formData, "textField_mejnamf2");
         String djbh = UtilMap.getString(formData, "serialNumberField_mewfgzku");
         if("2".equals(type)){
-             djbh = UtilMap.getString(formData, "textField_miwvnkep");
+             djbh = UtilMap.getString(formData, "serialNumberField_mewfgzku");
         }
         LocalDateTime rq = parseTimestamp(UtilMap.getString(formData, "dateField_mejowmnb"));
         String khxypj = UtilMap.getString(formData, "selectField_mewirdx4");
@@ -114,6 +114,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
         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);
@@ -135,104 +136,209 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
         kdYdOrder.setSfhs(sfhs);
         kdYdOrder.setJws(jws);
         kdYdOrder.setSyncStatus("0");
-        kdYdOrder.setOperationType("1");
-//        kdYdOrder.setForminstid(formInstId);
+
+        Long id;
         if ("2".equals(type)) {
-            kdYdOrder.setOperationType(type);
-            kdYdOrderMapper.update(kdYdOrder, new LambdaQueryWrapper<KdYdOrder>().eq(KdYdOrder::getDjbh, djbh));
+            // 查询已存在的订单
+            KdYdOrder existing = kdYdOrderMapper.selectOne(
+                    new LambdaQueryWrapper<KdYdOrder>().eq(KdYdOrder::getDjbh, djbh)
+            );
+            if (existing == null) {
+                throw new IllegalArgumentException("无法更新订单:单据编号 [" + djbh + "] 不存在");
+            }
+            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 会自动回填主键
         }
 
-        Long id = kdYdOrder.getId();
-        int count = 1;
-        for (Map item : tableField) {
-
-            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); // 如果为空或格式错误,返回 0
-            String ssxl = safeGetString(item, "selectField_mfbx1pr1");
-            BigDecimal dj = toBigDecimal(safeGetString(item, "numberField_mfbx1prf"));
-            BigDecimal hsdj = toBigDecimal(safeGetString(item, "numberField_mfbx1prg"));
-            String sfzp = safeGetString(item, "radioField_mfbx1prc");
-            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");
-            KdYdOrderDetail kdYdOrderDetail = new KdYdOrderDetail();
-            kdYdOrderDetail.setOrderId(id);
-            kdYdOrderDetail.setWlbm(wlbm);
-            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.setJshj(zjshj);
-            kdYdOrderDetail.setJj(jj);
-            kdYdOrderDetail.setZkl(zkl);
-            kdYdOrderDetail.setZke(zke);
-            kdYdOrderDetail.setYhrq(yhrq);
-            kdYdOrderDetail.setXsjzj(xsjzj);
-            kdYdOrderDetail.setDetailId(count);
-            kdYdOrderDetail.setSmzs(zmzs);
-            kdYdOrderDetail.setSyncStatus("0");
-            kdYdOrderDetail.setOperationType("1");
-//            kdYdOrderDetail.setForminstid(formInstId);
-            if ("2".equals(type) || "3".equals(type)) {
-                kdYdOrderDetail.setOperationType(type);
-                kdYdOrderDetailMapper.update(kdYdOrderDetail, new LambdaQueryWrapper<KdYdOrderDetail>()
-                        .eq(KdYdOrderDetail::getWlbm, wlbm)
-                        .eq(KdYdOrderDetail::getOrderId, id));
-            } else {
-                kdYdOrderDetailMapper.insert(kdYdOrderDetail);
+// ====== 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 = i + 1; // 使用 1-based 序号作为 detailId(必须与前端一致)
+                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 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.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.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);
+                    existing.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);
+                }
+            }
+        }
+
+// ====== 3. 删除数据库中存在但本次未传入的明细 ======
+        for (KdYdOrderDetail existing : existingDetails) {
+            if (!incomingDetailIds.contains(existing.getDetailId())) {
+                kdYdOrderDetailMapper.deleteById(existing.getId());
+                // 或者软删除:update sync_status = '9' 等
             }
-            count++;
         }
+
+// ====== 处理付款计划子表(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"));
-                int detailId = i + 1;
                 LocalDateTime endTime = parseTimestamp(UtilMap.getString(row, "dateField_mhiui6v9"));
-                KdYdOrderPayment kdYdOrderPayment = new KdYdOrderPayment();
-                kdYdOrderPayment.setOrderId(id);
-                kdYdOrderPayment.setSfys(sfys);
-                kdYdOrderPayment.setGldh(gldh);
-                kdYdOrderPayment.setYsbl(ysbl);
-                kdYdOrderPayment.setYsje(ysje);
-                kdYdOrderPayment.setSsje(ssje);
-                kdYdOrderPayment.setDetailId(detailId);
-                kdYdOrderPayment.setEndTime(endTime);
-                kdYdOrderPayment.setSyncStatus("0");
-                kdYdOrderPayment.setOperationType("1");
-                if ("2".equals(type) || "3".equals(type)) {
-                    kdYdOrderPayment.setOperationType(type);
-                    kdYdOrderPaymentMapper.update(kdYdOrderPayment, new LambdaQueryWrapper<KdYdOrderPayment>()
-                            .eq(KdYdOrderPayment::getDetailId, detailId)
-                            .eq(KdYdOrderPayment::getOrderId, id));
+
+                // 查询是否已存在该 (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 {
-                    kdYdOrderPaymentMapper.insert(kdYdOrderPayment);
+                    // 新增
+                    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);
                 }
             }
         }
+
+// 3. 删除数据库中存在但本次未传入的付款记录
+        for (KdYdOrderPayment existing : existingPayments) {
+            if (!incomingPaymentDetailIds.contains(existing.getDetailId())) {
+                kdYdOrderPaymentMapper.deleteById(existing.getId());
+                // 或软删除:existing.setSyncStatus("9"); updateById
+            }
+        }
 //        ydClient.operateData(
 //                YDParam.builder()
 //                        .formInstanceId(formInstId)

+ 37 - 5
mjava-huagao/src/main/java/com/malk/huagao/service/impl/YdHuaGaoServiceImpl.java

@@ -339,7 +339,7 @@ public class YdHuaGaoServiceImpl implements YdHuaGaoService {
                 List<KdYdOutboundDetail> kdYdOutboundDetails = kdYdOutboundDetailMapper.selectList(outbounddetailqw);
 
                 ArrayList<Object> tableList = new ArrayList<>();
-                List<Map<String, Object>> tableListxlh = 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<>();
@@ -374,21 +374,30 @@ public class YdHuaGaoServiceImpl implements YdHuaGaoService {
                     tablemap.put("textField_mf6a0h6y", kdYdOutboundDetail.getJx());
                     String xlhjh = kdYdOutboundDetail.getXlh();
                     if (xlhjh != null && !xlhjh.trim().isEmpty()) {
-                        tableListxlh = Arrays.stream(xlhjh.split(","))
+                        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_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;
@@ -1403,6 +1412,7 @@ public class YdHuaGaoServiceImpl implements YdHuaGaoService {
                         .orderByAsc(KdYdTransferDetail::getDetailId);
                 List<KdYdTransferDetail> kdYdTransferDetails = kdYdTransferDetailMapper.selectList(transferdetailqw);
                 ArrayList<Object> tableList = new ArrayList<>();
+                List<Map<String, Object>> tableListxlh = new ArrayList<>();
                 for (KdYdTransferDetail kdYdTransferDetail : kdYdTransferDetails) {
                     HashMap<String, String> tablemap = new HashMap<>();
                     tablemap.put("textField_mhubzsav", kdYdTransferDetail.getWlbm());
@@ -1417,6 +1427,28 @@ public class YdHuaGaoServiceImpl implements YdHuaGaoService {
                     tablemap.put("textField_mhubzsb3", kdYdTransferDetail.getDrck());
                     tablemap.put("textField_mhubzsb6", kdYdTransferDetail.getDrckzt());
                     tablemap.put("textField_mhubzsb4", kdYdTransferDetail.getDrcw());
+                    String xlhjh = kdYdTransferDetail.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", kdYdTransferDetail.getWlbm()); // 对应的物料编码
+                                    map.put("textField_mjqst61m", kdYdTransferDetail.getGgxh());
+                                    return map;
+                                })
+                                .collect(Collectors.toList());
+
+                        tableListxlh.addAll(currentXlhList); // 追加到总列表
+                    }
+
+                    // 主表仍保留原始 xlh(可选)
+                    tablemap.put("textField_mf6a0h6w", kdYdTransferDetail.getXlh());
+//                    tablemap.put("radioField_mf6a0h6h", kdYdTransferDetail.getSfzp());
+
+                    tableList.add(tablemap);
                     kdYdTransferDetail.setSyncStatus("1");
                     kdYdTransferDetailMapper.updateById(kdYdTransferDetail);
                     tableList.add(tablemap);
@@ -1482,7 +1514,7 @@ public class YdHuaGaoServiceImpl implements YdHuaGaoService {
 // 构建更新数据
                 HashMap<String, Object> updateMap = new HashMap<>();
                 updateMap.put("tableField_mhubzsau", tableList);
-
+                updateMap.put("tableField_mips137b", tableListxlh);
                 if (ddbh != null && ddformInstanceId != null) {
                     updateMap.put("associationFormField_mhubzsaf",
                             Collections.singletonList(getddAss(ddbh, ddformInstanceId)));