Browse Source

Merge remote-tracking branch 'origin/master'

xmy 4 months ago
parent
commit
20d4f863f6
100 changed files with 4817 additions and 222 deletions
  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. 792 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. 12 6
      mjava-boyang/src/main/resources/application-prod.yml
  7. 1 1
      mjava-boyang/src/main/resources/application.yml
  8. 92 0
      mjava-boyang/src/test/java/com/malk/boyang/DdTest.java
  9. 589 0
      mjava-boyang/src/test/java/com/malk/boyang/EqbTest.java
  10. 0 184
      mjava-boyang/src/test/java/com/malk/boyang/Test.java
  11. 68 0
      mjava-chenyixun/pom.xml
  12. 17 0
      mjava-chenyixun/src/main/java/com/malk/chenyixun/ChenyixunApplication.java
  13. 40 0
      mjava-chenyixun/src/main/java/com/malk/chenyixun/controller/ChenyixunController.java
  14. 11 0
      mjava-chenyixun/src/main/java/com/malk/chenyixun/service/ChenyixunService.java
  15. 198 0
      mjava-chenyixun/src/main/java/com/malk/chenyixun/service/impl/ChenyixunServiceImpl.java
  16. 27 0
      mjava-chenyixun/src/main/resources/application-dev.yml
  17. 27 0
      mjava-chenyixun/src/main/resources/application-prod.yml
  18. 15 0
      mjava-chenyixun/src/main/resources/application.yml
  19. 61 0
      mjava-chenyixun/src/main/resources/logback-spring.xml
  20. 18 3
      mjava-chuizi/src/main/java/com/malk/chuizi/controller/ChuiziController.java
  21. 33 9
      mjava-chuizi/src/main/java/com/malk/chuizi/service/impl/ChuiZiServiceImpl.java
  22. 1 1
      mjava-demo/src/main/java/com/malk/xzkj/DemoApplication.java
  23. 32 4
      mjava-huagao/pom.xml
  24. 2 1
      mjava-huagao/src/main/java/com/malk/huagao/HuaGaoApplication.java
  25. 18 0
      mjava-huagao/src/main/java/com/malk/huagao/KdEntity/BillQuery.java
  26. 14 0
      mjava-huagao/src/main/java/com/malk/huagao/KdEntity/View.java
  27. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/config/KDWebApiConf.java
  28. 29 0
      mjava-huagao/src/main/java/com/malk/huagao/config/KDWebApiConfig.java
  29. 18 0
      mjava-huagao/src/main/java/com/malk/huagao/config/StartupRunner.java
  30. 151 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/HgEqbController.java
  31. 41 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdHuagaoController.java
  32. 108 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerController.java
  33. 34 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerLiaisonController.java
  34. 32 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdCustomerReferrerController.java
  35. 42 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdDeliveryController.java
  36. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdMaterialController.java
  37. 40 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOrderController.java
  38. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdOutboundController.java
  39. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdReceivableController.java
  40. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdTransferController.java
  41. 36 0
      mjava-huagao/src/main/java/com/malk/huagao/controller/KdYdZpController.java
  42. 96 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomer.java
  43. 56 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomerLiaison.java
  44. 60 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdCustomerReferrer.java
  45. 76 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdDelivery.java
  46. 73 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdDeliveryDetail.java
  47. 82 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdMaterial.java
  48. 76 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrder.java
  49. 85 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrderDetail.java
  50. 41 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOrderPayment.java
  51. 68 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOutbound.java
  52. 101 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdOutboundDetail.java
  53. 66 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdPaymentReceipt.java
  54. 66 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdPaymentReceiptDetail.java
  55. 71 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivable.java
  56. 87 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivableDetail.java
  57. 43 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdReceivablePayment.java
  58. 74 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdTransfer.java
  59. 68 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdTransferDetail.java
  60. 65 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdZp.java
  61. 81 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdZpDetail.java
  62. 1 1
      mjava-huagao/src/main/java/com/malk/huagao/entity/YdUserInput.java
  63. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerLiaisonMapper.java
  64. 23 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerMapper.java
  65. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdCustomerReferrerMapper.java
  66. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdDeliveryDetailMapper.java
  67. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdDeliveryMapper.java
  68. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdMaterialMapper.java
  69. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderDetailMapper.java
  70. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderMapper.java
  71. 7 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOrderPaymentMapper.java
  72. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOutboundDetailMapper.java
  73. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdOutboundMapper.java
  74. 7 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdPaymentReceiptDetailMapper.java
  75. 8 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdPaymentReceiptMapper.java
  76. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivableDetailMapper.java
  77. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivableMapper.java
  78. 7 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdReceivalablePaymentMapper.java
  79. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdTransferDetailMapper.java
  80. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdTransferMapper.java
  81. 16 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdZpDetailMapper.java
  82. 24 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/KdYdZpMapper.java
  83. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerLiaisonMapper.xml
  84. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerMapper.xml
  85. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdCustomerReferrerMapper.xml
  86. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdDeliveryDetailMapper.xml
  87. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdDeliveryMapper.xml
  88. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdMaterialMapper.xml
  89. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOrderDetailMapper.xml
  90. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOrderMapper.xml
  91. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOutboundDetailMapper.xml
  92. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdOutboundMapper.xml
  93. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdReceivableDetailMapper.xml
  94. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdReceivableMapper.xml
  95. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdTransferDetailMapper.xml
  96. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdTransferMapper.xml
  97. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdZpDetailMapper.xml
  98. 5 0
      mjava-huagao/src/main/java/com/malk/huagao/mapper/xml/KdYdZpMapper.xml
  99. 57 0
      mjava-huagao/src/main/java/com/malk/huagao/schedule/KdScheduleTask.java
  100. 0 0
      mjava-huagao/src/main/java/com/malk/huagao/schedule/ScheduleTask.java

+ 10 - 0
mjava-boyang/pom.xml

@@ -39,6 +39,16 @@
             <artifactId>base</artifactId>
             <artifactId>base</artifactId>
             <version>1.1-SNAPSHOT</version>
             <version>1.1-SNAPSHOT</version>
         </dependency>
         </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>
     </dependencies>
 
 
     <build>
     <build>

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

@@ -1,18 +1,107 @@
 package com.malk.boyang.controller;
 package com.malk.boyang.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.malk.boyang.service.BoyangService;
 import com.malk.boyang.service.BoyangService;
 import com.malk.server.common.McR;
 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.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
 @RestController
-@RequestMapping
+@RequestMapping()
 public class BoyangController {
 public class BoyangController {
 
 
     @Autowired
     @Autowired
     private BoyangService boyangService;
     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,signFlowId);
+            }
+            //签署完成回写审批单
+            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 com.malk.server.common.McR;
 
 
+import java.util.Map;
+
 public interface BoyangService {
 public interface BoyangService {
+    //发起e签宝签署
+    McR eSignSubmit(Map map);
+
+    //e签宝签署完成回写签署文件
+    void signed(String processInstanceId,String signFlowId);
+
+    McR getOrganization(String name);
 
 
+    void start(String processInstanceId,String signFlowId);
 }
 }

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

