Selaa lähdekoodia

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

wzy 2 viikkoa sitten
vanhempi
commit
d588249eae
17 muutettua tiedostoa jossa 589 lisäystä ja 60 poistoa
  1. 88 0
      mjava-fenggefushi/pom.xml
  2. 14 0
      mjava-fenggefushi/src/main/java/com/malk/fenggefushi/MjavaFenggefushiApplication.java
  3. 8 0
      mjava-fenggefushi/src/main/java/com/malk/fenggefushi/controller/HeiHuOrderController.java
  4. 7 2
      mjava-fenggefushi/src/main/java/com/malk/fenggefushi/schedule/ScheduleTask.java
  5. 3 0
      mjava-fenggefushi/src/main/java/com/malk/fenggefushi/service/HeiHuOrderService.java
  6. 337 27
      mjava-fenggefushi/src/main/java/com/malk/fenggefushi/service/Impl/HeiHuOrderServiceImpl.java
  7. 13 0
      mjava-fenggefushi/src/test/java/com/malk/fenggefushi/MjavaFenggefushiApplicationTests.java
  8. 4 0
      mjava-huagao/src/main/java/com/malk/huagao/entity/KdYdMaterial.java
  9. 1 0
      mjava-huagao/src/main/java/com/malk/huagao/schedule/YdScheduleTask.java
  10. 6 4
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerReferrerServiceImpl.java
  11. 6 2
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java
  12. 7 4
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdDeliveryServiceImpl.java
  13. 1 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdMaterialServiceImpl.java
  14. 24 20
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java
  15. 1 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOutboundServiceImpl.java
  16. 18 0
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/YdHuaGaoServiceImpl.java
  17. 51 1
      mjava-ounuo/src/main/java/com/malk/tuosi/event/McTbEventImpl.java

+ 88 - 0
mjava-fenggefushi/pom.xml

@@ -0,0 +1,88 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.malk</groupId>
+    <artifactId>fenggefushi</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>mjava-fenggefushi</name>
+    <description>mjava-fenggefushi</description>
+
+    <!-- ✅ 使用统一的 parent -->
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.18</version>
+        <relativePath/>
+    </parent>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.83</version>
+        </dependency>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <version>3.14.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>base</artifactId>
+            <version>1.3</version>
+        </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>
+        <!-- MyBatis Starter -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.2.2</version>
+        </dependency>
+        <!-- MySQL驱动 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.28</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>fenggefushi</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <executable>true</executable>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 14 - 0
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/MjavaFenggefushiApplication.java

@@ -0,0 +1,14 @@
+package com.malk.fenggefushi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+public class MjavaFenggefushiApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(MjavaFenggefushiApplication.class, args);
+        System.out.println("Fenggefushi_SpringBoot项目启动----------");
+    }
+
+}

+ 8 - 0
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/controller/HeiHuOrderController.java

@@ -92,4 +92,12 @@ public class HeiHuOrderController {
         return McR.success(huOrderService.SyncPurchaseOrderStatus(formInstanceId,Approvalresult));
     }
 
+    /*todo:定时抓取采购订单*/
+    @SneakyThrows
+    @PostMapping("/test12")
+    McR test12(){
+        return McR.success(huOrderService.test12());
+    }
+
+
 }

+ 7 - 2
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/schedule/ScheduleTask.java

@@ -1,6 +1,9 @@
 package com.malk.fenggefushi.schedule;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.fenggefushi.service.HeiHuOrderService;
+import com.malk.utils.UtilHttp;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -8,6 +11,8 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 
+import java.util.HashMap;
+
 /**
  * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
  */
@@ -19,8 +24,8 @@ public class ScheduleTask {
     @Autowired
     private HeiHuOrderService huOrderService;
 
-    /*每5分钟定时*/
-    //销售订单
+
+
 
 
 }

+ 3 - 0
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/service/HeiHuOrderService.java

@@ -41,4 +41,7 @@ public interface HeiHuOrderService {
     /*查询产品颜色*/
     String getProductColor(@RequestParam List list) throws JacksonException;
 
+    /*采购订单定时同步*/
+    McR test12() throws JacksonException;
+
 }

+ 337 - 27
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/service/Impl/HeiHuOrderServiceImpl.java

@@ -341,7 +341,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
         formdata.put("textField_mkaudmn6",gysnumber);
         formdata.put("dateField_mfqia329",purchaseTime);
         formdata.put("dateField_mfqia32a",planArrivalTime);
-//        formdata.put("employeeField_mfqia32g",getDDToken(purchaserName));  todo:这里调试完成后取消注释
+        formdata.put("employeeField_mfqia32g",getDDToken(purchaserName));
         formdata.put("numberField_mfqia32h",orderDiscount*100);
         //采购订单-自定义
         formdata.put("textField_mfqia32o",department);
@@ -375,11 +375,12 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                 tableData.add(row);
             }
         }
-        /*todo:新版栏目:客户、订单号、款号、产品描述、颜色、数量、销售单价、销售金额、币别、生产工厂、采购单价、采购金额、利润率*/
+        /*todo:新版栏目:客户、订单号、款号、产品描述、颜色、数量、销售单价、销售金额、币别、生产工厂、采购单价、采购金额、利润率、美金汇率、辅料预估成本*/
         String customerName = "",styleNumber = "",productDescription = "",color = "",currency = "";
         Double number,unitPrice,salesAmount;
         Double rate = 1.00;Double saletotalAmount = 0.00;Double procuretotalAmount = 0.00;Double saletotalnum =0.00;
         Double estimatedtotalAmount = 0.00;Double estimatedPrice = 0.00;
+        Double USDrate = 0.00;Double flygcb = 0.00;
         ObjectMapper objectMapper = new ObjectMapper();
         JsonNode rootNode = objectMapper.readTree(jsonString);
         JsonNode dataNode = rootNode.get("data");
@@ -454,9 +455,14 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                         currency = node.get("value").asText();
                     }else if (node.get("fieldId").asInt() == 165251){
                         rate = node.get("value").asDouble();
+                        USDrate = rate;
+                    }else if (node.get("fieldId").asInt() == 161783) {
+                        flygcb = node.get("value").asDouble();
                     }
                 }
                 row.put("textField_mhtxft3p",currency);//todo:币别
+                row.put("numberField_ml85btkc",USDrate);//todo:美金汇率
+                row.put("numberField_ml85btkd",flygcb);//todo:辅料预估成本
                 //下面是采购订单的明细数据
                 row.put("textField_mhsj6gtv",shortName);//todo:生产工厂
                 for(int j=0;j<products.size();j++){
@@ -464,7 +470,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                         //找到对应的采购一行数据
                         row.put("numberField_mhsj6gtw",products.getJSONObject(j).getDouble("purchasePrice"));//todo:采购单价
                         row.put("numberField_mhtxft3q",products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购数量
-                        row.put("numberField_mhsj6gtx",products.getJSONObject(j).getDouble("purchasePrice") * products.getJSONObject(i).getDouble("purchaseNum"));//todo:采购金额
+                        row.put("numberField_mhsj6gtx",products.getJSONObject(j).getDouble("purchasePrice") * products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购金额
                     }
                 }
                 //销售总金额  币别:人民币 数量*单价    美元:数量*单价*美元汇率
@@ -536,28 +542,41 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
         Map formdata = ydClient.queryData(YDParam.builder().formInstId(formInstanceId)
                 .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
                 .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
-        HashMap body = new HashMap();
-        body.put("orderCode",formdata.get("textField_mfqia327"));//订单编号
-        body.put("vendorCode",formdata.get("textField_mkaudmn6"));//供应商编号
-        String aa = formdata.get("dateField_mfqia329").toString();
-        String cgrq = Instant.ofEpochMilli(Long.parseLong(aa))
-                .atZone(ZoneId.of("Asia/Shanghai"))
-                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        body.put("purchaseTime",cgrq);//采购日期
-        String bb = formdata.get("dateField_mfqia32a").toString();
-        String jhdhrq = Instant.ofEpochMilli(Long.parseLong(bb))
-                .atZone(ZoneId.of("Asia/Shanghai"))
-                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        body.put("planArrivalTime",jhdhrq);//计划到货日期
-        ArrayList<Map<String,String>> customFiled = new ArrayList();
-        HashMap field = new HashMap();
-        field.put("name","采购订单钉钉审批状态");
-        field.put("value",Approvalresult);//审批状态
-        customFiled.add(field);
-        body.put("purchaseOrderCustomFieldsValue",customFiled);
-        String dd = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/update", header, null, body);
-        log.info("---------【回传采购订单状态完成】-----------");
-        return McR.success(dd);
+        String jsonString  = formdata.get("tableField_ml7ch2pj").toString();
+        JSONArray tableField_ml7ch2pj  = JSON.parseArray(jsonString);
+        for (int i=0;i<tableField_ml7ch2pj.size();i++){
+            String poNumber = tableField_ml7ch2pj.getJSONObject(i).getString("textField_ml7ch2pk");//拿到采购订单号
+            HashMap body = new HashMap();
+            body.put("orderCode",poNumber);//订单编号
+            String jsonString2 = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/queryList2", header, null, body);//todo:查询采购订单
+            JSONArray dataArray = JSONObject.parseObject(jsonString2).getJSONArray("data");
+            for (int k=0;k<dataArray.size();k++) {
+                JSONObject data = dataArray.getJSONObject(k);
+                //提取订单基本信息 并赋值
+                HashMap body1 = new HashMap();
+                body1.put("orderCode",data.getString("orderCode"));//订单编号:orderCode
+                body1.put("vendorCode",data.getString("vendorCode"));//供应商编码:gysnumber
+                String aa = data.getLong("purchaseTime").toString();
+                String purchaseTime = Instant.ofEpochMilli(Long.parseLong(aa))
+                        .atZone(ZoneId.of("Asia/Shanghai"))
+                        .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                body1.put("purchaseTime",purchaseTime);//采购日期:purchaseTime
+                String bb = data.getLong("planArrivalTime").toString();
+                String planArrivalTime = Instant.ofEpochMilli(Long.parseLong(aa))
+                        .atZone(ZoneId.of("Asia/Shanghai"))
+                        .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                body1.put("planArrivalTime",planArrivalTime);//计划到货日期:planArrivalTime
+                ArrayList<Map<String,String>> customFiled = new ArrayList();
+                HashMap field = new HashMap();
+                field.put("name","采购订单钉钉审批状态");
+                field.put("value",Approvalresult);//审批状态
+                customFiled.add(field);
+                body1.put("purchaseOrderCustomFieldsValue",customFiled);
+                UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/update", header, null, body1);
+                log.info("---------【回传,{},采购订单状态完成】-----------",data.getString("orderCode"));
+            }
+        }
+        return McR.success();
     }
 
     @Override
@@ -963,15 +982,306 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
         JSONObject jsonObject = JSONObject.parseObject(doPost);
         JSONArray dataArray = jsonObject.getJSONArray("data");
         System.out.println(dataArray);
-        String productName = "";
+      /*  String productName = "";
         for (int i = 0; i < dataArray.size(); i++) {
             JSONObject data = dataArray.getJSONObject(i);
             productName = data.getString("productName");
+        }*/
+
+        String colorValue = "";
+        if (dataArray != null && dataArray.size() > 0) {
+            JSONObject data = dataArray.getJSONObject(0);
+            JSONObject customFieldValues = data.getJSONObject("customFieldValues");
+            if (customFieldValues != null) {
+                // 直接获取指定字段的值
+                colorValue = customFieldValues.getString("product1741831360685211");
+            }
         }
-        return productName;
+
+        return colorValue;
     }
 
