Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mjava-tonglibo/src/main/java/com/malk/tonglibo/controller/machineController.java
lfx 19 tuntia sitten
vanhempi
commit
97dfabef4e
100 muutettua tiedostoa jossa 5518 lisäystä ja 424 poistoa
  1. 10 0
      mjava-boyang/pom.xml
  2. 92 3
      mjava-boyang/src/main/java/com/malk/boyang/controller/BoyangController.java
  3. 10 0
      mjava-boyang/src/main/java/com/malk/boyang/service/BoyangService.java
  4. 682 6
      mjava-boyang/src/main/java/com/malk/boyang/service/impl/BoyangServiceImpl.java
  5. 9 3
      mjava-boyang/src/main/resources/application-dev.yml
  6. 9 3
      mjava-boyang/src/main/resources/application-prod.yml
  7. 92 0
      mjava-boyang/src/test/java/com/malk/boyang/DdTest.java
  8. 589 0
      mjava-boyang/src/test/java/com/malk/boyang/EqbTest.java
  9. 0 184
      mjava-boyang/src/test/java/com/malk/boyang/Test.java
  10. 9 2
      mjava-huagao/pom.xml
  11. 2 1
      mjava-huagao/src/main/java/com/malk/huagao/HuaGaoApplication.java
  12. 66 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerController.java
  13. 34 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerLiaisonController.java
  14. 32 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerReferrerController.java
  15. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdDeliveryController.java
  16. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdMaterialController.java
  17. 35 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOrderController.java
  18. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOutboundController.java
  19. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdReceivableController.java
  20. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdTransferController.java
  21. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdZpController.java
  22. 96 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomer.java
  23. 56 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomerLiaison.java
  24. 60 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomerReferrer.java
  25. 76 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdDelivery.java
  26. 73 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdDeliveryDetail.java
  27. 82 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdMaterial.java
  28. 76 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrder.java
  29. 81 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrderDetail.java
  30. 41 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrderPayment.java
  31. 68 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOutbound.java
  32. 101 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOutboundDetail.java
  33. 66 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdPaymentReceipt.java
  34. 66 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdPaymentReceiptDetail.java
  35. 71 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivable.java
  36. 87 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivableDetail.java
  37. 43 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivablePayment.java
  38. 72 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdTransfer.java
  39. 64 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdTransferDetail.java
  40. 65 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdZp.java
  41. 81 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdZpDetail.java
  42. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerLiaisonMapper.java
  43. 23 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerMapper.java
  44. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerReferrerMapper.java
  45. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdDeliveryDetailMapper.java
  46. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdDeliveryMapper.java
  47. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdMaterialMapper.java
  48. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderDetailMapper.java
  49. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderMapper.java
  50. 7 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderPaymentMapper.java
  51. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOutboundDetailMapper.java
  52. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOutboundMapper.java
  53. 7 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdPaymentReceiptDetailMapper.java
  54. 8 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdPaymentReceiptMapper.java
  55. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivableDetailMapper.java
  56. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivableMapper.java
  57. 7 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivalablePaymentMapper.java
  58. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdTransferDetailMapper.java
  59. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdTransferMapper.java
  60. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdZpDetailMapper.java
  61. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdZpMapper.java
  62. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerLiaisonMapper.xml
  63. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerMapper.xml
  64. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerReferrerMapper.xml
  65. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdDeliveryDetailMapper.xml
  66. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdDeliveryMapper.xml
  67. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdMaterialMapper.xml
  68. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOrderDetailMapper.xml
  69. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOrderMapper.xml
  70. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOutboundDetailMapper.xml
  71. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOutboundMapper.xml
  72. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdReceivableDetailMapper.xml
  73. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdReceivableMapper.xml
  74. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdTransferDetailMapper.xml
  75. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdTransferMapper.xml
  76. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdZpDetailMapper.xml
  77. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdZpMapper.xml
  78. 10 4
      mjava-huagao/src/main/java/com/malk/huagao/schedule/KdScheduleTask.java
  79. 58 53
      mjava-huagao/src/main/java/com/malk/huagao/schedule/ScheduleTask.java
  80. 182 0
      mjava-huagao/src/main/java/com/malk/huagao/schedule/YdScheduleTask.java
  81. 20 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerLiaisonService.java
  82. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerReferrerService.java
  83. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerService.java
  84. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdDeliveryService.java
  85. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdMaterialService.java
  86. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOrderService.java
  87. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOutboundService.java
  88. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdReceivableService.java
  89. 20 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdTransferService.java
  90. 19 0
      mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdZpService.java
  91. 6 4
      mjava-huagao/src/main/java/com/malk/huagao/service/KdHuaGaoService.java
  92. 26 0
      mjava-huagao/src/main/java/com/malk/huagao/service/YdHuaGaoService.java
  93. 20 4
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/HuaGaoServiceImpl.java
  94. 464 157
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdHuaGaoServiceImpl.java
  95. 102 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerLiaisonServiceImpl.java
  96. 86 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerReferrerServiceImpl.java
  97. 268 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java
  98. 228 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdDeliveryServiceImpl.java
  99. 128 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdMaterialServiceImpl.java
  100. 0 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java

+ 10 - 0
mjava-boyang/pom.xml

@@ -39,6 +39,16 @@
             <artifactId>base</artifactId>
             <version>1.1-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-core</artifactId>
+            <version>0.2.10-beta</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 92 - 3
mjava-boyang/src/main/java/com/malk/boyang/controller/BoyangController.java

@@ -1,18 +1,107 @@
 package com.malk.boyang.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.malk.boyang.service.BoyangService;
 import com.malk.server.common.McR;
+import com.malk.utils.UtilMap;
+import com.malk.utils.UtilServlet;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
 @RestController
-@RequestMapping
+@RequestMapping()
 public class BoyangController {
 
     @Autowired
     private BoyangService boyangService;
 
+    @PostMapping("/sign")
+    public McR sign(@RequestBody Map body) {
+        return boyangService.eSignSubmit(body);
+    }
+
+    @GetMapping("/getOrganization")
+    public McR getOrganization(String name) {
+        return boyangService.getOrganization(name);
+    }
+
+    // 使用ConcurrentHashMap保证线程安全
+    private final ConcurrentMap<String, Long> eventList = new ConcurrentHashMap<>();
+    // 记录最后一次清理时间
+    private volatile long lastCleanTime = System.currentTimeMillis();
+    // 清理间隔时间(毫秒)
+    private static final long CLEAN_INTERVAL = 60_000;
+
+    @PostMapping("/callback")
+    public Map callback(@RequestBody Map body) {
+//        Map data = UtilServlet.getParamMap(request);
+        log.info("data, {}", JSON.toJSONString(body));
+
+        //签署流程开始:SIGN_FLOW_START;签署节点完成:SIGN_SIGNER_SIGNED;签署流程完成:SIGN_FLOW_FINISH
+        String callBackDesc = UtilMap.getString(body, "callBackDesc");
+        int callBackEnum = UtilMap.getInt(body, "callBackEnum");
+
+        Map callBackProcessVO = UtilMap.getMap(body, "callBackProcessVO");
+        String signFlowId = UtilMap.getString(callBackProcessVO, "processId");//e签宝签署流程id
+        String processInstanceId = UtilMap.getString(callBackProcessVO, "businessNo");//钉钉审批实例id
+
+        String info = callBackDesc + "-" + callBackEnum + signFlowId;
+
+        // 定期清理过期记录
+        cleanExpiredEvents();
+
+        if (isCallbackProcessed(info)){
+            log.info("info:{},重复回调,不做处理",info);
+        }else {
+            eventList.put(info, System.currentTimeMillis());
+            //签署开始回写签署详情地址
+            if ("SIGN_FLOW_START".equals(callBackDesc)) {
+                String signPreUrl = UtilMap.getString(callBackProcessVO, "signPreUrl");
+                boyangService.start(processInstanceId,signPreUrl);
+            }
+            //签署完成回写审批单
+            if ("SIGN_FLOW_FINISH".equals(callBackDesc)) {
+                boyangService.signed(processInstanceId,signFlowId);
+            }
+        }
+
+        Map map = new HashMap();
+        map.put("code", 0);
+        map.put("msg","success");
+        return map;
+    }
 
+    /**
+     * 检查并清理过期事件
+     */
+    private void cleanExpiredEvents() {
+        long currentTime = System.currentTimeMillis();
+        // 只在达到清理间隔时执行清理
+        if (currentTime - lastCleanTime > CLEAN_INTERVAL) {
+            synchronized (this) {
+                // 双重检查,避免重复清理
+                if (currentTime - lastCleanTime > CLEAN_INTERVAL) {
+                    long expirationTime = currentTime - TimeUnit.MINUTES.toMillis(1);
+                    eventList.entrySet().removeIf(entry -> entry.getValue() < expirationTime);
+                    lastCleanTime = currentTime;
+                }
+            }
+        }
+    }
 
+    /**
+     * 检查该回调事件在一分钟内是否处理过
+     */
+    private boolean isCallbackProcessed(String detail) {
+        return eventList.containsKey(detail);
+    }
 }

+ 10 - 0
mjava-boyang/src/main/java/com/malk/boyang/service/BoyangService.java

@@ -2,6 +2,16 @@ package com.malk.boyang.service;
 
 import com.malk.server.common.McR;
 
+import java.util.Map;
+
 public interface BoyangService {
+    //发起e签宝签署
+    McR eSignSubmit(Map map);
+
+    //e签宝签署完成回写签署文件
+    void signed(String processInstanceId,String signFlowId);
+
+    McR getOrganization(String name);
 
+    void start(String processInstanceId, String signPreUrl);
 }

+ 682 - 6
mjava-boyang/src/main/java/com/malk/boyang/service/impl/BoyangServiceImpl.java

@@ -1,27 +1,703 @@
 package com.malk.boyang.service.impl;
 
 import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.boyang.service.BoyangService;
-import com.malk.server.aliwork.YDConf;
-import com.malk.server.aliwork.YDParam;
+import com.malk.boyang.utils.HTTPHelper;
 import com.malk.server.common.McR;
+import com.malk.server.dingtalk.DDConf;
 import com.malk.server.dingtalk.DDR_New;
-import com.malk.service.aliwork.YDClient;
-import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.*;
 import com.malk.utils.UtilHttp;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringEscapeUtils;
