Browse Source

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

wzy 4 months ago
parent
commit
43648b2403
22 changed files with 1872 additions and 382 deletions
  1. 70 1
      mjava-aosk/src/main/java/com/malk/aosk/event/DDaskEventImpl.java
  2. 41 0
      mjava-aosk/src/test/java/test.java
  3. 1 1
      mjava-huagao/src/main/resources/application-dev.yml
  4. 21 41
      mjava-lilin/pom.xml
  5. 18 17
      mjava-lilin/src/main/java/com/malk/lilin/Controller/LiLinController.java
  6. 221 12
      mjava-lilin/src/main/java/com/malk/lilin/Controller/taskController.java
  7. 2 0
      mjava-lilin/src/main/java/com/malk/lilin/Service/LiLinService.java
  8. 808 294
      mjava-lilin/src/main/java/com/malk/lilin/Service/impl/LiLinServiceImpl.java
  9. 15 10
      mjava-lilin/src/main/resources/application-dev.yml
  10. 61 0
      mjava-lilin/src/main/resources/logback-spring.xml
  11. 2 1
      mjava-mc/pom.xml
  12. 32 0
      mjava-mc/src/main/java/com/malk/mc/controller/McBotController.java
  13. 18 5
      mjava-xzkj/src/main/java/com/malk/xzkj/controller/IVController.java
  14. 79 0
      mjava-zhiwei/pom.xml
  15. 17 0
      mjava-zhiwei/src/main/java/com/malk/zhiwei/ZhiWeiApplication.java
  16. 59 0
      mjava-zhiwei/src/main/java/com/malk/zhiwei/controller/ZwErpController.java
  17. 98 0
      mjava-zhiwei/src/main/java/com/malk/zhiwei/schedule/ScheduleTask.java
  18. 17 0
      mjava-zhiwei/src/main/java/com/malk/zhiwei/service/ZwService.java
  19. 189 0
      mjava-zhiwei/src/main/java/com/malk/zhiwei/service/impl/ZwServiceImpl.java
  20. 27 0
      mjava-zhiwei/src/main/resources/application-dev.yml
  21. 15 0
      mjava-zhiwei/src/main/resources/application.yml
  22. 61 0
      mjava-zhiwei/src/main/resources/logback-spring.xml

+ 70 - 1
mjava-aosk/src/main/java/com/malk/aosk/event/DDaskEventImpl.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -33,7 +34,7 @@ public class DDaskEventImpl implements DDEvent {
     private DDClient ddClient;
     @Value("${aosk.oa.path}")
     private String PATH;
-
+    
     @Override
     public void executeEvent_Task_Finish(String processInstanceId, String processCode, boolean isAgree, String remark) {
 
@@ -46,6 +47,11 @@ public class DDaskEventImpl implements DDEvent {
 
     @Override
     public void executeEvent_Task_Comment(String processInstanceId, String processCode) {
+        if(isNotSync(processCode)){
+            log.info("不需要同步:{}/{}",processCode,processInstanceId);
+            return;
+        }
+        log.info("评论附件同步:{}/{}",processCode,processInstanceId);
         // 评论回调 1.查询审批实例 2.获取评论附件 3.保存附件
         Map form = ddClientWorkflow.getForms(ddClient.getAccessToken(),processCode);
         Map map = ddClientWorkflow.getProcessInstanceId(ddClient.getAccessToken(), processInstanceId);
@@ -99,6 +105,69 @@ public class DDaskEventImpl implements DDEvent {
 
     @Override
     public void executeEvent_Instance_Start(String processInstanceId, String processCode) {
+        if(isNotSync(processCode)){
+            log.info("不需要同步:{}/{}",processCode,processInstanceId);
+            return;
+        }
+        log.info("附件同步:{}/{}",processCode,processInstanceId);
+        // 发起审批回调 1.查询审批实例 2.获取评论附件 3.保存附件
+        Map form = ddClientWorkflow.getForms(ddClient.getAccessToken(),processCode);
+        Map map = ddClientWorkflow.getProcessInstanceId(ddClient.getAccessToken(), processInstanceId);
+        String createTime=UtilMap.getString(map,"createTime");
+        String yearMonth = createTime.substring(0,7).replace("-","");
+        String filePath = PATH+"/"+yearMonth+"/"+UtilMap.getString(form,"name")+"/"+UtilMap.getString(map,"businessId")+"/";
+        List<Map> list = UtilMap.getList(map, "formComponentValues");
+        for (Map formComponent : list) {
+            if("DDAttachment".equals(UtilMap.getString(formComponent,"componentType"))){
+                JSONArray files = JSONObject.parseArray(UtilMap.getString(formComponent,"value"));
+                if(files==null||files.size()<1){
+                    continue;
+                }
+                for(int i=0;i<files.size();i++){
+                    JSONObject fileInfo=files.getJSONObject(i);
+                    String fileId=fileInfo.getString("fileId");
+                    String fileName=fileInfo.getString("fileName");
+                    System.out.println(fileId);
+                    String url=ddClientWorkflow.getFileUrl(ddClient.getAccessToken(),processInstanceId,fileId);
+                    HttpUtil.downloadFile(url,filePath+fileName);
+                }
+            }
+        }
+    }
+    private static String CODE_STRING="PROC-7176DBF8-30BE-406E-9ED0-CACC76A1604E," +
+            "PROC-0497FB30-EC43-4B5F-8125-A5FF90C87892," +
+            "PROC-8D860D88-F227-4227-9964-EA9427E62F05," +
+            "PROC-6B345937-965F-4F8C-BF60-5519EA79B089," +
+            "PROC-C8C908FF-3086-49F9-9D73-C0179896C829," +
+            "PROC-F5220478-0F57-4BFB-B3FF-19DF1BAE8D38," +
+            "PROC-6322A3F5-0B57-42FF-9D9E-2F49E7C9B008," +
+            "PROC-CCE9F92B-315A-4684-AC9F-3A86D5937FAA," +
+            "PROC-BD364031-F093-4C94-BA26-A7C602037160," +
+            "PROC-77B1B01C-4EAD-4E39-B8DB-A99659E3852B," +
+            "PROC-55B1A05D-49B4-4F98-A250-5E42B80BD21F," +
+            "PROC-A513DC9A-1F1F-48ED-A08B-8C5873C612C0," +
+            "PROC-ED3EE25D-136C-49EB-8A91-20010910DF7A," +
+            "PROC-2AFFB3AE-E5F3-44D8-9E41-214E22D76157," +
+            "PROC-C5D68072-937E-4D77-A513-82770BE405CD," +
+            "PROC-C8B88B78-8919-4453-A9A7-B8038D0758AF," +
+            "PROC-759DB187-0BC8-43CD-943E-F1162AF4F605," +
+            "PROC-06BFB267-A685-489E-8F0B-FF540917336C," +
+            "PROC-96B0A29A-E363-46E7-A6C2-02EF09D3B07D," +
+            "PROC-6D74669A-2298-439A-B40A-AA31BE318A81," +
+            "PROC-18590605-AF82-415B-8100-7801F11B59C0," +
+            "PROC-2FD8F066-F070-4965-A3D7-7ED7F2DAD190," +
+            "PROC-FB5B7A66-D870-4261-8B70-FA4CCF4A2AC7," +
+            "PROC-1071CE60-6C5E-4E3C-8AC4-C656C8DB7D71," +
+            "PROC-6923C3CE-C86A-4ACD-98C5-5866313BCE45," +
+            "PROC-F8FBA1CE-6F1D-4BB3-86FC-532164D69572," +
+            "PROC-A330F4D5-9847-4819-8387-6202918596F0";
+
+    private static boolean isNotSync(String code){
+        List<String> codeList= Arrays.asList(CODE_STRING.split(","));
+        return codeList.contains(code);
+    }
 
+    public static void main(String[] args) {
+        System.out.println(isNotSync("PROC-A330F4D5-9847-4819-8387-6202918596F02"));
     }
 }

+ 41 - 0
mjava-aosk/src/test/java/test.java

@@ -0,0 +1,41 @@
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.aosk.AoskApplication;
+import com.malk.delegate.DDEvent;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+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(classes =  AoskApplication.class)
+@RunWith(SpringRunner.class)
+public class test {
+
+    @Autowired
+    private DDEvent ddEvent;
+
+//    @Test
+//    public void test() {
+//        try {
+//            ddEvent.executeEvent_Instance_Start("amFZ4pIMQ-2RCLF61fp-ZA03891750755509", "PROC-A4CDBB64-FD25-44AB-A4DE-5906597A555A");
+//            Thread.sleep(30000);
+//        }catch (Exception e){
+//            e.printStackTrace();
+//        }
+//    }
+
+    @Test
+    public void test1() {
+        // 184297024169
+        //184297048969
+        //184297048973
+        String result=HttpUtil.post("http://61.177.207.68:9002/api/oa/file/save", JSONObject.toJSONString(
+                UtilMap.map("pid, form, fileId, oano","amFZ4pIMQ-2RCLF61fp-ZA03891750755509","服务类采购合同","184297048973","202506241658000296641")));
+        System.out.println(result);
+    }
+
+}

+ 1 - 1
mjava-huagao/src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
-  port: 8112
+  port: 7708
   servlet:
     context-path: /huagao
 

+ 21 - 41
mjava-lilin/pom.xml

@@ -1,5 +1,6 @@
 <?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"
+<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>
@@ -7,12 +8,21 @@
     <version>0.0.1-SNAPSHOT</version>
     <name>mjava-lilin</name>
     <description>mjava-lilin</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>
-        <spring-boot.version>2.6.13</spring-boot.version>
     </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -23,11 +33,6 @@
             <artifactId>fastjson</artifactId>
             <version>1.2.83</version>
         </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
             <artifactId>okhttp</artifactId>
@@ -48,49 +53,24 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-dependencies</artifactId>
-                <version>${spring-boot.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
 
     <build>
+        <finalName>lilin</finalName>
         <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.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>
-                <version>${spring-boot.version}</version>
                 <configuration>
-                    <mainClass>com.malk.lilin.MjavaLilinApplication</mainClass>
-                    <skip>true</skip>
+                    <executable>true</executable>
+                    <includeSystemScope>true</includeSystemScope>
                 </configuration>
-                <executions>
-                    <execution>
-                        <id>repackage</id>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
-
-</project>
+</project>

+ 18 - 17
mjava-lilin/src/main/java/com/malk/lilin/Controller/LiLinController.java

@@ -5,16 +5,10 @@ import com.alibaba.fastjson.JSON;
 import com.malk.lilin.Service.LiLinService;
 import com.malk.server.common.McR;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -25,45 +19,52 @@ import java.util.Objects;
 public class LiLinController {
     @Autowired
     private LiLinService liLinService;
+
     @GetMapping("/test")
     public McR test() {
-       return McR.success();
+        return McR.success();
     }
+
     @PostMapping("/lilinUpsert")
-    public McR lilinUpsert(@RequestBody Map<String,Object> map) {
-        if (Objects.nonNull(map.get("rqqj"))){
+    public McR lilinUpsert(@RequestBody Map<String, Object> map) {
+        if (Objects.nonNull(map.get("rqqj"))) {
             List<String> rqqj = (List<String>) map.get("rqqj");
-            String  bdbh = String.valueOf(map.get("ddbh"));
-            return liLinService.lilinUpsert(rqqj,bdbh);
+            String bdbh = String.valueOf(map.get("ddbh"));
+            return liLinService.lilinUpsert(rqqj, bdbh);
 
         }
         return McR.errorParam("实例id不能为空!");
     }
+
     @PostMapping("/lilinhqbank")//获取银行联行号
-    public McR hqbank(@RequestBody Map<String,Object> map) throws IOException {
+    public McR hqbank(@RequestBody Map<String, Object> map) throws IOException {
         log.info("lilinhqbank:{}", JSON.toJSONString(map));
         return liLinService.hqbank(map);
     }
+
     @PostMapping("/lilinZD")//付款制单
-    public McR lilinZD(@RequestBody Map<String,Object> map) throws IOException {
+    public McR lilinZD(@RequestBody Map<String, Object> map) throws IOException {
         log.info("lilinZD:{}", JSON.toJSONString(map));
-            return liLinService.lilinZD(map);
+        return liLinService.lilinZD(map);
 
     }
+
     @PostMapping("/lilinJG")//支付结果查询
-    public McR lilinJG(@RequestBody Map<String,Object> map) throws IOException {
+    public McR lilinJG(@RequestBody Map<String, Object> map) throws IOException {
         log.info("lilinJG:{}", JSON.toJSONString(map));
         return liLinService.lilinJG(map);
 
     }
+
     @PostMapping("/lilinLS")//查银行流水
-    public McR lilinLS(@RequestBody Map<String,Object> map) throws IOException {
+    public McR lilinLS(@RequestBody Map<String, Object> map) throws IOException {
         log.info("lilinLS:{}", JSON.toJSONString(map));
         return liLinService.lilinLS(map);
 
     }
+
     @PostMapping("/lilinLSCF")//流水拆分
-    public McR lilinLSCF(@RequestBody Map<String,Object> map) throws IOException {
+    public McR lilinLSCF(@RequestBody Map<String, Object> map) throws IOException {
         log.info("lilinLSCF:{}", JSON.toJSONString(map));
         return liLinService.lilinLSCF(map);
 

+ 221 - 12
mjava-lilin/src/main/java/com/malk/lilin/Controller/taskController.java

@@ -1,10 +1,16 @@
 package com.malk.lilin.Controller;
 
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.crypto.SecureUtil;
-import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.lilin.Service.LiLinService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McR;
+import com.malk.server.dingtalk.DDConf;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
@@ -14,23 +20,25 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
 @RestController
 @Configuration
 @Slf4j
-//@EnableScheduling
-//@ConditionalOnProperty(name = {"enable.scheduling"})
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
 @RequestMapping("/ll")
 public class taskController {
     @Autowired
     private LiLinService lilinService;
+
     public static void main(String[] args) throws IOException {
 
         System.out.println(token().getData());
@@ -47,21 +55,24 @@ public class taskController {
         OkHttpClient client = new OkHttpClient();
 
         Request request = new Request.Builder()
-                .url("https://openapi.xencio.com/sandbox/cfa/api/bank/searchBranch?securityCode="+token().getData()+"&queryType=full")
+                .url("https://openapi.xencio.com/sandbox/cfa/api/bank/searchBranch?securityCode=" + token().getData() + "&queryType=full")
                 .get()
                 .addHeader("x-xencio-client-id", "4d9414e89bc24b0d89b678d9f20bc56a")
                 .addHeader("content-type", "application/x-www-form-urlencoded")
                 .build();
         Response response = client.newCall(request).execute();
     }
+
     @GetMapping("/token")
 
-    public String  token1() {
+    public String token1() {
         return (String) token().getData();
     }
-    @Scheduled(cron = "0 */5 * * * ?")
+
+    //    @Scheduled(cron = "0 44 14 * * ?")
+    @Scheduled(fixedRate = 30 * 60 * 1000)
     public void task() {
-        log.info("定时获取付款结果开始:{}", LocalDateTime.now());
+        log.info("定时获取单笔付款结果开始:{}", LocalDateTime.now());
         try {
             lilinService.lilinJG(null);
         } catch (Exception e) {
@@ -70,11 +81,209 @@ public class taskController {
         }
 
 
+    }
+
+        @Scheduled(fixedRate = 60 * 60 * 1000)
+    public void taskLS() {
+        log.info("定时获取银行流水结果开始:{}", LocalDateTime.now());
+        try {
+            lilinService.lilinLS(null);
+        } catch (Exception e) {
+            // 记录错误信息
+            e.printStackTrace();
+        }
+    }
+
+        @Scheduled(fixedRate = 30 * 60 * 1000)
+    public void taskPLJG() {
+        log.info("定时获取支付结果发起批量审批开始:{}", LocalDateTime.now());
+        try {
+            lilinService.taskPLJG();
+        } catch (Exception e) {
+            // 记录错误信息
+            e.printStackTrace();
+        }
+    }
+
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private YDConf ydConf;
+    @Autowired
+    private DDConf ddConf;
+
+    @SneakyThrows
+    @PostMapping("/insetRLW")
+    McR insetRLW(@RequestBody JSONObject param) {
+        String formInstanceId = param.getString("formInstanceId");
+        log.info("formInstanceId:{}", formInstanceId);
+        // 根据实例ID获取表单数据
+        Map data = (Map) ydClient.queryData(YDParam.builder()
+                .formInstId(formInstanceId)
+                .appType(ydConf.getAppType())
+                .systemToken(ydConf.getSystemToken())
+                .userId(ddConf.getOperator())
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        if (data == null) {
+            log.warn("formData 为空, formInstanceId:{}", formInstanceId);
+            return McR.errorParam("formData 为空");
+        }
+
+        // 提取字段值
+        String xm = (String) data.get("textField_cbp011r");
+        String lxdh = (String) data.get("textField_e03i1pp");
+        String zjhm = (String) data.get("textField_zzw8p5a");
+        Object cbgszt = data.get("textField_047q8sa");
+        String jzgw = (String) data.get("textField_th8v2yz");
+        Long htksrq = (Long) data.get("dateField_vcsn4ij");
+        Long htjsrq = (Long) data.get("dateField_8hefkvf");
+        Long syksrq = (Long) data.get("dateField_v0mq0eh");
+        Long syjsrq = (Long) data.get("dateField_5m94qor");
+        Integer htqx = (Integer) data.get("numberField_pcryupm");
+        String gzd = (String) data.get("textField_mds5v9ws");
+        String gzzd = (String) data.get("textField_5ug31ny");
+        Integer jbgzzs = (Integer) data.get("numberField_6yzgnbn");
+        String sbd = (String) data.get("textField_kvingds");
+        Integer sbjs = (Integer) data.get("numberField_49g9wy0");
+        Integer gjjjs = (Integer) data.get("numberField_ptdrap4");
+        String yglx = (String) data.get("textField_idzudk7");
+
+        // 查询人力窝标志
+        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
+                .formUuid("FORM-3B6D99D1B3E1422BBC848E5AD5FD3B99KQYW")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_md5p9nay", gzd)))
+                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+
+        String sfrlw = "否"; // 默认值
+
+        if (list != null && !list.isEmpty()) {
+            try {
+                Map<?, ?> formData = null;
+                Object firstItem = list.get(0);
+
+                // 尝试获取 formData 内部数据,如果不存在则使用顶层数据
+                if (firstItem instanceof Map) {
+                    Map<?, ?> itemMap = (Map<?, ?>) firstItem;
+                    Object rawData = itemMap.get("formData");
+                    formData = (rawData instanceof Map) ? (Map<?, ?>) rawData : itemMap;
+                }
+
+                if (formData != null) {
+                    Object val = formData.get("radioField_mde59hby");
+                    if (val != null && "是".equals(val.toString().trim())) {
+                        sfrlw = "是";
+                    }
+                }
+            } catch (Exception e) {
+                log.warn("解析人力窝标志失败", e);
+                // 异常时保持 sfrlw = "否"
+            }
+        }
+
+
+        // 构建目标表单数据
+        Map<String, Object> formData = new HashMap<>();
+
+        formData.put("textField_swflbna", xm);
+        formData.put("textField_wlfqmpt", lxdh);
+        formData.put("textField_jkc1eg0", zjhm);
+        formData.put("textField_ans20nj", cbgszt);
+        formData.put("textField_eefjs16", jzgw);
+        formData.put("dateField_973ypn3", htksrq);
+        formData.put("dateField_1udu9fe", htjsrq);
+        formData.put("dateField_uzg03bt", syksrq);
+        formData.put("dateField_zqyq80r", syjsrq);
+        formData.put("numberField_eeaqsst", htqx);
+        formData.put("textField_d4nmf4u", gzd);
+        formData.put("textField_1n9ndz9", gzzd);
+        formData.put("numberField_ivcq47u", jbgzzs);
+        formData.put("textField_6t648n0", sbd);
+        formData.put("numberField_ker1ufe", sbjs);
+        formData.put("numberField_4b3vaj2", gjjjs);
+        formData.put("textField_0jfrjiw", yglx);
+
+        // 设置人力窝相关标志
+        if ("是".equals(sfrlw)) {
+            formData.put("textField_pqh9s53", "是");
+            formData.put("textField_2q3356p", "否");
+        } else {
+            formData.put("textField_pqh9s53", "否");
+            formData.put("textField_2q3356p", "是");
+        }
+
+        // 提交到目标表单
+        ydClient.operateData(YDParam.builder()
+                .formUuid("FORM-4292D265889B4759A29F37F535FE306AP4ER")
+                .formDataJson(JSON.toJSONString(formData))
+                .userId("01150949543132101208")
+                .build(), YDConf.FORM_OPERATION.create);
+
+        return McR.success();
+    }
+
+    @PostMapping("/test")
+    String  test(@RequestBody Map param) {
+//        List<Map> khlist = (List<Map>) ydClient.queryData(
+//                YDParam.builder()
+//                        .formUuid("FORM-2C2D6EAC04FD48D295590EB6BD287B13DVMV")
+//                        .build(),
+//                YDConf.FORM_QUERY.retrieve_list_all
+//        ).getData();
+//
+//        List<String> khdaList = khlist.stream()
+//                .map(item -> (Map<String, Object>) item.get("formData"))
+//                .filter(Objects::nonNull) // 过滤掉 formData 为 null 的
+//                .map(formData -> (String) formData.get("textField_mdwiyspj"))
+//                .filter(yhzh -> yhzh != null && !yhzh.trim().isEmpty())
+//                .collect(Collectors.toList());
+        List<String> khdaList = Arrays.asList(
+                "1001260509024819590",
+                "1001260509424880696",
+                "1001260509324868573",
+                "1001260509324808614"
+        );
+        for (String accountNo : khdaList) {
+            try {
+                // 假设这是你要对每个 accountNo 做的业务逻辑
+                System.out.println("正在处理账号: " + accountNo);
+            } catch (Exception e) {
+                log.error("处理账号失败: {}", accountNo, e);
+
+            }
+        }
+// 使用结果
+//        System.out.println("所有银行账号: " + yhzhList);
+
+//        for (Map<String, Object> item : khlist) {
+//            String formInstanceId = (String) item.get("formInstanceId");
+//
+//            Map<String, Object> formData = (Map<String, Object>) item.get("formData");
+//            String textFieldValue = (String) formData.get("textField_m8sjaafp");
+//
+//            Map<String, Object> formData1 = new HashMap<>();
+//
+//            formData1.put("associationFormField_mdwt4s1d", Arrays.asList(getkhAss(textFieldValue,formInstanceId)));
+//
+//            ydClient.operateData(YDParam.builder()
+//                    .formUuid("FORM-DAEFD29BDE4D4A7D9DA8DDA848DA3D12X5S8")
+//                    .processCode("TPROC--9DD668C1KMQXI9A68YLJ26K02B4M210H4TWDM0")
+//                    .formDataJson(JSON.toJSONString(formData1))
+//                    .userId("275412081437800471")
+//                    .build(), YDConf.FORM_OPERATION.start);
+//        }
+        return "aa";
+    }
+    private Object getkhAss(String title, String id) {
+        return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_RPH7R3LF3SMXLRDY1ZJW", "FORM-E18CC7F3495B45BB852CB386F325BF03IAS3", "receipt", id, title, "");
     }
     private static McR token() {
         String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-        String s = SecureUtil.md5("KHPuj0JMS6nS1ACzc#" + today);
+        String s = SecureUtil.md5("}bH5%t4_)6e3#" + today);
         return McR.success(s);
     }
 
+
 }
+

+ 2 - 0
mjava-lilin/src/main/java/com/malk/lilin/Service/LiLinService.java

@@ -21,4 +21,6 @@ public interface LiLinService {
     McR lilinLS(Map<String, Object> map) throws IOException;
 
     McR lilinLSCF(Map<String, Object> map) throws IOException;
+
+    McR taskPLJG() ;
 }

File diff suppressed because it is too large
+ 808 - 294
mjava-lilin/src/main/java/com/malk/lilin/Service/impl/LiLinServiceImpl.java


+ 15 - 10
mjava-lilin/src/main/resources/application-dev.yml

@@ -5,10 +5,10 @@ server:
     context-path: /lilin
 
 enable:
-  scheduling: false
+  scheduling: true
 logging:
-#  config: classpath:logback-spring.xml
-#  path: /home/server/lianxiang/log/
+  config: classpath:logback-spring.xml
+#  path: /lilin/log
   level:
     com.malk.*: debug
 
@@ -17,18 +17,23 @@ dingtalk:
   agentId: 3745118146
   appKey: dingrlxbv5y8hrsmmrnm
   appSecret: tnAtNJUfYmYWURK302FkLXYLRW3PnCat6wj65lOG06db86m24kRqpWnVPHFCgUCU
+#  agentId: 2691784047
+#  appKey: dinghbynhnd2dbgypmsa
+#  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
   corpId:
   aesKey:
   token:
-#  operator: 1656315499790273 #孙海生
-#  unionId: iPPoZ001WAYlZxyoU04g2bgiEiE #孙海生
-#  spaceId: 26395140381 #钉盘-团队文件-宜搭文件库
-#  partnersDentryId: 176651024213 #钉盘-团队文件-宜搭文件库-合作伙伴文件
-#  unrestrictedDonationDentryId: 176648777099 #钉盘-团队文件-宜搭文件库-资助人费用登记文件
 
+
+#aliwork:
+#  appType: APP_V25MK3XKODKB02UVTGSH
+#  systemToken: IQC66GC1L5TW5HKF6SX645RC4AXG2CFGQOMCMOQ4
 aliwork:
-  appType: APP_V25MK3XKODKB02UVTGSH
-  systemToken: IQC66GC1L5TW5HKF6SX645RC4AXG2CFGQOMCMOQ4
+  appType: APP_RPH7R3LF3SMXLRDY1ZJW
+  systemToken: 7M866K91D4LVACB4EADAZ5UJG7IN3OGA33WAMNT
+#aliwork:
+#  appType: APP_G1MXVGRR5L6OTZDEME0M
+#  systemToken: PTA66DA1S07X9DRA9EQZ96UUWJTQ2GHXLL5DMY42
 
 
 

+ 61 - 0
mjava-lilin/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.zitoo.connecter" level="debug"/>
+    <root level="INFO">
+        <appender-ref ref="stdout"/>
+        <appender-ref ref="appLogAppender"/>
+        <appender-ref ref="SIFT"/>
+    </root>
+</configuration>

+ 2 - 1
mjava-mc/pom.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w che.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+         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>
 
 

+ 32 - 0
mjava-mc/src/main/java/com/malk/mc/controller/McBotController.java

@@ -1,5 +1,6 @@
 package com.malk.mc.controller;
 
+import cn.hutool.crypto.SecureUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.server.common.McException;
@@ -13,7 +14,10 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import sun.security.provider.MD5;
 
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -69,4 +73,32 @@ public class McBotController {
         map.put("text",UtilMap.map("content",text));
         HttpUtil.createPost(sessionWebhook).body(JSONObject.toJSONString(map)).execute();
     }
+
+    public static void main(String[] args) {
+        String AppKey="949306";
+        String UID="2195100110";
+        String ForCorp="0";
+        String AppSecurity="nG0#bSa5pCzt3!XuRC(:+$WM";
+        String AppSecurityMd5=SecureUtil.md5(AppSecurity);
+        System.out.println(AppSecurityMd5);
+        System.out.println(getMD5Hash(AppSecurity));
+//        String Signature=SecureUtil.md5(AppKey+UID+ForCorp+AppSecurityMd5);
+//        System.out.println(Signature);
+    }
+
+    public static String getMD5Hash(String source) {
+        StringBuilder sb = new StringBuilder();
+        MessageDigest md5;
+        try {
+            md5 = MessageDigest.getInstance("MD5");
+            md5.update(source.getBytes());
+            for (byte b : md5.digest()) {
+                sb.append(String.format("%02x", b));
+            }
+            return sb.toString();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 18 - 5
mjava-xzkj/src/main/java/com/malk/xzkj/controller/IVController.java

@@ -173,7 +173,15 @@ public class IVController {
             String kind = UtilMap.getString(item, "TypeDescription");
             String invoiceName = UtilMap.getString(item, "SubTypeDescription");
             if (kind.equals("全电发票")) {
-                kind = invoiceName.contains("铁路电子客票")?"火车票":invoiceName.contains("专用发票") ? "全电专用发票" : "全电普通发票";
+                if(invoiceName.contains("铁路电子客票")){
+                    kind="火车票";
+                } else if(invoiceName.contains("机票行程单")){
+                    kind="机票行程单";
+                } else if (invoiceName.contains("专用发票")) {
+                    kind="全电专用发票";
+                }else {
+                    kind="全电普通发票";
+                }
             }
             if (kind.equals("增值税发票")) {
                 kind = invoiceName.contains("增值税专用发票") ? "增值税专用发票" : "增值税普通发票";
@@ -215,7 +223,9 @@ public class IVController {
                 invoiceDto.setTax(calculateTax(invoiceDto.getAmount(), new BigDecimal("0.09"), 2));
                 invoiceDto.setExcludingTax(invoiceDto.getAmount().subtract(invoiceDto.getTax()));
             }
-            if ("机票行程单".equals(item.get("TypeDescription"))) {
+            if ("机票行程单".equals(kind)) {
+                invoiceDto.setSellerName(UtilMap.getString_first(prop, "Issuer"));
+                invoiceDto.setSellerTaxId(UtilMap.getString_first(prop, "Seller"));
                 Map flight = (Map) UtilMap.getList(prop, "FlightItems").get(0);
                 invoiceDto.setDepartureTime(UtilString.replaceDateZH_cn(UtilMap.getString(item, "DateGetOn")) + " " + UtilMap.getString(prop, "TimeGetOn"));
                 invoiceDto.setDeparturePort(UtilMap.getString(flight, "StationGetOn"));
@@ -278,7 +288,8 @@ public class IVController {
                     "增值税电子专用发票",
                     "增值税电子普通发票",
                     "全电普通发票",
-                    "全电专用发票");
+                    "全电专用发票",
+                    "机票行程单");
             // prd 仅仅识别 报销 用途的发票
             if(!dto.getType().contains("报销")||!yzType.contains(dto.getKindName())){
                 return;
@@ -292,8 +303,10 @@ public class IVController {
                 if(!PublicUtil.isNull(invoice.get("BuyerTaxCode"))){
                     McException.assertAccessException(!dto.getBuyerTaxId().equals(invoice.get("BuyerTaxCode")), serialTips + ", 购买方税号不匹配!");
                 }
-                McException.assertAccessException(!dto.getSellerName().equals(guyuanNameRepalce(invoice.get("SellerName").toString())), serialTips + ", 销售方名称不匹配!");
-                McException.assertAccessException(!dto.getSellerTaxId().equals(invoice.get("SellerTaxCode")), serialTips + ", 销售方税号不匹配!");
+                if(!dto.getKindName().equals("机票行程单")){
+                    McException.assertAccessException(!dto.getSellerName().equals(guyuanNameRepalce(invoice.get("SellerName").toString())), serialTips + ", 销售方名称不匹配!");
+                    McException.assertAccessException(!dto.getSellerTaxId().equals(invoice.get("SellerTaxCode")), serialTips + ", 销售方税号不匹配!");
+                }
             } catch (TencentCloudSDKException e) {
                 log.error(e.getMessage(), e);
                 // prd: 上传发票为假发票时,提示:该发票有疑问,请联系财务人员

+ 79 - 0
mjava-zhiwei/pom.xml

@@ -0,0 +1,79 @@
+<?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.7.18</version> <!-- 使用最新的稳定版或其他适用版本 -->
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>com.malk</groupId>
+    <artifactId>mjava-zhiwei</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <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.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>zhiwei</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-zhiwei/src/main/java/com/malk/zhiwei/ZhiWeiApplication.java

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

+ 59 - 0
mjava-zhiwei/src/main/java/com/malk/zhiwei/controller/ZwErpController.java

@@ -0,0 +1,59 @@
+package com.malk.zhiwei.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import lombok.extern.slf4j.Slf4j;
+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.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 功能:
+ * 作者:hanxue
+ * 日期:2025/8/4 14:47
+ */
+@Slf4j
+@RestController
+@RequestMapping
+public class ZwErpController {
+
+    @Autowired
+    private YDClient ydClient;
+
+
+    @PostMapping("/deliver/save")
+    public McR savedeliver(@RequestBody Map param){
+        log.info("出库单数据保存:{}",param);
+        McException.assertParamException_Null(param,"saleCode","noticeCode","code","prod","qty","isdelete");
+        try {
+            Map formData = new HashMap();
+            formData.put("textField_mdwr7jnh",param.get("saleCode"));
+            formData.put("textField_mdwpe4m7",param.get("noticeCode"));
+            formData.put("textField_mdwr7jni",param.get("code"));
+            formData.put("textField_mdqsatd4",param.get("prod"));
+            formData.put("numberField_mdwr7jnf",param.get("qty"));
+            formData.put("textField_mdwr7jng",param.get("isdelete"));
+            Map serarchParam= new HashMap();
+            serarchParam.put("textField_mdwr7jnh",param.get("saleCode"));
+            serarchParam.put("textField_mdwpe4m7",param.get("noticeCode"));
+            serarchParam.put("textField_mdwr7jni",param.get("code"));
+            ydClient.operateData(YDParam.builder().formUuid("FORM-54A845D217A64108BC2B288F6F0BE622BR5C")
+                    .searchCondition(JSONObject.toJSONString(serarchParam))
+                    .formDataJson(JSONObject.toJSONString(formData)).build(), YDConf.FORM_OPERATION.upsert);
+            return McR.success();
+        }catch (Exception e){
+            e.printStackTrace();
+            return McR.error("201","服务异常");
+        }
+
+    }
+}

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

@@ -0,0 +1,98 @@
+package com.malk.zhiwei.schedule;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.PublicUtil;
+import com.malk.utils.UtilMap;
+import com.malk.zhiwei.service.ZwService;
+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;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+
+public class ScheduleTask {
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private ZwService zwService;
+
+    /**
+     */
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void sync() {
+        List<Map> list=(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-3A89370AC94B429B9180ED98260BAF680JYM").pageSize(1)
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_mcefftmv","待处理"))).build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+        log.info("手动同步查询-结果,{}",list.size());
+        if(list==null||list.size()<1){
+            return;
+        }
+        Map data=list.get(0);
+        log.info("{}",data);
+        String formInstanceId=String.valueOf(data.get("formInstanceId"));
+        processing(formInstanceId);
+        Map formData=UtilMap.getMap(data,"formData");
+        try {
+            String type=UtilMap.getString(formData,"selectField_mcefftmu");
+
+            if("销售订单".equals(type)){
+                JSONObject jsonObject=zwService.saveSaleOrder(formData);
+                comp(formInstanceId,"同步完成!",JSONObject.toJSONString(jsonObject),null);
+            }else if("发货单".equals(type)){
+                JSONObject jsonObject=zwService.saveDeliveryOrder(formData);
+                comp(formInstanceId,"同步完成!",JSONObject.toJSONString(jsonObject),null);
+            }else if("产品同步".equals(type)){
+                zwService.syncProduct(UtilMap.getString(formData,"textField_mcefftng"),UtilMap.getString(formData,"textField_mdr1v1di"));
+                comp(formInstanceId,"同步完成!","",null);
+            }else{
+                comp(formInstanceId,"同步完成!","",null);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            comp(formInstanceId,"异常",e.getMessage(),null);
+        }
+    }
+
+    @Scheduled(cron = "0 0 1 * * ?")
+    public void syncProd() {
+        zwService.syncProduct("","PILOT2023");
+//        zwService.syncProduct("","PILOT2024");
+    }
+
+    private void processing(String id){
+        ydClient.operateData(YDParam.builder().formInstanceId(id)
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_mcefftmv", "处理中")))
+                .build(), YDConf.FORM_OPERATION.update);
+    }
+
+    private void comp(String id,String result,String msg,Map data){
+        if(data==null){
+            data=new HashMap<>();
+        }
+        data.putAll(UtilMap.map("selectField_mcefftmv, textField_mcefftnw, textareaField_mcefftn0", "已完成",result,msg));
+        ydClient.operateData(YDParam.builder().formInstanceId(id)
+                .updateFormDataJson(JSON.toJSONString(data))
+                .build(), YDConf.FORM_OPERATION.update);
+    }
+
+
+}

+ 17 - 0
mjava-zhiwei/src/main/java/com/malk/zhiwei/service/ZwService.java

@@ -0,0 +1,17 @@
+package com.malk.zhiwei.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Map;
+
+public interface ZwService {
+
+    // 销售订单
+    JSONObject saveSaleOrder(Map formData);
+
+    // 销售发货单
+    JSONObject saveDeliveryOrder(Map formData);
+
+    void syncProduct(String id,String erpPilot);
+
+}

+ 189 - 0
mjava-zhiwei/src/main/java/com/malk/zhiwei/service/impl/ZwServiceImpl.java

@@ -0,0 +1,189 @@
+package com.malk.zhiwei.service.impl;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.utils.PublicUtil;
+import com.malk.utils.UtilMap;
+import com.malk.zhiwei.service.ZwService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.rmi.CORBA.Util;
+import java.util.*;
+
+@Service
+@Slf4j
+public class ZwServiceImpl implements ZwService {
+
+    private static String ERP_URL="http://10.0.0.208:80";
+    private static String ERP_NAME="064";
+    private static String ERP_PASSWORD="";
+    private static String ERP_PILOT="PILOT2001";
+
+    // http://10.0.0.208:30104/MobileService.asmx?op=GETPILOTLIST
+    // {"PILOTLIST":[
+    // {"NAME":"PILOT2001","ZTNAME":"2001测试"},
+    // {"NAME":"PILOT2002","ZTNAME":"2002CS-BYD"},
+    // {"NAME":"PILOT2023","ZTNAME":"20232023"},
+    // {"NAME":"PILOT2024","ZTNAME":"20242024"}]}
+    private static String ERP_LOGIN_KEY="2025062710430311152101098";
+
+    private static String ERP_OP_PRODUCT="Anyv_View_PRODUCT";
+    private static String ERP_OP_PRODCLAS="Anyv_View_PRODCLAS";
+    private static String ERP_OP_CUSTOMER="Anyv_View_CUSTOMER";
+
+    public static void main(String[] args) {
+        // {"CODE":"CP000201","clasName":"成品","CNAME":"MPP-20P","SPEC":"600*500*1.8±0.3"},{"CODE":"CP000809","clasName":"成品","CNAME":"阻燃MPP-25P-灰色","SPEC":"1400*1100*3+1-0.5"},{"CODE":"CP001362","clasName":"成品","CNAME":"阻燃MPP-15P","SPEC":"2480*222*3.5±0.2"},{"CODE":"TCP000023","clasName":"成品","CNAME":"POE05灰(李宁)","SPEC":"1850*800*6"}
+        JSONObject jsonObject = queryData(ERP_OP_PRODUCT,"clasName = '成品'",ERP_PILOT);
+        // {"CODE":"KH0681","CNAME":"耐玛体育","ABBR":"耐玛体育"},{"CODE":"KH0022","CNAME":"上海浩魁材料科技有限公司","ABBR":"浩魁"}
+//        JSONObject jsonObject = queryData(ERP_OP_CUSTOMER,"");
+//        saveSaleOrder("{\"CODE\":\"KH0681\",\"SUPP\":\"KH0681\",\"STAFFCODE\":\"admin\",\"VERIFICATION\":\"False\",\"PRODLIST\":[{\"ERI\":\"0GZ29ZUKV401HCBI\",\"CODE\":\"O220902002\",\"CODE1\":\"\",\"PROD\":\"CP000201\",\"GWN\":\"WXYL\",\"VPNO\":\"X220703\",\"QTY\":1,\"confirm\":0}]}");
+
+//        saveDeliveryOrder("{\"CODE\":\"KH0681\",\"STAFFCODE\":\"admin\",\"VERIFICATION\":\"False\",\"PRODLIST\":[{\"ERI\":\"\",\"CODE\":\"O250627010\",\"PROD\":\"CP000201\",\"GWN\":\"WXYL\",\"VPNO\":\"X220703\",\"QTY\":1,\"confirm\":0}]}");
+    }
+
+    private static String erpLogin(String erpPilot){
+        String xmlResponse=HttpUtil.get(ERP_URL+"/MobileService.asmx/login?name="+ERP_NAME+"&password="+ERP_PASSWORD+"&pilot="+erpPilot);
+        int jsonStart = xmlResponse.indexOf("{");
+        int jsonEnd = xmlResponse.lastIndexOf("}");
+        String jsonStr = xmlResponse.substring(jsonStart, jsonEnd + 1);
+        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
+        log.info("登录结果:{}",jsonObject);
+        return jsonObject.getJSONObject("USER").getString("Key");
+    }
+
+    private static JSONObject queryData(String op,String where,String erpPilot){
+        String xmlResponse=HttpUtil.get(ERP_URL+"/MobileService.asmx/"+op+"?KEY="+erpLogin(erpPilot)+"&field=&userid="+ERP_NAME+"&where="+where+"&pilot="+erpPilot);
+        int jsonStart = xmlResponse.indexOf("{");
+        int jsonEnd = xmlResponse.lastIndexOf("}");
+        String jsonStr = xmlResponse.substring(jsonStart, jsonEnd + 1);
+        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
+        log.info("查询结果:{}",jsonObject);
+        return jsonObject;
+    }
+
+    private static JSONObject saveSaleOrder(String data,String erpPilot){
+        String xmlResponse=HttpUtil.get(ERP_URL+"/MobileService.asmx/Anyv_GenForm_ORDCORD1?KEY="+erpLogin(erpPilot)+"&userid="+ERP_NAME+"&Data="+data+"&pilot="+erpPilot);
+        System.out.println(xmlResponse);
+        int jsonStart = xmlResponse.indexOf("{");
+        int jsonEnd = xmlResponse.lastIndexOf("}");
+        String jsonStr = xmlResponse.substring(jsonStart, jsonEnd + 1);
+        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
+        log.info("保存结果:{}",jsonObject);
+        return jsonObject;
+    }
+
+    @Override
+    public JSONObject saveSaleOrder(Map formData) {
+        // 数据转换
+        JSONObject dataObj = new JSONObject();
+        dataObj.put("CODE", UtilMap.getString(formData,"textField_mcefftni"));// 单号
+        dataObj.put("SUPP",UtilMap.getString(formData,"textField_mcefftni"));// 客户代码
+        dataObj.put("STAFFCODE",UtilMap.getString(formData,"textField_mcefftnj"));
+        dataObj.put("VERIFICATION","False");
+        List<Map> list=UtilMap.getList(formData,"tableField_mcefftnk");
+        List<Map> dataList=new ArrayList<>();
+        for (Map map : list) {
+            Map tempMap=new HashMap();
+            tempMap.put("ERI",""); // 销售订单副档ERI或出货通知单副档ERI
+            tempMap.put("CODE", UtilMap.getString(map,"textField_mcefftnl")); // 销售订单编号
+            tempMap.put("CODE1", "");// 出货通知单编号
+            tempMap.put("PROD", UtilMap.getString(map,"textField_mcefftnn"));// 产品代码
+            tempMap.put("GWN", UtilMap.getString(map,"textField_mcefftno"));// 仓库代码
+            tempMap.put("VPNO", UtilMap.getString(map,"textField_mcefftnp"));// 产品批号
+            tempMap.put("QTY", UtilMap.getString(map,"numberField_mcefftnr"));// 产品数量
+            tempMap.put("confirm", "0");
+            dataList.add(tempMap);
+        }
+        dataObj.put("PRODLIST",dataList);
+        String data=JSONObject.toJSONString(dataObj);
+        log.info("入参:{}",data);
+        // 调用接口
+        JSONObject result=saveSaleOrder(UtilMap.getString(formData,"textField_mcefftni"),UtilMap.getString(formData,"textField_mdr1v1di"));
+        JSONArray codes=result.getJSONArray("page");
+        for (int i = 0; i < list.size(); i++) {
+            Map tempMap=new HashMap();
+            tempMap.put("textField_mdqsatd4",UtilMap.getString(list.get(i),"textField_mdqs9oqa"));
+            tempMap.put("textField_mdwpe4m6","合同");
+            if(codes.size() >= i){
+                tempMap.put("textField_mdqsatd5",codes.getJSONObject(i).getString("CODE"));
+            }
+            ydClient.operateData(YDParam.builder().formUuid("FORM-E999482BC03547D89A435F5441A46F1ANR0R").formDataJson(JSONObject.toJSONString(tempMap)).build(), YDConf.FORM_OPERATION.create);
+        }
+        return result;
+    }
+
+    private static JSONObject saveDeliveryOrder(String data,String erpPilot){
+        String xmlResponse=HttpUtil.get(ERP_URL+"/MobileService.asmx/Anyv_GenForm_STKSHIPNOTE1?KEY="+erpLogin(erpPilot)+"&userid="+ERP_NAME+"&Data="+data+"&pilot="+erpPilot);
+        System.out.println(xmlResponse);
+        int jsonStart = xmlResponse.indexOf("{");
+        int jsonEnd = xmlResponse.lastIndexOf("}");
+        String jsonStr = xmlResponse.substring(jsonStart, jsonEnd + 1);
+        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
+        log.info("保存结果:{}",jsonObject);
+        return jsonObject;
+    }
+
+    @Override
+    public JSONObject saveDeliveryOrder(Map formData) {
+        // 数据转换
+        JSONObject dataObj = new JSONObject();
+        dataObj.put("CODE", UtilMap.getString(formData,"textField_mcefftni"));// 客户代码
+        dataObj.put("STAFFCODE",UtilMap.getString(formData,"textField_mcefftnj"));
+        dataObj.put("VERIFICATION","False");
+        List<Map> list=UtilMap.getList(formData,"tableField_mcefftnk");
+        List<Map> dataList=new ArrayList<>();
+        for (Map map : list) {
+            Map tempMap=new HashMap();
+            tempMap.put("ERI",""); // 销售订单副档ERI或出货通知单副档ERI
+            tempMap.put("CODE", UtilMap.getString(map,"textField_mcefftnl")); // 销售订单编号
+            tempMap.put("PROD", UtilMap.getString(map,"textField_mcefftnn"));// 产品代码
+            tempMap.put("GWN", UtilMap.getString(map,"textField_mcefftno"));// 仓库代码
+            tempMap.put("VPNO", UtilMap.getString(map,"textField_mcefftnp"));// 产品批号
+            tempMap.put("QTY", UtilMap.getString(map,"numberField_mcefftnr"));// 产品数量
+            tempMap.put("confirm", "0");
+            dataList.add(tempMap);
+        }
+        dataObj.put("PRODLIST",dataList);
+        String data=JSONObject.toJSONString(dataObj);
+        log.info("入参:{}",data);
+        JSONObject result=saveDeliveryOrder(data,UtilMap.getString(formData,"textField_mdr1v1di"));
+        JSONArray codes=result.getJSONArray("page");
+        for (int i = 0; i < list.size(); i++) {
+            Map tempMap=new HashMap();
+            tempMap.put("textField_mdqsatd4",UtilMap.getString(list.get(i),"textField_mdqs9oqa"));
+            tempMap.put("textField_mdwpe4m6","发货");
+            tempMap.put("textField_mdwpe4m7",UtilMap.getString(formData,"textField_mdwqclqh"));
+            if(codes.size() >= i){
+                tempMap.put("textField_mdqsatd5",codes.getJSONObject(i).getString("CODE"));
+            }
+            ydClient.operateData(YDParam.builder().formUuid("FORM-E999482BC03547D89A435F5441A46F1ANR0R").formDataJson(JSONObject.toJSONString(tempMap)).build(), YDConf.FORM_OPERATION.create);
+        }
+        return result;
+        // 调用接口
+    }
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Override
+    public void syncProduct(String id,String erpPilot) {
+        JSONObject jsonObject = queryData(ERP_OP_PRODUCT,"clasName = '成品'"+ (PublicUtil.isNull(id)?"":("and CODE = '"+id+"'")),erpPilot);
+        JSONArray data = jsonObject.getJSONArray("data");
+        log.info("data.size():{}",data.size());
+        for (int i = 0; i < data.size(); i++) {
+            JSONObject dataObj = data.getJSONObject(i);
+            String productId=UtilMap.getString(dataObj,"CODE");
+            Map saveMap=UtilMap.map("textField_mcijetil, textField_l43jpnsf, textField_l43jpnsh",productId,dataObj.getString("CNAME"),dataObj.getString("SPEC"));
+            ydClient.operateData(YDParam.builder().formUuid("FORM-4A7B1A62CCFC4D758AB98ADE3F97D40COYO2")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mcijetil", productId)))
+                    .formDataJson(JSONObject.toJSONString(saveMap)).build(), YDConf.FORM_OPERATION.upsert);
+        }
+    }
+}

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

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

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

@@ -0,0 +1,15 @@
+spring:
+  profiles:
+    active: dev
+  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-zhiwei/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>