+    @Override
+    public McR test12() throws JacksonException {
+        HashMap header = new HashMap();
+        header.put("X-AUTH", HeiHuAccessToken().getData().toString());
+        header.put("Content-Type", "application/json");
+
+        String targetValue = "合同确认,提交审批";
+        Map<String, List<String>> purchaserOrderCodes = new HashMap<>();
+
+        int pageNum = 1;
+        int pageSize = 100;
+        boolean hasMoreData = true;
+
+        while (hasMoreData) {
+            HashMap body = new HashMap();
+            Map<String, Integer> page = new HashMap<>();
+            page.put("pageNum", pageNum);
+            page.put("pageSize", pageSize);
+            List<Integer> status = Arrays.asList(1);
+            body.put("page", page);
+            body.put("status", status);
+
+            String doPost = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/queryList2", header, null, body);
+
+            ObjectMapper mapper = new ObjectMapper();
+            Map<String, Object> response = mapper.readValue(doPost, Map.class);
+
+            if (!"01000000".equals(response.get("code"))) {
+                System.out.println("请求失败: " + response.get("msg"));
+                break;
+            }
+
+            List<Map<String, Object>> dataList = (List<Map<String, Object>>) response.get("data");
+            if (dataList != null) {
+                for (Map<String, Object> item : dataList) {
+                    String purchaserName = (String) item.get("purchaserName");
+                    if (purchaserName == null) purchaserName = "未知";
+
+                    boolean hasTargetStatus = false;
+                    List<Map<String, Object>> customFieldValues = (List<Map<String, Object>>) item.get("customFieldValues");
+                    if (customFieldValues != null) {
+                        for (Map<String, Object> field : customFieldValues) {
+                            if (targetValue.equals(field.get("value"))) {
+                                hasTargetStatus = true;
+                                break;
+                            }
+                        }
+                    }
+
+                    if (hasTargetStatus) {
+                        String orderCode = (String) item.get("orderCode");
+                        if (orderCode != null) {
+                            purchaserOrderCodes.computeIfAbsent(purchaserName, k -> new ArrayList<>()).add(orderCode);
+                        }
+                    }
+                }
+
+                hasMoreData = dataList.size() >= pageSize;
+            } else {
+                hasMoreData = false;
+            }
+
+            pageNum++;
+
+            try {
+                Thread.sleep(200);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+
+        // 输出所有采购员的待审批订单
+        System.out.println("========== 所有采购员的待审批订单统计 ==========");
+
+        if (purchaserOrderCodes.isEmpty()) {
+            System.out.println("没有找到钉钉审批状态为'" + targetValue + "'的订单");
+        } else {
+            int totalPurchasers = purchaserOrderCodes.size();
+            int totalOrders = purchaserOrderCodes.values().stream().mapToInt(List::size).sum();
 
+            System.out.println("共找到 " + totalOrders + " 个待审批订单");
+            System.out.println("涉及 " + totalPurchasers + " 位采购员");
+            System.out.println();
+
+            // 输出每个采购员的情况
+            for (Map.Entry<String, List<String>> entry : purchaserOrderCodes.entrySet()) {
+                String purchaserName = entry.getKey();
+                List<String> orderCodes = entry.getValue();
+                int orderCount = orderCodes.size();
+
+                System.out.println("采购员: " + purchaserName);
+                System.out.println("待审批订单数量: " + orderCount);
+
+                if (orderCount > 1) {
+                    System.out.println("⚠️  注意:该采购员有 " + orderCount + " 个待审批订单");
+                }
+
+                System.out.println("订单编号: " + String.join(", ", orderCodes));
+                System.out.println();
+            }
+
+            // 按订单数量排序输出
+            System.out.println("========== 按待审批订单数量排序 ==========");
+            purchaserOrderCodes.entrySet().stream()
+                    .sorted((e1, e2) -> Integer.compare(e2.getValue().size(), e1.getValue().size()))
+                    .forEach(entry -> {
+                        String purchaserName = entry.getKey();
+                        List<String> orderCodes = entry.getValue();
+                        System.out.println(purchaserName + " (" + orderCodes.size() + "个): " +
+                                String.join(", ", orderCodes));
+                        //针对同一个采购员,遍历下面的订单编号
+                        System.out.println("开始处理采购员 " + purchaserName + " 的 " + orderCodes.size() + " 个待审批订单");
+                        HashMap formdata = new HashMap();
+                        List<Map<String,String>> tabledata = new ArrayList();
+                        for (String orderCode : orderCodes) {
+                            System.out.println("正在处理订单: " + orderCode);
+                            //todo:查询订单的销售订单 | 客户  销售订单号  款式  产品描述  颜色 | 数量  销售单价  销售金额 | 币别 美金汇率 辅料预估成本 销售总金额
+                            String customerName = "",orderNumber ="",styleNumber ="",productDescription = "",color = "";
+                            Double number,unitPrice,salesAmount;
+                            String currency = ""; Double USDrate = 0.00; Double flygcb = 0.00; Double saletotalAmount = 0.00;
+                            Double estimatedPrice = 0.00;//辅料预估单价
+
+                            HashMap body = new HashMap();
+                            body.put("orderCode",orderCode);//订单编号
+                            String jsonString = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/queryList2", header, null, body);
+                            //todo:查询采购订单 生产工厂(供应商)
+                            String shortName = "";
+                            JSONArray dataArray = JSONObject.parseObject(jsonString).getJSONArray("data");
+                            for (int i=0;i<dataArray.size();i++) {
+                                JSONObject data = dataArray.getJSONObject(i);
+                                shortName = data.getString("shortName");//供应商:shortName
+                            }
+                            JSONArray products = JSONObject.parseObject(jsonString).getJSONArray("data").getJSONObject(0).getJSONArray("purchaseSubOrderVOS");
+                            ObjectMapper objectMapper = new ObjectMapper();
+                            JsonNode rootNode = null;
+                            try {
+                                rootNode = objectMapper.readTree(jsonString);
+                            } catch (JsonProcessingException e) {
+                                throw new RuntimeException(e);
+                            }
+                            JsonNode dataNode = rootNode.get("data");
+                            if(dataNode != null && dataNode.isArray()){
+                                for(JsonNode item : dataNode){
+                                    JsonNode orderNoNode = item.get("orderCode");
+                                    JsonNode saleOrders = item.get("relationSaleOrders");
+                                    if(saleOrders != null && saleOrders.isArray() && saleOrders.size() > 0){
+                                        orderNumber = saleOrders.get(0).asText();
+                                    }
+                                }
+                            }
+
+                            HashMap body_A = new HashMap();
+                            body_A.put("orderNo",orderNumber);
+                            String jsonString2 = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/saleOrder/queryList2", header, null, body_A);//todo:查询销售订单,获取客户、订单号、款号、产品描述、颜色、数量、销售单价、销售金额、币别
+                            JSONArray array = JSONObject.parseObject(jsonString2).getJSONArray("data");//主表数据
+                            for(int i=0;i<array.size();i++){
+                                JSONObject data = array.getJSONObject(i);
+                                customerName = data.getString("customerCode");//客户
+                                purchaserName = data.getString("purchaserName");//采购员
+                            }
+                            ObjectMapper objectMapper2 = new ObjectMapper();
+                            JsonNode dataNode2 = null;//主表数据
+                            try {
+                                dataNode2 = objectMapper2.readTree(jsonString2).get("data");
+                            } catch (JsonProcessingException e) {
+                                throw new RuntimeException(e);
+                            }
+                            for (JsonNode item : dataNode2){
+                                JsonNode customFieldValues = item.get("customFieldValues");
+                                for (JsonNode field : customFieldValues){
+                                    JsonNode fieldIdNode = field.get("fieldId");
+                                    if(fieldIdNode != null && fieldIdNode.asInt() == 161769){
+                                        JsonNode valueNode = field.get("value");
+                                        if(valueNode != null){
+                                            estimatedPrice = valueNode.asDouble();//辅料预估单价
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+
+                            JSONArray products_A = JSONObject.parseObject(jsonString2).getJSONArray("data").getJSONObject(0).getJSONArray("saleManageOrderDetailRowApiVOList");//销售订单明细数据
+
+                            if(products_A != null) {
+                                for (int i = 0; i < products_A.size(); i++) {
+                                    JSONObject detail = products_A.getJSONObject(i);
+                                    HashMap row = new HashMap();
+                                    row.put("textField_ml6g7k5e", customerName);//todo:客户
+                                    row.put("textField_ml6g7k5f", orderNumber);//todo:订单号
+
+                                    styleNumber = detail.getString("productCode");//款号
+                                    row.put("textField_ml7c3yhq", styleNumber);//todo:款号
+
+                                    productDescription = detail.getString("productName");//产品描述
+                                    row.put("textField_ml7c3yhr", productDescription);//todo:产品描述
+
+                                    JSONArray array1 = detail.getJSONArray("customFieldValues");
+                                    color = array1.stream()
+                                            .map(obj -> (JSONObject) obj)
+                                            .filter(item -> item.getIntValue("fieldId") == 82259)
+                                            .map(item -> item.getString("value"))
+                                            .findFirst()
+                                            .orElse(null);
+                                    ArrayList colorList = new ArrayList();
+                                    colorList.add(color);
+                                    String color_AAA = null;
+                                    try {
+                                        color_AAA = getProductColor(colorList);
+                                    } catch (JacksonException e) {
+                                        throw new RuntimeException(e);
+                                    }
+                                    row.put("textField_ml7c3yhs", color_AAA);//todo:颜色
+
+                                    number = detail.getDoubleValue("qty");//数量
+                                    row.put("numberField_ml7c3yht", number);//todo:数量
+
+                                    unitPrice = detail.getDoubleValue("unitPrice");//销售单价
+                                    row.put("numberField_ml7c3yhu", unitPrice);//todo:销售单价
+
+                                    salesAmount = number * unitPrice;//销售金额
+                                    row.put("numberField_ml7c3yhv", salesAmount);//todo:销售金额
+                                    String customFieldValues = detail.getString("customFieldValues");
+                                    ObjectMapper mapper = new ObjectMapper();
+                                    JsonNode jsonarray = null;
+                                    try {
+                                        jsonarray = mapper.readTree(customFieldValues);
+                                    } catch (JsonProcessingException e) {
+                                        throw new RuntimeException(e);
+                                    }
+                                    for (JsonNode node : jsonarray) {
+                                        if (node.get("fieldId").asInt() == 47919) {
+                                            currency = node.get("value").asText();
+                                        } else if (node.get("fieldId").asInt() == 165251) {
+                                            USDrate = node.get("value").asDouble();
+
+                                        } else if (node.get("fieldId").asInt() == 161783) {
+                                            flygcb = node.get("value").asDouble();
+                                        }
+                                    }
+                                    row.put("textField_ml7c3yhw", currency);//todo:币别
+                                    row.put("numberField_ml86221y", USDrate);//todo:美金汇率
+                                    row.put("numberField_ml86221z", flygcb);//todo:辅料预估成本
+                                    if(currency.equals("USD")){
+                                        saletotalAmount = salesAmount * USDrate;
+                                    }else {
+                                        saletotalAmount = salesAmount;
+                                    }
+                                    row.put("numberField_ml862220",saletotalAmount);
+                                    //下面是采购订单的明细数据
+                                    row.put("textField_ml7c3yhx",shortName);//todo:生产工厂
+                                    for(int j=0;j<products.size();j++){
+                                        if(styleNumber.equals(products.getJSONObject(j).getString("productCode"))){
+                                            //找到对应的采购一行数据
+                                            row.put("numberField_ml7c3yhy",products.getJSONObject(j).getDouble("purchasePrice"));//todo:采购单价
+                                            row.put("numberField_ml7c3yhz",products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购数量
+                                            row.put("numberField_ml7c3yi0",products.getJSONObject(j).getDouble("purchasePrice") * products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购金额
+                                        }
+                                    }
+                                    tabledata.add(row);
+                                }
+                            }
+
+                        }
+                        //todo:组装数据塞到采购明细表
+                        formdata.put("tableField_ml6g7k5d",tabledata);
+                        //todo:组装数据塞到采购审批单号明细
+//                        formdata.put("tableField_ml7ch2pj",);
+                        /*发起流程*/
+                        String userId = getDDToken(purchaserName);
+                        ydClient.operateData(YDParam.builder()
+                                .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
+                                .formUuid("FORM-3A54B12BE3D241218A75242B935F2987YWV2")
+                                .userId(userId)
+                                .formDataJson(JSON.toJSONString(formdata))
+                                .build(), YDConf.FORM_OPERATION.start).toString();
+                    });
+        }
+
+
+        return null;
+    }
 
 
     /*获取宜搭采购订单汇总*/

+ 13 - 0
mjava-fenggefushi/src/test/java/com/malk/fenggefushi/MjavaFenggefushiApplicationTests.java

@@ -0,0 +1,13 @@
+package com.malk.fenggefushi;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class MjavaFenggefushiApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

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

@@ -37,6 +37,10 @@ public class KdYdMaterial implements Serializable {
 
     private String jbdw;
 
+    private String ksrq;
+
+    private String jzrq;
+
     private String ssxl;
 
     private String jx;

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

@@ -149,6 +149,7 @@ private YdHuaGaoService ydHuaGaoService;
     }
 //    @Scheduled(fixedRate = 5 * 60 * 1000)
 //    @Scheduled(cron = "0 0/15 * * * ?")
+//@Scheduled(cron = "0/1 * * * * ?")
     public void synckdYdMaterial() {
         log.info("定时同步-物料信息");
         try {

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

@@ -18,6 +18,7 @@ import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -38,7 +39,8 @@ public class KdYdCustomerReferrerServiceImpl extends ServiceImpl<KdYdCustomerRef
     private YDClient ydClient;
     @Autowired
     private KdYdCustomerReferrerMapper kdYdCustomerReferrerMapper;
-
+    @Value(value = "${kd.host}")
+    private String kdHost;
     @Override
     public Map<String, Object> insertCustomerReferrer(Map map) {
         Map<String, Object> result = new HashMap<>();
@@ -62,7 +64,7 @@ public class KdYdCustomerReferrerServiceImpl extends ServiceImpl<KdYdCustomerRef
                 formParams.put("jsons", jsonStr);
 
                 System.out.println("====" + formParams);
-                HttpResponse response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/")
+                HttpResponse response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
@@ -118,13 +120,13 @@ public class KdYdCustomerReferrerServiceImpl extends ServiceImpl<KdYdCustomerRef
             System.out.println("formParams====" + formParams);
             HttpResponse response = null;
             if ("add".equals(action)) {
-                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbcreatecusttjr")
+                response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbcreatecusttjr")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
                         .execute();
             } else {
-                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/")
+                response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时

+ 6 - 2
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdCustomerServiceImpl.java

@@ -73,7 +73,7 @@ public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdY
                 formParams.put("jsons", jsonStr);
 
                 System.out.println("====" + formParams);
-                HttpResponse response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/")//todo 待完善接口
+                HttpResponse response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbdeletecust")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
@@ -121,6 +121,9 @@ public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdY
             String xsy = cleanEmployeeField(UtilMap.getString(formData, "employeeField_lqanqe6n"));
             String jsbb = UtilMap.getString(formData, "selectField_mfxrryt0");
             String khyxj = UtilMap.getString(formData, "numberField_mfxs7rd3");
+            if (khyxj == null || khyxj.trim().isEmpty()) {
+                khyxj = "1";
+            }
             String qyxygl = UtilMap.getString(formData, "radioField_mfxs7rd2");
             String mrsl = UtilMap.getString(formData, "selectField_mfxrryt3");
             String sfl = UtilMap.getString(formData, "selectField_mfxrryt2");
@@ -157,6 +160,7 @@ public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdY
             customData.put("sfl", sfl);
             customData.put("sfjtkh", sfjtkh);
             customData.put("dyjtkh", dyjtkh);
+            System.out.println("====="+customData);
             // 处理子表数据
             List<Map<String, Object>> contactList = new ArrayList<>();
             List<Map> tableField = (List<Map>) formData.get("tableField_mfkks8ww");
@@ -187,7 +191,6 @@ public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdY
 
                 // 将联系人列表添加到主数据
                 customData.put("contactList", contactList);
-
                 Map<String, String> headers = new HashMap<>();
                 headers.put("Content-Type", "application/x-www-form-urlencoded");
 
@@ -197,6 +200,7 @@ public class KdYdCustomerServiceImpl extends ServiceImpl<KdYdCustomerMapper, KdY
 // 构建form参数
                 Map<String, Object> formParams = new HashMap<>();
                 formParams.put("jsons", jsonStr);
+                log.info("请求参数:" + formParams);
 // 发送请求
                 HttpResponse response = null;
                 if ("add".equals(action)) {

+ 7 - 4
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdDeliveryServiceImpl.java

@@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -48,6 +49,8 @@ public class KdYdDeliveryServiceImpl extends ServiceImpl<KdYdDeliveryMapper, KdY
     private KdYdDeliveryMapper kdYdDeliveryMapper;
     @Autowired
     private KdYdDeliveryDetailMapper kdYdDeliveryDetailMapper;
+    @Value(value = "${kd.host}")
+    private String kdHost;
 
     @Override
     public Map<String, Object> insertDelivery(Map map) {
@@ -71,7 +74,7 @@ public class KdYdDeliveryServiceImpl extends ServiceImpl<KdYdDeliveryMapper, KdY
                 String jsonStr = JSON.toJSONString(result);
                 formParams.put("jsons", jsonStr);
 
-                HttpResponse response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbdeletefhtzd")
+                HttpResponse response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbdeletefhtzd")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
@@ -205,17 +208,17 @@ public class KdYdDeliveryServiceImpl extends ServiceImpl<KdYdDeliveryMapper, KdY
 // 构建form参数
             Map<String, Object> formParams = new HashMap<>();
             formParams.put("jsons", jsonStr);
-            System.out.println("formParams==="+formParams);
+            log.info("请求参数:" + formParams);
 // 发送请求
             HttpResponse response = null;
             if ("add".equals(action)) {
-                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbcreatefhtzd")
+                response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbcreatefhtzd")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
                         .execute();
             } else {
-                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/")
+                response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时

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

@@ -270,6 +270,7 @@ public class KdYdMaterialServiceImpl extends ServiceImpl<KdYdMaterialMapper, KdY
                     updateFormData.put("textField_mejl9nrs", jx);
                     updateFormData.put("dateField_ml4ikfa0", kssj);
                     updateFormData.put("dateField_ml4ikfa1", jzsj);
+                    updateFormData.put("textField_mfxbtce6", sjzt);
 
                     if (sd != null) {
                         updateFormData.put("numberField_mfxbtceb", sd);

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

@@ -22,9 +22,11 @@ import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilHttp;
 import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 
@@ -45,6 +47,7 @@ import java.util.*;
  * @since 2025-10-15
  */
 @Service
+@Slf4j
 public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder> implements IKdYdOrderService {
     @Autowired
     private YDClient ydClient;
@@ -54,7 +57,8 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
     private KdYdOrderDetailMapper kdYdOrderDetailMapper;
     @Autowired
     private KdYdOrderPaymentMapper kdYdOrderPaymentMapper;
-
+    @Value(value = "${kd.host}")
+    private String kdHost;
 
     @Override
     public Map<String, Object> insertkdYdOrder(Map map) {
@@ -79,7 +83,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
                 formParams.put("jsons", jsonStr);
 
                 System.out.println("====" + formParams);
-                HttpResponse response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbdeletexsdd")
+                HttpResponse response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbdeletexsdd")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
@@ -107,7 +111,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
                 String jsonStr = JSON.toJSONString(result);
                 System.out.println("==" + jsonStr);
                 formParams.put("jsons", jsonStr);
-                HttpResponse response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbExcuteOperationxsdd")
+                HttpResponse response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbExcuteOperationxsdd")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
@@ -252,6 +256,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
                     int detailId = i + 1;
 
                     String sfys = safeGetString(row, "radioField_mhiui6v7");
+//                    String sjyskzfh = safeGetString(row, "radioField_ml7hg2oi");
                     String gldh = safeGetString(row, "textField_mhiui6va");
                     BigDecimal ysbl = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6v6"));
                     BigDecimal ysje = toBigDecimal(UtilMap.getString(row, "numberField_mhiui6v8"));
@@ -260,6 +265,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
 
                     table2Map.put("detailId", detailId);
                     table2Map.put("sfys", sfys);
+//                    table2Map.put("sjyskzfh", sjyskzfh);
                     table2Map.put("gldh", gldh);
                     table2Map.put("ysbl", ysbl);
                     table2Map.put("ysje", ysje);
@@ -309,16 +315,17 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
 // 构建form参数
             Map<String, Object> formParams = new HashMap<>();
             formParams.put("jsons", jsonStr);
+            log.info("请求参数:" + formParams);
 // 发送请求
             HttpResponse response = null;
             if ("add".equals(actionType)) {
-                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbxsdd")
+                response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbxsdd")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
                         .execute();
             } else {
-                response = HttpRequest.post("http://113.45.187.194:70/xk/dyzn/WsBasedyzn.asmx/hgdjydtbupdatexsdd")
+                response = HttpRequest.post(kdHost+"/xk/dyzn/WsBasedyzn.asmx/hgdjydtbupdatexsdd")
                         .headerMap(headers, true)
                         .form(formParams)
                         .timeout(30000)  // 30秒超时
@@ -326,6 +333,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
             }
 
             String responseBody = response.body();
+            log.info("Response Body: " + responseBody);
             try {
                 // 一行代码提取
                 String jdbh = JSON.parseArray(responseBody)
@@ -413,13 +421,13 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
             }
 
             // 4. 获取客户现有信息
-            Map customerData = list.get(0);
+            Map customerData = (Map) list.get(0).get("formData");
             Double historicalAmount = UtilMap.getDouble(customerData, "numberField_mjm9k35k");
-            String dddateTimestampStr = UtilMap.getString(customerData, "dateField_mjqkkcsg");
-            String sfdateTimestampStr = UtilMap.getString(customerData, "dateField_mjm9k35l");
+            Long dddateTimestampStr = UtilMap.getLong(customerData, "dateField_mjqkkcsg");
+            Long sfdateTimestampStr = UtilMap.getLong(customerData, "dateField_mjm9k35l");
 
             // 参数校验
-            if (dddateTimestampStr == null || dddateTimestampStr.trim().isEmpty()) {
+            if (dddateTimestampStr == null) {
                 throw new RuntimeException("最后成交日期不能为空");
             }
 
@@ -439,14 +447,10 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
                     ", 总金额=" + totalAmount);
 
             // 6. 时间戳转换
-            long dddateTimestamp = Long.parseLong(dddateTimestampStr.trim());
             long currentTimestamp = System.currentTimeMillis();
-            long sfdateTimestamp = (sfdateTimestampStr != null && !sfdateTimestampStr.trim().isEmpty())
-                    ? Long.parseLong(sfdateTimestampStr.trim()) : 0;
-
             // 计算时间差(天数)
-            long currentToDdDays = (currentTimestamp - dddateTimestamp) / (1000 * 60 * 60 * 24);
-            long sfToDdDays = (sfdateTimestamp > 0) ? (sfdateTimestamp - dddateTimestamp) / (1000 * 60 * 60 * 24) : 0;
+            long currentToDdDays = (currentTimestamp - dddateTimestampStr) / (1000 * 60 * 60 * 24);
+            long sfToDdDays = (sfdateTimestampStr > 0) ? (sfdateTimestampStr - dddateTimestampStr) / (1000 * 60 * 60 * 24) : 0;
 
             System.out.println("时间计算:当前时间-" + timestampToDateString(String.valueOf(currentTimestamp)) +
                     ", 成交日期-" + timestampToDateString(dddateTimestampStr) +
@@ -454,8 +458,8 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
                     ", 公海-成交相差=" + sfToDdDays + "天");
 
             String ghcDateTimestamp = null;
-            String selectFieldValue = "";
-            String khsx = "";
+            String selectFieldValue = UtilMap.getString(customerData, "selectField_l3nrjuq0");
+            String khsx = UtilMap.getString(customerData, "selectField_mjsco9d4");
 
 // 1. 设置客户属性(单独判断)
             if (totalAmount >= 75000 && sfToDdDays <= 180) {
@@ -465,7 +469,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
 // 2. 第一个条件:当前时间-成交日期<90天 且 总金额>0 且 公海日期-成交日期≈180天
             if (currentToDdDays < 90 && totalAmount > 0 && Math.abs(sfToDdDays - 180) <= 1) {
                 // 在成交日期上加90天
-                ghcDateTimestamp = String.valueOf(calculateTimestamp(sfdateTimestamp, 90));
+                ghcDateTimestamp = String.valueOf(calculateTimestamp(sfdateTimestampStr, 90));
                 selectFieldValue = "半年金额不足";
                 System.out.println("条件1触发:公海池时间设为成交日期+90天=" +
                         timestampToDateString(ghcDateTimestamp));
@@ -473,7 +477,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
 // 3. 第二个条件:总金额≥7.5万 且 公海日期-成交日期≤180天
             else if (totalAmount >= 75000 && sfToDdDays <= 180) {
                 // 在成交日期上加180天
-                ghcDateTimestamp = String.valueOf(calculateTimestamp(sfdateTimestamp, 180));
+                ghcDateTimestamp = String.valueOf(calculateTimestamp(sfdateTimestampStr, 180));
                 selectFieldValue = "半年金额不足";
                 System.out.println("条件2触发:公海池时间设为成交日期+180天=" +
                         timestampToDateString(ghcDateTimestamp));
@@ -487,7 +491,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
             else {
                 if (totalAmount > 0) {
                     // 基础情况:金额大于0
-                    ghcDateTimestamp = String.valueOf(calculateTimestamp(sfdateTimestamp, 90));
+                    ghcDateTimestamp = String.valueOf(calculateTimestamp(sfdateTimestampStr, 90));
                     selectFieldValue = "半年金额不足";
                     System.out.println("基础情况:金额大于0,公海池时间+90天=" +
                             timestampToDateString(ghcDateTimestamp));

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

@@ -267,6 +267,7 @@ public class KdYdOutboundServiceImpl extends ServiceImpl<KdYdOutboundMapper, KdY
                     // 添加主表字段
                     updateMap.put("dateField_krbgloam", safeConvertDateTimeToString(tableItem.get("dateTime")));
                     updateMap.put("textField_krnn5bmr", String.valueOf(tableItem.get("xsDept")));
+                    updateMap.put("textField_ml4qflc0", String.valueOf(tableItem.get("kdgs")));
                     updateMap.put("textField_mhjxw689", String.valueOf(tableItem.get("fhDept")));
                     updateMap.put("textField_mhjxw686", String.valueOf(tableItem.get("cgy")));
                     updateMap.put("selectField_mejowmna", String.valueOf(tableItem.get("djlx")));

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

@@ -944,6 +944,24 @@ public class YdHuaGaoServiceImpl implements YdHuaGaoService {
                 updateFormData.put("textField_mhabp7y0", sdbb);
                 updateFormData.put("textField_mfxbtcdr", chlb);
                 updateFormData.put("textField_mfxbtce5", xsy);
+                updateFormData.put("textField_mfxbtce6", sjzt);
+
+                updateFormData.put("dateField_ml4ikfa0",
+                        kdYdMaterial.getKsrq() != null && !kdYdMaterial.getKsrq().trim().isEmpty() ?
+                                java.time.LocalDate.parse(kdYdMaterial.getKsrq().trim())
+                                        .atStartOfDay(java.time.ZoneId.systemDefault())
+                                        .toInstant()
+                                        .toEpochMilli() :
+                                null
+                );
+                updateFormData.put("dateField_ml4ikfa1",
+                        kdYdMaterial.getJzrq() != null && !kdYdMaterial.getJzrq().trim().isEmpty() ?
+                                java.time.LocalDate.parse(kdYdMaterial.getJzrq().trim())
+                                        .atStartOfDay(java.time.ZoneId.systemDefault())
+                                        .toInstant()
+                                        .toEpochMilli() :
+                                null
+                );
 
                 //确保金额字段保留两位小数
                 if (xsjzj != null) {

+ 51 - 1
mjava-ounuo/src/main/java/com/malk/tuosi/event/McTbEventImpl.java

@@ -1,9 +1,11 @@
 package com.malk.tuosi.event;
 
+import cn.hutool.core.map.MapUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.delegate.TBEvent;
 import com.malk.server.common.McException;
 import com.malk.service.teambition.TBClient;
+import com.malk.utils.PublicUtil;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +23,7 @@ public class McTbEventImpl implements TBEvent {
     @Autowired
     private TBClient tbClient;
 
-//    @Async
+    @Async
     @Override
     public void callBackTask(JSONObject eventJson) {
         String event = eventJson.getString("event");
@@ -44,6 +46,11 @@ public class McTbEventImpl implements TBEvent {
                 List<Map> list=tbClient.queryNodeList(taskId);
                 Map node = _getNodeDetail(list,nodeId);
                 if(String.valueOf(node.get("name")).contains("接单")){
+                    try {
+                        Thread.sleep(3000);
+                    }catch (InterruptedException e){
+                        e.printStackTrace();
+                    }
                     List<String> assigneeIds =  UtilMap.getList(node,"assigneeIds");
                     String startDate = UtilMap.getString(node,"startDate");
                     String dueDate = UtilMap.getString(node,"dueDate");
@@ -60,13 +67,56 @@ public class McTbEventImpl implements TBEvent {
                     return;
                 }
                 log.info("XXXXXX 接单开始,清空后续节点数据");
+                try {
+                    Thread.sleep(3000);
+                }catch (InterruptedException e){
+                    e.printStackTrace();
+                }
                 List<Map> list=tbClient.queryNodeList(taskId);
 //                Map node = _getNodeDetail(list,nodeId);
 //                if(String.valueOf(node.get("name")).contains("接单")){
                     nextNode(taskId,list,nodeId,creatorId);
 //                }
             }
+        }else if(event.equals("v3.task.node.dueDate.update") || event.equals("v3.task.node.startDate.update")){
+            JSONObject data = eventJson.getJSONObject("data");
+            String taskId = data.getString("taskId");
+            String nodeId = data.getString("nodeId");
+            String creatorId = "61a8c27a143030d9110a66d4";
+            List<Map> list=tbClient.queryNodeList(taskId);
+            Map node = _getNodeDetail(list,nodeId);
+            String nodeName =getContainsName(String.valueOf(node.get("name")));
+            if(!PublicUtil.isNull(nodeName)){
+                try {
+                    Thread.sleep(3000);
+                }catch (InterruptedException e){
+                    e.printStackTrace();
+                }
+                boolean isDue = event.equals("v3.task.node.dueDate.update");
+                String date = data.getString(isDue?"dueDate":"startDate");
+                String key = NODE_FIELDNAME.get(nodeName)[isDue?0:1];
+                log.info("XXXXXX {}时间变更,更新任务{}:{}-{}",nodeName,key,taskId,date);
+                tbClient.updateTaskCustomField(taskId,creatorId, UtilMap.map("customfieldName, value",key,Arrays.asList(new JSONObject().fluentPut("title",date))));
+            }
+        }
+    }
+
+    private String getContainsName(String name){
+        for (String key : NODE_FIELDNAME.keySet()) {
+            if(name.contains(key)){
+                return key;
+            }
         }
+        return null;
+    }
+
+    private static Map<String,String[]> NODE_FIELDNAME=new HashMap<>();
+    static{
+        NODE_FIELDNAME.put("设计接单",new String[]{"设计截止时间","设计开始时间"});
+        NODE_FIELDNAME.put("版线组接单",new String[]{"版线组接单截止时间","版线组接单开始时间"});
+        NODE_FIELDNAME.put("制作接单",new String[]{"制作截止时间","制作开始时间"});
+        NODE_FIELDNAME.put("打样组接单",new String[]{"打样组接单截止时间","打样组接单开始时间"});
+        NODE_FIELDNAME.put("CTP接单",new String[]{"CTP接单截止时间","CTP接单开始时间"});
     }
 
     private void nextNode(String taskId,List<Map> list,String nodeId,String creatorId){