+import okhttp3.*;
+import okio.BufferedSink;
+import okio.Okio;
+import okio.Sink;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.codec.digest.HmacAlgorithms;
+import org.apache.commons.codec.digest.HmacUtils;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.text.MessageFormat;
 import java.util.*;
 
 @Slf4j
 @Service
 public class BoyangServiceImpl implements BoyangService {
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDConf ddConf;
+
+    @Autowired
+    private DDClient_Workflow ddClient_workflow;
+
+    @Autowired
+    private DDClient_Personnel ddClient_personnel;
+
+    @Value("${dingtalk.downloadPath}")
+    private String downloadPath;
+
+    @Value("${dingtalk.operatorUnionId}")
+    private String operatorUnionId;
+
+    @Value("${dingtalk.operator}")
+    private String operator;
+
+    @Value("${dingtalk.spaceId}")
+    private String spaceId;
+
+    @Value("${dingtalk.parentDentryUuid}")
+    private String parentDentryUuid;
+
+    //测试环境
+    final static String projectId = "1000004";// 应用ID
+    final static String secret = "96Uh7CR83NkN3TA6";// 应用密钥
+    final static String businessTypeCode = "889726e889ab84fea3514748d6df565c";// 钉钉对接测试业务模板
+    final static String organizationCode = "b60a9c18b8cc4ecc80e30f36b4267a68";// 宁波博洋家纺集团有限公司
+    final static String host = "http://122.227.225.202:9011/";// 接口调用域名
+    final static String intranet_host = "http://11.0.11.62/";// 接口调用域名(内网)
+
+    @Override
+    public McR eSignSubmit(Map map) {
+        String processInstanceId = UtilMap.getString(map, "processInstanceId");
+
+        Map result = ddClient_workflow.getProcessInstanceId(ddClient.getAccessToken(), processInstanceId);
+
+        List<Map> formComponentValues = UtilMap.getList(result, "formComponentValues");
+
+        List<Map<String,String>> fileList = new ArrayList<>();
+
+        String subject = "";
+        String remark = "";
+        String url = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=ding76a1e955807327f7f5bf40eda33b7ba0#/plainapproval?procInstId="+processInstanceId;
+        List<String> sealTypeCodeList = new ArrayList<>();
+        List<Map> companyList = new ArrayList<>();
+
+
+        for (Map formComponentValue : formComponentValues) {
+            String id = UtilMap.getString(formComponentValue, "id");
+
+            switch (id){
+                case "TextField-K2AD4O5B"://文件名称
+                    subject = UtilMap.getString(formComponentValue, "value");
+
+                    //将subject里的"/"替换为","
+                    subject = subject.replaceAll("/",",");
+                    break;
+                case "DDSelectField_RIHDKAA2UK00"://文件类型
+                    String fileType = UtilMap.getString(formComponentValue, "value");
+                    break;
+                case "DDSelectField_1G1RJG8MDU9S0"://合同/协议类文件
+                    String htxywj = UtilMap.getString(formComponentValue, "value");
+                    break;
+                case "DDSelectField_28JHJ0TGPN6S"://是否需要骑缝章
+                    String isQifeng = UtilMap.getString(formComponentValue, "value");
+                    break;
+                case "TextField_1P4TDG767SRK0"://文件份数
+                    String fileQty = UtilMap.getString(formComponentValue, "value");
+                    break;
+                case "DDMultiSelectField_1L3KU3TLX6PS0"://印章所属公司
+                    String companyStr = UtilMap.getString(formComponentValue, "extValue");
+                    companyList = (List<Map>) JSONObject.parse(companyStr);
+                    break;
+                case "DDMultiSelectField_1FW3TFDTJ6V40"://印章类型
+                    String yzlxStr = UtilMap.getString(formComponentValue, "value");
+                    List<String> yzlxList = (List<String>) JSONObject.parse(yzlxStr);
+
+                    for (String yzlx : yzlxList) {
+                           switch (yzlx){
+                               case "公章":sealTypeCodeList.add("PUBLIC");break;
+                               case "合同章":sealTypeCodeList.add("CONTRACT");break;
+                               case "财务章":sealTypeCodeList.add("FINANCE");break;
+                               case "其他":sealTypeCodeList.add("COMMON");break;
+                               case "人事专用章":sealTypeCodeList.add("PERSONNEL");break;
+                               case "法人章":sealTypeCodeList.add("LEGAL-PERSON-SEAL");break;
+                               default:break;
+                           }
+                    }
+                    break;
+                case "DDSelectField_1JL8JW2HM5PC0"://用印方式
+                    String yyfs = UtilMap.getString(formComponentValue, "value");
+
+                    if (!"电子签章".equals(yyfs)){
+//                        return McR.success("非电子签章无需处理");
+                    }
+                    break;
+                case "TextField_17O0AUUY9L6K0"://签署备注
+                    remark = UtilMap.getString(formComponentValue, "value");
+                    break;
+                case "DDAttachment_1V002NDXYVKW0"://附件
+                    String attachmentListStr = UtilMap.getString(formComponentValue, "value");
+                    List<Map> attachmentList = (List<Map>) JSONObject.parse(attachmentListStr);
+                    for (Map attachment : attachmentList) {
+                        String fileId = UtilMap.getString(attachment, "fileId");
+                        String fileName = UtilMap.getString(attachment, "fileName");
+
+                        //下载钉盘文件
+                        String filePath = downloadPath + fileName;
+                        downloadDdFile(processInstanceId,fileId,filePath);
+
+                        Map fileMap = new HashMap();
+                        fileMap.put("filePath", filePath);
+                        fileMap.put("fileName", fileName);
+
+                        fileList.add(fileMap);
+                    }
+                    break;
+            }
+        }
+
+        //查询钉钉用户信息
+        String name = "";
+        String mobile = "";
+        String originatorUserId = UtilMap.getString(result, "originatorUserId");
+
+        List<Map> employeeInfos = ddClient_personnel.getEmployeeInfos(ddClient.getAccessToken(), Arrays.asList(originatorUserId), ddConf.getAgentId(), Arrays.asList("sys00-name", "sys00-mobile"));
+        Map employeeInfo = employeeInfos.get(0);
+
+        List<Map> fieldDataList = UtilMap.getList(employeeInfo, "field_data_list");
+
+        for (Map fieldData : fieldDataList) {
+            String fieldCode = UtilMap.getString(fieldData, "field_code");
+            List<Map> fieldValueList = UtilMap.getList(fieldData, "field_value_list");
+
+            switch (fieldCode){
+                case "sys00-name":
+                    name = UtilMap.getString(fieldValueList.get(0),"value");
+                    break;
+                case "sys00-mobile":
+                    mobile = UtilMap.getString(fieldValueList.get(0),"value").replace("+86-","");
+                    break;
+                default:break;
+            }
+        }
+
+        String eqbUserCode = "";
+
+        //查询钉钉用户在e签宝是否存在
+        Map body = new HashMap();
+        body.put("name", name);
+        body.put("mobile", mobile);
+        List<Map> eqbUsers = (List<Map>) eqbPost(host + "manage/v1/innerUsers/detail", body);
+        if (!eqbUsers.isEmpty()){
+            Map eqbUser = eqbUsers.get(0);
+
+            eqbUserCode = UtilMap.getString(eqbUser, "userCode");
+        }else {
+            //新增e签宝用户
+            Map eqbUser = new HashMap();
+            eqbUser.put("name", name);
+            eqbUser.put("mobile", mobile);
+            eqbUser.put("customAccountNo", mobile);
+            eqbUser.put("mainOrganizationCode", organizationCode);//默认组织账号
+
+            Map map1 = (Map) eqbPost(host + "manage/v1/innerUsers/create",Arrays.asList(eqbUser));
+
+            List<Map> successData = UtilMap.getList(map1, "successData");
+
+            eqbUserCode = UtilMap.getString(successData.get(0), "userCode");
+        }
+
+        // 创建主Map
+        Map<String, Object> requestMap = new HashMap<>();
+
+        // 1. 基本字段
+        requestMap.put("subject", subject);
+        requestMap.put("businessNo", processInstanceId);
+        requestMap.put("businessTypeCode", businessTypeCode);
+        requestMap.put("remark", remark);
+//        requestMap.put("redirectUrl", url);
+
+        // 2. manualConfig 嵌套对象
+        Map<String, Object> manualConfig = new HashMap<>();
+        manualConfig.put("startMode", 1);
+        manualConfig.put("finishMode", 0);
+
+        // signingAreaPageConfig 子对象
+        Map<String, Object> signingAreaPageConfig = new HashMap<>();
+        signingAreaPageConfig.put("showStartButton", 1);
+        manualConfig.put("signingAreaPageConfig", signingAreaPageConfig);
+
+        requestMap.put("manualConfig", manualConfig);
+
+        // 3. initiatorInfo 嵌套对象
+        Map<String, Object> initiatorInfo = new HashMap<>();
+        initiatorInfo.put("userCode", eqbUserCode);
+        /*initiatorInfo.put("customAccountNo", "");
+        initiatorInfo.put("departmentCode", "");
+        initiatorInfo.put("customDepartmentNo", "");
+        initiatorInfo.put("organizationCode", "");
+        initiatorInfo.put("customOrgNo", "");*/
+
+        requestMap.put("initiatorInfo", initiatorInfo);
+
+        // 4. signFiles 列表
+        List<Map<String, Object>> signFiles = new ArrayList<>();
+
+        for (int i = 0; i < fileList.size(); i++) {
+            String fileKey = uploadAndConvertEqbFile(fileList.get(i).get("filePath"), fileList.get(i).get("fileName"));
+
+            Map<String, Object> file = new HashMap<>();
+            file.put("fileKey", fileKey);
+            file.put("fileOrder", i + 1);
+
+            signFiles.add(file);
+        }
+
+        requestMap.put("signFiles", signFiles);
+
+        // 5. signerInfos 列表
+        List<Map<String, Object>> signerInfos = new ArrayList<>();
+
+        for (int i = 0; i < companyList.size(); i++) {
+            Map<String, Object> signer = new HashMap<>();
+            signer.put("userType", "1");
+            signer.put("userCode", "wangze");
+            signer.put("organizationCode", UtilMap.getString(companyList.get(i),"key"));
+            signer.put("signNode", 1);
+            signer.put("signMode", "0");
+            signer.put("signOrder", i + 1);
+//            signer.put("sealTypeCode", String.join(",",sealTypeCodeList));
+
+            signerInfos.add(signer);
+        }
+
+        requestMap.put("signerInfos", signerInfos);
+
+        // 打印结果(可选)
+        System.out.println(requestMap);
+
+        //使用文件发起签署(一步发起签署)
+        Map data = (Map) eqbPost(host + "/esign-signs/v1/signFlow/createAndStart", requestMap);
+
+        //签署区设置地址回写评论
+        Map manualConfig1 = UtilMap.getMap(data, "manualConfig");
+
+        Map signingAreaPageInfos = UtilMap.getMap(manualConfig1, "signingAreaPageInfos");
+
+        String signingAreaPageUrl = UtilMap.getString(signingAreaPageInfos, "signingAreaPageUrl");
+
+        String newSigningAreaPageUrl = signingAreaPageUrl.replace(intranet_host,host);
+
+        comment(processInstanceId,originatorUserId,"签署区设置地址:"+newSigningAreaPageUrl,null);
+
+        return McR.success();
+    }
+
+    @Async
+    @Override
+    public void signed(String processInstanceId,String signFlowId) {
+        try {
+            Map result = ddClient_workflow.getProcessInstanceId(ddClient.getAccessToken(), processInstanceId);
+            String originatorUserId = UtilMap.getString(result, "originatorUserId");
+
+            // 获取签署流程进度详情
+            Map data = (Map) eqbGet(host + "/esign-signs/v1/signFlow/signDetail?signFlowId=" + signFlowId);
+            List<Map> signFiles = UtilMap.getList(data, "signFiles");
+
+            for (Map signFile : signFiles) {
+                String fileKey = UtilMap.getString(signFile, "fileKey");
+                String signDownloadOuterUrl = UtilMap.getString(signFile, "signDownloadOuterUrl");
+                String fileName = getEqbFileName(fileKey);
+
+                int suffixIndex = fileName.lastIndexOf(".");
+
+                String signedFileName = fileName.substring(0, suffixIndex) + "(已签署)" + fileName.substring(suffixIndex);
+
+                //todo 1、评论签署后附件下载链接
+//                    comment(processInstanceId,userId,"接口测试 "+ fileName + "已签署,签署文件下载地址:" + signDownloadOuterUrl,null);
+
+
+
+                //todo 2、评论签署后附件
+                //todo 签署后文件下载到本地
+                downloadFile(signDownloadOuterUrl,downloadPath + signedFileName);
+                //todo 签署后文件上传到钉盘
+                Map dentry = uploadDdFile(spaceId, parentDentryUuid, downloadPath + signedFileName, operatorUnionId);
+                //todo 审批单添加评论
+                comment(processInstanceId,originatorUserId,"接口测试 "+ fileName + "已签署",Arrays.asList(dentry));
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public McR getOrganization(String name) {
+        if (Strings.isBlank(name)){
+            return McR.success(new ArrayList<>());
+        }
+
+        Map body = new HashMap();
+        body.put("name",name);
+        List<Map> data = (List<Map>) eqbPost(host + "manage/v1/innerOrganizations/detail",body);
+
+        List<Map> options = new ArrayList<>();
+
+        for (Map datum : data) {
+            String organizationType = UtilMap.getString(datum, "organizationType");
+
+            if ("COMPANY".equals(organizationType)){
+                String organizationName = UtilMap.getString(datum, "name");
+                String organizationCode = UtilMap.getString(datum, "organizationCode");
+
+                Map option = new HashMap();
+                option.put("label",organizationName);
+                option.put("value",organizationCode);
+
+                options.add(option);
+            }
+        }
+
+        return McR.success(options);
+    }
+
+    @Override
+    public void start(String processInstanceId, String signPreUrl) {
+        try {
+            Map result = ddClient_workflow.getProcessInstanceId(ddClient.getAccessToken(), processInstanceId);
+            String originatorUserId = UtilMap.getString(result, "originatorUserId");
+
+            //审批单添加评论
+            String signPreUrl2 = signPreUrl.replace(intranet_host, host);
+            comment(processInstanceId,originatorUserId,"签署预览地址:" + signPreUrl2,null);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    //下载钉钉OA审批单附件
+    private void downloadDdFile(String processInstanceId,String fileId,String downloadPath){
+        try {
+            Map body = new HashMap();
+            body.put("processInstanceId",processInstanceId);
+            body.put("fileId",fileId);
+
+            DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://api.dingtalk.com/v1.0/workflow/processInstances/spaces/files/urls/download", ddClient.initTokenHeader(), null, body, DDR_New.class);
+
+            //2、执行下载
+            Map result = (Map) ddrNew.getResult();
+
+            String downloadUri = UtilMap.getString(result, "downloadUri");
+
+            downloadFile(downloadUri,downloadPath);
+
+        }catch (Exception e){
+            throw new RuntimeException(e);
+        }
+    }
+
+    //文件下载到本地
+    private void downloadFile(String downloadUri,String downloadPath){
+        try {
+            URL url = new URL(downloadUri);
+
+            HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
+            int responseCode = httpConn.getResponseCode();
+
+            // 检查HTTP响应代码是否为200
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                InputStream inputStream = httpConn.getInputStream();
+                FileOutputStream outputStream = new FileOutputStream(downloadPath);
+
+                byte[] buffer = new byte[4096];
+                int bytesRead = -1;
+
+                while ((bytesRead = inputStream.read(buffer)) != -1) {
+                    outputStream.write(buffer, 0, bytesRead);
+                }
+
+                outputStream.close();
+                inputStream.close();
+            } else {
+                System.out.println("无法下载文件。HTTP响应代码: " + responseCode);
+            }
+            httpConn.disconnect();
+        }catch (Exception e){
+            throw new RuntimeException(e);
+        }
+    }
+
+    //上传钉盘附件
+    private Map uploadDdFile(String spaceId,String parentDentryUuid, String filePath,String unionId) {
+        //获取当前时间戳
+        long beginTimestamp = System.currentTimeMillis();
+        System.out.println("开始上传附件:" + DateUtil.format(new Date(beginTimestamp), "yyyy-MM-dd HH:mm:ss"));
+
+        //文件
+        File file = new File(filePath);
+
+        //获取文件上传信息
+        Map param = new HashMap();
+        param.put("unionId",unionId);
+        Map body = new HashMap();
+        body.put("protocol","HEADER_SIGNATURE");
+        body.put("multipart",false);
+
+        DDR_New ddr = (DDR_New) UtilHttp.doPost("https://api.dingtalk.com/v1.0/storage/spaces/" + spaceId + "/files/uploadInfos/query", ddClient.initTokenHeader(), param, body, DDR_New.class);
+        String uploadKey = ddr.getUploadKey();
+        Map headerSignatureInfo = ddr.getHeaderSignatureInfo();
+        Map<String,String> headers = (Map<String,String>) headerSignatureInfo.get("headers");
+        List<String> resourceUrls = (List<String>) headerSignatureInfo.get("resourceUrls");
+        String resourceUrl = resourceUrls.get(0);
+
+        Map dentry = new HashMap();
+        //使用OSS的header加签方式上传文件
+        try {
+            URL url = new URL(resourceUrl);
+            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
+            if (headers != null) {
+                for (Map.Entry<String, String> entry : headers.entrySet()) {
+                    connection.setRequestProperty(entry.getKey(), entry.getValue());
+                }
+            }
+            connection.setDoOutput(true);
+            connection.setRequestMethod("PUT");
+            connection.setUseCaches(false);
+            connection.setReadTimeout(10000);
+            connection.setConnectTimeout(10000);
+            connection.connect();
+            OutputStream out = connection.getOutputStream();
+            InputStream is = new FileInputStream(file);
+            byte[] b =new byte[1024];
+            int temp;
+            while ((temp=is.read(b))!=-1){
+                out.write(b,0,temp);
+            }
+            out.flush();
+            out.close();
+            int responseCode = connection.getResponseCode();
+            connection.disconnect();
+            if (responseCode == 200) {
+                System.out.println("上传成功");
+            } else {
+                System.out.println("上传失败");
+            }
+            //提交文件
+            Map body2 = new HashMap();
+            Map option = new HashMap();
+            option.put("conflictStrategy","OVERWRITE");
+            body2.put("uploadKey",uploadKey);
+            body2.put("name",file.getName());
+            body2.put("option",option);
+            DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://api.dingtalk.com/v2.0/storage/spaces/files/"+parentDentryUuid+"/commit", ddClient.initTokenHeader(), param, body2, DDR_New.class);
+            dentry = ddrNew.getDentry();
+
+        }catch (IOException e){
+            log.info("上传文件异常:{}",e);
+        }
+
+        long endTimestamp = System.currentTimeMillis();
+        System.out.println("上传文件结束:" + DateUtil.format(new Date(endTimestamp), "yyyy-MM-dd HH:mm:ss"));
+        System.out.println("上传文件耗时:" + (endTimestamp - beginTimestamp)/1000.0 + "s");
+        return dentry;
+    }
+
+    //钉钉审批单添加评论
+    private void comment(String procInstId,String userId,String text,List<Map> dentries){
+        Map body = new HashMap<>();
+        Map fileMap = new HashMap<>();
+
+        if (Objects.nonNull(dentries)){
+            List<Map> attachments= new ArrayList<>();
+            for (Map dentry : dentries) {
+                Map attachment = new HashMap<>();
+
+                attachment.put("spaceId",dentry.get("spaceId").toString());
+                attachment.put("fileSize",dentry.get("size").toString());
+                attachment.put("fileId",dentry.get("id").toString());
+                attachment.put("fileName",dentry.get("name").toString());
+                attachment.put("fileType",dentry.get("type").toString());
+
+                attachments.add(attachment);
+            }
+            fileMap.put("photos",null);
+            fileMap.put("attachments",attachments);
+        }
+
+        body.put("processInstanceId",procInstId);
+        body.put("text",text);
+        body.put("commentUserId",userId);
+        body.put("file",fileMap);
+
+        UtilHttp.doPost("https://api.dingtalk.com/v1.0/workflow/processInstances/comments",ddClient.initTokenHeader(),null,body);
+    }
+
+    //e签宝-获取文件名称
+    private String getEqbFileName(String fileKey){
+        Map data = (Map) eqbGet(host + "/file/v1/getFileInfo?fileKey="+fileKey);
+
+        return UtilMap.getString(data,"filename");
+    }
+
+    //e签宝-上传附件并转换为pdf
+    public String uploadAndConvertEqbFile(String filePath,String fileName) {
+        try {
+            //获得文件后缀名
+            String suffix = fileName.substring(fileName.lastIndexOf(".")+1);
+
+            //1、生成上传文件链接
+            JSONObject reqBodyObj = new JSONObject(true);
+            reqBodyObj.put("requestID", UUID.randomUUID().toString().replaceAll("-",""));//请求ID,长度:32位,
+            reqBodyObj.put("type", 1);//获取上传链接类型  0为同步上传,适用于100M以内的pdf文件。 1为异步上传,适用于大于100M的pdf文件,以及其他类型的文件:ofd、doc、docx、xls、xlsx、jpg、jpeg、png、zip、rar。
+
+            Map data = (Map) eqbPost(host + "file/v1/generateUploadUrl", reqBodyObj);
+
+            String url = UtilMap.getString(data, "url");
+
+            url = url.replace("http://11.0.11.62:8199/",host);
+
+            //2、上传文件到指定链接
+            Map<String,Object> body = new HashMap<>();
+            body.put("file",fileName);
+
+            Map data2 = eqbUpload(url, body, filePath, fileName);
+            String fileKey = UtilMap.getString(data2, "fileKey");
+
+            //3、判断是否为pdf
+            if(!"pdf".equals(suffix)){
+                //4、文档格式转换
+                Map body2 = new HashMap();
+                body2.put("fileKey", fileKey);
+                body2.put("targetType", "pdf");
+
+                Map map = (Map) eqbPost(host + "file/v1/fileConvert", body2);
+
+                fileKey = UtilMap.getString(map,"convertedFileKey");
+            }
+
+            System.out.println("fileKey: " + fileKey);
+
+            return fileKey;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    //e签宝-get请求
+    private Object eqbGet(String url){
+        try {
+            // 构建待签名字符串
+            String accept = "*/*";
+            String contentType = "application/json; charset=UTF-8";
+
+            // 构建参与请求签名计算的明文
+            int index = url.indexOf("?");
+            String plaintext = index == -1 ? "" : url.substring(index + 1);
+            // 计算请求签名值
+            String reqSignature = sign(plaintext, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", accept);
+            header.put("Content-Type", contentType);
+
+            // 发送GET请求
+            String resultStr = HTTPHelper.sendGet(url, header, "UTF-8");
+            Map result = (Map) JSONObject.parse(resultStr);
+
+            isSuccess(result);
+
+            Object data = result.get("data");
+
+            return data;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    //e签宝-post请求(application/json)
+    private Object eqbPost(String url,Object body){
+        try {
+            // 请求Body体数据
+            String reqBodyData = JSONObject.toJSONString(body);
+
+            // 计算请求签名值
+            String reqSignature = sign(reqBodyData, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+
+            // 构建待签名字符串
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", "*/*");
+            header.put("Content-Type", "application/json; charset=UTF-8");
+
+            String resultStr = HTTPHelper.sendPOST(url, reqBodyData, header, "UTF-8");
+
+            Map result = (Map) JSONObject.parse(resultStr);
+
+            isSuccess(result);
+
+            Object data = result.get("data");
+
+            return data;
+        }catch (Exception e){
+            throw new RuntimeException(e);
+        }
+    }
+
+    //e签宝-附件上传
+    private Map eqbUpload(String url,Map body,String filePath,String fileName){
+        try {
+            // 构建请求头
+            String reqSignature = sign(JSONObject.toJSONString(body), secret);
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            // 构建待签名字符串
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", "*/*");
+
+            String resultStr = HTTPHelper.uploadFile(url,  "file", filePath, body,  header, "UTF-8");
+
+            Map result = (Map) JSONObject.parse(resultStr);
+
+            isSuccess(result);
+
+            Map data = UtilMap.getMap(result, "data");
+
+            return data;
+        }catch (Exception e){
+            throw new RuntimeException();
+        }
+    }
+
+
+    /**
+     * hmac-sha256签名
+     *
+     * @param content 代签名的内容
+     * @param key     签名的key
+     * @return 签名
+     */
+    private String sign(String content, String key) {
+        byte[] bytes = new HmacUtils(HmacAlgorithms.HMAC_SHA_256, key).hmac(content);
+        return new String(Hex.encodeHex(bytes));
+    }
+
+    //判断e签宝接口返回是否成功
+    private void isSuccess(Map result){
+        int code = UtilMap.getInt(result, "code");
+
+        String message = UtilMap.getString(result, "message");
+
+        if (200 != code || !"成功".equals(message)){
+            throw new RuntimeException(message);
+        }
+    }
 
 }

+ 9 - 3
mjava-boyang/src/main/resources/application-dev.yml

@@ -13,12 +13,18 @@ logging:
 
 # dingtalk
 dingtalk:
-  agentId:
-  appKey:
-  appSecret:
+  agentId: 4111300995
+  appKey: dingt4kem6twzlqehm58
+  appSecret: ZgE_XOfccVlSOcbw3cN0Ad_dJFqBB_PfPPmqJzGTgKXPu5tsh17KibxG7WEB6_hc
   corpId:
   aesKey:
   token:
+  operator: "065965353428672133" #潘麒卿
+  operatorUnionId: AfZv5MOJ80W2STOhUbbOcAiEiE #潘麒卿
+  downloadPath: d:\\
+  spaceId: 27829762189 #钉盘-e签宝
+  parentDentryUuid: y20BglGWO23pGpLOsaALnnz98A7depqY #钉盘-e签宝-签署后文件
+
 
 aliwork:
   appType:

+ 9 - 3
mjava-boyang/src/main/resources/application-prod.yml

@@ -13,12 +13,18 @@ logging:
 
 # dingtalk
 dingtalk:
-  agentId:
-  appKey:
-  appSecret:
+  agentId: 4111300995
+  appKey: dingt4kem6twzlqehm58
+  appSecret: ZgE_XOfccVlSOcbw3cN0Ad_dJFqBB_PfPPmqJzGTgKXPu5tsh17KibxG7WEB6_hc
   corpId:
   aesKey:
   token:
+  operator: "065965353428672133" #潘麒卿
+  operatorUnionId: AfZv5MOJ80W2STOhUbbOcAiEiE #潘麒卿
+  downloadPath: /home/server/boyang/file/
+  spaceId: 27829762189 #钉盘-e签宝
+  parentDentryUuid: y20BglGWO23pGpLOsaALnnz98A7depqY #钉盘-e签宝-签署后文件
+
 
 aliwork:
   appType:

+ 92 - 0
mjava-boyang/src/test/java/com/malk/boyang/DdTest.java

@@ -0,0 +1,92 @@
+package com.malk.boyang;
+
+import com.malk.boyang.service.BoyangService;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import okio.BufferedSink;
+import okio.Okio;
+import okio.Sink;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class DdTest {
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private BoyangService boyangService;
+
+    @Test
+    public void test(){
+        try {
+            String downloadPath = "d:\\iwElAqNqcGcDBgTRBOEF0QNABrB2pIOfLsLZggjsjitQfgUABwAIAAmqcGF5SW52b2ljZQoACwA.jpg";
+
+            /*String processInstanceId = "R9N-KN3tTOyNDTIWbxI7LA01161763691347";
+            String fileId = "201425340171";
+
+            Map body = new HashMap();
+            body.put("processInstanceId",processInstanceId);
+            body.put("fileId",fileId);
+
+            DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://api.dingtalk.com/v1.0/workflow/processInstances/spaces/files/urls/download", ddClient.initTokenHeader(), null, body, DDR_New.class);
+
+            //2、执行下载
+            Map result = (Map) ddrNew.getResult();*/
+
+//            String downloadUri = UtilMap.getString(result, "downloadUri");
+            String downloadUri = "https://down-cdn.dingtalk.com/ddmedia/iwElAqNqcGcDBgTRBOEF0QNABrB2pIOfLsLZggjsjitQfgUABwAIAAmqcGF5SW52b2ljZQoACwA.jpg";
+
+            URL url = new URL(downloadUri);
+            HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
+            int responseCode = httpConn.getResponseCode();
+
+            // 检查HTTP响应代码是否为200
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                InputStream inputStream = httpConn.getInputStream();
+                FileOutputStream outputStream = new FileOutputStream(downloadPath);
+
+                byte[] buffer = new byte[4096];
+                int bytesRead = -1;
+
+                while ((bytesRead = inputStream.read(buffer)) != -1) {
+                    outputStream.write(buffer, 0, bytesRead);
+                }
+
+                outputStream.close();
+                inputStream.close();
+            } else {
+                System.out.println("无法下载文件。HTTP响应代码: " + responseCode);
+            }
+            httpConn.disconnect();
+        }catch (Exception e){
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    @Test
+    public void test2(){
+        boyangService.eSignSubmit(UtilMap.map("processInstanceId","9L_PKi71S8W3kL_nftFpXw01161764152519"));
+    }
+}
+

+ 589 - 0
mjava-boyang/src/test/java/com/malk/boyang/EqbTest.java

@@ -0,0 +1,589 @@
+package com.malk.boyang;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.MessageFormat;
+import java.util.*;
+
+import com.malk.boyang.service.BoyangService;
+import com.malk.boyang.utils.HTTPHelper;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.codec.digest.HmacAlgorithms;
+import org.apache.commons.codec.digest.HmacUtils;
+import org.json.JSONArray;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class EqbTest {
+    @Autowired
+    private BoyangService boyangService;
+
+
+
+    //测试环境
+    // 应用ID
+    final static String projectId = "1000004";
+    // 应用密钥
+    final static String secret = "96Uh7CR83NkN3TA6";
+    // 接口调用域名
+    final static String host = "http://122.227.225.202:9011/";
+
+    //===============================================================================================
+
+    //正式环境
+    /*// 应用ID
+    final static String projectId = "1000003";
+    // 应用密钥
+    final static String secret = "5V6xsY3q8JWZ9Qik";
+    // 接口调用域名
+    final static String host = "https://dzqz.beyond-it-service.com/";*/
+
+
+    /*public static void main(String[] args) {
+        // 请求签名鉴权-POST请求
+        testPost(projectId, secret, host);
+
+        // 请求签名鉴权-GET请求
+//        testGet(projectId, secret, host);
+
+        // 请求签名鉴权-POST请求-文件上传
+//        testUpload(projectId, secret, host);
+
+    }*/
+
+    @Test
+    /***
+     * 请求签名鉴权-POST请求
+     *
+     * @param projectId 项目Id
+     * @param secret 项目密钥
+     * @param host 网关地址
+     */
+    public void testPost() {
+        // 查询查询内部组织详情地址
+        String getInnerOrganizationsDetailApi = "/manage/v1/innerOrganizations/detail";
+        // 查询查询内部组织详情请求地址
+        String getInnerOrganizationsDetailApiUrl = host + getInnerOrganizationsDetailApi;
+
+        try {
+            // 构建请求Body体
+            JSONObject reqBodyObj = new JSONObject(true);
+            reqBodyObj.put("organizationCode", "");
+            reqBodyObj.put("customOrgNo", "");
+            reqBodyObj.put("name", "博洋");
+
+            // 请求Body体数据
+            String reqBodyData = reqBodyObj.toString();
+            // 对请求Body体内的数据计算ContentMD5
+
+            // 构建参与请求签名计算的明文
+            String plaintext = reqBodyData;
+            // 计算请求签名值
+            String reqSignature = sign(plaintext, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            // 构建待签名字符串
+            String accept = "*/*";
+            String contentType = "application/json; charset=UTF-8";
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", accept);
+            header.put("Content-Type", contentType);
+
+            // 发送POST请求
+            String result = HTTPHelper.sendPOST(getInnerOrganizationsDetailApiUrl, reqBodyData, header, "UTF-8");
+            JSONObject resultObj = JSONObject.parseObject(result);
+            System.out.println("请求返回信息: " + resultObj.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
+            System.out.println(msg);
+        }
+    }
+
+    @Test
+    /***
+     * 使用文件发起签署(一步发起签署)
+     *
+     * @param projectId 项目Id
+     * @param secret 项目密钥
+     * @param host 网关地址
+     */
+    public void testPost2() {
+
+        String api = "/esign-signs/v1/signFlow/createAndStart";
+
+        String getInnerOrganizationsDetailApiUrl = host + api;
+
+        try {
+            // 构建请求Body体
+            JSONObject reqBodyObj = new JSONObject(true);
+            // 添加基本字段
+            reqBodyObj.put("subject", "测试api直接发起签署");
+            reqBodyObj.put("businessNo", "R9N-KN3tTOyNDTIWbxI7LA01161763691347");
+            reqBodyObj.put("businessTypeCode", "889726e889ab84fea3514748d6df565c");
+            reqBodyObj.put("remark", "测试");
+
+            // 构建initiatorInfo对象
+            JSONObject initiatorInfo = new JSONObject(true);
+            initiatorInfo.put("userCode", "wanghh");
+            initiatorInfo.put("departmentCode", "b60a9c18b8cc4ecc80e30f36b4267a68");
+            initiatorInfo.put("organizationCode", "b60a9c18b8cc4ecc80e30f36b4267a68");
+            reqBodyObj.put("initiatorInfo", initiatorInfo);
+
+            // 添加其他字段
+            reqBodyObj.put("redirectUrl", "https://www.baidu.com");
+            reqBodyObj.put("signNotifyUrl", "http://3eb3815c.r23.cpolar.top/boyang/callback");
+
+            // 构建signFiles数组
+            JSONArray signFiles = new JSONArray();
+            JSONObject signFile = new JSONObject(true);
+            signFile.put("fileKey", "$832b183d-b3ac-4587-9488-553b82e11eec$2419219229");
+            signFile.put("fileOrder", 1);
+            signFiles.put(signFile);
+            reqBodyObj.put("signFiles", signFiles);
+
+            // 构建signerInfos数组
+            JSONArray signerInfos = new JSONArray();
+            JSONObject signerInfo = new JSONObject(true);
+            signerInfo.put("userType", "1");
+            signerInfo.put("userCode", "wanghh");
+            signerInfo.put("departmentCode", "b60a9c18b8cc4ecc80e30f36b4267a68");
+            signerInfo.put("organizationCode", "b60a9c18b8cc4ecc80e30f36b4267a68");
+            signerInfo.put("signNode", 1);
+            signerInfo.put("signMode", "0");
+            signerInfo.put("signOrder", 1);
+            signerInfos.put(signerInfo);
+            reqBodyObj.put("signerInfos", signerInfos);
+
+
+            // 请求Body体数据
+            String reqBodyData = reqBodyObj.toString();
+            // 对请求Body体内的数据计算ContentMD5
+
+            // 构建参与请求签名计算的明文
+            String plaintext = reqBodyData;
+            // 计算请求签名值
+            String reqSignature = sign(plaintext, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            // 构建待签名字符串
+            String accept = "*/*";
+            String contentType = "application/json; charset=UTF-8";
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", accept);
+            header.put("Content-Type", contentType);
+
+            // 发送POST请求
+            String result = HTTPHelper.sendPOST(getInnerOrganizationsDetailApiUrl, reqBodyData, header, "UTF-8");
+            JSONObject resultObj = JSONObject.parseObject(result);
+            System.out.println("请求返回信息: " + resultObj.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
+            System.out.println(msg);
+        }
+    }
+
+    /***
+     * 请求签名鉴权-GET请求
+     *
+     * @param projectId 项目id
+     * @param secret 项目密钥
+     * @param host 网关地址
+     */
+    public static void testGet(String projectId, String secret, String host) {
+        // 获取签署地址列表API地址
+        String getSignFlowApi = "/esign-signs/v1/signFlow/signUrls?signFlowId=" + "24210df8420968c1e785a3b7582295b6";
+        // 获取签署地址列表接口请求地址
+        String hostGetSignFlowApi = host + getSignFlowApi;
+
+        try {
+            // 构建待签名字符串
+            String accept = "*/*";
+            String contentType = "application/json; charset=UTF-8";
+
+            // 构建参与请求签名计算的明文
+            int index = getSignFlowApi.indexOf("?");
+            String plaintext = index == -1 ? "" : getSignFlowApi.substring(index + 1);
+            // 计算请求签名值
+            String reqSignature = sign(plaintext, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", accept);
+            header.put("Content-Type", contentType);
+
+            // 发送GET请求
+            String result = HTTPHelper.sendGet(hostGetSignFlowApi, header, "UTF-8");
+            JSONObject resultObj = JSONObject.parseObject(result);
+            System.out.println("请求返回信息: " + resultObj.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
+            System.out.println(msg);
+        }
+    }
+
+    /***
+     * 查询电子签署业务模板详情
+     */
+    @Test
+    public void testGet2() {
+
+        String api = "/esign-docs/v1/bizTemplates/889726e889ab84fea3514748d6df565c";
+
+        String hostGetSignFlowApi = host + api;
+
+        try {
+            // 构建待签名字符串
+            String accept = "*/*";
+            String contentType = "application/json; charset=UTF-8";
+
+            // 构建参与请求签名计算的明文
+            int index = api.indexOf("?");
+            String plaintext = index == -1 ? "" : api.substring(index + 1);
+            // 计算请求签名值
+            String reqSignature = sign(plaintext, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", accept);
+            header.put("Content-Type", contentType);
+
+            // 发送GET请求
+            String result = HTTPHelper.sendGet(hostGetSignFlowApi, header, "UTF-8");
+            JSONObject resultObj = JSONObject.parseObject(result);
+            System.out.println("请求返回信息: " + resultObj.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
+            System.out.println(msg);
+        }
+    }
+
+
+    @Test
+    public void testMembersList() {
+        // 获取签署地址列表API地址
+        String getSignFlowApi = "/manage/v1/innerOrganizations/members/list";
+        // 获取签署地址列表接口请求地址
+        String hostGetSignFlowApi = host + getSignFlowApi;
+
+        try {
+            // 构建请求Body体
+            JSONObject reqBodyObj = new JSONObject(true);
+            reqBodyObj.put("queryScope", "0");
+            reqBodyObj.put("organizationCode", "b60a9c18b8cc4ecc80e30f36b4267a68");
+            reqBodyObj.put("pageNo", 1);
+            reqBodyObj.put("pageSize", "50");
+
+            // 请求Body体数据
+            String reqBodyData = reqBodyObj.toString();
+            // 对请求Body体内的数据计算ContentMD5
+
+            // 构建参与请求签名计算的明文
+            String plaintext = reqBodyData;
+            // 计算请求签名值
+            String reqSignature = sign(plaintext, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            // 构建待签名字符串
+            String accept = "*/*";
+            String contentType = "application/json; charset=UTF-8";
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", accept);
+            header.put("Content-Type", contentType);
+
+            // 发送GET请求
+            String result = HTTPHelper.sendPOST(hostGetSignFlowApi,reqBodyData, header, "UTF-8");
+            JSONObject resultObj = JSONObject.parseObject(result);
+            System.out.println("请求返回信息: " + resultObj.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
+            System.out.println(msg);
+        }
+    }
+
+    @Test
+    public void test4(){
+        boyangService.signed("","");
+    }
+
+    @Test
+    public void uploadEqbFile(){
+        String fileName = "2.png";
+        String filePath = "C:\\Users\\EDY\\Pictures\\2.png";
+        try {
+            //获得文件后缀名
+            String suffix = fileName.substring(fileName.lastIndexOf(".")+1);
+
+            //生成上传文件链接
+            String api = host + "file/v1/generateUploadUrl";
+
+            JSONObject reqBodyObj = new JSONObject(true);
+            reqBodyObj.put("requestID", UUID.randomUUID().toString().replaceAll("-",""));//请求ID,长度:32位,
+            reqBodyObj.put("type", 1);//获取上传链接类型  0为同步上传,适用于100M以内的pdf文件。 1为异步上传,适用于大于100M的pdf文件,以及其他类型的文件:ofd、doc、docx、xls、xlsx、jpg、jpeg、png、zip、rar。
+
+            Map data = eqbPost(api, reqBodyObj);
+
+            String url = UtilMap.getString(data, "url");
+            url = url.replace("http://11.0.11.62:8199/",host);
+
+            // 上传文件到指定链接
+            Map<String,Object> body = new HashMap<>();
+            body.put("file",fileName);
+
+            // 构建请求头
+            String reqSignature2 = sign(JSONObject.toJSONString(body), secret);
+            LinkedHashMap<String, String> header2 = new LinkedHashMap<>();
+            // 构建待签名字符串
+            header2.put("X-timevale-project-id", projectId);
+            header2.put("X-timevale-signature", reqSignature2);
+            header2.put("Accept", "*/*");
+
+            String result2 = HTTPHelper.uploadFile(url,  "file", filePath, body,  header2, "UTF-8");
+            Map parse = (Map) JSONObject.parse(result2);
+
+            Map data1 = UtilMap.getMap(parse, "data");
+            String fileKey = UtilMap.getString(data1, "fileKey");
+
+
+            //若文件不是pdf则需转换
+            if(!"pdf".equals(suffix)){
+                //文档格式转换
+                Map body2 = new HashMap();
+                body2.put("fileKey", fileKey);
+                body2.put("targetType", "pdf");
+
+                Map map = eqbPost(host + "file/v1/fileConvert", body2);
+
+                fileKey = UtilMap.getString(map,"convertedFileKey");
+            }
+
+            System.out.println("fileKey: " + fileKey);
+        } catch (Exception e) {
+            e.printStackTrace();
+            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
+            System.out.println(msg);
+        }
+    }
+
+    private Map eqbPost(String url,Map body){
+        try {
+            // 请求Body体数据
+            String reqBodyData = JSONObject.toJSONString(body);
+
+            // 计算请求签名值
+            String reqSignature = sign(reqBodyData, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+
+            // 构建待签名字符串
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", "*/*");
+            header.put("Content-Type", "application/json; charset=UTF-8");
+
+            String result = HTTPHelper.sendPOST(url, reqBodyData, header, "UTF-8");
+
+            Map resultObj = (Map) JSONObject.parse(result);
+
+            Map data = UtilMap.getMap(resultObj, "data");
+
+            return data;
+        }catch (Exception e){
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    @Test
+    public void test5(){
+        // 构建请求Body体
+        JSONObject reqBodyObj = new JSONObject(true);
+        reqBodyObj.put("hash", "0748da018502f6331f10d64e645bc0b8f20d44cc7d041a9752ce586149b843d7");
+        reqBodyObj.put("filePwd", "");
+
+        // 请求Body体数据
+        String reqBodyData = reqBodyObj.toString();
+        // 对请求Body体内的数据计算ContentMD5
+
+        // 构建参与请求签名计算的明文
+        String plaintext = reqBodyData;
+        // 计算请求签名值
+        String reqSignature = sign(plaintext, secret);
+
+        System.out.println(reqSignature);
+
+        // 构建请求头
+        LinkedHashMap<String, String> header = new LinkedHashMap<>();
+        // 构建待签名字符串
+        String accept = "*/*";
+        String contentType = "application/json; charset=UTF-8";
+        header.put("X-timevale-project-id", projectId);
+        header.put("X-timevale-signature", reqSignature);
+        header.put("Accept", accept);
+        header.put("Content-Type", contentType);
+    }
+
+    /**
+     * hmac-sha256签名
+     *
+     * @param content 代签名的内容
+     * @param key     签名的key
+     * @return 签名
+     */
+    public static String sign(String content, String key) {
+        byte[] bytes = new HmacUtils(HmacAlgorithms.HMAC_SHA_256, key).hmac(content);
+        return new String(Hex.encodeHex(bytes));
+    }
+
+    /**
+     * 计算文件的SHA-256哈希值
+     */
+    public static String calculateSha256(File file) throws Exception {
+        byte[] fileBytes = new byte[(int) file.length()];
+        MessageDigest digest = MessageDigest.getInstance("SHA-256");
+        byte[] hashBytes = digest.digest(fileBytes);
+
+        // 转换为十六进制字符串
+        StringBuilder hexString = new StringBuilder();
+        for (byte b : hashBytes) {
+            String hex = Integer.toHexString(0xff & b);
+            if (hex.length() == 1) hexString.append('0');
+            hexString.append(hex);
+        }
+        return hexString.toString();
+    }
+
+
+    /***
+     * 请求签名鉴权-POST请求
+     *
+     */
+    @Test
+    public void testUpload() {
+        String filePath = "d:\\母婴店.pdf";
+
+        // 文件上传接口
+        String uploadApi = "/file/v1/pdf/uploadAndSpilt";
+//        String uploadApi = "/file/v1/uploadWithAuth";
+        // 文件上传接口请求地址
+        String uploadApiUrl = host + uploadApi;
+
+        try {
+            // 构建请求Body体
+            JSONObject reqBodyObj = new JSONObject(true);
+            reqBodyObj.put("file", "母婴店.pdf");
+
+//            reqBodyObj.put("hash", calculateSha256(new File(filePath)));
+//            reqBodyObj.put("hash", "17070b46957568b378c4c8970beceaf2d50b590ec13852a91f2eac0031bcdf96");
+            reqBodyObj.put("filePwd", "");
+
+            // 请求Body体数据
+            String reqBodyData = reqBodyObj.toString();
+
+            // 构建参与请求签名计算的明文
+            String plaintext = reqBodyData;
+            // 计算请求签名值
+            String reqSignature = sign(plaintext, secret);
+
+//            reqBodyObj.put("file","床上用品店.pdf");
+
+            // 构建文件
+            String fileFieldName = "file";
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+            // 构建待签名字符串
+            String accept = "*/*";
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", accept);
+            // 发送POST请求
+            String result = HTTPHelper.uploadFile(uploadApiUrl,  fileFieldName, filePath, reqBodyObj,  header, "UTF-8");
+            JSONObject resultObj = JSONObject.parseObject(result);
+            System.out.println("请求返回信息: " + resultObj.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
+            System.out.println(msg);
+        }
+    }
+
+    @Test
+    public void test11(){
+        Map eqbUser = new HashMap();
+        eqbUser.put("name", "张三");
+        eqbUser.put("mobile", "15900010001");
+        eqbUser.put("customAccountNo", "15900010001");
+        eqbUser.put("mainOrganizationCode", "b60a9c18b8cc4ecc80e30f36b4267a68");//默认组织账号
+
+        Map map = (Map) eqbPost2(host + "/manage/v1/innerUsers/create", Arrays.asList(eqbUser));
+
+        System.out.println(map);
+    }
+
+
+    //e签宝-post请求(application/json)
+    private Object eqbPost2(String url,Object body){
+        try {
+            // 请求Body体数据
+            String reqBodyData = JSONObject.toJSONString(body);
+
+            // 计算请求签名值
+            String reqSignature = sign(reqBodyData, secret);
+
+            // 构建请求头
+            LinkedHashMap<String, String> header = new LinkedHashMap<>();
+
+            // 构建待签名字符串
+            header.put("X-timevale-project-id", projectId);
+            header.put("X-timevale-signature", reqSignature);
+            header.put("Accept", "*/*");
+            header.put("Content-Type", "application/json; charset=UTF-8");
+
+            String resultStr = HTTPHelper.sendPOST(url, reqBodyData, header, "UTF-8");
+
+            Map result = (Map) JSONObject.parse(resultStr);
+
+
+            Object data = result.get("data");
+
+            return data;
+        }catch (Exception e){
+            throw new RuntimeException(e);
+        }
+    }
+
+
+}

+ 0 - 184
mjava-boyang/src/test/java/com/malk/boyang/Test.java

@@ -1,184 +0,0 @@
-package com.malk.boyang;
-
-import com.alibaba.fastjson.JSONObject;
-import java.text.MessageFormat;
-import java.util.LinkedHashMap;
-
-import com.malk.boyang.utils.HTTPHelper;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.codec.digest.HmacAlgorithms;
-import org.apache.commons.codec.digest.HmacUtils;
-
-public class Test {
-    public static void main(String[] args) {
-        // 应用ID
-        String projectId = "1000004";
-        // 应用密钥
-        String secret = "96Uh7CR83NkN3TA6";
-        // 接口调用域名
-        String host = "http://122.227.225.202:9011/";
-
-        // 请求签名鉴权-POST请求
-        testPost(projectId, secret, host);
-
-        // 请求签名鉴权-GET请求
-//        testGet(projectId, secret, host);
-
-        // 请求签名鉴权-POST请求-文件上传
-//        testUpload(projectId, secret, host);
-    }
-
-    /***
-     * 请求签名鉴权-POST请求
-     *
-     * @param projectId 项目Id
-     * @param secret 项目密钥
-     * @param host 网关地址
-     */
-    public static void testPost(String projectId, String secret, String host) {
-        // 查询查询内部组织详情地址
-        String getInnerOrganizationsDetailApi = "/manage/v1/innerOrganizations/detail";
-        // 查询查询内部组织详情请求地址
-        String getInnerOrganizationsDetailApiUrl = host + getInnerOrganizationsDetailApi;
-
-        try {
-            // 构建请求Body体
-            JSONObject reqBodyObj = new JSONObject(true);
-            reqBodyObj.put("organizationCode", "");
-            reqBodyObj.put("customOrgNo", "");
-            reqBodyObj.put("name", "博洋");
-
-            // 请求Body体数据
-            String reqBodyData = reqBodyObj.toString();
-            // 对请求Body体内的数据计算ContentMD5
-
-            // 构建参与请求签名计算的明文
-            String plaintext = reqBodyData;
-            // 计算请求签名值
-            String reqSignature = sign(plaintext, secret);
-
-            // 构建请求头
-            LinkedHashMap<String, String> header = new LinkedHashMap<>();
-            // 构建待签名字符串
-            String accept = "*/*";
-            String contentType = "application/json; charset=UTF-8";
-            header.put("X-timevale-project-id", projectId);
-            header.put("X-timevale-signature", reqSignature);
-            header.put("Accept", accept);
-            header.put("Content-Type", contentType);
-
-            // 发送POST请求
-            String result = HTTPHelper.sendPOST(getInnerOrganizationsDetailApiUrl, reqBodyData, header, "UTF-8");
-            JSONObject resultObj = JSONObject.parseObject(result);
-            System.out.println("请求返回信息: " + resultObj.toString());
-        } catch (Exception e) {
-            e.printStackTrace();
-            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
-            System.out.println(msg);
-        }
-    }
-
-    /***
-     * 请求签名鉴权-GET请求
-     *
-     * @param projectId 项目id
-     * @param secret 项目密钥
-     * @param host 网关地址
-     */
-    public static void testGet(String projectId, String secret, String host) {
-        // 获取签署地址列表API地址
-        String getSignFlowApi = "/esign-signs/v1/signFlow/signUrls?signFlowId=" + "24210df8420968c1e785a3b7582295b6";
-        // 获取签署地址列表接口请求地址
-        String hostGetSignFlowApi = host + getSignFlowApi;
-
-        try {
-            // 构建待签名字符串
-            String accept = "*/*";
-            String contentType = "application/json; charset=UTF-8";
-
-            // 构建参与请求签名计算的明文
-            int index = getSignFlowApi.indexOf("?");
-            String plaintext = index == -1 ? "" : getSignFlowApi.substring(index + 1);
-            // 计算请求签名值
-            String reqSignature = sign(plaintext, secret);
-
-            // 构建请求头
-            LinkedHashMap<String, String> header = new LinkedHashMap<>();
-            header.put("X-timevale-project-id", projectId);
-            header.put("X-timevale-signature", reqSignature);
-            header.put("Accept", accept);
-            header.put("Content-Type", contentType);
-
-            // 发送GET请求
-            String result = HTTPHelper.sendGet(hostGetSignFlowApi, header, "UTF-8");
-            JSONObject resultObj = JSONObject.parseObject(result);
-            System.out.println("请求返回信息: " + resultObj.toString());
-        } catch (Exception e) {
-            e.printStackTrace();
-            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
-            System.out.println(msg);
-        }
-    }
-
-    /**
-     * hmac-sha256签名
-     *
-     * @param content 代签名的内容
-     * @param key     签名的key
-     * @return 签名
-     */
-    public static String sign(String content, String key) {
-        byte[] bytes = new HmacUtils(HmacAlgorithms.HMAC_SHA_256, key).hmac(content);
-        return new String(Hex.encodeHex(bytes));
-    }
-
-
-    /***
-     * 请求签名鉴权-POST请求
-     *
-     * @param projectId 项目Id
-     * @param secret 项目密钥
-     * @param host 网关地址
-     */
-    public static void testUpload(String projectId, String secret, String host) {
-        // 文件上传接口
-        String uploadApi = "/file/v1/pdf/uploadAndSpilt";
-        // 文件上传接口请求地址
-        String uploadApiUrl = host + uploadApi;
-
-        try {
-            // 构建请求Body体
-            JSONObject reqBodyObj = new JSONObject(true);
-            reqBodyObj.put("file", "测试文件密码123456.pdf");
-            reqBodyObj.put("filePwd", "123456");
-
-            // 请求Body体数据
-            String reqBodyData = reqBodyObj.toString();
-
-            // 构建参与请求签名计算的明文
-            String plaintext = reqBodyData;
-            // 计算请求签名值
-            String reqSignature = sign(plaintext, secret);
-
-            // 构建文件
-            String filePath = "/xxx/xxx/测试文件密码123456.pdf";
-            String fileFieldName = "file";
-
-            // 构建请求头
-            LinkedHashMap<String, String> header = new LinkedHashMap<>();
-            // 构建待签名字符串
-            String accept = "*/*";
-            header.put("X-timevale-project-id", projectId);
-            header.put("X-timevale-signature", reqSignature);
-            header.put("Accept", accept);
-            // 发送POST请求
-            String result = HTTPHelper.uploadFile(uploadApiUrl,  fileFieldName, filePath, reqBodyObj,  header, "UTF-8");
-            JSONObject resultObj = JSONObject.parseObject(result);
-            System.out.println("请求返回信息: " + resultObj.toString());
-        } catch (Exception e) {
-            e.printStackTrace();
-            String msg = MessageFormat.format("请求签名鉴权方式调用接口出现异常: {0}", e.getMessage());
-            System.out.println(msg);
-        }
-    }
-}

+ 9 - 2
mjava-huagao/pom.xml

@@ -29,7 +29,7 @@
         <dependency>
             <groupId>com.microsoft.sqlserver</groupId>
             <artifactId>mssql-jdbc</artifactId>
-            <version>12.4.0.jre8</version>
+            <version>12.4.2.jre8</version>
         </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>
@@ -40,7 +40,7 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>
-            <version>3.5.3.1</version>
+            <version>3.5.5</version>
         </dependency>
         <dependency> <!--自动生成的模板:模板有三种:Velocity(默认)、Freemarker、Beetl -->
             <groupId>org.apache.velocity</groupId>
@@ -52,9 +52,16 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+            <version>2.3.32</version>
+        </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
+            <version>1.18.30</version>
             <scope>provided</scope>
         </dependency>
         <dependency>

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

@@ -1,11 +1,12 @@
 package com.malk.huagao;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 import java.security.Security;
-
+@MapperScan("com.malk.huagao.mapper")
 @SpringBootApplication(scanBasePackages = {"com.malk"})
 public class HuaGaoApplication {
     public static void main(String[] args) {

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

@@ -0,0 +1,66 @@
+package com.malk.huagao.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.huagao.service.IKdYdCustomerService;
+import com.malk.huagao.service.IKdYdZpService;
+import com.malk.huagao.service.YdHuaGaoService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-09
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdCustomerController {
+    @Autowired
+    private IKdYdCustomerService  kdYdCustomerService;
+    @Autowired
+    private YdHuaGaoService ydHuaGaoService;
+    @Autowired
+    private IKdYdZpService kdYdZpService;
+@Autowired
+private YDClient ydClient;
+    @PostMapping("/test30")
+    McR test13(@RequestBody Map data) {
+        MDC.put("MDC_KEY_PID","1003");
+//        String ins = String.valueOf(data.get("formInstId"));
+//
+//
+//
+//        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.synckdYdPayment();
+//        ydHuaGaoService.syncKdYdReceivable();
+//        kdYdZpService.insertkdYdZp(data);
+//        ydHuaGaoService.synckdYdOutbound();
+        return McR.success();
+    }
+    @PostMapping("/kdYdCustomer")
+    McR insertCustomer(@RequestBody Map map) {
+        kdYdCustomerService.insertCustomer(map);
+        return McR.success();
+    }
+}

+ 34 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerLiaisonController.java

@@ -0,0 +1,34 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdCustomerLiaisonService;
+import com.malk.server.common.McR;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-13
+ */
+@RestController
+@RequestMapping("/hg")
+
+public class KdYdCustomerLiaisonController {
+    @Autowired
+    private IKdYdCustomerLiaisonService kdYdCustomerLiaisonService;
+@PostMapping("/kdYdCustomerLiaison")
+McR insertCustomerLiaison(@RequestBody Map map) {
+    kdYdCustomerLiaisonService.insertCustomerLiaison(map);
+        return McR.success();
+    }
+}

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

@@ -0,0 +1,32 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdCustomerReferrerService;
+import com.malk.server.common.McR;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-14
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdCustomerReferrerController {
+    @Autowired
+    private IKdYdCustomerReferrerService kdYdCustomerReferrerService;
+    @PostMapping("/kdYdCustomerReferrer")
+    McR kdYdCustomerReferrer(@RequestBody Map map) {
+        kdYdCustomerReferrerService.insertCustomerReferrer(map);
+        return McR.success();
+    }
+}

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

@@ -0,0 +1,36 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdDeliveryService;
+import com.malk.huagao.service.IKdYdOrderService;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdDeliveryController {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private IKdYdDeliveryService kdYdDeliveryService;
+    @PostMapping("/kdYdDelivery")
+    McR insertDelivery(@RequestBody Map map) {
+        kdYdDeliveryService.insertDelivery(map);
+        return McR.success();
+    }
+}

+ 36 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdMaterialController.java

@@ -0,0 +1,36 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdMaterialService;
+import com.malk.huagao.service.IKdYdOrderService;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdMaterialController {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private IKdYdMaterialService kdYdMaterialService;
+    @PostMapping("/kdYdMaterial")
+    McR insertkdYdMaterial(@RequestBody Map map) {
+        kdYdMaterialService.insertkdYdMaterial(map);
+        return McR.success();
+    }
+}

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

@@ -0,0 +1,35 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdOrderService;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdOrderController {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private IKdYdOrderService kdYdOrderService;
+    @PostMapping("/kdYdOrder")
+    McR insertkdYdOrder(@RequestBody Map map) {
+        kdYdOrderService.insertkdYdOrder(map);
+        return McR.success();
+    }
+}

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

@@ -0,0 +1,36 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdOrderService;
+import com.malk.huagao.service.IKdYdOutboundService;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdOutboundController {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private IKdYdOutboundService kdYdOutboundService;
+    @PostMapping("/kdYdOutbound")
+    McR insertkdYdOutbound(@RequestBody Map map) {
+        kdYdOutboundService.insertkdYdOutbound(map);
+        return McR.success();
+    }
+}

+ 36 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdReceivableController.java

@@ -0,0 +1,36 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdOutboundService;
+import com.malk.huagao.service.IKdYdReceivableService;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdReceivableController {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private IKdYdReceivableService kdYdReceivableService;
+    @PostMapping("/kdYdReceivable")
+    McR insertkdYdReceivable(@RequestBody Map map) {
+        kdYdReceivableService.insertkdYdReceivable(map);
+        return McR.success();
+    }
+}

+ 36 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdTransferController.java

@@ -0,0 +1,36 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdOrderService;
+import com.malk.huagao.service.IKdYdTransferService;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-11-12
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdTransferController {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private IKdYdTransferService kdYdTransferService;
+    @PostMapping("/kdYdTransfer")
+    McR insertTransfer(@RequestBody Map map) {
+        kdYdTransferService.insertTransfer(map);
+        return McR.success();
+    }
+}

+ 36 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdZpController.java

@@ -0,0 +1,36 @@
+package com.malk.huagao.controller;
+
+import com.malk.huagao.service.IKdYdReceivableService;
+import com.malk.huagao.service.IKdYdZpService;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@RestController
+@RequestMapping("/hg")
+public class KdYdZpController {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private IKdYdZpService kdYdZpService;
+    @PostMapping("/kdYdZp")
+    McR insertkdYdZp(@RequestBody Map map) {
+        kdYdZpService.insertkdYdZp(map);
+        return McR.success();
+    }
+}

+ 96 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomer.java

@@ -0,0 +1,96 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-09
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_CUSTOMER")
+public class KdYdCustomer implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String khmc;
+
+    private String khbm;
+
+    private String xssx;
+
+    private String khxypj;
+
+    private String khsx;
+
+    private String jxr;
+
+    private String khlb;
+
+    private String khfz;
+
+    private String fptt;
+
+    private String nsdjh;
+
+    private String khyh;
+
+    private String yhzh;
+
+    private String kplx;
+
+    private String kplxdh;
+
+    private String kptxdz;
+
+    private String tyshxydm;
+
+    private String khtjr;
+
+    private String sktj;
+
+    private String xsy;
+
+    private String jsbb;
+
+    private String mrsl;
+
+    private String sfl;
+
+    private String khyxj;
+
+    private String spdzyx;
+
+    private String qyxygl;
+
+    private String khlx;
+
+    private String sfjtkh;
+
+    private String dyjtkh;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    @TableField("formInstId")
+    private String formInstId;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 56 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomerLiaison.java

@@ -0,0 +1,56 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-13
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_CUSTOMER_LIAISON")
+public class KdYdCustomerLiaison implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private Long customerId;
+
+    private String bm;
+
+    private String xm;
+
+    private String xb;
+
+    private String zw;
+
+    private String gddh;
+
+    private String yddh;
+
+    private String cz;
+
+    private String yx;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 60 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomerReferrer.java

@@ -0,0 +1,60 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-14
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_CUSTOMER_REFERRER")
+public class KdYdCustomerReferrer implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String bm;
+
+    private String mc;
+
+    private String sfzh;
+
+    private String sjh;
+
+    private String xsy;
+
+    private String skrmc;
+
+    private String skzh;
+
+    private String khh;
+
+    private String ms;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    @TableField("formInstId")
+    private String formInstId;
+
+    private String tjruuid;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 76 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdDelivery.java

@@ -0,0 +1,76 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_DELIVERY")
+public class KdYdDelivery implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String djlx;
+
+    private String djbh;
+
+    private String orderId;
+
+    private LocalDateTime rq;
+
+    private String kh;
+
+    private String jsbb;
+
+    private String xsbm;
+
+    private String lllx;
+
+    private String jjr;
+
+    private String jjrdh;
+
+    private String jjdz;
+
+    private String xslx;
+
+    private String bzfs;
+
+    private String bz;
+
+    private LocalDateTime hhsj;
+
+    private String ysfs;
+
+    private String hdfs;
+
+    private String kdgs;
+
+    private String fkfs;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+//    private String forminstid;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 73 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdDeliveryDetail.java

@@ -0,0 +1,73 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_DELIVERY_DETAIL")
+public class KdYdDeliveryDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private Long deliveryId;
+
+    private String wlbm;
+
+    private String wlmc;
+
+    private String xsdw;
+
+    private Integer jjsl;
+
+    private String ssxl;
+
+    private LocalDateTime yhrq;
+
+    private String ggxh;
+
+    private String sfzp;
+
+    private String ckck;
+
+    private String ckcw;
+
+    private String sjr;
+
+    private String sjdh;
+
+    private String sjdz;
+
+    private String zbq;
+
+    private String kddh;
+
+    private Integer detailId;
+
+    private String mdh;
+
+    private String syncStatus;
+
+    private String operationType;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+}

+ 82 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdMaterial.java

@@ -0,0 +1,82 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_MATERIAL")
+public class KdYdMaterial implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String wlmc;
+
+    private String wlbm;
+
+    private String xh;
+
+    private String gg;
+
+    private String wlfz;
+
+    private String wlsx;
+
+    private String jbdw;
+
+    private String ssxl;
+
+    private String jx;
+
+    private Integer sd;
+
+    private String mrsl;
+
+    private String chlb;
+
+    private String xsy;
+
+    private BigDecimal xsjzj;
+
+    private String smzs;
+
+    private String sjzt;
+
+    private String jyzt;
+
+    private String dzl;
+
+    private String pzzt;
+
+    private String speedname;
+
+    private String materialtitle;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String forminstid;
+@TableField("FMATERIALID")
+    private int FMATERIALID;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 76 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrder.java

@@ -0,0 +1,76 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_ORDER")
+public class KdYdOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String djlx;
+
+    private String djbh;
+
+    private LocalDateTime rq;
+
+    private String khmc;
+
+    private String khxypj;
+
+    private String ywlx;
+
+    private String xslx;
+
+    private String bzq;
+
+    private String xsy;
+
+    private String xsbm;
+
+    private String bz;
+
+    private String jsbb;
+
+    private String sktj;
+
+    private BigDecimal zdzke;
+
+    private BigDecimal se;
+
+    private BigDecimal je;
+
+    private BigDecimal jshj;
+
+    private String sfhs;
+
+    private String jws;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+//    private String forminstid;
+    private String syncStatus;
+
+    private String operationType;
+}

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

@@ -0,0 +1,81 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_ORDER_DETAIL")
+public class KdYdOrderDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private Long orderId;
+
+    private String wlbm;
+
+    private String wlmc;
+
+    private String ggxh;
+
+    private String xsdw;
+
+    private Integer xssl;
+
+    private String ssxl;
+
+    private BigDecimal dj;
+
+    private BigDecimal hsdj;
+
+    private String sfzp;
+
+    private Integer sl;
+
+    private BigDecimal se;
+
+    private BigDecimal je;
+
+    private BigDecimal jshj;
+
+    private BigDecimal jj;
+
+    private BigDecimal zkl;
+
+    private BigDecimal zke;
+
+    private LocalDateTime yhrq;
+
+    private BigDecimal xsjzj;
+
+    private String smzs;
+
+    private Integer detailId;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+//    private String forminstid;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 41 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrderPayment.java

@@ -0,0 +1,41 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@TableName("KD_YD_ORDER_PAYMENT")
+public class KdYdOrderPayment {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Long orderId;
+
+    private String sfys;
+
+    private BigDecimal ysbl;
+
+    private BigDecimal ysje;
+
+    private BigDecimal ssje;
+
+    private Integer detailId;
+
+    private LocalDateTime endTime;
+
+    private String gldh;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 68 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOutbound.java

@@ -0,0 +1,68 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_OUTBOUND")
+public class KdYdOutbound implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String djlx;
+
+    private String djbh;
+
+    private String jsbb;
+
+    private String kh;
+
+    private String ysdh;
+
+    private String xslx;
+
+    private String khsx;
+
+    private String xssx;
+
+    private String khtjr;
+
+    private String xsy;
+
+    private String  deliveryBm;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private LocalDateTime dateTime;
+
+    private String xsDept;
+
+    private String fhDept;
+
+    private String cgy;
+
+    private String syncStatus;
+
+    private String operationType;
+
+
+}

+ 101 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOutboundDetail.java

@@ -0,0 +1,101 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_OUTBOUND_DETAIL")
+public class KdYdOutboundDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private Long outboundId;
+
+    private String wlbm;
+
+    private String wlmc;
+
+    private String ggxh;
+
+    private String kcdw;
+
+    private String ssxl;
+
+    private BigDecimal dj;
+
+    private BigDecimal hsdj;
+
+    private BigDecimal sl;
+
+    private BigDecimal se;
+
+    private BigDecimal je;
+
+    private BigDecimal jshj;
+
+    private String ck;
+
+    private String cw;
+
+    private String kczt;
+
+    private String tpsb;
+
+    private String ph;
+
+    private BigDecimal jtc;
+
+    private BigDecimal sfsl;
+
+    private BigDecimal yfsl;
+
+    private String sjr;
+
+    private String sfzp;
+
+    private String sjdh;
+
+    private String sjdz;
+
+    private String gg;
+
+    private String zbq;
+
+    private LocalDateTime fwdqr;
+
+    private String xlh;
+
+    private String zbqsf;
+
+    private String kddh;
+
+    private String jx;
+
+    private String detailId;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 66 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdPaymentReceipt.java

@@ -0,0 +1,66 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_PAYMENT_RECEIPT")
+public class KdYdPaymentReceipt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String djlx;
+
+    private String fkdwlx;
+
+    private String djbh;
+
+    private String skgld;
+
+    private LocalDateTime ywrq;
+
+    private String bb;
+
+    private String bz;
+
+    private String wldwlx;
+
+    private String xsddbh;
+
+    private String wldw;
+
+    private BigDecimal ysje;
+
+    private BigDecimal ssje;
+
+    private String xsy;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String xsbm;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 66 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdPaymentReceiptDetail.java

@@ -0,0 +1,66 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_PAYMENT_RECEIPT_DETAIL")
+public class KdYdPaymentReceiptDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+      private Long payreceiptId;
+
+    private String jsfs;
+
+    private String skyt;
+
+    private String ysxmlx;
+
+    private String ysxsdd;
+
+    private String cdk;
+
+    private String wfyhzh;
+
+    private BigDecimal ysje;
+
+    private BigDecimal sxf;
+
+    private BigDecimal ssje;
+
+    private BigDecimal zhje;
+
+    private String xsddh;
+
+    private Integer detailId;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String fyxm;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 71 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivable.java

@@ -0,0 +1,71 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_RECEIVABLE")
+public class KdYdReceivable implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+//      private Long outboundId;
+
+    private String djlx;
+
+    private String ckddjbh;
+
+    private String djbh;
+
+    private String bb;
+
+    private String kh;
+
+    private String sktj;
+
+    private String xslx;
+
+    private String khsx;
+
+    private String bz;
+
+    private String xsbm;
+
+    private String xsy;
+
+    private BigDecimal jshj;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private LocalDateTime endTime;
+
+    private LocalDateTime businessTime;
+
+    private String lzlx;
+
+    private String forminstid;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 87 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivableDetail.java

@@ -0,0 +1,87 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_RECEIVABLE_DETAIL")
+public class KdYdReceivableDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private Long receivableId;
+
+    private String wlbm;
+
+    private String wlmc;
+
+    private String ggxh;
+
+    private String jjdw;
+
+    private String ssxl;
+
+    private BigDecimal dj;
+
+    private BigDecimal hsdj;
+
+    private BigDecimal sl;
+
+    private BigDecimal se;
+
+    private BigDecimal je;
+
+    private BigDecimal jshj;
+
+    private String kcdw;
+
+    private String ph;
+
+    private BigDecimal jjsl;
+
+    private BigDecimal zkl;
+
+    private BigDecimal bhsje;
+
+    private BigDecimal zke;
+
+    private BigDecimal kcsl;
+
+    private String sfzp;
+
+    private String gg;
+
+    private BigDecimal tc;
+
+    private String jx;
+
+    private String detailId;
+
+    private BigDecimal jjjbsl;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 43 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivablePayment.java

@@ -0,0 +1,43 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@TableName("KD_YD_RECEIVABLE_PAYMENT")
+public class KdYdReceivablePayment {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Long receivableId;
+
+    private BigDecimal ysbl;
+
+    private BigDecimal ysje;
+
+    private BigDecimal ysjebwb;
+
+    private BigDecimal stkdglje;
+
+    private Integer detailId;
+
+    private LocalDateTime endTime;
+
+    private String xsddh;
+
+    private String syncStatus;
+
+    private String operationType;
+
+
+}

+ 72 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdTransfer.java

@@ -0,0 +1,72 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-11-12
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_TRANSFER")
+public class KdYdTransfer implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String djlx;
+
+    private String cgy;
+
+    private String djbh;
+
+    private String dchzlx;
+
+    private String ywlx;
+
+    private LocalDateTime rq;
+
+    private String drhzlx;
+
+    private String dbfx;
+
+    private String dbdlx;
+
+    private String dcbm;
+
+    private String dchz;
+
+    private String drbm;
+
+    private String kh;
+
+    private String syncStatus;
+
+    private String operationType;
+
+    private String hdfs;
+
+    private String ysfs;
+
+    private String kdgs;
+
+    private String fkfs;
+
+    private String ddbh;
+}

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

@@ -0,0 +1,64 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-11-12
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_TRANSFER_DETAIL")
+public class KdYdTransferDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String wlbm;
+
+    private String wlmc;
+
+    private String ggxh;
+
+    private String dw;
+
+    private Integer dbsl;
+
+    private String ph;
+
+    private String dcck;
+
+    private String dccw;
+
+    private String drck;
+
+    private String drcw;
+
+    private String drckzt;
+
+    private String dcckzt;
+
+    private Integer detailId;
+
+    private String syncStatus;
+
+    private String operationType;
+
+    private Long transferId;
+}

+ 65 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdZp.java

@@ -0,0 +1,65 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_ZP")
+public class KdYdZp implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private String djlx;
+
+    private String djbh;
+
+    private String kpfs;
+
+    private String ysdbm;
+
+    private String ddbm;
+
+    private String fph;
+
+    private LocalDateTime ywrq;
+
+    private Long receivableId;
+
+    private String bb;
+
+    private BigDecimal jshj;
+
+    private String bz;
+
+    private String kh;
+
+    private String spdzyx;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+//    private String forminstid;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 81 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdZpDetail.java

@@ -0,0 +1,81 @@
+package com.malk.huagao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Getter
+@Setter
+  @TableName("KD_YD_ZP_DETAIL")
+public class KdYdZpDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+    private Long zpId;
+
+    private String wlbm;
+
+    private Integer detailId;
+
+    private String wlmc;
+
+    private String ggxh;
+
+    private String jjdw;
+
+    private String ssxl;
+
+    private BigDecimal dj;
+
+    private BigDecimal hsdj;
+
+    private BigDecimal sl;
+
+    private BigDecimal se;
+
+    private BigDecimal je;
+
+    private BigDecimal jshj;
+
+    private String ph;
+
+    private BigDecimal jjsl;
+
+    private BigDecimal zkl;
+
+    private BigDecimal bhsje;
+
+    private BigDecimal zke;
+
+    private BigDecimal rjdj;
+
+    private String gg;
+
+    private String xxddbh;
+
+    private String rjmc;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String syncStatus;
+
+    private String operationType;
+}

+ 16 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerLiaisonMapper.java

@@ -0,0 +1,16 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdCustomerLiaison;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-13
+ */
+public interface KdYdCustomerLiaisonMapper extends BaseMapper<KdYdCustomerLiaison> {
+
+}

+ 23 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerMapper.java

@@ -0,0 +1,23 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdCustomer;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-09
+ */
+public interface KdYdCustomerMapper extends BaseMapper<KdYdCustomer> {
+    @Select("SELECT id, formInstId, khbm, update_time FROM KD_YD_CUSTOMER " +
+            "WHERE update_time >= #{startTime} " +
+            "AND khbm IS NOT NULL")
+    List<KdYdCustomer> selectRecentUpdated(LocalDateTime startTime);
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerReferrerMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdCustomer;
+import com.malk.huagao.entity.KdYdCustomerReferrer;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-14
+ */
+public interface KdYdCustomerReferrerMapper extends BaseMapper<KdYdCustomerReferrer> {
+    @Select("SELECT id, formInstId, tjruuid, bm, update_time FROM KD_YD_CUSTOMER_REFERRER " +
+            "WHERE update_time >= #{startTime} " +
+            "AND bm IS NOT NULL")
+    List<KdYdCustomerReferrer> selectRecentUpdated(LocalDateTime startTime);
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdDeliveryDetailMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdDelivery;
+import com.malk.huagao.entity.KdYdDeliveryDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface KdYdDeliveryDetailMapper extends BaseMapper<KdYdDeliveryDetail> {
+    @Select("SELECT delivery_id, mdh, update_time, wlbm FROM KD_YD_DELIVERY_DETAIL " +
+            "WHERE update_time >= #{startTime} " +
+            "AND mdh IS NOT NULL")
+    List<KdYdDeliveryDetail> selectRecentUpdated(LocalDateTime startTime);
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdDeliveryMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdDelivery;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.huagao.entity.KdYdOrder;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface KdYdDeliveryMapper extends BaseMapper<KdYdDelivery> {
+    @Select("SELECT id, forminstid, djbh, update_time FROM KD_YD_DELIVERY " +
+            "WHERE update_time >= #{startTime} " +
+            "AND djbh IS NOT NULL")
+    List<KdYdDelivery> selectRecentUpdated(LocalDateTime startTime);
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdMaterialMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdMaterial;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.huagao.entity.KdYdZp;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface KdYdMaterialMapper extends BaseMapper<KdYdMaterial> {
+    @Select("SELECT id, wlbm, wlmc, update_time FROM KD_YD_MATERIAL " +
+            "WHERE update_time >= #{startTime} " +
+            "AND wlmc IS NOT NULL "+"AND wlmc IS NOT NULL")
+    List<KdYdMaterial> selectRecentUpdated(LocalDateTime startTime);
+}

+ 16 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderDetailMapper.java

@@ -0,0 +1,16 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdOrderDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface KdYdOrderDetailMapper extends BaseMapper<KdYdOrderDetail> {
+
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdCustomer;
+import com.malk.huagao.entity.KdYdOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface KdYdOrderMapper extends BaseMapper<KdYdOrder> {
+    @Select("SELECT id, forminstid, djbh, update_time FROM KD_YD_ORDER " +
+            "WHERE update_time >= #{startTime} " +
+            "AND djbh IS NOT NULL")
+    List<KdYdOrder> selectRecentUpdated(LocalDateTime startTime);
+}

+ 7 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderPaymentMapper.java

@@ -0,0 +1,7 @@
+package com.malk.huagao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.huagao.entity.KdYdOrderPayment;
+
+public interface KdYdOrderPaymentMapper extends BaseMapper<KdYdOrderPayment> {
+}

+ 16 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOutboundDetailMapper.java

@@ -0,0 +1,16 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdOutboundDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface KdYdOutboundDetailMapper extends BaseMapper<KdYdOutboundDetail> {
+
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOutboundMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdOrder;
+import com.malk.huagao.entity.KdYdOutbound;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface KdYdOutboundMapper extends BaseMapper<KdYdOutbound> {
+    @Select("SELECT id, forminstid, djbh, update_time FROM KD_YD_OUTBOUND " +
+            "WHERE update_time >= #{startTime} " +
+            "AND djbh IS NOT NULL")
+    List<KdYdOutbound> selectRecentUpdated(LocalDateTime startTime);
+}

+ 7 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdPaymentReceiptDetailMapper.java

@@ -0,0 +1,7 @@
+package com.malk.huagao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.huagao.entity.KdYdPaymentReceiptDetail;
+
+public interface KdYdPaymentReceiptDetailMapper extends BaseMapper<KdYdPaymentReceiptDetail> {
+}

+ 8 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdPaymentReceiptMapper.java

@@ -0,0 +1,8 @@
+package com.malk.huagao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.huagao.entity.KdYdOrderPayment;
+import com.malk.huagao.entity.KdYdPaymentReceipt;
+
+public interface KdYdPaymentReceiptMapper extends BaseMapper<KdYdPaymentReceipt> {
+}

+ 16 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivableDetailMapper.java

@@ -0,0 +1,16 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdReceivableDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface KdYdReceivableDetailMapper extends BaseMapper<KdYdReceivableDetail> {
+
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivableMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdOutbound;
+import com.malk.huagao.entity.KdYdReceivable;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface KdYdReceivableMapper extends BaseMapper<KdYdReceivable> {
+    @Select("SELECT id, forminstid, djbh, update_time FROM KD_YD_RECEIVABLE " +
+            "WHERE update_time >= #{startTime} " +
+            "AND djbh IS NOT NULL")
+    List<KdYdReceivable> selectRecentUpdated(LocalDateTime startTime);
+}

+ 7 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivalablePaymentMapper.java

@@ -0,0 +1,7 @@
+package com.malk.huagao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.huagao.entity.KdYdReceivablePayment;
+
+public interface KdYdReceivalablePaymentMapper extends BaseMapper<KdYdReceivablePayment> {
+}

+ 16 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdTransferDetailMapper.java

@@ -0,0 +1,16 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdTransferDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-11-12
+ */
+public interface KdYdTransferDetailMapper extends BaseMapper<KdYdTransferDetail> {
+
+}

+ 16 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdTransferMapper.java

@@ -0,0 +1,16 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdTransfer;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-11-12
+ */
+public interface KdYdTransferMapper extends BaseMapper<KdYdTransfer> {
+
+}

+ 16 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdZpDetailMapper.java

@@ -0,0 +1,16 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdZpDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface KdYdZpDetailMapper extends BaseMapper<KdYdZpDetail> {
+
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdZpMapper.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.mapper;
+
+import com.malk.huagao.entity.KdYdReceivable;
+import com.malk.huagao.entity.KdYdZp;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface KdYdZpMapper extends BaseMapper<KdYdZp> {
+    @Select("SELECT id, forminstid, djbh, fph, update_time FROM KD_YD_ZP " +
+            "WHERE update_time >= #{startTime} " +
+            "AND djbh IS NOT NULL "+"AND fph IS NOT NULL")
+    List<KdYdZp> selectRecentUpdated(LocalDateTime startTime);
+}

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerLiaisonMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdCustomerLiaisonMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdCustomerMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerReferrerMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdCustomerReferrerMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdDeliveryDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdDeliveryDetailMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdDeliveryMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdDeliveryMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdMaterialMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdMaterialMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOrderDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdOrderDetailMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOrderMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdOrderMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOutboundDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdOutboundDetailMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOutboundMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdOutboundMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdReceivableDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdReceivableDetailMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdReceivableMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdReceivableMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdTransferDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdTransferDetailMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdTransferMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdTransferMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdZpDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdZpDetailMapper">
+
+</mapper>

+ 5 - 0
mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdZpMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.huagao.mapper.KdYdZpMapper">
+
+</mapper>

+ 10 - 4
mjava-huagao/src/main/java/com/malk/huagao/schedule/KdScheduleTask.java

@@ -22,13 +22,13 @@ public class KdScheduleTask {
     //每周六 17:00定时同步序列号主档
     @Scheduled(cron = "0 0 17 * * 6")
     public void syncBDSerialMainFile(){
-        kdHuaGaoService.syncBDSerialMainFile();
+        kdHuaGaoService.syncBDSerialMainFile(null);
     }
 
     //每周六 16:00定时同步即时库存明细
     @Scheduled(cron = "0 0 16 * * 6")
     public void syncSTKInventory(){
-        kdHuaGaoService.syncSTKInventory();
+        kdHuaGaoService.syncSTKInventory(null);
     }
 
     //每周六 18:00定时处理待处理品数据
@@ -40,12 +40,18 @@ public class KdScheduleTask {
     //每天00:00定时同步生产退料明细
     @Scheduled(cron = "0 0 0 * * ?")
     public void syncPRDReturnMtrl(){
-        kdHuaGaoService.syncPRDReturnMtrl();
+        kdHuaGaoService.syncPRDReturnMtrl(null);
     }
 
     //每天00:01定时同步发货通知单
     @Scheduled(cron = "0 1 0 * * ?")
     public void syncDLVNotice(){
-        kdHuaGaoService.syncDLVNotice();
+        kdHuaGaoService.syncDLVNotice(null);
+    }
+
+    //每天00:02定时同步采购订单
+    @Scheduled(cron = "0 2 0 * * ?")
+    public void syncPUROrder(){
+        kdHuaGaoService.syncPUROrder();
     }
 }

+ 58 - 53
mjava-huagao/src/main/java/com/malk/huagao/schedule/ScheduleTask.java

@@ -1,6 +1,5 @@
 package com.malk.huagao.schedule;
 
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.huagao.service.HuaGaoService;
@@ -23,7 +22,9 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
@@ -41,117 +42,121 @@ public class ScheduleTask {
     private HuaGaoService huaGaoService;
 
     /**
+     *
      */
     @Scheduled(cron = "0 5 2 1 * ?")
     public void syncMonths() {
         log.info("考勤同步-月度");
-        LocalDateTime startTime= LocalDate.now().minusMonths(1).atTime(LocalTime.MIN);
-        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
-        List<String> time= Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)),String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
+        LocalDateTime startTime = LocalDate.now().minusMonths(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime = LocalDate.now().atTime(LocalTime.MIN);
+        List<String> time = Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)), String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
         try {
-            huaGaoService.syncKqData(startTime,endTime);
-            compSave(time,"同步成功","");
-        }catch (Exception e){
+            huaGaoService.syncKqData(startTime, endTime);
+            compSave(time, "同步成功", "");
+        } catch (Exception e) {
             e.printStackTrace();
-            compSave(time,"异常",e.getMessage());
+            compSave(time, "异常", e.getMessage());
         }
     }
 
     /**
+     *
      */
     @Scheduled(cron = "0 0 1 * * 1")
     public void syncWeek() {
         log.info("考勤同步-周度");
-        LocalDateTime startTime= LocalDate.now().minusWeeks(1).atTime(LocalTime.MIN);
-        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
-        List<String> time= Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)),String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
+        LocalDateTime startTime = LocalDate.now().minusWeeks(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime = LocalDate.now().atTime(LocalTime.MIN);
+        List<String> time = Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)), String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
         try {
-            huaGaoService.syncKqData(startTime,endTime);
-            compSave(time,"同步成功","");
-        }catch (Exception e){
+            huaGaoService.syncKqData(startTime, endTime);
+            compSave(time, "同步成功", "");
+        } catch (Exception e) {
             e.printStackTrace();
-            compSave(time,"异常",e.getMessage());
+            compSave(time, "异常", e.getMessage());
         }
     }
 
     /**
+     *
      */
     @Scheduled(cron = "0 35 6 * * ?")
     public void syncDay() {
         log.info("考勤同步-昨天");
-        LocalDateTime startTime= LocalDate.now().minusDays(1).atTime(LocalTime.MIN);
-        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
-        List<String> time= Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)),String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
+        LocalDateTime startTime = LocalDate.now().minusDays(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime = LocalDate.now().atTime(LocalTime.MIN);
+        List<String> time = Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)), String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
         try {
-            huaGaoService.syncKqData(startTime,endTime);
-            compSave(time,"同步成功","");
-        }catch (Exception e){
+            huaGaoService.syncKqData(startTime, endTime);
+            compSave(time, "同步成功", "");
+        } catch (Exception e) {
             e.printStackTrace();
-            compSave(time,"异常",e.getMessage());
+            compSave(time, "异常", e.getMessage());
         }
     }
 
     /**
+     *
      */
     @Scheduled(cron = "0 0/5 * * * ?")
     public void sync() {
-        MDC.put("MDC_KEY_PID","1001");
+        MDC.put("MDC_KEY_PID", "1001");
 
-        List<Map> list=(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-0D560B9D8B64464C8C885FE20B7C7C95T4IA").pageSize(1)
-                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m8nud6t3","待处理"))).build(), YDConf.FORM_QUERY.retrieve_list).getData();
-        log.info("手动同步查询-结果,{}",list.size());
-        if(list==null||list.size()<1){
+        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-0D560B9D8B64464C8C885FE20B7C7C95T4IA").pageSize(1)
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m8nud6t3", "待处理"))).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        log.info("手动同步查询-结果,{}", list.size());
+        if (list == null || list.size() < 1) {
             return;
         }
-        Map data=list.get(0);
-        log.info("{}",data);
-        String formInstanceId=String.valueOf(data.get("formInstanceId"));
+        Map data = list.get(0);
+        log.info("{}", data);
+        String formInstanceId = String.valueOf(data.get("formInstanceId"));
         processing(formInstanceId);
-        Map formData=UtilMap.getMap(data,"formData");
+        Map formData = UtilMap.getMap(data, "formData");
         try {
-            List<String> timeList=UtilMap.getList(formData,"cascadeDateField_m8nud6sy");
-            LocalDateTime startTime= UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(0)));
-            LocalDateTime endTime=UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(1)));
-            huaGaoService.syncKqData(startTime,endTime);
-            comp(formInstanceId,"同步成功!","");
-        }catch (Exception e){
+            List<String> timeList = UtilMap.getList(formData, "cascadeDateField_m8nud6sy");
+            LocalDateTime startTime = UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(0)));
+            LocalDateTime endTime = UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(1)));
+            huaGaoService.syncKqData(startTime, endTime);
+            comp(formInstanceId, "同步成功!", "");
+        } catch (Exception e) {
             e.printStackTrace();
-            comp(formInstanceId,"异常",e.getMessage());
+            comp(formInstanceId, "异常", e.getMessage());
         }
     }
 
-    private void processing(String id){
+    private void processing(String id) {
         ydClient.operateData(YDParam.builder().formInstanceId(id)
                 .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_m8nud6t3", "处理中")))
                 .build(), YDConf.FORM_OPERATION.update);
     }
 
-    private void comp(String id,String result,String msg){
+    private void comp(String id, String result, String msg) {
         ydClient.operateData(YDParam.builder().formInstanceId(id)
-                .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_m8nud6t3, textField_m8nud6t9, textareaField_m8nud6tb", "已完成",result,msg)))
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_m8nud6t3, textField_m8nud6t9, textareaField_m8nud6tb", "已完成", result, msg)))
                 .build(), YDConf.FORM_OPERATION.update);
     }
 
-    private void compSave(List<String> time,String result,String msg){
+    private void compSave(List<String> time, String result, String msg) {
         ydClient.operateData(YDParam.builder().formUuid("FORM-0D560B9D8B64464C8C885FE20B7C7C95T4IA")
-                .formDataJson(JSON.toJSONString(UtilMap.map("cascadeDateField_m8nud6sy, selectField_m8nud6t3, textField_m8nud6t9, textareaField_m8nud6tb", time,"已完成",result,msg)))
+                .formDataJson(JSON.toJSONString(UtilMap.map("cascadeDateField_m8nud6sy, selectField_m8nud6t3, textField_m8nud6t9, textareaField_m8nud6tb", time, "已完成", result, msg)))
                 .build(), YDConf.FORM_OPERATION.create);
     }
 
     public static void main(String[] args) {
-        LocalDateTime startTime1= LocalDate.now().minusDays(1).atTime(LocalTime.MIN);
-        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
+        LocalDateTime startTime1 = LocalDate.now().minusDays(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime = LocalDate.now().atTime(LocalTime.MIN);
         long startTime = UtilDateTime.getLocalDateTimeTimeStamp(startTime1);
         //获取所属周(每周六-下周五)
-      DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate date = LocalDate.parse("2025-06-24", inputFormatter);
-         LocalDate startOfWeek;
-          // 获取该周的周六(开始日期)
-                               startOfWeek = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.SATURDAY));
+        LocalDate startOfWeek;
+        // 获取该周的周六(开始日期)
+        startOfWeek = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.SATURDAY));
 
-                    // 获取该周的周五(结束日期)
-                               LocalDate endOfWeek = startOfWeek.plusDays(6);
-                     DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("MM.dd");
+        // 获取该周的周五(结束日期)
+        LocalDate endOfWeek = startOfWeek.plusDays(6);
+        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("MM.dd");
         String format = startOfWeek.format(outputFormatter);
 //        LocalDateTime startTime2= LocalDate.now().minusMonths(1).atTime(LocalTime.MIN);
 //        List<String> time= Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)),String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));

+ 182 - 0
mjava-huagao/src/main/java/com/malk/huagao/schedule/YdScheduleTask.java

@@ -0,0 +1,182 @@
+package com.malk.huagao.schedule;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.huagao.entity.KdYdCustomer;
+import com.malk.huagao.mapper.KdYdCustomerMapper;
+import com.malk.huagao.service.YdHuaGaoService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.aliwork.YDSearch;
+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.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class YdScheduleTask {
+@Autowired
+private YdHuaGaoService ydHuaGaoService;
+    @Autowired
+    private KdYdCustomerMapper kdYdCustomerMapper;
+    @Autowired
+    private YDClient ydClient;
+
+    /*@Scheduled(cron = "0 0/5 * * * ?")
+    public void sync() {
+        log.info("定时同步-客户");
+        try {
+
+            LocalDateTime now = LocalDateTime.now();
+            LocalDateTime fiveMinutesAgo = now.minusMinutes(5);
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            List<KdYdCustomer> kdYdCustomers = kdYdCustomerMapper.selectRecentUpdated(fiveMinutesAgo);
+            if (kdYdCustomers.isEmpty()) {
+                log.info("【客户同步任务】无需要同步的数据,结束");
+                return;
+            }
+            for (KdYdCustomer kdYdCustomer : kdYdCustomers) {
+                try {
+                    String khbm = kdYdCustomer.getKhbm();
+                    String formInstId = kdYdCustomer.getFormInstId();
+                    if (ObjectUtil.hasEmpty(formInstId, khbm)) {
+                        log.warn("跳过同步: formInstId 或 khbm 为空, customer={}", kdYdCustomer.getId());
+                        continue;
+                    }
+                    ydClient.operateData(
+                            YDParam.builder()
+                                    .formInstanceId(formInstId)
+                                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mfxrryt3", khbm)))
+                                    .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
+
+                } catch (Exception e) {
+                    log.error("同步单条客户数据异常: formInstId={}", kdYdCustomer.getFormInstId(), e);
+                }
+            }
+            log.info("【客户同步任务】执行完成,共处理 {} 条记录", kdYdCustomers.size());
+        } catch (Exception e) {
+            log.error("【客户同步任务】执行过程中发生严重错误", e);
+        }
+    }
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void syncKdYdCustomerReferrer() {
+        log.info("定时同步-推荐人");
+        try {
+            ydHuaGaoService.syncKdYDcustomerLiaison();
+        } catch (Exception e) {
+            log.error("【推荐人同步任务】执行过程中发生严重错误", e);
+        }
+    }
+
+        @Scheduled(cron = "0 0/5 * * * ?")
+    public void syncKdYdOrder() {
+        log.info("定时同步-订单");
+        try {
+            ydHuaGaoService.syncKdYdOrder();
+        } catch (Exception e) {
+            log.error("【订单同步任务】执行过程中发生严重错误", e);
+        }
+    }
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void syncKdYdDelivery() {
+        log.info("定时同步-发货通知单");
+        try {
+            ydHuaGaoService.syncKdYdDelivery();
+        } catch (Exception e) {
+            log.error("【发货通知单同步任务】执行过程中发生严重错误", e);
+        }
+    }
+
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void syncKdYdDeliveryDetail() {
+        log.info("定时同步-发货通知单详情");
+        try {
+            ydHuaGaoService.syncKdYdDeliveryDetail();
+        } catch (Exception e) {
+            log.error("【发货通知单详情同步任务】执行过程中发生严重错误", e);
+        }
+    }
+
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void synckdYdZp() {
+        log.info("定时同步-发票单");
+        try {
+            ydHuaGaoService.synckdYdZp();
+        } catch (Exception e) {
+            log.error("【发票单同步任务】执行过程中发生严重错误", e);
+        }
+    }*/
+
+
+
+
+    @Scheduled(cron = "0 0/15 * * * ?")
+    public void synckdYdOutbound() {
+        log.info("定时同步-出库单");
+        try {
+            MDC.put("MDC_KEY_PID","1003");
+            ydHuaGaoService.synckdYdOutbound();
+        } catch (Exception e) {
+            log.error("【出库单同步任务】执行过程中发生严重错误", e);
+        }
+    }
+
+    @Scheduled(cron = "0 0/15 * * * ?")
+    public void syncKdYdReceivable() {
+        log.info("定时同步-应收单");
+        try {
+            MDC.put("MDC_KEY_PID","1003");
+            ydHuaGaoService.syncKdYdReceivable();
+        } catch (Exception e) {
+            log.error("【应收单同步任务】执行过程中发生严重错误", e);
+        }
+    }
+//    @Scheduled(fixedRate = 5 * 60 * 1000)
+    @Scheduled(cron = "0 0/15 * * * ?")
+    public void synckdYdMaterial() {
+        log.info("定时同步-物料信息");
+        try {
+            MDC.put("MDC_KEY_PID","1003");
+            ydHuaGaoService.synckdYdMaterial();
+        } catch (Exception e) {
+            log.error("【物料信息同步任务】执行过程中发生严重错误", e);
+        }
+    }
+
+    @Scheduled(cron = "0 0/15 * * * ?")
+    public void synckdYdPayment() {
+        log.info("定时同步-synckdYdPayment");
+        try {
+            MDC.put("MDC_KEY_PID","1003");
+            ydHuaGaoService.synckdYdPayment();
+        } catch (Exception e) {
+            log.error("【synckdYdPayment同步任务】执行过程中发生严重错误", e);
+        }
+    }
+
+    @Scheduled(cron = "0 0/15 * * * ?")
+    public void synckdYdTRANSFER() {
+        log.info("定时同步-synckdYdTRANSFER");
+        try {
+            MDC.put("MDC_KEY_PID","1003");
+            ydHuaGaoService.synckdYdTRANSFER();
+        } catch (Exception e) {
+            log.error("【synckdYdTRANSFER同步任务】执行过程中发生严重错误", e);
+        }
+    }
+}

+ 20 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdCustomerLiaisonService.java

@@ -0,0 +1,20 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdCustomerLiaison;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-13
+ */
+public interface IKdYdCustomerLiaisonService  {
+
+    void insertCustomerLiaison(Map map);
+
+}

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

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdCustomerReferrer;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-14
+ */
+public interface IKdYdCustomerReferrerService extends IService<KdYdCustomerReferrer> {
+
+    void insertCustomerReferrer(Map map);
+}

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

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdCustomer;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-09
+ */
+public interface IKdYdCustomerService {
+
+    void insertCustomer(Map map);
+}

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

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdDelivery;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface IKdYdDeliveryService extends IService<KdYdDelivery> {
+
+    void insertDelivery(Map map);
+}

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

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdMaterial;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface IKdYdMaterialService extends IService<KdYdMaterial> {
+
+    void insertkdYdMaterial(Map map);
+}

+ 19 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdOrderService.java

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface IKdYdOrderService extends IService<KdYdOrder> {
+
+    void insertkdYdOrder(Map map);
+}

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

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdOutbound;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+public interface IKdYdOutboundService extends IService<KdYdOutbound> {
+
+    void insertkdYdOutbound(Map map);
+}

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

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdReceivable;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface IKdYdReceivableService extends IService<KdYdReceivable> {
+
+    void insertkdYdReceivable(Map map);
+}

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

@@ -0,0 +1,20 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdTransfer;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-11-12
+ */
+public interface IKdYdTransferService extends IService<KdYdTransfer> {
+
+    void insertTransfer(Map map);
+
+}

+ 19 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/IKdYdZpService.java

@@ -0,0 +1,19 @@
+package com.malk.huagao.service;
+
+import com.malk.huagao.entity.KdYdZp;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+public interface IKdYdZpService extends IService<KdYdZp> {
+
+    void insertkdYdZp(Map map);
+}

+ 6 - 4
mjava-huagao/src/main/java/com/malk/huagao/service/KdHuaGaoService.java

@@ -1,15 +1,17 @@
 package com.malk.huagao.service;
 
 public interface KdHuaGaoService {
-    void syncBDSerialMainFile();
+    void syncBDSerialMainFile(String userId);
 
-    void syncSTKInventory();
+    void syncSTKInventory(String userId);
 
-    void syncPRDReturnMtrl();
+    void syncPRDReturnMtrl(String userId);
 
     void syncReport(String type,String userId);
 
     void syncPendingProducts();
 
-    void syncDLVNotice();
+    void syncDLVNotice(String userId);
+
+    void syncPUROrder();
 }

+ 26 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/YdHuaGaoService.java

@@ -0,0 +1,26 @@
+package com.malk.huagao.service;
+
+public interface YdHuaGaoService {
+    void syncKdYdCustomer();
+
+    void syncKdYDcustomerLiaison();
+
+    void syncKdYdOrder();
+
+    void syncKdYdDelivery();
+
+    void synckdYdOutbound();
+
+    void syncKdYdReceivable();
+
+    void synckdYdZp();
+
+    void synckdYdMaterial();
+
+    void syncKdYdDeliveryDetail();
+
+    void synckdYdPayment();
+
+    void synckdYdTRANSFER();
+
+}

+ 20 - 4
mjava-huagao/src/main/java/com/malk/huagao/service/impl/HuaGaoServiceImpl.java

@@ -5,6 +5,8 @@ import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.malk.huagao.entity.YdNonProdPrice;
 import com.malk.huagao.entity.YdProdWorkHoursPrice;
 import com.malk.huagao.entity.YdUserInput;
@@ -78,7 +80,6 @@ public class HuaGaoServiceImpl implements HuaGaoService {
             String price=UtilMap.getString(formData,"numberField_m8e4zajw_value");
             List<String> users=ddClient_contacts.listDepartmentUserId(ddClient.getAccessToken(),Long.parseLong(deptId));
             for (String user : users) {
-//                if (!user.equals("17399270929001990") && !user.equals("17102075948191646") && !user.equals("16137991608422361") && !user.equals("16992517127785448")) continue;//刘多富、白涛、陈辉、吕明权
                 List<Map> valList=ddClientAttendance.getAttColumnVal(ddClient.getAccessToken(),user, Arrays.asList("82772106","89349019","82772125"),stTime,edTime);
                 if(valList!=null&&valList.size()==3){
                     Map<String,Map<String,String>> dateMap=toDateMap(valList);
@@ -88,9 +89,24 @@ public class HuaGaoServiceImpl implements HuaGaoService {
                                 dataMap.get("89349019"): NumberUtil.add(dataMap.get("89349019"),dataMap.get("82772106")).toString();
 
                         //查询用户详情
-                        DDR_New ddrNew1 = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, ddClient.initTokenParams(), UtilMap.map("userid", user), DDR_New.class);
-                        Map result1 = (Map) ddrNew1.getResult();
-                        String userName = UtilMap.getString(result1, "name");
+                        String userName = "";
+
+                        LambdaQueryWrapper<YdUserInput> ydUserInputLambdaQueryWrapper2 = new LambdaQueryWrapper<>();
+                        ydUserInputLambdaQueryWrapper2.eq(YdUserInput::getUserId,user)
+                                .isNotNull(YdUserInput::getUserName);
+
+                        Page<YdUserInput> page = new Page<>(1, 1);
+                        IPage<YdUserInput> result = ydUserInputMapper.selectPage(page, ydUserInputLambdaQueryWrapper2);
+
+                        YdUserInput ydUserInput2 = result.getRecords().isEmpty() ? null : result.getRecords().get(0);
+
+                        if (Objects.nonNull(ydUserInput2)){
+                            userName = ydUserInput2.getUserName();
+                        }else {
+                            DDR_New ddrNew1 = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, ddClient.initTokenParams(), UtilMap.map("userid", user), DDR_New.class);
+                            Map result1 = (Map) ddrNew1.getResult();
+                            userName = UtilMap.getString(result1, "name");
+                        }
 
                         log.info("user:{},userName:{},date:{},workTime:{},price:{}",user,userName,date,workTime,price);
 

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 464 - 157
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdHuaGaoServiceImpl.java


+ 102 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerLiaisonServiceImpl.java

@@ -0,0 +1,102 @@
+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.KdYdCustomerLiaison;
+import com.malk.huagao.mapper.KdYdCustomerLiaisonMapper;
+import com.malk.huagao.mapper.KdYdCustomerMapper;
+import com.malk.huagao.service.IKdYdCustomerLiaisonService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.malk.server.aliwork.YDConf;
+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 org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-13
+ */
+@Service
+public class KdYdCustomerLiaisonServiceImpl extends ServiceImpl<KdYdCustomerLiaisonMapper, KdYdCustomerLiaison> implements IKdYdCustomerLiaisonService {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private KdYdCustomerLiaisonMapper kdYdCustomerLiaisonMapper;
+    @Autowired
+    private KdYdCustomerMapper kdYdCustomerMapper;
+
+    @Override
+    public void insertCustomerLiaison(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");
+            KdYdCustomerLiaison kdYdCustomerLiaison = new KdYdCustomerLiaison();
+            kdYdCustomerLiaison.setOperationType("3");
+            kdYdCustomerLiaison.setSyncStatus("0");
+            kdYdCustomerLiaisonMapper.update(kdYdCustomerLiaison,
+                    new LambdaQueryWrapper<KdYdCustomerLiaison>().eq(KdYdCustomerLiaison::getBm, bm));
+            return; // 或者根据你的业务逻辑返回相应的结果
+        }
+        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id);
+        Map formData = ddrNew.getFormData();
+
+        String xm = UtilMap.getString(formData, "textField_l3s6ubhq");
+        String bm1 = UtilMap.getString(formData, "serialNumberField_mhk5zwzs");
+        String zw = UtilMap.getString(formData, "textField_l3s6ubht");
+        String gddh = UtilMap.getString(formData, "textField_mfxu5dnk");
+        String yddh = UtilMap.getString(formData, "textField_lqbzc3gq");
+        String cz = UtilMap.getString(formData, "textField_mfxu5dnl");
+        String yx = UtilMap.getString(formData, "textField_lqbzc3gr");
+        String xb = UtilMap.getString(formData, "radioField_l3s6ubhx");
+//        String customerId = UtilMap.getString(formData, "textField_mgoxa46w");
+//        String uuid = UtilMap.getString(formData, "textField_mfkp33s5");
+        String khbh = UtilMap.getString(formData, "textField_mfkks8wx");
+
+        LambdaQueryWrapper<KdYdCustomer> YdCustomerLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        YdCustomerLambdaQueryWrapper.eq(KdYdCustomer::getKhbm, khbh);
+        KdYdCustomer kdYdCustomer1 = kdYdCustomerMapper.selectOne(YdCustomerLambdaQueryWrapper);
+        Long id = kdYdCustomer1.getId();
+        KdYdCustomerLiaison kdYdCustomerLiaison = new KdYdCustomerLiaison();
+        kdYdCustomerLiaison.setXm(xm);
+        kdYdCustomerLiaison.setZw(zw);
+        kdYdCustomerLiaison.setBm(bm1);
+        kdYdCustomerLiaison.setGddh(gddh);
+        kdYdCustomerLiaison.setYddh(yddh);
+        kdYdCustomerLiaison.setCz(cz);
+        kdYdCustomerLiaison.setYx(yx);
+        kdYdCustomerLiaison.setXb(xb);
+//        kdYdCustomerLiaison.setFormInstId(formInstId);
+        kdYdCustomerLiaison.setCustomerId(id);
+        kdYdCustomerLiaison.setSyncStatus("0");
+        kdYdCustomerLiaison.setOperationType("1");
+        if ("2".equals(type)) {
+            kdYdCustomerLiaison.setOperationType(type);
+            kdYdCustomerLiaisonMapper.update(kdYdCustomerLiaison,
+                    new LambdaQueryWrapper<KdYdCustomerLiaison>().eq(KdYdCustomerLiaison::getBm, bm1));
+        } else {
+            this.save(kdYdCustomerLiaison);
+        }
+//        ydClient.operateData(
+//                YDParam.builder()
+//                        .formInstanceId(formInstId)
+//                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mfkks8wx", khbm)))
+//                        .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
+    }
+}

+ 86 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerReferrerServiceImpl.java

@@ -0,0 +1,86 @@
+package com.malk.huagao.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.malk.huagao.entity.KdYdCustomerLiaison;
+import com.malk.huagao.entity.KdYdCustomerReferrer;
+import com.malk.huagao.mapper.KdYdCustomerReferrerMapper;
+import com.malk.huagao.service.IKdYdCustomerReferrerService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.malk.server.aliwork.YDConf;
+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 org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-14
+ */
+@Service
+public class KdYdCustomerReferrerServiceImpl extends ServiceImpl<KdYdCustomerReferrerMapper, KdYdCustomerReferrer> implements IKdYdCustomerReferrerService {
+@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");
+
+        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);
+
+        if ("2".equals(type)) {
+            kdYdCustomerReferrer.setOperationType(type);
+            kdYdCustomerReferrerMapper.update(kdYdCustomerReferrer,
+                    new LambdaQueryWrapper<KdYdCustomerReferrer>().eq(KdYdCustomerReferrer::getBm, bm));
+        } else {
+            this.save(kdYdCustomerReferrer);
+        }
+    }
+}

+ 268 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java

@@ -0,0 +1,268 @@
+package com.malk.huagao.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.malk.huagao.entity.KdYdCustomer;
+import com.malk.huagao.entity.KdYdCustomerLiaison;
+import com.malk.huagao.entity.KdYdDeliveryDetail;
+import com.malk.huagao.mapper.KdYdCustomerLiaisonMapper;
+import com.malk.huagao.mapper.KdYdCustomerMapper;
+import com.malk.huagao.service.IKdYdCustomerService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.malk.server.aliwork.YDConf;
+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 org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-09
+ */
+@Service
+public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdYdCustomer> implements IKdYdCustomerService {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private KdYdCustomerMapper kdYdCustomerMapper;
+    @Autowired
+    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");
+
+        // === 操作类型 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);
+            }
+            this.save(customer);
+            customerId = customer.getId();
+        }
+
+        // === 处理联系人子表 ===
+        List<Map> tableField = (List<Map>) formData.get("tableField_mfkks8ww");
+        if (tableField == null || tableField.isEmpty()) {
+            return;
+        }
+
+        // ✅【修改点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);
+                }
+                currentMaxBm = finalBm; // 下一条继续递增
+            }
+
+            // ✅【新增】构造回写行(复制原行并覆盖 bm)
+            Map updatedRow = new HashMap(item);
+            updatedRow.put("textField_mfkp33s5", finalBm);
+            updatedTableRowsForYD.add(updatedRow);
+
+            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);
+            }
+        }
+
+        // ✅【修改点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());
+        }
+    }
+
+    // === 工具方法(保持不变)===
+    private String safeGetString(Map formData, String key) {
+        Object val = formData.get(key);
+        return val == null ? "" : String.valueOf(val);
+    }
+
+    /**
+     * 从编码如 CXR04454 生成 CXR04455
+     */
+    private String incrementCode(String code) {
+        if (code == null || code.isEmpty()) {
+            return "CXR00001";
+        }
+        Pattern pattern = Pattern.compile("^(\\D*)(\\d+)$");
+        Matcher matcher = pattern.matcher(code.trim());
+        if (matcher.matches()) {
+            String prefix = matcher.group(1);
+            String numberPart = matcher.group(2);
+            long number = Long.parseLong(numberPart);
+            String newNumber = String.format("%0" + numberPart.length() + "d", number + 1);
+            return prefix + newNumber;
+        } else {
+            return "CXR00001";
+        }
+    }
+
+
+
+}

+ 228 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdDeliveryServiceImpl.java

@@ -0,0 +1,228 @@
+package com.malk.huagao.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.malk.huagao.entity.*;
+import com.malk.huagao.mapper.KdYdDeliveryDetailMapper;
+import com.malk.huagao.mapper.KdYdDeliveryMapper;
+import com.malk.huagao.mapper.KdYdOrderDetailMapper;
+import com.malk.huagao.mapper.KdYdOrderMapper;
+import com.malk.huagao.service.IKdYdDeliveryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.malk.server.aliwork.YDConf;
+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 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.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-15
+ */
+@Service
+public class KdYdDeliveryServiceImpl extends ServiceImpl<KdYdDeliveryMapper, KdYdDelivery> implements IKdYdDeliveryService {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private KdYdDeliveryMapper kdYdDeliveryMapper;
+    @Autowired
+    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);
+        }
+
+        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
+            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);
+            }
+
+            count++;
+//save(kdYdDeliveryDetail);
+        }
+//        ydClient.operateData(
+//                YDParam.builder()
+//                        .formInstanceId(formInstId)
+//                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgrqnxmm", id)))
+//                        .useLatestVersion(true).build(), YDConf.FORM_OPERATION.update);
+    }
+    private static LocalDateTime parseTimestamp(String timestampStr) {
+        if (timestampStr == null || timestampStr.trim().isEmpty()) return null;
+        try {
+            long timestamp = Long.parseLong(timestampStr.trim());
+            return LocalDateTime.ofInstant(
+                    Instant.ofEpochMilli(timestamp),
+                    ZoneId.systemDefault()
+            );
+        } catch (NumberFormatException e) {
+            return null;
+        }
+    }
+    private static int parseInt(String str, int defaultValue) {
+        if (str == null || str.trim().isEmpty()) {
+            return defaultValue;
+        }
+        try {
+            return Integer.parseInt(str.trim());
+        } catch (NumberFormatException e) {
+            return defaultValue;
+        }
+    }
+    private String safeGetString(Map formData, String key) {
+        Object val = formData.get(key);
+        return val == null ? "" : String.valueOf(val);
+    }
+    public static BigDecimal toBigDecimal(String str) {
+        if (str == null || str.trim().isEmpty()) {
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+        try {
+            return new BigDecimal(str.trim())
+                    .setScale(2, RoundingMode.HALF_UP);
+        } catch (NumberFormatException e) {
+            // 返回默认值而不是抛出异常,避免程序中断
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
+
+    /**
+     * 重载方法,支持Number类型输入
+     */
+    public static BigDecimal toBigDecimal(Number number) {
+        if (number == null) {
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+        return new BigDecimal(number.toString())
+                .setScale(2, RoundingMode.HALF_UP);
+    }
+}

+ 128 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdMaterialServiceImpl.java

@@ -0,0 +1,128 @@
+package com.malk.huagao.service.impl;
+
+import com.malk.huagao.entity.KdYdCustomer;
+import com.malk.huagao.entity.KdYdMaterial;
+import com.malk.huagao.mapper.KdYdMaterialMapper;
+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.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+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;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author LQY
+ * @since 2025-10-16
+ */
+@Service
+public class KdYdMaterialServiceImpl extends ServiceImpl<KdYdMaterialMapper, KdYdMaterial> implements IKdYdMaterialService {
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private KdYdMaterialMapper kdYdMaterialMapper;
+    @Override
+    public void insertkdYdMaterial(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();
+        System.out.println(formData);
+        String wlmc = UtilMap.getString(formData, "textField_l43jpnsf");
+        String xh = UtilMap.getString(formData, "textField_l43jpnsg");
+        String gg = UtilMap.getString(formData, "textField_lqbxkzbq");
+        String wlfz = UtilMap.getString(formData, "selectField_mguazu3k");
+        String wlsx = UtilMap.getString(formData, "textField_l43jpnsh");
+        String xsy = UtilMap.getString(formData, "employeeField_mgu5vocz").replace("[\"", "").replace("\"]", "").trim();
+        String ssxl = UtilMap.getString(formData, "textField_mfxbtcdp");
+        String jx = UtilMap.getString(formData, "textField_mejl9nrs");
+        int sd = parseInt(safeGetString(formData, "numberField_mfxbtceb"), 0);
+        String mrsl = UtilMap.getString(formData, "textField_mfxbtcdq");
+        String chlb = UtilMap.getString(formData, "textField_mfxbtcdr");
+        String jbdw = UtilMap.getString(formData, "textField_mfxbtcdo");
+        BigDecimal xsjzj = toBigDecimal(safeGetString(formData, "numberField_mejl9nsc"));
+        String smzs = UtilMap.getString(formData, "textField_mfxbtce4");
+        String sjzt = UtilMap.getString(formData, "textField_mfxbtce6");
+        String jyzt = UtilMap.getString(formData, "textField_mfxbtcea");
+        String dzl = UtilMap.getString(formData, "textField_mfxbtcea");
+        String pzzt = UtilMap.getString(formData, "selectField_mejl9nrq");
+        String wlbt = wlmc+"-"+xh;
+//        String sdmc = ssxl+"-"+pzzt+"-"+safeGetString(formData, "numberField_mfxbtceb");
+
+        KdYdMaterial kdYdMaterial = new KdYdMaterial();
+        kdYdMaterial.setWlmc(wlmc);
+        kdYdMaterial.setXh(xh);
+        kdYdMaterial.setGg(gg);
+        kdYdMaterial.setWlfz(wlfz);
+        kdYdMaterial.setWlsx(wlsx);
+        kdYdMaterial.setJbdw(jbdw);
+        kdYdMaterial.setSsxl(ssxl);
+        kdYdMaterial.setJx(jx);
+        kdYdMaterial.setSd(sd);
+        kdYdMaterial.setMrsl(mrsl);
+        kdYdMaterial.setChlb(chlb);
+        kdYdMaterial.setXsy(xsy);
+        kdYdMaterial.setXsjzj(xsjzj);
+        kdYdMaterial.setSmzs(smzs);
+        kdYdMaterial.setSjzt(sjzt);
+        kdYdMaterial.setJyzt(jyzt);
+        kdYdMaterial.setDzl(dzl);
+        kdYdMaterial.setPzzt(pzzt);
+        kdYdMaterial.setMaterialtitle(wlbt);
+//        kdYdMaterial.setSpeedname(sdmc);
+        kdYdMaterial.setForminstid(formInstId);
+        kdYdMaterialMapper.insert(kdYdMaterial);
+
+       
+    }
+    private static int parseInt(String str, int defaultValue) {
+        if (str == null || str.trim().isEmpty()) {
+            return defaultValue;
+        }
+        try {
+            return Integer.parseInt(str.trim());
+        } catch (NumberFormatException e) {
+            return defaultValue;
+        }
+    }
+    private String safeGetString(Map formData, String key) {
+        Object val = formData.get(key);
+        return val == null ? "" : String.valueOf(val);
+    }
+    public static BigDecimal toBigDecimal(String str) {
+        if (str == null || str.trim().isEmpty()) {
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+        try {
+            return new BigDecimal(str.trim())
+                    .setScale(2, RoundingMode.HALF_UP);
+        } catch (NumberFormatException e) {
+            // 返回默认值而不是抛出异常,避免程序中断
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
+
+    /**
+     * 重载方法,支持Number类型输入
+     */
+    public static BigDecimal toBigDecimal(Number number) {
+        if (number == null) {
+            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+        }
+        return new BigDecimal(number.toString())
+                .setScale(2, RoundingMode.HALF_UP);
+    }
+}

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


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä