lfx 2 days ago
parent
commit
fdb19ba918

+ 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
 

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

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

@@ -0,0 +1,95 @@
+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 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);
+
+}

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

@@ -0,0 +1,176 @@
+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"));
+            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);
+        // 调用接口
+        return saveDeliveryOrder(data,UtilMap.getString(formData,"textField_mdr1v1di"));
+    }
+
+    @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>