pruple_boy 1 год назад
Родитель
Сommit
7f843457c8
38 измененных файлов с 1289 добавлено и 106 удалено
  1. 33 0
      mjava-aipocloud/src/main/java/com/malk/aipocloud/Boot.java
  2. 27 10
      mjava-aipocloud/src/main/resources/application-dev.yml
  3. 5 0
      mjava-aipocloud/src/main/resources/application-prod.yml
  4. 6 1
      mjava-aipocloud/src/main/resources/application-test.yml
  5. BIN
      mjava-aipocloud/src/main/resources/ssl/cp.100ali.com.jks
  6. BIN
      mjava-aipocloud/src/main/resources/ssl/server.jks
  7. 54 0
      mjava-aiwei/pom.xml
  8. 32 0
      mjava-aiwei/src/main/java/com/malk/aiwei/Boot.java
  9. 17 0
      mjava-aiwei/src/main/java/com/malk/aiwei/controller/TBController.java
  10. 13 0
      mjava-aiwei/src/main/java/com/malk/aiwei/controller/YDController.java
  11. 65 0
      mjava-aiwei/src/main/resources/application-dev.yml
  12. 40 0
      mjava-aiwei/src/main/resources/application-prod.yml
  13. 39 0
      mjava-aiwei/src/main/resources/application-test.yml
  14. 4 4
      mjava-cloudpure/src/main/java/com/malk/cloudpure/schedule/CPScheduleTask.java
  15. 54 0
      mjava-dongfangxinhua/pom.xml
  16. 32 0
      mjava-dongfangxinhua/src/main/java/com/malk/dongfangxinhua/Boot.java
  17. 141 0
      mjava-dongfangxinhua/src/main/java/com/malk/dongfangxinhua/controller/DFXHController.java
  18. 65 0
      mjava-dongfangxinhua/src/main/resources/application-dev.yml
  19. 38 0
      mjava-dongfangxinhua/src/main/resources/application-prod.yml
  20. 39 0
      mjava-dongfangxinhua/src/test/resource/server.sh
  21. 5 0
      mjava-hake/src/main/java/com/malk/hake/controller/HKController.java
  22. 57 8
      mjava-hake/src/main/resources/static/json/form.json
  23. 54 72
      mjava-kuaikeli/src/main/java/com/malk/kuaikeli/controller/KKLController.java
  24. 35 0
      mjava-kuaikeli/src/main/java/com/malk/kuaikeli/schedule/ScheduleTask.java
  25. 21 0
      mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/KKLService.java
  26. 271 0
      mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/impl/KKLImplService.java
  27. 1 1
      mjava-kuaikeli/src/main/resources/application-prod.yml
  28. 3 3
      mjava-luyi/src/main/java/com/malk/luyi/controller/LYController.java
  29. 2 2
      mjava-taisen/src/main/java/com/malk/taisen/controller/TSController.java
  30. 1 0
      mjava/src/main/java/com/malk/service/aliwork/impl/YDServiceImpl.java
  31. 1 1
      mjava/src/main/java/com/malk/utils/UtilHttp.java
  32. 8 0
      mjava/src/main/java/com/malk/utils/UtilMap.java
  33. 1 1
      mjava/src/main/resources/application-dev.yml
  34. 1 1
      mjava/src/main/resources/application.yml
  35. 120 0
      mjava/target/classes/META-INF/spring-configuration-metadata.json
  36. 1 1
      mjava/target/classes/application-dev.yml
  37. 1 1
      mjava/target/classes/application.yml
  38. 2 0
      pom.xml

+ 33 - 0
mjava-aipocloud/src/main/java/com/malk/aipocloud/Boot.java

@@ -1,8 +1,12 @@
 package com.malk.aipocloud;
 
 import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.apache.catalina.connector.Connector;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 
@@ -29,4 +33,33 @@ public class Boot {
     public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
         return new JPAQueryFactory(entityManager);
     }
+
+    /**
+     * todo 是否集成到基础框架
+     * 配置Tomcat下Https [访问格式为: https + 域名 + 端口 + 路径]
+     * 1. 在resource下添加/ssl/证书, jsk后缀文件 (证书类型为jks, 非Tomcat下pfx)
+     * 2. yml文件配置ssl: 路径\密码\类型(JKS)  [密码\路径不对程序启动异常]
+     * 3. 启动类重定向和端口 (http服务于默认端口服务不能是同一个端口, 相当于是同时启动两个端口)
+     */
+    @Bean
+    public ServletWebServerFactory servletContainer() {
+
+        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
+        tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
+        return tomcat;
+    }
+
+    @Value("${server.ssl.http}")
+    private int httpPort;
+
+    private Connector createHTTPConnector() {
+
+        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
+        // ppExt: 同时启用http服务端口, 原默认端口只能https访问, 此处http端口仅支持http访问 [证书匹配后, localhost/127.0.0.1仅支持https访问]
+        connector.setScheme("http");
+        connector.setSecure(false);
+        connector.setPort(httpPort);
+        connector.setRedirectPort(httpPort);
+        return connector;
+    }
 }

+ 27 - 10
mjava-aipocloud/src/main/resources/application-dev.yml

@@ -3,6 +3,11 @@ server:
   port: 9001
   servlet:
     context-path: /api/aipocloud
+  ssl:
+    key-store: classpath:ssl/cp.100ali.com.jks
+    key-store-password: n91xkery
+    keyStoreType: JKS      # 证书类型为jks, 非Tomcat下pfx [密码\路径不对程序启动异常]
+    http: 9000             # 同时启用http服务端口, 原默认端口只能https访问, 此处http端口仅支持http访问
 
 # condition
 spel:
@@ -12,16 +17,28 @@ spel:
 spring:
   # database
   datasource:
-    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://159.27.208.34:1433;SelectMethod=cursor;DatabaseName=dingtalk
-    username: DingTalk
-    password: Dingding2023@#
-    # JPA
-    jpa:
-      database: sql_server
-      properties:
-        hibernate:
-          default_schema: dbo
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: mu123
+    url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 主库
+    primary:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 从库
+    slave:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava_slave?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    hibernate:
+      ddl-auto: none      # JPA对表没有任何操作
+    show-sql: true
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
 
 # filepath
 file:

+ 5 - 0
mjava-aipocloud/src/main/resources/application-prod.yml

@@ -3,6 +3,11 @@ server:
   port: 9021
   servlet:
     context-path: /api/aipocloud
+  ssl:
+    key-store: classpath:ssl/cp.100ali.com.jks
+    key-store-password: n91xkery
+    keyStoreType: JKS      # 证书类型为jks, 非Tomcat下pfx [密码\路径不对程序启动异常]
+    http: 9022             # 同时启用http服务端口, 原默认端口只能https访问, 此处http端口仅支持http访问
 
 # condition
 spel:

+ 6 - 1
mjava-aipocloud/src/main/resources/application-test.yml

@@ -3,6 +3,11 @@ server:
   port: 9091
   servlet:
     context-path: /api/aipocloud
+  ssl:
+    key-store: classpath:ssl/server.jks
+    key-store-password: jJFTKCDX5mP9uvFb
+    keyStoreType: JKS      # 证书类型为jks, 非Tomcat下pfx [密码\路径不对程序启动异常]
+    http: 9090             # 同时启用http服务端口, 原默认端口只能https访问, 此处http端口仅支持http访问
 
 # condition
 spel:
@@ -13,7 +18,7 @@ spring:
   # database
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://159.27.208.34:1433;SelectMethod=cursor;DatabaseName=dingtalk
+    url: jdbc:sqlserver://10.14.2.4:1433;SelectMethod=cursor;DatabaseName=dingtalk
     username: DingTalk
     password: Dingding2023@#
     # JPA

BIN
mjava-aipocloud/src/main/resources/ssl/cp.100ali.com.jks


BIN
mjava-aipocloud/src/main/resources/ssl/server.jks


+ 54 - 0
mjava-aiwei/pom.xml

@@ -0,0 +1,54 @@
+<?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">
+    <parent>
+        <artifactId>java-mcli</artifactId>
+        <groupId>com.malk</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>mjava-aipocloud</artifactId>
+    <description>艾为电子, TBx宜搭</description>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>mjava</artifactId>
+            <version>${mjava.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                    <!-- 如果没有该配置,devtools不会生效: 打包时关闭 -->
+                    <fork>false</fork>
+                    <!-- 避免中文乱码 -->
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <!-- 允许生成可运行jar -->
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+</project>

+ 32 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/Boot.java

@@ -0,0 +1,32 @@
+package com.malk.aiwei;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+
+import javax.persistence.EntityManager;
+
+/**
+ * corp项目: 扫描公共模块
+ * -
+ * 若是无需数据库模块, 配置无效地址也可启动, 引入mjava不支持直接 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) 配置
+ * 需要配置 jpa.hibernate.ddl-auto 为 none. 标识对表没有任何操作. 若不设置为 none, flyway.enabled 配置会无效, 在没有数库连接情况下程序无法启动
+ */
+@EnableJpaAuditing
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+public class Boot {
+
+    public static void main(String... args) {
+        SpringApplication.run(Boot.class, args);
+    }
+
+    /**
+     * 让Spring管理JPAQueryFactory [不使用Qualifier详见mjava-Boot]
+     */
+    @Bean
+    public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
+        return new JPAQueryFactory(entityManager);
+    }
+}

+ 17 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/controller/TBController.java

@@ -0,0 +1,17 @@
+package com.malk.aiwei.controller;
+
+/**
+ * 错误抛出与拦截详见 CatchException
+ */
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@RequestMapping
+public class TBController {
+
+    
+}

+ 13 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/controller/YDController.java

@@ -0,0 +1,13 @@
+package com.malk.aiwei.controller;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@RequestMapping
+public class YDController {
+    
+
+}

+ 65 - 0
mjava-aiwei/src/main/resources/application-dev.yml

@@ -0,0 +1,65 @@
+# 环境配置
+server:
+  port: 9001
+  servlet:
+    context-path: /api/aipocloud
+  ssl:
+    key-store: classpath:ssl/cp.100ali.com.jks
+    key-store-password: n91xkery
+    keyStoreType: JKS      # 证书类型为jks, 非Tomcat下pfx [密码\路径不对程序启动异常]
+    http: 9000             # 同时启用http服务端口, 原默认端口只能https访问, 此处http端口仅支持http访问
+
+# condition
+spel:
+  scheduling: false        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: mu123
+    url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 主库
+    primary:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 从库
+    slave:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava_slave?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    hibernate:
+      ddl-auto: none      # JPA对表没有任何操作
+    show-sql: true
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+
+# filepath
+file:
+  path:
+    file: /Users/malk/server/_Tool/var/mjava/tmp/file/
+    image: /Users/malk/server/_Tool/var/mjava/tmp/image/
+    tmp: /Users/malk/server/_Tool/var/mjava/tmp/
+  source:
+    fonts: /Users/malk/server/_Tool/fonts/simsun.ttc
+logging:
+  file:
+    path: /Users/malk/server/_Tool/var/mjava/log
+
+# dingtalk
+dingtalk:
+  agentId: 2704247534
+  appKey: dingqmijjypfepl0tsuq
+  appSecret: dixOqjK4Zw8PajvrtY1mbKxs4DIJJJmq6WvqdSDTCStBWAPyTeobgQFxZ1VhH-Z3
+  corpId: ding321c72787fffc78b35c2f4657eb6378f
+  aesKey: vBtjZT6yIJXPywnOqmMHYUyPBpglTostOMpdQIMrSHk
+  token: ngnPYIwW5RfZwxnb1OjQJMb6U62NYKbvxGtcVaYe1hRaaKM1j8qG
+  operator: "095358016629044412"   # OA管理员账号
+
+

+ 40 - 0
mjava-aiwei/src/main/resources/application-prod.yml

@@ -0,0 +1,40 @@
+# 环境配置
+server:
+  port: 9021
+  servlet:
+    context-path: /api/aipocloud
+  ssl:
+    key-store: classpath:ssl/cp.100ali.com.jks
+    key-store-password: n91xkery
+    keyStoreType: JKS      # 证书类型为jks, 非Tomcat下pfx [密码\路径不对程序启动异常]
+    http: 9022             # 同时启用http服务端口, 原默认端口只能https访问, 此处http端口仅支持http访问
+
+# condition
+spel:
+  scheduling: true         # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: cp-root@2022++
+    url: jdbc:mysql://47.97.181.40:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+    hibernate:
+      ddl-auto: none
+
+# dingtalk
+dingtalk:
+  agentId: 2791266100
+  appKey: ding0dmmeh4ufremtbkp
+  appSecret: RHE6gWY-0PBUSFKNF6j__v1II9WD5h0u2TZDK3QwKKczivXid2br_SMWK-EKSDLT
+  corpId: dingbc79c496d04b812f35c2f4657eb6378f
+  aesKey: vBtjZT6yIJXPywnOqmMHYUyPBpglTostOMpdQIMrSHk
+  token: ngnPYIwW5RfZwxnb1OjQJMb6U62NYKbvxGtcVaYe1hRaaKM1j8qG
+  operator: "0220663466860353"   # OA管理员账号

+ 39 - 0
mjava-aiwei/src/main/resources/application-test.yml

@@ -0,0 +1,39 @@
+# 环境配置
+server:
+  port: 9091
+  servlet:
+    context-path: /api/aipocloud
+  ssl:
+    key-store: classpath:ssl/server.jks
+    key-store-password: jJFTKCDX5mP9uvFb
+    keyStoreType: JKS      # 证书类型为jks, 非Tomcat下pfx [密码\路径不对程序启动异常]
+    http: 9090             # 同时启用http服务端口, 原默认端口只能https访问, 此处http端口仅支持http访问
+
+# condition
+spel:
+  scheduling: true         # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+    url: jdbc:sqlserver://10.14.2.4:1433;SelectMethod=cursor;DatabaseName=dingtalk
+    username: DingTalk
+    password: Dingding2023@#
+    # JPA
+    jpa:
+      database: sql_server
+      properties:
+        hibernate:
+          default_schema: dbo
+
+# dingtalk
+dingtalk:
+  agentId: 2791266100
+  appKey: ding0dmmeh4ufremtbkp
+  appSecret: RHE6gWY-0PBUSFKNF6j__v1II9WD5h0u2TZDK3QwKKczivXid2br_SMWK-EKSDLT
+  corpId: dingbc79c496d04b812f35c2f4657eb6378f
+  aesKey: vBtjZT6yIJXPywnOqmMHYUyPBpglTostOMpdQIMrSHk
+  token: ngnPYIwW5RfZwxnb1OjQJMb6U62NYKbvxGtcVaYe1hRaaKM1j8qG
+  operator: "0220663466860353"   # OA管理员账号