@@ -1,27 +1,813 @@
 package com.malk.boyang.service.impl;
 package com.malk.boyang.service.impl;
 
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.boyang.service.BoyangService;
 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.common.McR;
+import com.malk.server.dingtalk.DDConf;
 import com.malk.server.dingtalk.DDR_New;
 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.UtilHttp;
 import com.malk.utils.UtilMap;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringEscapeUtils;
+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.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 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 org.springframework.stereotype.Service;
 
 
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.*;
 import java.util.*;
 
 
 @Slf4j
 @Slf4j
 @Service
 @Service
 public class BoyangServiceImpl implements BoyangService {
 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/";// 接口调用域名(内网)
+    final static String signerUser = "wangze";// 签署人
+    final static String cw_signerUser = "wozy";// 财务签署人
+    final static String uploadFileUrlHost = "http://11.0.11.62:8199/";// 返回的上传文件url host*/
+
+    //==================================================== (本地)e签宝对接测试-用印申请 ====================================================
+//    final static String signActivityId = "802c_7eaf";//签署区设置节点
+//    final static String[] activityIds = new String[]{"f0e3_8ef9","2af6_ccd3","68d8_0e65"};//签署节点:e签宝签署节点id、e签宝财务签署节点id、e签宝会签签署节点id
+
+
+    //==================================================== e签宝对接测试-用印申请 ====================================================
+//    final static String signActivityId = "802c_7eaf";//签署区设置节点
+//    final static String[] activityIds = new String[]{"f0e3_8ef9","2af6_ccd3","b8e5_160a"};//签署节点:e签宝签署节点id、e签宝财务签署节点id、e签宝会签签署节点id
+
+    //==================================================== 用印申请 ====================================================
+    final static String signActivityId = "c331_1d4f";//签署区设置节点
+    final static String[] activityIds = new String[]{"19b2_ec4a","bfeb_c637","433b_839a"};//签署节点:e签宝签署节点id、e签宝财务签署节点id、e签宝会签签署节点id
+
+    //正式环境
+    final static String projectId = "1000003";// 应用ID
+    final static String secret = "5V6xsY3q8JWZ9Qik";// 应用密钥
+    final static String businessTypeCode = "f5e84fdb04ef4ead57f37e2a60729066";// 钉钉OA对接业务模板
+    final static String organizationCode = "0c8dd6496e7f4d228ec033aeef95a526";// 宁波博洋家纺集团有限公司
+    final static String host = "https://dzqz.beyond-it-service.com/";// 接口调用域名
+    final static String intranet_host = "http://11.0.11.82/";// 接口调用域名(内网)
+    final static String signerUser = "22060093";// 签署人
+    final static String cw_signerUser = "13586834789";// 财务签署人
+    final static String uploadFileUrlHost = "http://11.0.11.82:8199/";// 返回的上传文件url host
+
+
+
+
+    @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<>();
+        boolean hasFiance = false;
+
+        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");hasFiance = true;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", "FINANCE".equals(sealType) ? cw_signerUser : signerUser);
+            signer.put("userCode", signerUser);
+            signer.put("organizationCode", UtilMap.getString(companyList.get(i),"key"));
+//            signer.put("organizationCode", organizationCode);
+            signer.put("signNode", 1);
+            if (hasFiance){
+                signer.put("signMode", "1");//0:顺序签  1:无序签
+                signer.put("signOrder", 1);
+            }else {
+                signer.put("signMode", "0");//0:顺序签  1:无序签
+                signer.put("signOrder", i + 1);
+            }
+
+//            signer.put("sealTypeCode", String.join(",",sealTypeCodeList));
+
+            signerInfos.add(signer);
+
+            if (hasFiance){
+                Map signer2 = new HashMap<>(signer);
+                signer2.put("userCode", cw_signerUser);
+                signer2.put("signOrder", 1);
+
+                signerInfos.add(signer2);
+            }
+        }
+
+
+        requestMap.put("signerInfos", signerInfos);
+
+        // 打印结果(可选)
+        System.out.println("入参:"+JSONObject.toJSONString(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,"接口测试 "+ "已签署,签署文件下载地址:" + signDownloadOuterUrl,null);
+
+
+
+                //方案2、评论签署后附件
+                //签署后文件下载到本地
+                downloadFile(signDownloadOuterUrl,downloadPath + signedFileName);
+                //签署后文件上传到钉盘
+                Map dentry = uploadDdFile(spaceId, parentDentryUuid, downloadPath + signedFileName, operatorUnionId);
+                //审批单添加评论
+                comment(processInstanceId,originatorUserId,fileName + "已签署",Arrays.asList(dentry));
+            }
+
+            //自动通过节点
+            List<Map> tasks = UtilMap.getList(result, "tasks");
+            for (Map task : tasks) {
+                String activityId = UtilMap.getString(task, "activityId");
+                for (String id : activityIds) {
+                    if (id.equals(activityId)){
+                        long taskId = UtilMap.getLong(task, "taskId");
+                        String userId = UtilMap.getString(task, "userId");
+
+                        Map body = new HashMap();
+                        body.put("processInstanceId",processInstanceId);
+                        body.put("remark","签署完成自动通过");
+                        body.put("result","agree");
+                        body.put("actionerUserId",userId);
+                        body.put("taskId",taskId);
+
+                        UtilHttp.doPost("https://api.dingtalk.com/v1.0/workflow/processInstances/execute", ddClient.initTokenHeader(), null, body);
+                    }
+                }
+
+            }
+
+        } 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);
+            }
+        }
+
+        //options按label排序
+        options.sort(Comparator.comparing(m -> UtilMap.getString(m, "label")));
+
+        return McR.success(options);
+    }
+
+    @Override
+    public void start(String processInstanceId,String signFlowId) {
+        try {
+            Map result = ddClient_workflow.getProcessInstanceId(ddClient.getAccessToken(), processInstanceId);
+            String originatorUserId = UtilMap.getString(result, "originatorUserId");
+
+            //获取签署地址列表
+            Map eqbData = (Map) eqbGet(host + "/esign-signs/v1/signFlow/signUrls?signFlowId=" + signFlowId);
+
+            List<Map> signUrlInfos = UtilMap.getList(eqbData, "signUrlInfos");
+
+            for (Map signUrlInfo : signUrlInfos) {
+                String userName = UtilMap.getString(signUrlInfo, "userName");
+                String organizationName = UtilMap.getString(signUrlInfo, "organizationName");
+                String signUrlShort = UtilMap.getString(signUrlInfo, "signUrlShort");
+
+                //审批单添加评论
+                comment(processInstanceId,originatorUserId,"签署人:" + userName + ",签署组织:" + organizationName + ",签署地址:" + signUrlShort,null);
+            }
+
+            //自动通过节点
+            List<Map> tasks = UtilMap.getList(result, "tasks");
+            for (Map task : tasks) {
+                String activityId = UtilMap.getString(task, "activityId");
+                //e签宝设置签署区节点id
+                if (signActivityId.equals(activityId)){
+                    long taskId = UtilMap.getLong(task, "taskId");
+                    String userId = UtilMap.getString(task, "userId");
+
+                    Map body = new HashMap();
+                    body.put("processInstanceId",processInstanceId);
+                    body.put("remark","签署区设置完成自动通过");
+                    body.put("result","agree");
+                    body.put("actionerUserId",userId);
+                    body.put("taskId",taskId);
+
+                    UtilHttp.doPost("https://api.dingtalk.com/v1.0/workflow/processInstances/execute", ddClient.initTokenHeader(), null, body);
+
+                    return;
+                }
+            }
+
+        } 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(uploadFileUrlHost,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请求
+            log.info("eqb请求入参,url:{},header:{}",url,header);
+            String resultStr = HTTPHelper.sendGet(url, header, "UTF-8");
+            log.info("eqb请求响应:{}",resultStr);
+            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");
+
+            log.info("eqb请求入参,url:{},reqBodyData:{},header:{}",url,reqBodyData,header);
+
+            String resultStr = HTTPHelper.sendPOST(url, reqBodyData, header, "UTF-8");
+
+            log.info("eqb请求响应:{}",resultStr);
+
+            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", "*/*");
+
+            log.info("eqb请求入参,url:{},filePath:{},body:{},header:{}",url,filePath,body,header);
+            String resultStr = HTTPHelper.uploadFile(url,  "file", filePath, body,  header, "UTF-8");
+            log.info("eqb请求响应:{}",resultStr);
+
+            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
 dingtalk:
 dingtalk:
-  agentId:
-  appKey:
-  appSecret:
+  agentId: 4111300995
+  appKey: dingt4kem6twzlqehm58
+  appSecret: ZgE_XOfccVlSOcbw3cN0Ad_dJFqBB_PfPPmqJzGTgKXPu5tsh17KibxG7WEB6_hc
   corpId:
   corpId:
   aesKey:
   aesKey:
   token:
   token:
+  operator: "065965353428672133" #潘麒卿
+  operatorUnionId: AfZv5MOJ80W2STOhUbbOcAiEiE #潘麒卿
+  downloadPath: C:\\Users\\EDY\\Desktop\\项目\\博洋家纺\\files\\
+  spaceId: 27829762189 #钉盘-e签宝
+  parentDentryUuid: y20BglGWO23pGpLOsaALnnz98A7depqY #钉盘-e签宝-签署后文件
+
 
 
 aliwork:
 aliwork:
   appType:
   appType:

+ 12 - 6
mjava-boyang/src/main/resources/application-prod.yml

@@ -1,5 +1,5 @@
 server:
 server:
-  port: 9033
+  port: 30001
   servlet:
   servlet:
     context-path: /boyang
     context-path: /boyang
 
 
@@ -7,18 +7,24 @@ enable:
   scheduling: false
   scheduling: false
 logging:
 logging:
   config: classpath:logback-spring.xml
   config: classpath:logback-spring.xml
-  path: /home/server/boyang/log/
+  path: d:\\boyang_eqb\\log\\
   level:
   level:
-    com.malk.*: debug
+    com.malk.*: info
 
 
 # dingtalk
 # dingtalk
 dingtalk:
 dingtalk:
-  agentId:
-  appKey:
-  appSecret:
+  agentId: 4111300995
+  appKey: dingt4kem6twzlqehm58
+  appSecret: ZgE_XOfccVlSOcbw3cN0Ad_dJFqBB_PfPPmqJzGTgKXPu5tsh17KibxG7WEB6_hc
   corpId:
   corpId:
   aesKey:
   aesKey:
   token:
   token:
+  operator: "065965353428672133" #潘麒卿
+  operatorUnionId: AfZv5MOJ80W2STOhUbbOcAiEiE #潘麒卿
+  downloadPath: d:\\boyang_eqb\\files\\
+  spaceId: 27829762189 #钉盘-e签宝
+  parentDentryUuid: y20BglGWO23pGpLOsaALnnz98A7depqY #钉盘-e签宝-签署后文件
+
 
 
 aliwork:
 aliwork:
   appType:
   appType:

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

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

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

+ 68 - 0
mjava-chenyixun/pom.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.0.RELEASE</version> <!-- 使用最新的稳定版或其他适用版本 -->
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>com.malk.chenyixun</groupId>
+    <artifactId>mjava-chenyixun</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>base</artifactId>
+            <version>1.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>chenyixun</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <executable>true</executable>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 17 - 0
mjava-chenyixun/src/main/java/com/malk/chenyixun/ChenyixunApplication.java

@@ -0,0 +1,17 @@
+package com.malk.chenyixun;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+@EnableScheduling
+public class ChenyixunApplication {
+    public static void main(String[] args) {
+        try {
+            SpringApplication.run(ChenyixunApplication.class,args);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 40 - 0
mjava-chenyixun/src/main/java/com/malk/chenyixun/controller/ChenyixunController.java

@@ -0,0 +1,40 @@
+package com.malk.chenyixun.controller;
+
+import com.malk.chenyixun.service.ChenyixunService;
+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.RestController;
+
+import java.util.Map;
+
+@RestController
+public class ChenyixunController {
+    @Autowired
+    private ChenyixunService chenyixunService;
+
+    //采购合同订单车辆清单同步中间表(处理子表数量超100)
+    @PostMapping("/sync1")
+    public McR sync1(@RequestBody Map map){
+        chenyixunService.sync1(map);
+
+        return McR.success();
+    }
+
+    //销售合同订单车辆清单同步中间表(处理子表数量超100)
+    @PostMapping("/sync2")
+    public McR sync2(@RequestBody Map map){
+        chenyixunService.sync2(map);
+
+        return McR.success();
+    }
+
+    //客户合同中间表更新车辆档案(处理更新数量超100)
+    @PostMapping("/sync3")
+    public McR sync3(@RequestBody Map map){
+        chenyixunService.sync3(map);
+
+        return McR.success();
+    }
+}

+ 11 - 0
mjava-chenyixun/src/main/java/com/malk/chenyixun/service/ChenyixunService.java

@@ -0,0 +1,11 @@
+package com.malk.chenyixun.service;
+
+import java.util.Map;
+
+public interface ChenyixunService {
+    void sync1(Map map);
+
+    void sync2(Map map);
+
+    void sync3(Map map);
+}

+ 198 - 0
mjava-chenyixun/src/main/java/com/malk/chenyixun/service/impl/ChenyixunServiceImpl.java

@@ -0,0 +1,198 @@
+package com.malk.chenyixun.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.base.Strings;
+import com.malk.chenyixun.service.ChenyixunService;
+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.apache.commons.lang3.StringEscapeUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ChenyixunServiceImpl implements ChenyixunService {
+    @Autowired
+    private YDClient ydClient;
+
+    @Async
+    @Override
+    public void sync1(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        List<Map> cwclr = UtilMap.getList(formData,"employeeField_mf0xew5w_id");//车务处理人
+        Object jhdhsj = formData.get("dateField_mb5wl2kv");//计划到货时间
+        List<Map> gys = convertAssociationFormField(UtilMap.getString(formData,"associationFormField_mb5wl2kq_id"));//供应商
+        String gysbh = UtilMap.getString(formData,"textField_mb97iaeh");//供应商编号
+        String gysmc = UtilMap.getString(formData,"textField_mcu6kvlh");//供应商名称
+        List<Map> cghtdd = convertAssociationFormField(UtilMap.getString(formData,"associationFormField_mb97iaei_id"));//采购合同订单关联表单
+        String cghtddbh = UtilMap.getString(formData,"serialNumberField_mb5wl2kl");//采购合同订单编号
+        List<Map> fqr = UtilMap.getList(formData,"employeeField_mb5wl2kj_id");//发起人
+
+        List<Map> carList = getYdInnerTableList("FORM-B940BDA5D34647E9B7923C9F9FB43B24S19P",formInstId,"tableField_mcn18skj");//采购合同订单车辆清单子表
+
+        for (Map car : carList) {
+            Map carFormData = new HashMap();
+
+            carFormData.put("textField_mcn3vgm4",car.get("textField_mcn3vgm4"));//车辆编号
+            carFormData.put("associationFormField_mcn18skl",convertAssociationFormField(UtilMap.getString(car,"associationFormField_mcn18skl_id")));//车辆选择
+            carFormData.put("textField_mcn18sko",car.get("textField_mcn18sko"));//车架号
+            carFormData.put("textField_mcn18skn",car.get("textField_mcn18skn"));//车型配置
+            carFormData.put("dateField_mb5wl2kv",jhdhsj);//计划到货时间
+            carFormData.put("employeeField_mcn5ez9k",cwclr);//车务处理人
+            carFormData.put("employeeField_mb5wl2kj",fqr);//发起人
+            carFormData.put("associationFormField_mb97iaei",cghtdd);//采购合同订单关联表单
+            carFormData.put("associationFormField_mb5wl2kq",gys);//供应商
+            carFormData.put("textField_mb97iaeh",gysbh);//供应商编号
+            carFormData.put("textField_mbpvv7vc",cghtddbh);//采购合同订单编号
+            carFormData.put("textField_mcu4ue56",car.get("textField_mcu4ue56"));//车型编号
+            carFormData.put("textField_mcu6igax",gysmc);//供应商名称
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-01B84B082A364F3AAE6FCB905B1860F0JL1H")//采购合同车辆清单中间表
+                    .formDataJson(JSONObject.toJSONString(carFormData))
+                    .build(), YDConf.FORM_OPERATION.create);
+        }
+    }
+
+    @Async
+    @Override
+    public void sync2(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        List<Map> kh = convertAssociationFormField(UtilMap.getString(formData,"associationFormField_mb5uutk8_id"));//客户
+        String khbh = UtilMap.getString(formData,"textField_mb7jzz6z");//客户编号
+
+        List<Map> xshtdd = convertAssociationFormField(UtilMap.getString(formData,"associationFormField_mb8s60wl_id"));//销售合同订单关联表单
+        String xshtddbh = UtilMap.getString(formData,"serialNumberField_mb5uutk0");//销售合同订单编号
+
+        List<Map> khhtda = convertAssociationFormField(UtilMap.getString(formData, "associationFormField_mcmq5gec_id"));//客户合同档案关联表单
+        String khhtbh = UtilMap.getString(formData,"textField_mcmq5ged");//客户合同编号
+
+        List<String> cw = UtilMap.getList(formData,"checkboxField_mcn18skp");//车务
+
+        List<Map> carList = getYdInnerTableList("FORM-A2BD5F465D16475FB0E95EAD25BBE6ABRYU2",formInstId,"tableField_mcn18skj");//销售合同订单车辆清单子表
+
+        for (Map car : carList) {
+            Map carFormData = new HashMap();
+
+            carFormData.put("associationFormField_mcn18skl",convertAssociationFormField(UtilMap.getString(car,"associationFormField_mcn18skl_id")));//车辆选择
+            carFormData.put("textField_mcn18sko",car.get("textField_mcn18sko"));//车架号
+            carFormData.put("textField_mcn18skn",car.get("textField_mcn18skn"));//车型配置
+            carFormData.put("textField_mco7usdr",car.get("textField_mco7usdr"));//UUID
+
+            carFormData.put("associationFormField_mb8s60wl",xshtdd);//销售合同订单关联表单
+            carFormData.put("textField_mcu7umpx",xshtddbh);//销售合同订单编号
+
+            carFormData.put("associationFormField_mcmq5gec",khhtda);//客户合同档案关联表单
+            carFormData.put("textField_mcmq5ged",khhtbh);//客户合同编号
+
+            carFormData.put("associationFormField_mb5uutk8",kh);//客户选择
+            carFormData.put("textField_mb7jzz6z",khbh);//客户编号
+
+            carFormData.put("checkboxField_mcn18skp",cw);//车务
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-AC1FD7BF8F6C4FAF926B067EBD85B942PWOR")//销售合同车辆清单中间表
+                    .formDataJson(JSONObject.toJSONString(carFormData))
+                    .build(), YDConf.FORM_OPERATION.create);
+        }
+    }
+
+    @Async
+    @Override
+    public void sync3(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        List<Map> khhtda = convertAssociationFormField(UtilMap.getString(formData, "associationFormField_mbj0epft_id"));//客户合同档案关联表单
+        String khhdbh = UtilMap.getString(formData, "textField_mbhjyvev");//客户合同编号
+
+        String xshtddbh = UtilMap.getString(formData, "textField_mbhjyvee");//销售合同订单编号
+
+        Map updateFormData = new HashMap();
+        updateFormData.put("associationFormField_mbhn6ixw",khhtda);
+        updateFormData.put("textField_mbj1dpay",khhdbh);
+
+        List<Map> carList = getYdFormDataList("FORM-4B9A81B17E34471D8B3DA1ADC2C53A77U2EU", JSONObject.toJSONString(UtilMap.map("textField_mbj1dpaw", xshtddbh)), YDConf.FORM_QUERY.retrieve_list);
+
+        for (Map car : carList) {
+            String formInstanceId = UtilMap.getString(car, "formInstanceId");
+
+            Map carFormData = UtilMap.getMap(car, "formData");
+
+            String carkhhtbh = UtilMap.getString(carFormData, "textField_mbj1dpay");
+
+            if (Strings.isNullOrEmpty(carkhhtbh)){
+                ydClient.operateData(YDParam.builder()
+                        .formInstanceId(formInstanceId)
+                        .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                        .build(), YDConf.FORM_OPERATION.update);
+            }
+        }
+    }
+
+    private List<Map> convertAssociationFormField(String jsonString) {
+        String jsonString2 = StringEscapeUtils.unescapeJava(jsonString.substring(1, jsonString.length() - 1));//新供应商(关联表单)
+
+        List<Map> associationFormField =(List<Map>) JSONArray.parse(jsonString2);
+
+        return associationFormField;
+    }
+
+    private List<Map> getYdInnerTableList(String formUuid,String formInstId,String tableFieldId) {
+        List<Map> list = new ArrayList<>();
+        DDR_New ddrNew;
+        int pageNumber = 1;
+        int pageSize = 50;
+        do {
+            ddrNew = ydClient.queryData(YDParam.builder()
+                    .formUuid(formUuid)
+                    .formInstanceId(formInstId)
+                    .tableFieldId(tableFieldId)
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize).build(), YDConf.FORM_QUERY.retrieve_details);
+
+            list.addAll((List<Map>) ddrNew.getData());
+            pageNumber++;
+        }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
+        return list;
+    }
+
+    private List<Map> getYdFormDataList(String formUuid, String searchCondition, YDConf.FORM_QUERY formQuery) {
+        List<Map> list = new ArrayList<>();
+        DDR_New ddrNew = new DDR_New();
+        int pageNumber = 1;
+        int pageSize = 100;
+        do {
+            ddrNew = ydClient.queryData(YDParam.builder().formUuid(formUuid)
+                    .searchCondition(searchCondition)
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize).build(), formQuery);
+
+            list.addAll((List<Map>) ddrNew.getData());
+            pageNumber++;
+        }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
+        return list;
+    }
+}

+ 27 - 0
mjava-chenyixun/src/main/resources/application-dev.yml

@@ -0,0 +1,27 @@
+server:
+  port: 9035
+  servlet:
+    context-path: /chenyixun
+
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/chenyixun/log/
+  level:
+    com.malk.*: debug
+
+# dingtalk
+dingtalk:
+  agentId: 2691784047
+  appKey: dinghbynhnd2dbgypmsa
+  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
+  corpId:
+  aesKey:
+  token:
+  operator:
+
+aliwork:
+  appType: APP_XB4XZD6GXDB30FFXP7NL
+  systemToken: ODA66ZB1C5RVKC399M159AS7J5KE2AUREV4BM663
+

+ 27 - 0
mjava-chenyixun/src/main/resources/application-prod.yml

@@ -0,0 +1,27 @@
+server:
+  port: 9035
+  servlet:
+    context-path: /chenyixun
+
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/chenyixun/log/
+  level:
+    com.malk.*: info
+
+# dingtalk
+dingtalk:
+  agentId: 2691784047
+  appKey: dinghbynhnd2dbgypmsa
+  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
+  corpId:
+  aesKey:
+  token:
+  operator:
+
+aliwork:
+  appType: APP_XB4XZD6GXDB30FFXP7NL
+  systemToken: ODA66ZB1C5RVKC399M159AS7J5KE2AUREV4BM663
+

+ 15 - 0
mjava-chenyixun/src/main/resources/application.yml

@@ -0,0 +1,15 @@
+spring:
+  profiles:
+    active: prod
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+  http:
+    enabled: false
+
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  global-config:
+    db-config:
+      id-type: auto

+ 61 - 0
mjava-chenyixun/src/main/resources/logback-spring.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="false" scanPeriod="60 seconds">
+    <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/home/server/log/"/>
+    <property name="FileNamePattern" value="${LOG_HOME}%d{yyyyMM}/%d{dd}"/>
+
+    <!-- 定义控制台输出 -->
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] - %-5level - %logger{50} - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <!--<file>${FileNamePattern}/info.log</file>-->
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${FileNamePattern}/info-%i.log</fileNamePattern>
+            <MaxHistory>30</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>30MB</MaxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
+        <discriminator>
+            <Key>processid</Key>
+            <DefaultValue>sys</DefaultValue>
+        </discriminator>
+        <sift>
+            <appender name="FILE-${processid}"
+                      class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                    <FileNamePattern>
+                        ${FileNamePattern}/${processid}.log
+                    </FileNamePattern>
+                </rollingPolicy>
+                <layout class="ch.qos.logback.classic.PatternLayout">
+                    <Pattern>
+                        %d{yyyyMMdd:HH:mm:ss.SSS} [%thread] %-5level %msg%n
+                    </Pattern>
+                </layout>
+            </appender>
+        </sift>
+    </appender>
+
+
+    <!-- 日志输出级别 -->
+    <logger name="org.springframework" level="debug"  additivity="false"/>
+    <logger name="com.malk.connecter" level="debug"/>
+    <root level="INFO">
+        <appender-ref ref="stdout"/>
+        <appender-ref ref="appLogAppender"/>
+        <appender-ref ref="SIFT"/>
+    </root>
+</configuration>

+ 18 - 3
mjava-chuizi/src/main/java/com/malk/chuizi/controller/ChuiziController.java

@@ -2,9 +2,12 @@ package com.malk.chuizi.controller;
 
 
 import com.malk.chuizi.service.ChuiZiService;
 import com.malk.chuizi.service.ChuiZiService;
 import com.malk.server.common.McR;
 import com.malk.server.common.McR;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Workflow;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
 import java.util.Map;
 import java.util.Map;
@@ -14,15 +17,27 @@ public class ChuiziController {
 
 
     @Autowired
     @Autowired
     ChuiZiService chuiZiService;
     ChuiZiService chuiZiService;
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDClient_Workflow ddClient_workflow;
+
+    /// dingtalk
+    final String APP_EKY = "ding9seotugcsfjlgy8h";
+    final String APP_SECRET = "4k6hoCDUwwpUG5WXijfWcnzIm97j_zGquJqXJgrkBcyp2vo7ceV6dO-nSDUUDMhE";
     @GetMapping("/test")
     @GetMapping("/test")
     public McR test(){
     public McR test(){
         return McR.success();
         return McR.success();
     }
     }
 
 
     //新增其他应付单
     //新增其他应付单
-    @PostMapping("/saveAccountsPayable")
-    public McR saveOtherMeet(Map processData) {
-        return chuiZiService.saveAccountsPayable(processData);
+    @PostMapping("/saveOtherMeet")
+    public McR saveOtherMeet(@RequestBody Map data) {
+        String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
+        Map processData = ddClient_workflow.getProcessInstanceId(token, data.get("id").toString());
+        return chuiZiService.saveOtherMeet(processData);
     }
     }
 
 
 
 

+ 33 - 9
mjava-chuizi/src/main/java/com/malk/chuizi/service/impl/ChuiZiServiceImpl.java

@@ -210,7 +210,7 @@ public class ChuiZiServiceImpl implements ChuiZiService {
         List<Map<String,Object>> sonData = new ArrayList<>();
         List<Map<String,Object>> sonData = new ArrayList<>();
         formComponentValues.forEach(e->{
         formComponentValues.forEach(e->{
             String name = e.get("name").toString();
             String name = e.get("name").toString();
-            if ("金蝶科目".equals(name) || "报销科目".equals(name) || "归属部门".equals(name) || "发票类型".equals(name) || "申请人".equals(name) ) {
+            if ("金蝶科目".equals(name) || "报销科目".equals(name) || "归属部门".equals(name) || "发票类型".equals(name) || "申请人".equals(name) || "报销类型".equals(name) || "金额".equals(name)) {
                 mainData.put(name, e.get("value"));
                 mainData.put(name, e.get("value"));
             } else if ("TableField".equals(e.get("componentType"))) {
             } else if ("TableField".equals(e.get("componentType"))) {
                 Object parse = JSON.parse(e.get("value").toString());
                 Object parse = JSON.parse(e.get("value").toString());
@@ -252,7 +252,20 @@ public class ChuiZiServiceImpl implements ChuiZiService {
             }
             }
         });
         });
         List<Object> objects  = new ArrayList<>();
         List<Object> objects  = new ArrayList<>();
-        if (ObjectUtil.isNotNull(sonData) && sonData.size()>0){
+        if ("管理费用报销".equals(mainData.get("报销类型"))){
+            OtherMeetEntity otherMeetEntity = new OtherMeetEntity();
+            otherMeetEntity.setFCOSTID(new FNumber(mainData.get("金蝶科目").toString()));
+            otherMeetEntity.setFINVOICETYPE(mainData.get("发票类型").toString());
+            otherMeetEntity.setFCOSTDEPARTMENTID(new FNumber(DEPARTMENT.get(mainData.get("归属部门").toString())));
+            otherMeetEntity.setFEntryTaxRate(0.0);
+            otherMeetEntity.setFNOTAXAMOUNTFOR(Double.parseDouble(mainData.get("金额").toString()));
+            otherMeetEntity.setFTAXAMOUNTFOR(0.0);
+            otherMeetEntity.setFTOTALAMOUNTFOR(Double.parseDouble(mainData.get("金额").toString()));
+            otherMeetEntity.setFPaySubEntity(null);
+
+            objects.add(otherMeetEntity);
+
+        }else if(ObjectUtil.isNotNull(sonData) && sonData.size()>0){
             sonData.forEach(e->{
             sonData.forEach(e->{
                 OtherMeetEntity otherMeetEntity = new OtherMeetEntity();
                 OtherMeetEntity otherMeetEntity = new OtherMeetEntity();
                 otherMeetEntity.setFCOSTID(new FNumber(mainData.get("金蝶科目").toString()));
                 otherMeetEntity.setFCOSTID(new FNumber(mainData.get("金蝶科目").toString()));
@@ -270,7 +283,7 @@ public class ChuiZiServiceImpl implements ChuiZiService {
         otherMeet.setFEntity(objects);
         otherMeet.setFEntity(objects);
 
 
         save.setModel(otherMeet);
         save.setModel(otherMeet);
-        System.out.println(save);
+//        System.out.println(save);
 
 
         try{
         try{
             K3CloudApi client = new K3CloudApi(initIden());
             K3CloudApi client = new K3CloudApi(initIden());
@@ -322,8 +335,7 @@ public class ChuiZiServiceImpl implements ChuiZiService {
         Save save = new Save();
         Save save = new Save();
 
 
         Model model = new Model();
         Model model = new Model();
-        model.setFCONTACTUNITTYPE("BD_Supplier");
-        model.setFBillTypeID(new BillTypeID("FKDLX01_SYS"));
+
         model.setFDATE(LocalDateTimeUtil.format(LocalDate.now(),"yyyy-MM-dd"));
         model.setFDATE(LocalDateTimeUtil.format(LocalDate.now(),"yyyy-MM-dd"));
         model.setFCURRENCYID(new FNumber("PRE001"));//币别
         model.setFCURRENCYID(new FNumber("PRE001"));//币别
         List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
         List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
@@ -336,10 +348,22 @@ public class ChuiZiServiceImpl implements ChuiZiService {
         });
         });
         List<AccountsPayableEntity> objects  = new ArrayList<>();
         List<AccountsPayableEntity> objects  = new ArrayList<>();
         if (ObjectUtil.isNotNull(mainData)){
         if (ObjectUtil.isNotNull(mainData)){
-            //主表
-            model.setFREMARK(mainData.get("付款事由").toString());
-            model.setFRECTUNIT(new FNumber(mainData.get("供应商编码").toString()));
-            model.setFCONTACTUNIT(new FNumber(mainData.get("供应商编码").toString()));
+            if ("采购业务付款单".equals(mainData.get("单据类型"))){
+                //主表
+                model.setFREMARK(mainData.get("付款事由").toString());
+                model.setFRECTUNIT(new FNumber(mainData.get("供应商编码").toString()));
+                model.setFCONTACTUNIT(new FNumber(mainData.get("供应商编码").toString()));
+                model.setFCONTACTUNITTYPE("BD_Supplier");
+                model.setFBillTypeID(new BillTypeID("FKDLX01_SYS"));
+            }else {
+                //主表
+                model.setFREMARK(mainData.get("付款事由").toString());
+                model.setFRECTUNITTYPE("BD_Empinfo");
+                model.setFRECTUNIT(new FNumber("003"));
+                model.setFCONTACTUNITTYPE("BD_Empinfo");
+                model.setFCONTACTUNIT(new FNumber("003"));
+                model.setFBillTypeID(new BillTypeID("FKDLX03_SYS"));
+            }
             //明细
             //明细
             AccountsPayableEntity accountsPayableEntity = new AccountsPayableEntity();
             AccountsPayableEntity accountsPayableEntity = new AccountsPayableEntity();
             accountsPayableEntity.setFSETTLETYPEID(new FNumber(PAYMENT_METHOD.get(mainData.get("付款方式"))));//结算方式
             accountsPayableEntity.setFSETTLETYPEID(new FNumber(PAYMENT_METHOD.get(mainData.get("付款方式"))));//结算方式

+ 1 - 1
mjava-demo/src/main/java/com/malk/xzkj/DemoApplication.java

@@ -1,4 +1,4 @@
-package com.malk.xzkj;
+package com.malk.lianan;
 
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;

+ 32 - 4
mjava-huagao/pom.xml

@@ -7,7 +7,7 @@
     <parent>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.2.0.RELEASE</version> <!-- 使用最新的稳定版或其他适用版本 -->
+        <version>2.7.18</version> <!-- 使用最新的稳定版或其他适用版本 -->
         <relativePath/> <!-- lookup parent from repository -->
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     </parent>
 
 
@@ -29,7 +29,7 @@
         <dependency>
         <dependency>
             <groupId>com.microsoft.sqlserver</groupId>
             <groupId>com.microsoft.sqlserver</groupId>
             <artifactId>mssql-jdbc</artifactId>
             <artifactId>mssql-jdbc</artifactId>
-            <version>12.4.0.jre8</version>
+            <version>12.4.2.jre8</version>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>com.baomidou</groupId>
             <groupId>com.baomidou</groupId>
@@ -40,7 +40,7 @@
         <dependency>
         <dependency>
             <groupId>com.baomidou</groupId>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>
             <artifactId>mybatis-plus-generator</artifactId>
-            <version>3.5.3.1</version>
+            <version>3.5.5</version>
         </dependency>
         </dependency>
         <dependency> <!--自动生成的模板:模板有三种:Velocity(默认)、Freemarker、Beetl -->
         <dependency> <!--自动生成的模板:模板有三种:Velocity(默认)、Freemarker、Beetl -->
             <groupId>org.apache.velocity</groupId>
             <groupId>org.apache.velocity</groupId>
@@ -52,17 +52,45 @@
             <artifactId>junit</artifactId>
             <artifactId>junit</artifactId>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+            <version>2.3.32</version>
+        </dependency>
+
         <dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <artifactId>lombok</artifactId>
+            <version>1.18.30</version>
             <scope>provided</scope>
             <scope>provided</scope>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>com.malk</groupId>
             <groupId>com.malk</groupId>
             <artifactId>base</artifactId>
             <artifactId>base</artifactId>
-            <version>1.1-SNAPSHOT</version>
+            <version>1.3</version>
             <scope>compile</scope>
             <scope>compile</scope>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>com.example</groupId>
+            <artifactId>k3cloud</artifactId>
+            <version>8.0.6</version>
+            <scope>test</scope>
+        </dependency>
+        <!--金蝶-->
+        <dependency>
+            <groupId>com.example</groupId>
+            <artifactId>k3cloud</artifactId>
+            <version>8.0.6</version>
+        </dependency>
+        <dependency>
+            <groupId>com.example</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

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

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

+ 18 - 0
mjava-huagao/src/main/java/com/malk/huagao/KdEntity/BillQuery.java

@@ -0,0 +1,18 @@
+package com.malk.huagao.KdEntity;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class BillQuery {
+    private String FormId;
+    private String FieldKeys;
+    private List<Map> FilterString;
+    private String OrderString;
+    private int TopRowCount;
+    private int StartRow;
+    private int Limit;
+    private String SubSystemId;
+}

+ 14 - 0
mjava-huagao/src/main/java/com/malk/huagao/KdEntity/View.java

@@ -0,0 +1,14 @@
+package com.malk.huagao.KdEntity;
+
+import lombok.Data;
+
+@Data
+public class View {
+    private int CreateOrgId;
+
+    private String Number;
+
+    private String Id;
+
+    private Boolean IsSortBySeq;
+}

+ 24 - 0
mjava-huagao/src/main/java/com/malk/huagao/config/KDWebApiConf.java

@@ -0,0 +1,24 @@
+package com.malk.huagao.config;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "kingdee")
+@Slf4j
+public class KDWebApiConf {
+
+    private String XKDApiAcctID;
+
+    private String XKDApiUserName;
+
+    private String XKDApiAppID;
+
+    private String XKDApiAppSec;
+
+    private String XKDApiServerUrl;
+
+}

+ 29 - 0
mjava-huagao/src/main/java/com/malk/huagao/config/KDWebApiConfig.java

@@ -0,0 +1,29 @@
+package com.malk.huagao.config;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class KDWebApiConfig {
+    private Properties properties = new Properties();
+
+    public KDWebApiConfig(String filePath) throws IOException {
+        try (FileInputStream input = new FileInputStream(filePath)) {
+            properties.load(input);
+        }
+    }
+
+    public String getProperty(String key) {
+        return properties.getProperty(key);
+    }
+
+    public static void main(String[] args) {
+        try {
+            KDWebApiConfig config = new KDWebApiConfig("mjava-huagao/src/main/resources/application-dev.yml");
+            System.out.println("AcctID: " + config.getProperty("X-KDApi-AcctID"));
+            // 打印其他属性...
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 18 - 0
mjava-huagao/src/main/java/com/malk/huagao/config/StartupRunner.java

@@ -0,0 +1,18 @@
+package com.malk.huagao.config;
+
+import com.malk.huagao.service.McProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+public class StartupRunner implements ApplicationRunner {
+
+    @Autowired
+    private McProjectService mcProjectService;
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        mcProjectService.init();
+    }
+}

+ 151 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/HgEqbController.java

@@ -0,0 +1,151 @@
+package com.malk.huagao.controller;
+
+import org.springframework.core.io.UrlResource;
+import org.springframework.core.io.Resource;
+import com.alibaba.fastjson.JSON;
+import com.malk.huagao.service.EqbService;
+import com.malk.server.common.McR;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@RestController
+@RequestMapping("/eqb")
+public class HgEqbController {
+    @Autowired
+    private EqbService eqbService;
+
+    @Value(value = "${eqb.downloadFilePath}")
+    private String fileStoragePath;
+
+
+    @PostMapping("/sign")
+    public McR sign(@RequestBody Map map){
+        eqbService.sign(map);
+        return McR.success();
+    }
+
+    // 使用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 McR callback(@RequestBody Map map){
+        System.out.println(map);
+
+        log.info("e签宝回调: {}", JSON.toJSONString(map));
+
+        //签署回调通知:SIGN_MISSON_COMPLETE   事件订阅-签署流程完成:SIGN_FLOW_FINISH
+        String action = UtilMap.getString(map, "action");
+        String signFlowId = UtilMap.getString(map, "signFlowId");//e签宝签署流程id
+
+        String info = action + "-" + signFlowId;
+
+        // 定期清理过期记录
+        cleanExpiredEvents();
+
+        if (isCallbackProcessed(info)){
+            log.info("info:{},重复回调,不做处理",info);
+        }else {
+            eventList.put(info, System.currentTimeMillis());
+            //签署回调结束
+            if ("SIGN_MISSON_COMPLETE".equals(action)) {
+                int signResult = UtilMap.getInt(map, "signResult");//2 - 签署完成,4 - 拒签
+                if (2 == signResult) {
+                    String processInstanceId = UtilMap.getString(map, "customBizNum");//宜搭审批实例id
+                    //自动同意审批节点
+                    eqbService.autoAgree(signFlowId,processInstanceId);
+                }
+            }
+        }
+
+        return McR.success();
+    }
+
+    @GetMapping("/files/{fileId}")
+    public ResponseEntity<Resource> getFileResource(
+            @PathVariable String fileId,
+            @RequestParam(defaultValue = "download") String option) throws IOException {
+
+        // 根据fileId获取实际文件路径,这里简化处理,实际可能需要从数据库查询
+        Path filePath = Paths.get(fileStoragePath).resolve(fileId).normalize();
+
+        // 检查文件是否存在
+        if (!Files.exists(filePath)) {
+            return ResponseEntity.notFound().build();
+        }
+
+        // 创建Resource对象
+        Resource resource =  new UrlResource(filePath.toUri());
+
+        // 根据选项设置响应头
+        HttpHeaders headers = new HttpHeaders();
+        if ("preview".equalsIgnoreCase(option)) {
+            // 预览模式 - 尝试确定内容类型
+            String contentType = Files.probeContentType(filePath);
+            // 强制修正 PDF 的 Content-Type
+            if (filePath.toString().toLowerCase().endsWith(".pdf")) {
+                contentType = "application/pdf";
+            } else if (contentType == null) {
+                contentType = "application/octet-stream";
+            }
+            headers.setContentType(MediaType.parseMediaType(contentType));
+            headers.add("Content-Disposition", "inline; filename=\"" + resource.getFilename() + "\"");
+            headers.add("X-Content-Type-Options", "nosniff"); // 防止浏览器忽略 Content-Type
+        } else {
+            // 下载模式 - 默认处理
+            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+            headers.add("Content-Disposition", "attachment; filename=\"" + resource.getFilename() + "\"");
+        }
+
+        return ResponseEntity.ok()
+                .headers(headers)
+                .contentLength(resource.contentLength())
+                .body(resource);
+    }
+
+    /**
+     * 检查并清理过期事件
+     */
+    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);
+    }
+
+}

