소스 검색

臣亿迅

wzy 2 달 전
부모
커밋
0dc3872fec

+ 68 - 0
mjava-chenyixun/pom.xml

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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