+ 4 - 4
mjava-cloudpure/src/main/java/com/malk/cloudpure/schedule/CPScheduleTask.java

@@ -27,7 +27,7 @@ public class CPScheduleTask {
     /**
      * 同步销售部门人员 [每日13.30执行1次]
      */
-    @Scheduled(cron = "0 30 13 * * ?  ")
+    @Scheduled(cron = "0 30 13 * * ?")
     public void task_1() {
         try {
             cpClient.syncBusinessUserInfo();
@@ -40,7 +40,7 @@ public class CPScheduleTask {
     /**
      * 同步钉钉日报数据 [18-23点, 每59执行1次]
      */
-    @Scheduled(cron = "0 59 18-23 * * ? ")
+    @Scheduled(cron = "0 59 18-23 * * ?")
     public void task_2() {
         try {
             String sDate = UtilDateTime.formatDate(new Date());
@@ -54,7 +54,7 @@ public class CPScheduleTask {
     /**
      * 同步销帮帮跟进记录, 商机, 合同, 回款 - [全量] [09-23点, 每59执行1次]
      */
-    @Scheduled(cron = "0 59 09-23 * * ? ")
+    @Scheduled(cron = "0 59 09-23 * * ?")
     public void task_3() {
         try {
             LocalDate date = LocalDate.now();
@@ -68,7 +68,7 @@ public class CPScheduleTask {
     /**
      * 推送群消息卡片 [9.30推前一天, 20.30推当日]
      */
-    @Scheduled(cron = "0 30 9,20 * * ? ")
+    @Scheduled(cron = "0 30 9,20 * * 1,2,3,4,5")
     public void task_5() {
 
         LocalDate dateNow = LocalDate.now();

+ 54 - 0
mjava-dongfangxinhua/pom.xml

@@ -0,0 +1,54 @@
+<?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">
+    <parent>
+        <artifactId>java-mcli</artifactId>
+        <groupId>com.malk</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>mjava-dongfangxinhua</artifactId>
+    <description>东方新华财资接口</description>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>mjava</artifactId>
+            <version>${mjava.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                    <!-- 如果没有该配置,devtools不会生效: 打包时关闭 -->
+                    <fork>false</fork>
+                    <!-- 避免中文乱码 -->
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <!-- 允许生成可运行jar -->
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+</project>

+ 32 - 0
mjava-dongfangxinhua/src/main/java/com/malk/dongfangxinhua/Boot.java

@@ -0,0 +1,32 @@
+package com.malk.dongfangxinhua;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+
+import javax.persistence.EntityManager;
+
+/**
+ * corp项目: 扫描公共模块
+ * -
+ * 若是无需数据库模块, 配置无效地址也可启动, 引入mjava不支持直接 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) 配置
+ * 需要配置 jpa.hibernate.ddl-auto 为 none. 标识对表没有任何操作. 若不设置为 none, flyway.enabled 配置会无效, 在没有数库连接情况下程序无法启动
+ */
+@EnableJpaAuditing
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+public class Boot {
+
+    public static void main(String... args) {
+        SpringApplication.run(Boot.class, args);
+    }
+
+    /**
+     * 让Spring管理JPAQueryFactory [不使用Qualifier详见mjava-Boot]
+     */
+    @Bean
+    public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
+        return new JPAQueryFactory(entityManager);
+    }
+}

+ 141 - 0
mjava-dongfangxinhua/src/main/java/com/malk/dongfangxinhua/controller/DFXHController.java

@@ -0,0 +1,141 @@
+package com.malk.dongfangxinhua.controller;
+
+/**
+ * 错误抛出与拦截详见 CatchException
+ */
+
+import cn.hutool.core.util.XmlUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.XML;
+import com.malk.server.common.McException;
+import com.malk.server.common.McR;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+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 javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping
+public class DFXHController {
+
+    /// doc: http://47.111.179.216/interface/main.html#
+    private static final String API = "http://27.115.15.66:8098/BisOutWeb/payCenter/dealReq.srv";
+
+    /// xml请求
+    private JSONObject _doPost(String tradeCode, Map condition) {
+
+        // xml请求格式数据处理
+        Map head = UtilMap.map("erpSysCode, custNo, tradeName", "XYYGLXT", "300200632", tradeCode);
+        Map body = UtilMap.map("head, map", head, condition);
+        String data = XmlUtil.mapToXmlStr(body, "body");
+        log.info("请求入参, {}", XML.toJSONObject(data));
+
+        /// prd 财资固定格式, xml头数据前需要添加类型code, 且不能换行
+        data = "0000012001" + tradeCode + data;
+        String rsp = HttpRequest.post(API).body(data).execute().body();
+        JSONObject result = XML.toJSONObject(rsp);
+        log.info("请求响应, {}", result);
+        result = result.getJSONObject("body");
+
+        // 错误拦截, 统一返回
+        String message = result.getJSONObject("head").getStr("retMsg");
+        McException.assertAccessException(!"查询成功".equals(message), message);
+
+        return result;
+    }
+
+    /**
+     * 查询联行号
+     */
+    @PostMapping("bank")
+    McR bank(String name) {
+
+        JSONObject rsp = _doPost("BY0004", UtilMap.map("bankTypeName, bankName", "银行", name));
+        JSONArray list = rsp.getJSONObject("loopData").getJSONArray("row");
+
+        return McR.success(list);
+    }
+
+
+    /**
+     * 付款申请
+     */
+    @PostMapping("payment")
+    McR payment(@RequestBody Map data) {
+
+        // 付款: payerAccNo, payerCorpName; 领款: payeeAccNo, payeeAccName, payeeBankName, payeeBankCode; 金额: payMoney, payPurpose, erpReqNo
+        JSONObject rsp = _doPost("BY0001", data);
+        JSONObject state = rsp.getJSONObject("loopData").getJSONObject("row");
+
+        return McR.success(state);
+    }
+
+    /**
+     * 付款状态
+     */
+    @PostMapping("state")
+    McR payment(String payNo) {
+
+        JSONObject rsp = _doPost("BY0003", UtilMap.map("erpReqNo", payNo));
+        JSONObject state = rsp.getJSONObject("loopData").getJSONObject("row");
+
+        return McR.success(state);
+    }
+
+
+    @PostMapping(value = "test")
+    McR test(String name, HttpServletRequest request) {
+
+//        XmlUtil.;
+
+//        String rsp = UtilHttp.doPost(API, null, null, null, null);
+
+//        String xmlData = "";
+//        Document document = XmlUtil.parseXml(xmlData);
+
+        StringBuffer reqXmlData = new StringBuffer();
+        try {
+            InputStream inputStream = request.getInputStream();
+            String s;
+            BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
+            while ((s = in.readLine()) != null) {
+                reqXmlData.append(s);
+            }
+            in.close();
+            inputStream.close();
+        } catch (IOException e) {
+            System.out.println("流解析xml数据异常!");
+            e.printStackTrace();
+        }
+        //判断请求数据是否为空
+        if (reqXmlData.length() <= 0) {
+            System.out.println("请求数据为空!");
+        }
+
+        //json类型数据 [自动去掉标识]
+        JSONObject jsonObject = XML.toJSONObject(reqXmlData.toString());
+        log.info("xxxx,, {}", jsonObject);
+
+        String data = reqXmlData.toString();
+//        UtilHttp.doRequest(UtilHttp.METHOD.POST, API, null, null, jsonObject);
+
+        log.info("xxx, {}", "0000012001BY0004<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\"" + jsonObject.toString());
+        String rsp = HttpRequest.post(API).body(data).execute().body();
+        log.info("xxx, {}", rsp);
+
+        return McR.success(jsonObject.toString());
+    }
+}

+ 65 - 0
mjava-dongfangxinhua/src/main/resources/application-dev.yml

@@ -0,0 +1,65 @@
+# 环境配置
+server:
+  port: 9001
+  servlet:
+    context-path: /api/dongfangxinhua
+
+# condition
+spel:
+  scheduling: false        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: mu123
+    url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 主库
+    primary:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 从库
+    slave:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava_slave?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    hibernate:
+      ddl-auto: none      # JPA对表没有任何操作
+    show-sql: true
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+
+# filepath
+file:
+  path:
+    file: /Users/malk/server/_Tool/var/mjava/tmp/file/
+    image: /Users/malk/server/_Tool/var/mjava/tmp/image/
+    tmp: /Users/malk/server/_Tool/var/mjava/tmp/
+  source:
+    fonts: /Users/malk/server/_Tool/fonts/simsun.ttc
+logging:
+  file:
+    path: /Users/malk/server/_Tool/var/mjava/log
+
+# dingtalk
+dingtalk:
+  agentId: 2660236361
+  appKey: dinguuieqv4lkvp3vkaf
+  appSecret: N5JjPU9RDk77pTze5vRWmiWLDjPKeYJV3sQrmYgN_SC57nOALmj570rVB0SGGcQQ
+  corpId: dingec9ee223c2b3a671
+  aesKey:
+  token:
+  operator: ""   # OA管理员账号
+
+# aliwork
+aliwork:
+  appType: "APP_LNBUWW7ZBXRUWE29PCOV"
+  systemToken: "WC866ZA1PI1B2L1JDNL334F44KI03GREIV1ILZ13"
+
+

+ 38 - 0
mjava-dongfangxinhua/src/main/resources/application-prod.yml

@@ -0,0 +1,38 @@
+# 环境配置
+server:
+  port: 9022
+  servlet:
+    context-path: /api/dongfangxinhua
+
+# condition
+spel:
+  scheduling: false        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: mu123
+    url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+
+# dingtalk
+dingtalk:
+  agentId: 2660236361
+  appKey: dinguuieqv4lkvp3vkaf
+  appSecret: N5JjPU9RDk77pTze5vRWmiWLDjPKeYJV3sQrmYgN_SC57nOALmj570rVB0SGGcQQ
+  corpId: dingec9ee223c2b3a671
+  aesKey:
+  token:
+  operator: ""   # OA管理员账号
+
+# aliwork
+aliwork:
+  appType: "APP_LNBUWW7ZBXRUWE29PCOV"
+  systemToken: "WC866ZA1PI1B2L1JDNL334F44KI03GREIV1ILZ13"

+ 39 - 0
mjava-dongfangxinhua/src/test/resource/server.sh

@@ -0,0 +1,39 @@
+#!/bin/bash
+
+appname='mjava-dongfangxinhua'
+
+if [ "$1" == "dev" ]; then
+  java -Xms256m -Xmx256m -jar $appname.jar --spring.profiles.active=dev
+else
+  if [ "$1" == "start" ]; then
+    nohup java -Xms256m -Xmx256m -jar $appname.jar &
+    echo "server prod is starting"
+    tail -f log/info.log
+  else
+    if [ "$1" == "test" ]; then
+      nohup java -Xms256m -Xmx256m -jar $appname.jar --spring.profiles.active=test &
+      echo "server test is starting"
+      tail -f log/info.log
+    else
+      if [ "$1" == "stop" ]; then
+        PID=$(ps -ef | grep $appname.jar | grep -v grep | awk '{ print $2 }')
+        if [ -z "$PID" ]; then
+          echo "server is already stopped"
+        else
+          echo kill $PID
+          kill $PID
+        fi
+      else
+        if [ "$1" == "status" ]; then
+          PID=$(ps -ef | grep $appname.jar | grep -v grep | awk '{ print $2 }')
+          if [ -z "$PID" ]; then
+            echo "server is stopped"
+          else
+            echo "server is running"
+            echo $PID
+          fi
+        fi
+      fi
+    fi
+  fi
+fi

+ 5 - 0
mjava-hake/src/main/java/com/malk/hake/controller/HKController.java

@@ -84,4 +84,9 @@ public class HKController {
         hkClient.syncMonitor("FKSQ");
         return McR.success();
     }
+
+    @GetMapping("test")
+    McR test() {
+        return McR.success();
+    }
 }

+ 57 - 8
mjava-hake/src/main/resources/static/json/form.json

@@ -61,6 +61,34 @@
     }
   },
   "XSDD_RC": "serialNumberField_lntocd8t",
+  "XSDDTZ": {
+    "formUuid": "FORM-69CF7FD262DF429F8906E049E494DE5BP9AD",
+    "processCode": "TPROC--6L966171NUKG2V3OBRKYAA0QZ96G3HNVDXTPLA",
+    "creator": "dtPersonId",
+    "compIds": {
+      "textField_lnmyiqad": "orderNumber",
+      "textField_lnmyiqae": "customerNumber",
+      "textField_lnmyiqag": "customerName",
+      "textField_lnmyiqai": "deliveryAddress",
+      "textField_lnmyiqaf": "seller",
+      "textField_lnmyiqak": "dtPersonId",
+      "employeeField_lo5g6p79": "dtPersonId",
+      "textField_lnmyiqan": "dtPersonGroup",
+      "numberField_lnmyrzwx": "reason",
+      "textField_lptxghkq": "dtOurReferencePersonId",
+      "employeeField_lptxghks": "dtOurReferencePersonId",
+      "textField_lptxghkr": "dtSellerPersonId",
+      "employeeField_lptxghkt": "dtSellerPersonId",
+      "tableField_lnmyiqau": {
+        "textField_lnmyiqav": "partNumber",
+        "textField_lnmyiqaw": "partName",
+        "numberField_lnmyiqax": "quantity",
+        "textField_lnmyiqaz": "unit",
+        "textField_lnmyrzx0": "deliveryDate",
+        "textField_lnmyiqb6": "rowType"
+      }
+    }
+  },
   "GYSZQ": {
     "formUuid": "FORM-JD8668C1FYZEYMQ6BY5HA43UFP9T2HUBYYMNL7",
     "processCode": "TPROC--JD8668C1FYZEYMQ6BY5HA43UFP9T2JVBYYMNL8",
@@ -101,6 +129,27 @@
     }
   },
   "CGDD_RC": "serialNumberField_lntocd8t",
+  "CGDDTZ": {
+    "formUuid": "FORM-A3FC62280D774E7A8A877B05B8FD5A2CLD6J",
+    "processCode": "TPROC--IS866QA17HLGKPPV7NRZ15WB8WPB3QW37XTPL0",
+    "creator": "dtPersonId",
+    "compIds": {
+      "textField_lo5h6ojh": "orderNumber",
+      "textField_lnmyiqad": "supplierNumber",
+      "textField_lnmyiqae": "supplierName",
+      "textField_lnmyiqag": "seller",
+      "textField_lnmyiqak": "dtPersonId",
+      "employeeField_lo5fmt0u": "dtPersonId",
+      "textField_lnmyiqan": "dtPersonGroup",
+      "tableField_lnmyiqau": {
+        "textField_lnmyiqaw": "partNumber",
+        "textField_lnmyiqav": "partName",
+        "textField_lnmyiqaz": "unit",
+        "numberField_lnmyiqax": "quantity",
+        "textField_lnmyrzx0": "deliveryDate"
+      }
+    }
+  },
   "CGDDJQ": {
     "formUuid": "FORM-0K666DC1000FWTLICOT0GAHRLA363XSU5ZMNL9",
     "processCode": "TPROC--0K666DC1000FWTLICOT0GAHRLA363YTU5ZMNLA",
@@ -208,13 +257,13 @@
   },
   "SCJS_RC": "serialNumberField_lntocd8t",
   "CGDH": {
-    "formUuid": "FORM-JD8668C1N00FS3ZB8FYUT8P7TPW23KY590NNL3",
-    "processCode": "TPROC--JD8668C1N00FS3ZB8FYUT8P7TPW23KZ590NNL4",
+    "formUuid": "FORM-CP766081YIZE7T7NEMTGGDLNRCLX2XLXA0NNLK",
+    "processCode": "TPROC--CP766081YIZE7T7NEMTGGDLNRCLX22NXA0NNLL",
     "creator": "dtPersonId",
     "compIds": {
       "textField_lnn033p5": "supplierNumber",
-      "textField_lnmyiqae ": "supplierName",
-      "textField_lnn033p6": "orderNumber",
+      "textField_lnmyiqae": "supplierName",
+      "textField_lqo0h0st": "orderNumber",
       "textField_lnmyiqak": "orderType",
       "textField_lnmyiqan": "partNumber",
       "textField_lnn07qeq": "partName",
@@ -231,10 +280,10 @@
     "creator": "dtPersonId",
     "compIds": {
       "textField_lnmyiqad": "orderNumber",
-      "textField_lnmyiqae": "customerNumber",
-      "textField_lnmyiqaf": "customerStatus",
-      "textField_lnmyiqag": "customerName",
-      "textField_lnmyiqai": "deliveryAddress",
+      "textField_lnmyiqae": "supplierNumber",
+      "textField_lnmyiqaf": "supplierStatus",
+      "textField_lnmyiqag": "supplierName",
+      "textareaField_lq3r0wyk": "deliveryAddress",
       "textField_lnmyiqak": "dtPersonId",
       "employeeField_lo5h89wz": "dtPersonId",
       "textField_lnmyiqan": "dtPersonGroup",

+ 54 - 72
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/controller/KKLController.java

@@ -1,13 +1,8 @@
 package com.malk.kuaikeli.controller;
 
 import com.alibaba.fastjson.JSON;
-import com.malk.server.aliwork.YDConf;
-import com.malk.server.aliwork.YDParam;
+import com.malk.kuaikeli.service.KKLService;
 import com.malk.server.common.McR;
-import com.malk.service.aliwork.YDClient;
-import com.malk.service.aliwork.YDService;
-import com.malk.utils.UtilMap;
-import com.malk.utils.UtilMc;
 import com.malk.utils.UtilServlet;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,9 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * 错误抛出与拦截详见 CatchException
@@ -30,7 +23,7 @@ import java.util.stream.Collectors;
 public class KKLController {
 
     @Autowired
-    private YDService ydService;
+    private KKLService kklService;
 
     /**
      * [动态] 发起单据, 分供应商进行流程推送
@@ -41,31 +34,10 @@ public class KKLController {
         Map data = UtilServlet.getParamMap(request);
         log.info("supplier, {}", JSON.toJSONString(data));
 
-        // ppExt: 供应商区分发起: 当前表:供应供子表组件ID,子表内供应商编号,名称,负责人
-        String[] compIds_supplier = String.valueOf(data.get("compId_supplier")).split(", ");
-        String compId_supplier = compIds_supplier[1];
-
-        Map formData = (Map) JSON.parse(String.valueOf(data.get("formData")));
-        List<Map> details = (List<Map>) formData.get(compIds_supplier[0]);
-
-        // 供应商编号, 数据去重: 提取数据区分供应商发起
-        List<Map> suppliers = UtilMc.distinctByKey(details, compId_supplier);
-        for (Map supplier : suppliers) {
-            List<Map> dataList = details.stream().filter(item -> supplier.get(compId_supplier).equals(item.get(compId_supplier))).collect(Collectors.toList());
-            formData.put(compIds_supplier[0], dataList);
-            // ppExt: 参数传递, 目标表组件ID, 对照当前表子表内的子表内供应商编号,名称,负责人已放置主表字段, 此处公共内容提前首条数据进行赋值
-            for (int i = 1; i < compIds_supplier.length; i++) {
-                formData.put(compIds_supplier[i], YDConf.getDataByCompId(dataList.get(0), compIds_supplier[i]));
-            }
-            data.put("formData", JSON.toJSONString(formData));
-            ydService.copyFormData(data); // 发起流程
-        }
+        kklService.matchSupplier(data);
         return McR.success();
     }
 
-    @Autowired
-    private YDClient ydClient;
-
     /**
      * 菜单计划, 编辑校验
      * -
@@ -77,58 +49,68 @@ public class KKLController {
 
         log.info("validate, {}", JSON.toJSONString(data));
 
-        boolean approve = false;
-        List<Map> dataList = UtilMap.getList(data, "list");
-        for (Map row : dataList) {
-
-            // 匹配切配工作单, 采购
-            List<Map> formList = (List<Map>) ydClient.queryData(YDParam.builder()
-                            .formUuid("FORM-RK966E71T0LDSTW39WFHE9OQ5GU23FKRRDNLL2")
-                            .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lmsuq8am, textField_lm8zta2z, textField_ln1ez5li", data.get("name"), data.get("area"), row.get("textField_ln1ez5li"))))
-                            .build(),
-                    YDConf.FORM_QUERY.retrieve_search_form).getData();
-
-            if (formList.size() == 0) {
-                approve = true;
-                break;
-            }
-            Map formData = (Map) formList.get(0).get("formData");
-            float cur = UtilMap.getFloat(row, "numberField_lmym5628");
-            float src = UtilMap.getFloat(formData, "numberField_lnrkgimz");
-            if (cur > src || (src - cur) / src > 0.2f) {
-                approve = true;
-                break;
-            }
-        }
-
-        if (approve) {
-            // 发起菜单审批
-            ydClient.operateData(YDParam.builder()
-                    .formUuid("FORM-UP96637100HD036TA1M05B74GHLV3DRS54NLLC")
-                    .processCode("TPROC--UP96637100HD036TA1M05B74GHLV3ERS54NLLD")
-                    .formDataJson(JSON.toJSONString(data.get("form"))) // 前端数据组装
-                    .userId(data.get("user").toString())
-                    .build(), YDConf.FORM_OPERATION.start);
-
-            // 更新计划状态
-            ydService.operateData(YDParam.builder()
-                    .formInstanceId(data.get("poid").toString())
-                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lm8znr9n", "执行中")))
-                    .build(), YDConf.FORM_OPERATION.update);
-        }
+        kklService.validateApprove(data);
+        return McR.success();
+    }
+
+    /**
+     * 定价单: 项目点 & 供应商大类, 数据匹配
+     */
+    @PostMapping("service")
+    McR service(HttpServletRequest request) {
+
+        Map data = UtilServlet.getParamMap(request);
+        log.info("service, {}", JSON.toJSONString(data));
+
+        kklService.serviceRate(data);
+        return McR.success();
+    }
+
+    /**
+     * 物料档案: 价格调整
+     */
+    @PostMapping("adjust")
+    McR adjust(HttpServletRequest request) {
+
+        Map data = UtilServlet.getParamMap(request);
+        log.info("adjust, {}", JSON.toJSONString(data));
+
+        kklService.adjustCost(data);
+        return McR.success();
+    }
 
+    /**
+     * 供应商原材料档案: 新增匹配
+     */
+    @PostMapping("addition")
+    McR addition(HttpServletRequest request) {
+
+        Map data = UtilServlet.getParamMap(request);
+        log.info("addition, {}", JSON.toJSONString(data));
+
+        kklService.adjustCost(data);
         return McR.success();
     }
 
 
+    /**
+     * 周日同步更新价格
+     */
+    @PostMapping("sync")
+    McR sync() {
+
+        log.info("sync price");
+
+        kklService.syncPrice();
+        return McR.success();
+    }
+
     @PostMapping("test")
     McR test(HttpServletRequest request) {
 
-
         Map data = UtilServlet.getParamMap(request);
 
         log.info("xxxx, {}", data);
-
         return McR.success();
     }
 

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

@@ -0,0 +1,35 @@
+package com.malk.kuaikeli.schedule;
+
+import com.malk.kuaikeli.service.KKLService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"spel.scheduling"})
+public class ScheduleTask {
+
+    @Autowired
+    private KKLService kklService;
+
+    /**
+     * 周一凌晨1点同步 (即周日后生效)
+     */
+    @Scheduled(cron = "0 0 1 * * 1")
+    public void syncDingTalkFailedList() {
+        try {
+            kklService.syncPrice();
+        } catch (Exception e) {
+            // 记录错误信息
+            e.printStackTrace();
+        }
+    }
+}

+ 21 - 0
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/KKLService.java

@@ -0,0 +1,21 @@
+package com.malk.kuaikeli.service;
+
+import org.springframework.scheduling.annotation.Async;
+
+import java.util.Map;
+
+public interface KKLService {
+
+    void matchSupplier(Map data);
+
+    void validateApprove(Map data);
+
+    @Async
+    void serviceRate(Map data);
+
+    void adjustCost(Map data);
+
+    void additionMaterial(Map data);
+
+    void syncPrice();
+}

+ 271 - 0
mjava-kuaikeli/src/main/java/com/malk/kuaikeli/service/impl/KKLImplService.java

@@ -0,0 +1,271 @@
+package com.malk.kuaikeli.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.malk.kuaikeli.service.KKLService;
+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.UtilMap;
+import com.malk.utils.UtilMc;
+import com.malk.utils.UtilNumber;
+import lombok.SneakyThrows;
+import lombok.Synchronized;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class KKLImplService implements KKLService {
+
+    @Autowired
+    private YDService ydService;
+
+    /**
+     * [动态] 发起单据, 分供应商进行流程推送
+     */
+    @Override
+    public void matchSupplier(Map data) {
+
+        // ppExt: 供应商区分发起: 当前表:供应供子表组件ID,子表内供应商编号,名称,负责人
+        String[] compIds_supplier = String.valueOf(data.get("compId_supplier")).split(", ");
+        String compId_supplier = compIds_supplier[1];
+
+        Map formData = (Map) JSON.parse(String.valueOf(data.get("formData")));
+        List<Map> details = (List<Map>) formData.get(compIds_supplier[0]);
+
+        // 供应商编号, 数据去重: 提取数据区分供应商发起
+        List<Map> suppliers = UtilMc.distinctByKey(details, compId_supplier);
+        for (Map supplier : suppliers) {
+            List<Map> dataList = details.stream().filter(item -> supplier.get(compId_supplier).equals(item.get(compId_supplier))).collect(Collectors.toList());
+            formData.put(compIds_supplier[0], dataList);
+            // ppExt: 参数传递, 目标表组件ID, 对照当前表子表内的子表内供应商编号,名称,负责人已放置主表字段, 此处公共内容提前首条数据进行赋值
+            for (int i = 1; i < compIds_supplier.length; i++) {
+                formData.put(compIds_supplier[i], YDConf.getDataByCompId(dataList.get(0), compIds_supplier[i]));
+            }
+            data.put("formData", JSON.toJSONString(formData));
+            ydService.copyFormData(data); // 发起流程
+        }
+    }
+
+    @Autowired
+    private YDClient ydClient;
+
+    /**
+     * 菜单计划, 编辑校验
+     * -
+     * 前端提交动作: 校验是否审批通过, 是否当日之前计划, 是否当日且在16点及以后时间, 均不允许提交
+     * 后端校验返回、加任何产品都要走审批,减少20%以内直接过,每一个原材料
+     */
+    @Override
+    public void validateApprove(Map data) {
+
+        boolean approve = false;
+        List<Map> dataList = UtilMap.getList(data, "list");
+        for (Map row : dataList) {
+
+            // 匹配切配工作单, 采购
+            List<Map> formList = (List<Map>) ydClient.queryData(YDParam.builder()
+                            .formUuid("FORM-RK966E71T0LDSTW39WFHE9OQ5GU23FKRRDNLL2")
+                            .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lmsuq8am, textField_lm8zta2z, textField_ln1ez5li", data.get("name"), data.get("area"), row.get("textField_ln1ez5li"))))
+                            .build(),
+                    YDConf.FORM_QUERY.retrieve_search_form).getData();
+
+            if (formList.size() == 0) {
+                approve = true;
+                break;
+            }
+            Map formData = (Map) formList.get(0).get("formData");
+            float cur = UtilMap.getFloat(row, "numberField_lmym5628");
+            float src = UtilMap.getFloat(formData, "numberField_lnrkgimz");
+            if (cur > src || (src - cur) / src > 0.2f) {
+                approve = true;
+                break;
+            }
+        }
+        if (approve) {
+            // 发起菜单审批
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-UP96637100HD036TA1M05B74GHLV3DRS54NLLC")
+                    .processCode("TPROC--UP96637100HD036TA1M05B74GHLV3ERS54NLLD")
+                    .formDataJson(JSON.toJSONString(data.get("form"))) // 前端数据组装
+                    .userId(data.get("user").toString())
+                    .build(), YDConf.FORM_OPERATION.start);
+
+            // 更新计划状态
+            ydService.operateData(YDParam.builder()
+                    .formInstanceId(data.get("poid").toString())
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lm8znr9n", "执行中")))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+    }
+
+    /**
+     * 定价单: 项目点 & 供应商大类, 数据匹配
+     */
+    @Override
+    @SneakyThrows
+    @Synchronized
+    public void serviceRate(Map data) {
+
+        // todo: 宜搭更新,校验的超时等待在3s, 因此方法修改为异步. 容错定时任务?匹配不一致数据
+        String supperCode = String.valueOf(data.get("code"));
+        List<String> types = (List<String>) JSON.parse(String.valueOf(data.get("type")));
+        List<String> rates = (List<String>) JSON.parse(String.valueOf(data.get("rate")));
+        List<String> rates2 = (List<String>) JSON.parse(String.valueOf(data.get("rate2")));
+        List<String> status = (List<String>) JSON.parse(String.valueOf(data.get("status")));
+
+        for (int i = 0; i < types.size(); i++) {
+
+            List<Map> materials = supperMaterials(supperCode, types.get(i));
+            List<Map> records = projectMaterials(supperCode, types.get(i));
+
+            for (Map material : materials) {
+
+                // 数据处理: 服务费率与供货价, 项目信息
+                double rate = Double.valueOf(rates.get(i));
+                double rate2 = Double.valueOf(rates2.get(i));
+                material.putAll(UtilMap.map("numberField_llkb7kcy, numberField_lpalgz04, textField_lm4lxur8", rate, rate2, status.get(i)));
+                double price1 = UtilNumber.formatPrecisionValue(UtilMap.getDouble(material, "numberField_llkknd6g") * (rate + 100) / 100f);
+                double price2 = UtilNumber.formatPrecisionValue(UtilMap.getDouble(material, "numberField_lpalgz05") * (100 + rate2) / 100f);
+                material.putAll(UtilMap.map("numberField_llkknd6h, numberField_lpalgz0a", price1, price2));
+                material.putAll(UtilMap.map("textField_llm1vtjm, textField_loy1ep8r", data.get("proCode"), data.get("proName")));
+
+                YDParam ydParam = YDParam.builder()
+                        .formUuid("FORM-E6766M811CKD2PIXEAKOM9S2DKBM2PBQU1MLL5")
+                        .formDataJson(JSON.toJSONString(material))
+                        .build();
+                YDConf.FORM_OPERATION operation = YDConf.FORM_OPERATION.create;
+                // ppExt: 提交校验逻辑, 匹配定价单数若存在则匹配服务费率, 不一致执行更新
+                if (records.size() > 0) {
+                    Optional optional = records.stream().filter(item -> item.get("textField_llkb7kd2").equals(material.get("textField_llkb7kd2"))).findAny();
+                    if (optional.isPresent()) {
+                        ydParam.setUpdateFormDataJson(JSON.toJSONString(material));
+                        ydParam.setFormInstanceId(String.valueOf(((Map) optional.get()).get("formInstanceId")));
+                        operation = YDConf.FORM_OPERATION.update;
+                    }
+                }
+                ydClient.operateData(ydParam, operation);
+            }
+        }
+    }
+
+    /// 原材料: 供应商第一分类下物料
+    List<Map> supperMaterials(String code, String type) {
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .formUuid("FORM-12EB6BCE3C264630824721E7BBABCC03L8U9")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_llzzbyj1, selectField_llkb7kd5", code, type)))
+                .build());
+        log.info("supperMaterials, {}", dataList.size());
+        return dataList;
+    }
+
+    /// 定价单: 供应商第一分类下物料
+    List<Map> projectMaterials(String code, String type) {
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .formUuid("FORM-E6766M811CKD2PIXEAKOM9S2DKBM2PBQU1MLL5")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_llzzbyj1, selectField_llkb7kd5", code, type)))
+                .build());
+        log.info("projectMaterials, {}", dataList.size());
+        return dataList;
+    }
+
+
+    /**
+     * 物料档案: 价格调整
+     */
+    @Override
+    public void adjustCost(Map data) {
+
+        double cost1 = UtilMap.getDouble(data, "cost");
+        double cost2 = UtilMap.getDouble(data, "cost2");
+
+        // todo: 服务执行, 周日凌晨更新价格前, 是否重新匹配数据?
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .formUuid("FORM-E6766M811CKD2PIXEAKOM9S2DKBM2PBQU1MLL5")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_llkb7kd2", data.get("code"))))
+                .build());
+        log.info("adjustCost, {}", dataList.size());
+
+        for (Map record : dataList) {
+
+            if (cost1 == UtilMap.getDouble(record, "numberField_llkknd6g") && cost2 == UtilMap.getDouble(record, "numberField_lpalgz05")) {
+                continue;
+            }
+            double rate = UtilMap.getDouble(record, "numberField_llkb7kcy");
+            double rate2 = UtilMap.getDouble(record, "numberField_lpalgz04");
+            double price1 = UtilNumber.formatPrecisionValue(cost1 * (rate + 100) / 100f);
+            double price2 = UtilNumber.formatPrecisionValue(cost2 * (100 + rate2) / 100f);
+            Map update = UtilMap.map("numberField_llkknd6h, numberField_lpalgz0a", price1, price2);
+            update.putAll(UtilMap.map("numberField_llkknd6g, numberField_lpalgz05", cost1, cost2));
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(String.valueOf(record.get("formInstanceId")))
+                    .updateFormDataJson(JSON.toJSONString(update))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+    }
+
+    /**
+     * 供应商原材料档案: 新增匹配
+     */
+    @Override
+    public void additionMaterial(Map data) {
+
+        // 定价单供应商
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .formUuid("FORM-W2A66Z91B4KDWDIAA7SI1BRBRTKM3XL87BKLL0")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lllovku7", data.get("supplier"))))
+                .build());
+    }
+
+    /**
+     * 周日同步更新价格
+     */
+    @Override
+    @SneakyThrows
+    public void syncPrice() {
+
+        // 定价单明细表
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .formUuid("FORM-E6766M811CKD2PIXEAKOM9S2DKBM2PBQU1MLL5")
+                .build());
+        for (Map record : dataList) {
+
+            double price1 = UtilMap.getDouble(record, "numberField_llkknd6h");
+            double price2 = UtilMap.getDouble(record, "numberField_lpalgz0a");
+            if (price1 == price2) {
+                continue;
+            }
+            // 本质上是对比供货价差异, 下周全覆盖
+            Map update = UtilMap.map("numberField_llkknd6h, numberField_llkb7kcy, numberField_llkknd6g", price2, record.get("numberField_lpalgz04"), record.get("numberField_lpalgz05"));
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(String.valueOf(record.get("formInstanceId")))
+                    .updateFormDataJson(JSON.toJSONString(update))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+
+        // 供应商原材料表
+        List<Map> dataList2 = ydService.queryFormData_all(YDParam.builder()
+                .formUuid("FORM-12EB6BCE3C264630824721E7BBABCC03L8U9")
+                .build());
+        for (Map record : dataList2) {
+
+            double cost1 = UtilMap.getDouble(record, "numberField_llkknd6g");
+            double cost2 = UtilMap.getDouble(record, "numberField_lpalgz05");
+            if (cost1 == cost2) {
+                continue;
+            }
+            Map update = UtilMap.map("numberField_llkknd6g", cost2);
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(String.valueOf(record.get("formInstanceId")))
+                    .updateFormDataJson(JSON.toJSONString(update))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+    }
+}

+ 1 - 1
mjava-kuaikeli/src/main/resources/application-prod.yml

@@ -6,7 +6,7 @@ server:
 
 # condition
 spel:
-  scheduling: false        # 定时任务是否执行
+  scheduling: true        # 定时任务是否执行
   multiSource: false      # 是否多数据源配置
 
 spring:

+ 3 - 3
mjava-luyi/src/main/java/com/malk/luyi/controller/LYController.java

@@ -69,11 +69,11 @@ public class LYController {
         }
         // 查询报告结果
         DDR_New ddr_new2 = ydClient.queryData(YDParam.builder()
-                .formUuid("FORM-JK866XA1L4NDBEHOC479CB21O0JI2N3NA6WLLC")
-                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_ln1df1f3", data.get("cardNo"))))
+                .formUuid("FORM-XHA66881E3ODR7EKBGK9XBXECRML267EIQVLL5")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lm0653jv", data.get("cardNo"))))
                 .pageNumber(UtilMap.getInt(data, "page"))
                 .pageSize(UtilMap.getInt(data, "size"))
-                .dynamicOrder(JSON.toJSONString(UtilMap.map("dateField_lndqxkvh", "-")))
+                .dynamicOrder(JSON.toJSONString(UtilMap.map("dateField_lpjim03p", "-")))
                 .build(), YDConf.FORM_QUERY.retrieve_search_form);
         return McR.success(ddr_new2);
     }

+ 2 - 2
mjava-taisen/src/main/java/com/malk/taisen/controller/TSController.java

@@ -84,7 +84,7 @@ public class TSController {
             return item;
         }).collect(Collectors.toList());
 
-        Map updateForm = UtilMap.map("tableField_l6lmxo5r", details);
+        Map updateForm = UtilMap.map("tableField_l6lmxo5r, associationFormField_l83trmls", details, JSON.parse(String.valueOf(formData.get("associationFormField_l83trmls"))));
         ydClient.operateData(YDParam.builder()
                 .formInstanceId(sId)
                 .updateFormDataJson(JSON.toJSONString(updateForm)).build(), YDConf.FORM_OPERATION.update);
@@ -209,7 +209,7 @@ public class TSController {
     @PostMapping("changed")
     McR changed() {
 
-        for (int i = 1; i <= 40; i++) {
+        for (int i = 1; i <= 55; i++) {
 
             List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder()
                     .formUuid("FORM-UX866Q61LRK2LACIB8A6M6T1ZOLM2VY5NYB6LZ")

+ 1 - 0
mjava/src/main/java/com/malk/service/aliwork/impl/YDServiceImpl.java

@@ -110,6 +110,7 @@ public class YDServiceImpl implements YDService {
         return dataList.stream().map(item -> {
             Map formData = (Map) item.get("formData");
             formData.put("instanceId", item.get("formInstanceId"));
+            formData.put("formInstanceId", item.get("formInstanceId"));
             return formData;
         }).collect(Collectors.toList());
     }

+ 1 - 1
mjava/src/main/java/com/malk/utils/UtilHttp.java

@@ -77,7 +77,7 @@ public abstract class UtilHttp {
             request.basicAuth(usr, pwd);
         }
         HttpResponse out = request.execute();
-        log.debug("请求响应, {}", out.body()); // http 状态判定
+        log.debug("请求响应, {}, {}", out.getStatus(), out.body()); // http 状态判定
         // ppExt: 外部接口http状态异常, 不直接阻断, 通过 r.assertSuccess(); 校验
         //McException.assertException(out.getStatus() != 200, String.valueOf(out.getStatus()), "ERROR HTTP STATUS EXCEPTION");
         return out.body();

+ 8 - 0
mjava/src/main/java/com/malk/utils/UtilMap.java

@@ -203,6 +203,14 @@ public abstract class UtilMap {
         return Float.valueOf(txt);
     }
 
+    public static Double getDouble(Map data, String key) {
+        String txt = getString(data, key);
+        if (StringUtils.isBlank(txt)) {
+            return 0d;
+        }
+        return Double.valueOf(txt);
+    }
+
     /**
      * 取值 [转为 bool]
      */

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

@@ -1,6 +1,6 @@
 # service
 server:
-  port: 9100
+  port: 9001
   servlet:
     context-path: /dev  # 全局接口前缀
 

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

@@ -1,6 +1,6 @@
 # 环境配置
 server:
-  port: 9001
+  port: 9100
   servlet:
     context-path: /api  # 全局接口前缀: 同一个域名提供转发不同路径到不同端口方案
   tomcat:

+ 120 - 0
mjava/target/classes/META-INF/spring-configuration-metadata.json

@@ -40,6 +40,26 @@
       "type": "com.malk.server.common.FilePath$Path",
       "sourceType": "com.malk.server.common.FilePath$Path"
     },
+    {
+      "name": "file.path",
+      "type": "com.malk.server.common.FilePath$Path",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path",
+      "type": "com.malk.server.common.FilePath$Path",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path",
+      "type": "com.malk.server.common.FilePath$Path",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path",
+      "type": "com.malk.server.common.FilePath$Path",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
     {
       "name": "file.source",
       "type": "com.malk.server.common.FilePath$Source",
@@ -55,6 +75,26 @@
       "type": "com.malk.server.common.FilePath$Source",
       "sourceType": "com.malk.server.common.FilePath$Source"
     },
+    {
+      "name": "file.source",
+      "type": "com.malk.server.common.FilePath$Source",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
+    {
+      "name": "file.source",
+      "type": "com.malk.server.common.FilePath$Source",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
+    {
+      "name": "file.source",
+      "type": "com.malk.server.common.FilePath$Source",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
+    {
+      "name": "file.source",
+      "type": "com.malk.server.common.FilePath$Source",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
     {
       "name": "fxiaoke",
       "type": "com.malk.server.fxiaoke.FXKConf",
@@ -204,6 +244,26 @@
       "type": "java.lang.String",
       "sourceType": "com.malk.server.common.FilePath$Path"
     },
+    {
+      "name": "file.path.file",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.file",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.file",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.file",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
     {
       "name": "file.path.image",
       "type": "java.lang.String",
@@ -214,6 +274,36 @@
       "type": "java.lang.String",
       "sourceType": "com.malk.server.common.FilePath$Path"
     },
+    {
+      "name": "file.path.image",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.image",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.image",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.image",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.tmp",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.tmp",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
     {
       "name": "file.path.tmp",
       "type": "java.lang.String",
@@ -224,6 +314,36 @@
       "type": "java.lang.String",
       "sourceType": "com.malk.server.common.FilePath$Path"
     },
+    {
+      "name": "file.path.tmp",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.path.tmp",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Path"
+    },
+    {
+      "name": "file.source.fonts",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
+    {
+      "name": "file.source.fonts",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
+    {
+      "name": "file.source.fonts",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
+    {
+      "name": "file.source.fonts",
+      "type": "java.lang.String",
+      "sourceType": "com.malk.server.common.FilePath$Source"
+    },
     {
       "name": "file.source.fonts",
       "type": "java.lang.String",

+ 1 - 1
mjava/target/classes/application-dev.yml

@@ -1,6 +1,6 @@
 # service
 server:
-  port: 9100
+  port: 9001
   servlet:
     context-path: /dev  # 全局接口前缀
 

+ 1 - 1
mjava/target/classes/application.yml

@@ -1,6 +1,6 @@
 # 环境配置
 server:
-  port: 9001
+  port: 9100
   servlet:
     context-path: /api  # 全局接口前缀: 同一个域名提供转发不同路径到不同端口方案
   tomcat:

+ 2 - 0
pom.xml

@@ -28,6 +28,8 @@
         <module>mjava-hake</module>
         <module>mjava-hongfeng</module>
         <module>mjava-aipocloud</module>
+        <module>mjava-dongfangxinhua</module>
+        <module>mjava-aiwei</module>
     </modules>
     <packaging>pom</packaging>