+ 41 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/KdHuagaoController.java

@@ -0,0 +1,41 @@
+package com.malk.huagao.controller;
+
+import cn.hutool.core.date.DateUtil;
+import com.malk.huagao.service.KdHuaGaoService;
+import com.malk.server.common.McR;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+@RestController
+@RequestMapping("/kd")
+public class KdHuagaoController {
+    @Autowired
+    private KdHuaGaoService kdHuaGaoService;
+
+    //更新看板
+    @RequestMapping("/syncReport")
+    @ResponseBody
+    public McR syncReport(String type, String userId){
+        kdHuaGaoService.syncReport(type,userId);
+
+        return McR.success();
+    }
+
+    //更新采购订单
+    @RequestMapping("/syncPUROrder")
+    @ResponseBody
+    public McR syncPUROrder(String userId){
+        kdHuaGaoService.syncPUROrder(userId);
+
+        return McR.success();
+    }
+}

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

@@ -0,0 +1,108 @@
+package com.malk.huagao.controller;
+
+import com.alibaba.fastjson.JSON;
+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.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Contacts;
+import com.malk.service.dingtalk.DDClient_Workflow;
+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.List;
+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 DDClient_Contacts ddClient_contacts;
+    @Autowired
+    private DDClient ddClient;
+@Autowired
+private YDClient ydClient;
+    @PostMapping("/test30")
+    McR test13(@RequestBody Map data) {
+        MDC.put("MDC_KEY_PID","1003");
+//        Map userInfoByMobile1 = ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), "yzsyzid2");
+//        if (userInfoByMobile1 != null && userInfoByMobile1.containsKey("mobile")) {
+//            mobile = String.valueOf(userInfoByMobile1.get("mobile"));
+//        }
+//        String ins = String.valueOf(data.get("formInstId"));
+//
+//
+//        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+//                .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
+//                .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
+//
+//        System.out.println(ddrNew.getTotalCount());
+//
+//        ydClient.operateData(YDParam.builder()
+//                .formUuid("FORM-E64114E9F2C9426E91F92886EDFFA2C08Q90")
+//                .asynchronousExecution(true)
+//                .formInstanceIdList((List<String>) ddrNew.getData())
+//                .build(), YDConf.FORM_OPERATION.delete_batch);
+
+//        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+//                .formInstId("FINST-DZ966471VB228QLYJ6WXG6I7YGV631VYLW0KMBQE")
+//                .build(), YDConf.FORM_QUERY.retrieve_id);
+////
+////        if (ddrNew == null || ddrNew.getFormData() == null) {
+////            throw new RuntimeException("未找到订单信息");
+////        }
+////
+//        Map formData1 = ddrNew.getFormData();
+//        System.out.println("======"+formData1);
+
+//        String ddje = UtilMap.getString(formData1, "numberField_mjm9k35k");
+//        String dddate = UtilMap.getString(formData1, "dateField_mjm9k35j");
+//
+//        System.out.println(dddate);
+//        System.out.println(ddje);
+//        ydClient.operateData(YDParam.builder()
+//                .formInstanceId(ins)
+//      .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_mhirg0kz","156")))//xz04
+////                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map(employ,id)))//xz04
+//                .useLatestVersion(true)
+//                .build(), YDConf.FORM_OPERATION.update);
+//        ydHuaGaoService.synckdYdMaterial();
+//        ydHuaGaoService.synckdYdPayment();
+//        ydHuaGaoService.synckdYdTRANSFER();
+//        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();
+    }
+}

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

@@ -0,0 +1,42 @@
+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();
+    }
+
+    @PostMapping("/CfkdYdDelivery")
+    McR CfkdYdDelivery(@RequestBody Map map) {
+        kdYdDeliveryService.CfkdYdDelivery(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();
+    }
+}

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

@@ -0,0 +1,40 @@
+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();
+    }
+    @PostMapping("/SckdYdOrder")
+    McR SckdYdOrder(@RequestBody Map map) {
+        kdYdOrderService.SckdYdOrder(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;
+}

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

@@ -0,0 +1,85 @@
+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 String bz;
+
+    private Integer sl;
+
+    private BigDecimal se;
+
+    private BigDecimal je;
+
+    private BigDecimal jshj;
+
+    private BigDecimal jj;
+
+    private BigDecimal cxzkje;
+
+    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;
+
+
+}

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

@@ -0,0 +1,74 @@
+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;
+
+    private String fhtzdbh;
+}

+ 68 - 0
mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdTransferDetail.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-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 xlh;
+
+    private String kddh;
+
+    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;
+}

+ 1 - 1
mjava-huagao/src/main/java/com/malk/huagao/entity/YdUserInput.java

@@ -26,7 +26,7 @@ public class YdUserInput implements Serializable {
       /**
       /**
      * 成员
      * 成员
      */
      */
-      private String user;
+      private String userName;
 
 
       /**
       /**
      * 员工id
      * 员工id

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

+ 57 - 0
mjava-huagao/src/main/java/com/malk/huagao/schedule/KdScheduleTask.java

@@ -0,0 +1,57 @@
+package com.malk.huagao.schedule;
+
+import com.malk.huagao.service.KdHuaGaoService;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class KdScheduleTask {
+    @Autowired
+    private KdHuaGaoService kdHuaGaoService;
+
+    //每周六 17:00定时同步序列号主档
+    @Scheduled(cron = "0 0 17 * * 6")
+    public void syncBDSerialMainFile(){
+        kdHuaGaoService.syncBDSerialMainFile(null);
+    }
+
+    //每周六 16:00定时同步即时库存明细
+    @Scheduled(cron = "0 0 16 * * 6")
+    public void syncSTKInventory(){
+        kdHuaGaoService.syncSTKInventory(null);
+    }
+
+    //每周六 18:00定时处理待处理品数据
+    @Scheduled(cron = "0 0 18 * * 6")
+    public void syncPendingProducts(){
+        kdHuaGaoService.syncPendingProducts();
+    }
+
+    //每天00:00定时同步生产退料明细
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void syncPRDReturnMtrl(){
+        kdHuaGaoService.syncPRDReturnMtrl(null);
+    }
+
+    //每天00:01定时同步发货通知单
+    @Scheduled(cron = "0 1 0 * * ?")
+    public void syncDLVNotice(){
+        kdHuaGaoService.syncDLVNotice(null);
+    }
+
+    //每天00:02定时同步采购订单
+    @Scheduled(cron = "0 2 0 * * ?")
+    public void syncPUROrder(){
+        kdHuaGaoService.syncPUROrder(null);
+    }
+}

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


Some files were not shown because too many files changed in this diff