lianghanqiang 4 anni fa
parent
commit
d1f3597a9e
36 ha cambiato i file con 1382 aggiunte e 63 eliminazioni
  1. 0 18
      .idea/httpRequests/http-requests-log.http
  2. 6 0
      ldt-core/pom.xml
  3. 1 2
      ldt-core/src/main/java/org/springblade/common/config/mq/RabbitConfig.java
  4. 2 2
      ldt-core/src/main/java/org/springblade/risk/log/listener/LdtLogListener.java
  5. 3 3
      ldt-core/src/main/java/org/springblade/yeePay/api/YeepaySaas.java
  6. 6 0
      ldt-core/src/main/java/org/springblade/yeePay/controller/YeepayController.java
  7. 6 0
      ldt-core/src/main/resources/META-INF/kmodule.xml
  8. 9 0
      ldt-core/src/main/resources/rules/test.drl
  9. 4 2
      ldt-core/src/test/java/org/springblade/test/BladeTest.java
  10. 6 0
      ldt-core/src/test/resources/META-INF/kmodule.xml
  11. 15 3
      ldt-core/src/test/resources/application-dev.yml
  12. 6 4
      ldt-core/src/test/resources/application-prod.yml
  13. 20 3
      ldt-core/src/test/resources/application.yml
  14. 8 0
      ldt-core/src/test/resources/banner.txt
  15. 3 0
      ldt-core/src/test/resources/config/4443027531.cer
  16. BIN
      ldt-core/src/test/resources/config/4443027531.pfx
  17. 30 0
      ldt-core/src/test/resources/config/yop_sdk_config_default.json
  18. 132 0
      ldt-core/src/test/resources/ehcache.xml
  19. 113 0
      ldt-core/src/test/resources/log/logback-dev.xml
  20. 151 0
      ldt-core/src/test/resources/log/logback-prod.xml
  21. 151 0
      ldt-core/src/test/resources/log/logback-test.xml
  22. 17 0
      ldt-core/src/test/resources/payConfig.properties
  23. 123 0
      ldt-core/src/test/resources/processes/LeaveProcess.bpmn20.xml
  24. 104 0
      ldt-core/src/test/resources/processes/activity.bpmn20.xml
  25. 70 0
      ldt-core/src/test/resources/processes/mall.bpmn20.xml
  26. 177 0
      ldt-core/src/test/resources/processes/shop.bpmn20.xml
  27. 9 0
      ldt-core/src/test/resources/rules/test.drl
  28. BIN
      ldt-core/src/test/resources/static/favicon.ico
  29. 1 1
      ldt-core/src/test/resources/templates/controller.java.vm
  30. 35 0
      ldt-core/src/test/resources/wxConfig.properties
  31. 1 6
      ldt-risk/dependency-reduced-pom.xml
  32. 24 13
      ldt-risk/pom.xml
  33. 66 0
      ldt-risk/src/main/java/org/springblade/BatchJob.java
  34. 12 5
      ldt-risk/src/main/java/org/springblade/StreamingJob.java
  35. 68 0
      ldt-risk/src/main/java/org/springblade/sink/MongoSink.java
  36. 3 1
      pom.xml

+ 0 - 18
.idea/httpRequests/http-requests-log.http

@@ -1,18 +0,0 @@
-POST /https://ldt.guosen-fumao.cn/api/payment/invitation/callback/SHOP_INVITATION?cipherText=09unWYfjZzlKUctLxX1JvfamSOHWc5ZC4t9Mq4ETz_DqHyOxCA-ROWA-PqU_xTCbWKx_8W58SyERoieymSKFqz748_vBJmVdah1c095MP0nL1Y4Z8614PxKWi3ut-QP-H0kO7C97C4pJXzul1Ez-zJdhl8GSgJv9ObrpJQtdy3R_iAE2Y9pxQFKNUP0P4xjT-C0eVFuYv7ITRrU3b9U0GuqRa_Y3fIIg
-Accept: */*
-Cache-Control: no-cache
-
-###
-
-POST /ldt.guosen-fumao.cn
-Accept: */*
-Cache-Control: no-cache
-
-###
-
-POST /ldt.guosen-fumao.cn
-Accept: */*
-Cache-Control: no-cache
-
-###
-

+ 6 - 0
ldt-core/pom.xml

@@ -263,6 +263,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-compiler</artifactId>
+            <version>7.10.0.Final</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 2
ldt-core/src/main/java/org/springblade/common/config/mq/RabbitConfig.java

@@ -5,7 +5,6 @@ import org.springframework.amqp.core.BindingBuilder;
 import org.springframework.amqp.core.DirectExchange;
 import org.springframework.amqp.core.Queue;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 
 /**
@@ -13,7 +12,7 @@ import org.springframework.context.annotation.Configuration;
  * @description:
  * @since: 10/25/21 -- 2:29 PM
  */
-//@Configuration
+@Configuration
 public class RabbitConfig {
 
 	@Bean

+ 2 - 2
ldt-core/src/main/java/org/springblade/risk/log/listener/LdtLogListener.java

@@ -20,13 +20,13 @@ import org.springframework.stereotype.Component;
 @AllArgsConstructor
 public class LdtLogListener {
 
-//	private  RabbitTemplate rabbitTemplate;
+	private  RabbitTemplate rabbitTemplate;
 
 	@Async
 	@EventListener({UsualLogEvent.class})
 	public void saveApiLog(UsualLogEvent event) {
 		String data = JSON.toJSONString(event.getSource());
-//		rabbitTemplate.send("LogDirectExchange","LogDirectRouting",new Message(data.getBytes()));
+		rabbitTemplate.send("LogDirectExchange","LogDirectRouting",new Message(data.getBytes()));
 		System.out.println(data);
 	}
 }

+ 3 - 3
ldt-core/src/main/java/org/springblade/yeePay/api/YeepaySaas.java

@@ -133,17 +133,17 @@ public enum YeepaySaas {
 	/**
 	 * 自动提现-规则设置
 	 */
-	AUTO_WITHDRAW_RULE_SET("/rest/v1.0/account/auto-withdraw-rule/set", "POST"),
+	AUTO_WITHDRAW_RULE_SET("/rest/v1.0/account/auto-withdraw-rules/set", "POST"),
 
 	/**
 	 * 自动提现-规则查询
 	 */
-	AUTO_WITHDRAW_RULE_QUERY("/rest/v1.0/account/auto-withdraw-rule/query", "GET"),
+	AUTO_WITHDRAW_RULE_QUERY("/rest/v1.0/account/auto-withdraw-rules/query", "GET"),
 
 	/**
 	 * 自动提现-规则作废
 	 */
-	AUTO_WITHDRAW_RULE_CANCEL("/rest/v1.0/account/auto-withdraw-rule/cancel", "POST"),
+	AUTO_WITHDRAW_RULE_CANCEL("/rest/v1.0/account/auto-withdraw-rules/cancel", "POST"),
 
 	/**
 	 * 账户余额的查询

+ 6 - 0
ldt-core/src/main/java/org/springblade/yeePay/controller/YeepayController.java

@@ -136,6 +136,12 @@ public class YeepayController {
 		return R.data(yeepaySaasService.withdrawOrder(withdrawOrderDto));
 	}
 
+	@PostMapping("/withdrawQuery")
+	@ApiOperation("提现查询")
+	public R withdrawQuery(WithdrawQueryDto withdrawQueryDto){
+		return R.data(yeepaySaasService.withdrawQuery(withdrawQueryDto));
+	}
+
 	@PostMapping("/settle")
 	@ApiOperation("结算")
 	public R settle(SettleSelfSettleApplyDto settleSelfSettleApplyDto){

+ 6 - 0
ldt-core/src/main/resources/META-INF/kmodule.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<kmodule xmlns="http://www.drools.org/xsd/kmodule">
+    <kbase name="Kbase" packages="rules" default="true">
+        <ksession name="ksession-rule" default="true"/>
+    </kbase>
+</kmodule>

+ 9 - 0
ldt-core/src/main/resources/rules/test.drl

@@ -0,0 +1,9 @@
+package com.ldt
+import org.springblade.ldt.bills.entity.Bills;
+rule "book_discount_1"
+    when
+        $bills:Bills(cost < 100)
+    then
+        $bills.setPayStatus("付款成功");
+        System.out.println("成功匹配到规则一:支付状态:支付成功");
+end

+ 4 - 2
ldt-core/src/test/java/org/springblade/test/BladeTest.java

@@ -5,18 +5,20 @@ import org.junit.runner.RunWith;
 import org.springblade.core.test.BladeBootTest;
 import org.springblade.core.test.BladeSpringRunner;
 
+
 /**
  * Blade单元测试
  *
  * @author Chill
  */
 @RunWith(BladeSpringRunner.class)
-@BladeBootTest(appName = "blade-runner", profile = "dev")
+@BladeBootTest(appName = "blade-runner")
 public class BladeTest {
 
 	@Test
 	public void contextLoads() {
-		System.out.println("测试~~~~~~");
+
+
 	}
 
 }

+ 6 - 0
ldt-core/src/test/resources/META-INF/kmodule.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<kmodule xmlns="http://www.drools.org/xsd/kmodule">
+    <kbase name="Kbase" packages="rules" default="true">
+        <ksession name="ksession-rule" default="true"/>
+    </kbase>
+</kmodule>

+ 15 - 3
ldt-core/src/test/resources/application-dev.yml

@@ -1,11 +1,15 @@
 #数据源配置
 spring:
+  rabbitmq:
+    host: 192.168.1.218
+    port: 5672
+    virtual-host: ldt
   redis:
     ##redis 单机环境配置
-    host: 127.0.0.1
+    host: 192.168.1.218
     port: 6379
     password:
-    database: 0
+    database: 2
     ssl: false
     ##redis 集群环境配置
     #cluster:
@@ -13,9 +17,12 @@ spring:
     #  commandTimeout: 5000
   datasource:
     # MySql
-    url: jdbc:mysql://localhost:3306/bladex_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://192.168.1.168:3306/ldt?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+#    url: jdbc:mysql://192.168.1.218:3306/gx-ldt-0823?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
     username: root
+#    password: root@123456
     password: root
+
     # PostgreSQL
     #url: jdbc:postgresql://127.0.0.1:5432/bladex_boot
     #username: postgres
@@ -36,6 +43,11 @@ social:
 
 #blade配置
 blade:
+  secure:
+    skip-url:
+      - /common/account/**
+      - /sms/**
+      - /**
   #分布式锁配置
   lock:
     ##是否启用分布式锁

+ 6 - 4
ldt-core/src/test/resources/application-prod.yml

@@ -5,24 +5,25 @@ spring:
     ##将docker脚本部署的redis服务映射为宿主机ip
     ##生产环境推荐使用阿里云高可用redis服务并设置密码
     host: 127.0.0.1
-    port: 6379
+    port: 9736
     password:
-    database: 0
+    database: 8
     ssl: false
     ##redis 集群环境配置
     #cluster:
     #  nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
     #  commandTimeout: 5000
   datasource:
-    url: jdbc:mysql://localhost:3306/bladex_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://192.168.0.191:3306/ldt?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
     username: root
-    password: root
+    password: Gmtdb__b2b888
 
 #第三方登陆
 social:
   enabled: true
   domain: http://127.0.0.1:1888
 
+
 #blade配置
 blade:
   #分布式锁配置
@@ -38,3 +39,4 @@ blade:
     remote-mode: true
     upload-domain: http://localhost:8999
     remote-path: /usr/share/nginx/html
+

+ 20 - 3
ldt-core/src/test/resources/application.yml

@@ -1,6 +1,6 @@
 #服务器配置
 server:
-  port: 80
+  port: 2360
   undertow:
     # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
     io-threads: 16
@@ -69,6 +69,8 @@ mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
+  type-enums-package: org.springblade.common.enums
+  configuration.default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
 
 #knife4j配置
 knife4j:
@@ -176,8 +178,8 @@ blade:
       des-key: jMVCBsFGDQr1USHo
   #jackson配置
   jackson:
-    #null自动转空值
-    null-to-empty: true
+    #null自动转空值e
+    null-to-empty: false
     #大数字自动转字符串
     big-num-to-string: true
     #支持text文本请求,与报文加密同时开启
@@ -193,6 +195,15 @@ blade:
     #接口放行
     skip-url:
       - /blade-test/**
+      - /common/account/**
+      - /payment/callback/**
+      - /payment/csurl/**
+      - /payment/invitation/callback/**
+      - /sms/**
+      - /mall/yeepay/product/fee/modifyProductFeeNotify
+      - /shop/yeepay/product/fee/modifyProductFeeNotify
+      - /withdraw/callback/**
+      - /withdraw/csurl/**
     #授权认证配置
     auth:
       - method: ALL
@@ -238,3 +249,9 @@ blade:
     #排除多租户逻辑
     exclude-tables:
       - blade_user
+      - blade_dict_biz
+      - ldt_activity
+      - ldt_join_record
+
+
+

+ 8 - 0
ldt-core/src/test/resources/banner.txt

@@ -0,0 +1,8 @@
+${AnsiColor.BLUE}                   ______  _             _       ___   ___
+${AnsiColor.BLUE}                   | ___ \| |           | |      \  \ /  /
+${AnsiColor.BLUE}                   | |_/ /| |  __ _   __| |  ___  \  V  /
+${AnsiColor.BLUE}                   | ___ \| | / _` | / _` | / _ \   > <
+${AnsiColor.BLUE}                   | |_/ /| || (_| || (_| ||  __/ /  .  \
+${AnsiColor.BLUE}                   \____/ |_| \__,_| \__,_| \___|/__/ \__\
+
+${AnsiColor.BLUE}:: BladeX ${blade.service.version} :: ${spring.application.name}:${AnsiColor.RED}${blade.env}${AnsiColor.BLUE} :: Running SpringBoot ${spring-boot.version} :: ${AnsiColor.BRIGHT_BLACK}

+ 3 - 0
ldt-core/src/test/resources/config/4443027531.cer

@@ -0,0 +1,3 @@
+-----BEGIN CERTIFICATE-----
+MIIDajCCAw+gAwIBAgIFREMCdTEwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIEFDUyBTTTIgT0NBMzEwHhcNMjEwOTE1MDMxNzMxWhcNMjYwOTE1MDMxNzMxWjCBnTELMAkGA1UEBhMCQ04xGzAZBgNVBAoMEkNGQ0EgQUNTIFNNMiBPQ0EzMTEPMA0GA1UECwwGWUVFUEFZMRkwFwYDVQQLDBBPcmdhbml6YXRpb25hbC0xMUUwQwYDVQQDDDwwNTFA5Zu95L+h5pWw5a2X56eR5oqA77yI5bm/5bee77yJ5pyJ6ZmQ5YWs5Y+4QDEwMDg2MTQ1MTAzQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATCs2HlGPA548DDsRTz7UzgrT3PQk87YUp3J0xaQPJ71zo97rFElofhpv80kGpVv+hbGs+wwwCPaHUrIsJ/P/G6o4IBeDCCAXQwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzABhhxodHRwOi8vb2NzcC5jZmNhLmNvbS5jbi9vY3NwMDIGCCsGAQUFBzAChiZodHRwOi8vY3JsLmNmY2EuY29tLmNuL29jYTMxL29jYTMxLmNlcjAfBgNVHSMEGDAWgBQI2NEmxEh9nOysmOnxf2K5gM6pRTAMBgNVHRMBAf8EAjAAMEgGA1UdIARBMD8wPQYIYIEchu8qAQQwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2NybC5jZmNhLmNvbS5jbi9vY2EzMS9TTTIvY3JsMTU0Mi5jcmwwDgYDVR0PAQH/BAQDAgbAMB0GA1UdDgQWBBTWhqz9ajYsnU8EVXJeSi2AfHfxCzAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UBg3UFAANHADBEAiACFrtqt4WW8MEFdZBCcToz6US8mmqsPh19kNzzwldN6gIgEEaRAlqRCoUVPS2oi7P/groPJr2TVgYaCIXQpXqszPM=
+-----END CERTIFICATE-----

BIN
ldt-core/src/test/resources/config/4443027531.pfx


+ 30 - 0
ldt-core/src/test/resources/config/yop_sdk_config_default.json

@@ -0,0 +1,30 @@
+{
+  "app_key": "app_10086145103",
+  "isv_private_key": [
+    {
+      "store_type": "file_p12",
+      "cert_type": "SM2",
+      "value": "config/4443027531.pfx",
+      "password": "123456"
+    }
+  ],
+  "server_root": "https://openapi.yeepay.com/yop-center",
+  "yos_server_root": "https://yos.yeepay.com/yop-center",
+  "yop_public_key": [
+    {
+      "store_type": "file_cer",
+      "cert_type": "RSA2048",
+      "value": "config/certs/yop_platform_rsa_cert_290297451928.cer"
+    }
+  ],
+  "yop_cert_store": {
+    "enable":true,
+    "lazy":false
+  },
+  "http_client": {
+    "connect_timeout": 10000,
+    "read_timeout": 30000,
+    "max_conn_total": 200,
+    "max_conn_per_route": 100
+  }
+}

+ 132 - 0
ldt-core/src/test/resources/ehcache.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ehcache updateCheck="false" dynamicConfig="false">
+    <diskStore path="java.io.tmpdir"/>
+
+    <cache name="retry:limit:cache"
+           maxEntriesLocalHeap="2000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           statistics="true">
+    </cache>
+
+    <!-- =================业务缓存================= -->
+
+    <!-- 缓存半小时 -->
+    <cache name="blade:biz"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- 缓存半小时 -->
+    <cache name="blade:dict"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- 缓存半小时 -->
+    <cache name="blade:menu"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- 缓存半小时 -->
+    <cache name="blade:user"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- 缓存半小时 -->
+    <cache name="blade:sys"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- 缓存半小时 -->
+    <cache name="blade:flow"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- =================系统缓存================= -->
+    <!-- 缓存半小时 -->
+    <cache name="half:hour"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="1800"
+           timeToLiveSeconds="1800"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- 缓存一小时 -->
+    <cache name="hour"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="3600"
+           timeToLiveSeconds="3600"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!-- 缓存一天 -->
+    <cache name="one:day"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="86400"
+           timeToLiveSeconds="86400"
+           overflowToDisk="false"
+           diskPersistent="false"/>
+
+    <!--
+        name:缓存名称。
+        maxElementsInMemory:缓存最大个数。
+        eternal:对象是否永久有效,一但设置了,timeout将不起作用。
+        timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
+        timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
+        overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
+        diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
+        maxElementsOnDisk:硬盘最大缓存个数。
+        diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
+        diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
+        memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
+        clearOnFlush:内存数量最大时是否清除。
+    -->
+    <defaultCache name="default:cache"
+                  maxElementsInMemory="10000"
+                  eternal="false"
+                  timeToIdleSeconds="120"
+                  timeToLiveSeconds="120"
+                  overflowToDisk="false"
+                  maxElementsOnDisk="100000"
+                  diskPersistent="false"
+                  diskExpiryThreadIntervalSeconds="120"
+                  memoryStoreEvictionPolicy="LRU"/>
+
+</ehcache>

+ 113 - 0
ldt-core/src/test/resources/log/logback-dev.xml

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="${STDOUT_APPENDER}"/>
+    </root>
+
+    <logger name="net.sf.ehcache" level="INFO"/>
+    <logger name="druid.sql" level="INFO"/>
+
+
+    <!-- MyBatis log configure -->
+    <logger name="com.apache.ibatis" level="INFO"/>
+    <logger name="org.mybatis.spring" level="INFO"/>
+    <logger name="java.sql.Connection" level="INFO"/>
+    <logger name="java.sql.Statement" level="INFO"/>
+    <logger name="java.sql.PreparedStatement" level="INFO"/>
+
+    <!-- 减少部分debug日志 -->
+    <logger name="druid.sql" level="INFO"/>
+    <logger name="org.apache.shiro" level="INFO"/>
+    <logger name="org.mybatis.spring" level="INFO"/>
+    <logger name="org.springframework" level="INFO"/>
+    <logger name="org.springframework.context" level="WARN"/>
+    <logger name="org.springframework.beans" level="WARN"/>
+    <logger name="com.baomidou.mybatisplus" level="INFO"/>
+    <logger name="org.apache.ibatis.io" level="INFO"/>
+    <logger name="org.apache.velocity" level="INFO"/>
+    <logger name="org.eclipse.jetty" level="INFO"/>
+    <logger name="io.undertow" level="INFO"/>
+    <logger name="org.xnio.nio" level="INFO"/>
+    <logger name="org.thymeleaf" level="INFO"/>
+    <logger name="springfox.documentation" level="INFO"/>
+    <logger name="org.hibernate.validator" level="INFO"/>
+    <logger name="com.netflix.loadbalancer" level="INFO"/>
+    <logger name="com.netflix.hystrix" level="INFO"/>
+    <logger name="com.netflix.zuul" level="INFO"/>
+    <logger name="de.codecentric" level="INFO"/>
+    <!-- cache INFO -->
+    <logger name="net.sf.ehcache" level="INFO"/>
+    <logger name="org.springframework.cache" level="INFO"/>
+    <!-- cloud -->
+    <logger name="org.apache.http" level="INFO"/>
+    <logger name="com.netflix.discovery" level="INFO"/>
+    <logger name="com.netflix.eureka" level="INFO"/>
+    <!-- 业务日志 -->
+    <Logger name="org.springblade" level="INFO"/>
+    <Logger name="org.springblade.core.tenant" level="INFO"/>
+    <Logger name="org.springblade.core.version" level="INFO"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="ERROR"/>
+
+
+</configuration>

+ 151 - 0
ldt-core/src/test/resources/log/logback-prod.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>/data/local/webserver/ldt-new/log/info-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>/data/local/webserver/ldt-new/log/error-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="INFO_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>INFO</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+
+            <!-- 推送日志至elk -->
+            <appender name="ERROR_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>ERROR</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="${INFO_APPENDER}"/>
+        <appender-ref ref="${ERROR_APPENDER}"/>
+    </root>
+
+    <logger name="net.sf.ehcache" level="INFO"/>
+    <logger name="druid.sql" level="INFO"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="ERROR"/>
+
+</configuration>

+ 151 - 0
ldt-core/src/test/resources/log/logback-test.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>target/blade/log/info-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>target/blade/log/error-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="INFO_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>INFO</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+
+            <!-- 推送日志至elk -->
+            <appender name="ERROR_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>ERROR</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="${INFO_APPENDER}"/>
+        <appender-ref ref="${ERROR_APPENDER}"/>
+    </root>
+
+    <logger name="net.sf.ehcache" level="INFO"/>
+    <logger name="druid.sql" level="INFO"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="ERROR"/>
+
+</configuration>

+ 17 - 0
ldt-core/src/test/resources/payConfig.properties

@@ -0,0 +1,17 @@
+
+#服务商--商户号
+yee-pay.parentMerchantNo = 10086145103
+
+#sm4 国密秘钥
+yee-pay.sm4Key = M0huZkdCZHhSU0h6YVF3aQ==
+
+#应用ID
+yee-pay.appKey = app_10086145103
+
+#秘钥
+yee-pay.privateKey = MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgUiUMy5mYPZ9mMnaEFJwGoGE0Adtvr08EVRFY8PIMJD2gCgYIKoEcz1UBgi2hRANCAATzw7Fzd3ILqNWCNXJDWT68OyBFjhBGaVprd/qIxmDZ8rbXLdUmd0Yh4zUyfjy4pR+hy+iqR4cqqfnEWjTTXAio
+
+#服务器域名
+yee-pay.serviceUrl = https://ldt.guosen-fumao.cn/api
+
+yee-pay.platformServiceNo = 10086160165

+ 123 - 0
ldt-core/src/test/resources/processes/LeaveProcess.bpmn20.xml

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
+    <process id="Leave" name="请假流程" isExecutable="true">
+        <documentation>请假流程</documentation>
+        <startEvent id="start" name="开始" flowable:initiator="applyUser"></startEvent>
+        <userTask id="hrTask" name="人事审批" flowable:assignee="${taskUser}">
+            <extensionElements>
+                <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+            </extensionElements>
+        </userTask>
+        <exclusiveGateway id="judgeTask"></exclusiveGateway>
+        <userTask id="managerTak" name="经理审批" flowable:candidateGroups="manager"></userTask>
+        <userTask id="bossTask" name="老板审批" flowable:candidateGroups="boss"></userTask>
+        <endEvent id="end" name="结束"></endEvent>
+        <sequenceFlow id="flow1" sourceRef="start" targetRef="hrTask"></sequenceFlow>
+        <sequenceFlow id="managerPassFlow" name="通过" sourceRef="managerTak" targetRef="end">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+        </sequenceFlow>
+        <userTask id="userTask" name="调整申请" flowable:assignee="${applyUser}">
+            <extensionElements>
+                <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+            </extensionElements>
+        </userTask>
+        <sequenceFlow id="bossPassFlow" name="通过" sourceRef="bossTask" targetRef="end">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="judgeMore" name="大于3天" sourceRef="judgeTask" targetRef="bossTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${days > 3}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="managerNotPassFlow" name="驳回" sourceRef="managerTak" targetRef="userTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="bossNotPassFlow" name="驳回" sourceRef="bossTask" targetRef="userTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="hrPassFlow" name="同意" sourceRef="hrTask" targetRef="judgeTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="hrNotPassFlow" name="驳回" sourceRef="hrTask" targetRef="userTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="judgeLess" name="小于3天" sourceRef="judgeTask" targetRef="managerTak">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${days <= 3}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="userPassFlow" name="重新申请" sourceRef="userTask" targetRef="hrTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="userNotPassFlow" name="关闭申请" sourceRef="userTask" targetRef="end">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+        </sequenceFlow>
+    </process>
+    <bpmndi:BPMNDiagram id="BPMNDiagram_Leave">
+        <bpmndi:BPMNPlane bpmnElement="Leave" id="BPMNPlane_Leave">
+            <bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
+                <omgdc:Bounds height="30.0" width="30.0" x="300.0" y="135.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="hrTask" id="BPMNShape_hrTask">
+                <omgdc:Bounds height="80.0" width="100.0" x="360.0" y="165.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="judgeTask" id="BPMNShape_judgeTask">
+                <omgdc:Bounds height="40.0" width="40.0" x="255.0" y="300.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="managerTak" id="BPMNShape_managerTak">
+                <omgdc:Bounds height="80.0" width="100.0" x="555.0" y="75.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="bossTask" id="BPMNShape_bossTask">
+                <omgdc:Bounds height="80.0" width="100.0" x="450.0" y="420.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
+                <omgdc:Bounds height="28.0" width="28.0" x="705.0" y="390.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="userTask" id="BPMNShape_userTask">
+                <omgdc:Bounds height="80.0" width="100.0" x="510.0" y="270.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
+                <omgdi:waypoint x="327.9390183144677" y="157.4917313275668"></omgdi:waypoint>
+                <omgdi:waypoint x="360.0" y="176.05263157894737"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="hrPassFlow" id="BPMNEdge_hrPassFlow">
+                <omgdi:waypoint x="363.04347826086956" y="244.95000000000002"></omgdi:waypoint>
+                <omgdi:waypoint x="285.77299999999997" y="310.79999999999995"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="hrNotPassFlow" id="BPMNEdge_hrNotPassFlow">
+                <omgdi:waypoint x="459.95" y="236.21875000000006"></omgdi:waypoint>
+                <omgdi:waypoint x="513.9794844818516" y="270.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="judgeLess" id="BPMNEdge_judgeLess">
+                <omgdi:waypoint x="274.3359375" y="300.66397214564284"></omgdi:waypoint>
+                <omgdi:waypoint x="274.3359375" y="115.0"></omgdi:waypoint>
+                <omgdi:waypoint x="554.9999999999982" y="115.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="userPassFlow" id="BPMNEdge_userPassFlow">
+                <omgdi:waypoint x="510.0" y="310.0"></omgdi:waypoint>
+                <omgdi:waypoint x="411.0" y="310.0"></omgdi:waypoint>
+                <omgdi:waypoint x="411.0" y="244.95000000000002"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="bossPassFlow" id="BPMNEdge_bossPassFlow">
+                <omgdi:waypoint x="549.9499999999998" y="447.2146118721461"></omgdi:waypoint>
+                <omgdi:waypoint x="705.4331577666419" y="407.4567570622598"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="judgeMore" id="BPMNEdge_judgeMore">
+                <omgdi:waypoint x="287.29730895645025" y="327.65205479452055"></omgdi:waypoint>
+                <omgdi:waypoint x="450.0" y="428.8888888888889"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="managerPassFlow" id="BPMNEdge_managerPassFlow">
+                <omgdi:waypoint x="620.7588235294118" y="154.95"></omgdi:waypoint>
+                <omgdi:waypoint x="713.8613704477151" y="390.96328050279476"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="userNotPassFlow" id="BPMNEdge_userNotPassFlow">
+                <omgdi:waypoint x="609.95" y="339.5301886792453"></omgdi:waypoint>
+                <omgdi:waypoint x="706.9383699359797" y="396.87411962686997"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="bossNotPassFlow" id="BPMNEdge_bossNotPassFlow">
+                <omgdi:waypoint x="515.98" y="420.0"></omgdi:waypoint>
+                <omgdi:waypoint x="544.0" y="349.95000000000005"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="managerNotPassFlow" id="BPMNEdge_managerNotPassFlow">
+                <omgdi:waypoint x="595.438344721373" y="154.95"></omgdi:waypoint>
+                <omgdi:waypoint x="567.9366337262223" y="270.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+        </bpmndi:BPMNPlane>
+    </bpmndi:BPMNDiagram>
+</definitions>

+ 104 - 0
ldt-core/src/test/resources/processes/activity.bpmn20.xml

@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
+  <process id="activity" name="activity" isExecutable="true">
+    <startEvent id="sid-8E372D44-FE99-4818-B416-7FB3D7CA1383" name="提交活动审核"></startEvent>
+    <exclusiveGateway id="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" name="是否由平台审核"></exclusiveGateway>
+    <sequenceFlow id="sid-2B99BAC0-B361-43D7-AA6C-EAB56D16B080" sourceRef="sid-8E372D44-FE99-4818-B416-7FB3D7CA1383" targetRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E"></sequenceFlow>
+    <userTask id="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" name="平台审核" flowable:assignee="${auditor}">
+      <extensionElements>
+        <flowable:taskListener event="complete" class="org.springblade.flow.activity.listener.ActivityPlatformCompleteListener"></flowable:taskListener>
+        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+      </extensionElements>
+    </userTask>
+    <userTask id="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" name="商场审核" flowable:assignee="${mallTask}">
+      <extensionElements>
+        <flowable:taskListener event="complete" class="org.springblade.flow.activity.listener.ActivityMallCompleteListener"></flowable:taskListener>
+        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+      </extensionElements>
+    </userTask>
+    <userTask id="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773" name="修改待提交" flowable:assignee="$INITIATOR">
+      <extensionElements>
+        <flowable:taskListener event="complete" class="org.springblade.flow.activity.listener.ActivityUserCompleteListener"></flowable:taskListener>
+        <modeler:activiti-idm-initiator xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
+      </extensionElements>
+    </userTask>
+    <endEvent id="sid-382234D7-8F57-4B43-BEDB-02F533B66AFB" name="审核通过"></endEvent>
+    <sequenceFlow id="sid-2EB67410-D094-44E3-AD0C-78C50C9EE03A" sourceRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" targetRef="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!toPlatform}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-CD05402D-E128-49C2-8C89-C019C82EBC0E" name="审核驳回" sourceRef="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" targetRef="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-AD68D081-2EAF-4F9B-B43F-4437B64184DC" name="审核通过" sourceRef="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" targetRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-B19EA25D-1E07-4FBD-A0D5-B2CD0D89B25F" name="审核驳回" sourceRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" targetRef="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-C6F1E9E9-B970-4690-BECC-FE39A72A34E1" sourceRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" targetRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${toPlatform}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-6CF41554-3732-48A8-90A9-98338F7C3F3F" name="审核通过" sourceRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" targetRef="sid-382234D7-8F57-4B43-BEDB-02F533B66AFB">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-B6C00913-2561-48D5-A9FB-CE0F175D5EF2" name="重新提交" sourceRef="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773" targetRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E"></sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_activity">
+    <bpmndi:BPMNPlane bpmnElement="activity" id="BPMNPlane_activity">
+      <bpmndi:BPMNShape bpmnElement="sid-8E372D44-FE99-4818-B416-7FB3D7CA1383" id="BPMNShape_sid-8E372D44-FE99-4818-B416-7FB3D7CA1383">
+        <omgdc:Bounds height="30.0" width="30.0" x="255.0" y="220.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" id="BPMNShape_sid-DF21CEF6-BEB1-4136-B73B-04B90014520E">
+        <omgdc:Bounds height="40.0" width="40.0" x="420.0" y="215.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" id="BPMNShape_sid-BBC62A41-8EA3-4428-8345-B61594ECB80E">
+        <omgdc:Bounds height="80.0" width="100.0" x="615.0" y="195.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" id="BPMNShape_sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63">
+        <omgdc:Bounds height="80.0" width="100.0" x="390.0" y="383.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773" id="BPMNShape_sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773">
+        <omgdc:Bounds height="80.0" width="100.0" x="624.0" y="383.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-382234D7-8F57-4B43-BEDB-02F533B66AFB" id="BPMNShape_sid-382234D7-8F57-4B43-BEDB-02F533B66AFB">
+        <omgdc:Bounds height="28.0" width="28.0" x="841.0" y="233.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="sid-AD68D081-2EAF-4F9B-B43F-4437B64184DC" id="BPMNEdge_sid-AD68D081-2EAF-4F9B-B43F-4437B64184DC">
+        <omgdi:waypoint x="487.8125" y="383.0"></omgdi:waypoint>
+        <omgdi:waypoint x="617.1276595744681" y="274.95000000000005"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-C6F1E9E9-B970-4690-BECC-FE39A72A34E1" id="BPMNEdge_sid-C6F1E9E9-B970-4690-BECC-FE39A72A34E1">
+        <omgdi:waypoint x="459.48805220881326" y="235.45758928571428"></omgdi:waypoint>
+        <omgdi:waypoint x="614.9999999999977" y="235.11124721603568"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-2EB67410-D094-44E3-AD0C-78C50C9EE03A" id="BPMNEdge_sid-2EB67410-D094-44E3-AD0C-78C50C9EE03A">
+        <omgdi:waypoint x="440.44919786096256" y="254.49557723142706"></omgdi:waypoint>
+        <omgdi:waypoint x="440.10653333333335" y="383.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-2B99BAC0-B361-43D7-AA6C-EAB56D16B080" id="BPMNEdge_sid-2B99BAC0-B361-43D7-AA6C-EAB56D16B080">
+        <omgdi:waypoint x="284.9499993675608" y="235.0"></omgdi:waypoint>
+        <omgdi:waypoint x="420.0" y="235.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-B6C00913-2561-48D5-A9FB-CE0F175D5EF2" id="BPMNEdge_sid-B6C00913-2561-48D5-A9FB-CE0F175D5EF2">
+        <omgdi:waypoint x="624.2101622772013" y="383.0"></omgdi:waypoint>
+        <omgdi:waypoint x="451.0571284664612" y="243.88767772511852"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-6CF41554-3732-48A8-90A9-98338F7C3F3F" id="BPMNEdge_sid-6CF41554-3732-48A8-90A9-98338F7C3F3F">
+        <omgdi:waypoint x="714.9499999999999" y="235.0"></omgdi:waypoint>
+        <omgdi:waypoint x="778.0" y="235.0"></omgdi:waypoint>
+        <omgdi:waypoint x="778.0" y="247.0"></omgdi:waypoint>
+        <omgdi:waypoint x="841.0" y="247.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-B19EA25D-1E07-4FBD-A0D5-B2CD0D89B25F" id="BPMNEdge_sid-B19EA25D-1E07-4FBD-A0D5-B2CD0D89B25F">
+        <omgdi:waypoint x="665.0" y="274.95000000000005"></omgdi:waypoint>
+        <omgdi:waypoint x="665.0" y="329.0"></omgdi:waypoint>
+        <omgdi:waypoint x="674.0" y="329.0"></omgdi:waypoint>
+        <omgdi:waypoint x="674.0" y="383.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-CD05402D-E128-49C2-8C89-C019C82EBC0E" id="BPMNEdge_sid-CD05402D-E128-49C2-8C89-C019C82EBC0E">
+        <omgdi:waypoint x="489.94999999992734" y="423.0"></omgdi:waypoint>
+        <omgdi:waypoint x="623.9999999999529" y="423.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

+ 70 - 0
ldt-core/src/test/resources/processes/mall.bpmn20.xml

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
+  <process id="mall" name="mall" isExecutable="true">
+    <startEvent id="startEvent1" name="商场提交审核"></startEvent>
+    <userTask id="sid-3EF8A9A9-5882-4287-A655-294674647A6E" name="商场签约" flowable:assignee="$INITIATOR">
+      <extensionElements>
+        <modeler:activiti-idm-initiator xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
+      </extensionElements>
+    </userTask>
+    <userTask id="sid-66E1BB76-5EE7-4702-B205-6CEB87416CB6" name="修改待提交" flowable:assignee="$INITIATOR">
+      <extensionElements>
+        <modeler:activiti-idm-initiator xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
+      </extensionElements>
+    </userTask>
+    <endEvent id="sid-369DD664-1B1B-4649-A6CB-615B2561BECE" name="完成"></endEvent>
+    <userTask id="sid-76CE154F-B67C-4302-AFBA-A6F0CBF0B180" name="进件审核" flowable:assignee="${yeepay}">
+      <extensionElements>
+        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+      </extensionElements>
+    </userTask>
+    <sequenceFlow id="sid-C24174FD-6D96-4D2B-9402-02C944D58196" name="资料有误" sourceRef="sid-76CE154F-B67C-4302-AFBA-A6F0CBF0B180" targetRef="sid-66E1BB76-5EE7-4702-B205-6CEB87416CB6">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-5583558D-89D5-490C-B61E-93AF48A28A6E" name="资料审核通过" sourceRef="sid-76CE154F-B67C-4302-AFBA-A6F0CBF0B180" targetRef="sid-3EF8A9A9-5882-4287-A655-294674647A6E">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-6B163AD6-8471-4C6A-A660-14E4B40C8544" name="入驻成功" sourceRef="sid-3EF8A9A9-5882-4287-A655-294674647A6E" targetRef="sid-369DD664-1B1B-4649-A6CB-615B2561BECE"></sequenceFlow>
+    <sequenceFlow id="sid-9A785468-6976-4B3C-A8F5-CE49D6086297" sourceRef="startEvent1" targetRef="sid-76CE154F-B67C-4302-AFBA-A6F0CBF0B180"></sequenceFlow>
+    <sequenceFlow id="sid-0CBC1D6D-FE45-49F5-9D88-9A314395B4D7" name="修改资料" sourceRef="sid-66E1BB76-5EE7-4702-B205-6CEB87416CB6" targetRef="sid-76CE154F-B67C-4302-AFBA-A6F0CBF0B180"></sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_mall">
+    <bpmndi:BPMNPlane bpmnElement="mall" id="BPMNPlane_mall">
+      <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
+        <omgdc:Bounds height="30.0" width="30.0" x="620.0" y="130.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-3EF8A9A9-5882-4287-A655-294674647A6E" id="BPMNShape_sid-3EF8A9A9-5882-4287-A655-294674647A6E">
+        <omgdc:Bounds height="80.0" width="100.0" x="795.0" y="345.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-66E1BB76-5EE7-4702-B205-6CEB87416CB6" id="BPMNShape_sid-66E1BB76-5EE7-4702-B205-6CEB87416CB6">
+        <omgdc:Bounds height="80.0" width="100.0" x="330.0" y="345.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-369DD664-1B1B-4649-A6CB-615B2561BECE" id="BPMNShape_sid-369DD664-1B1B-4649-A6CB-615B2561BECE">
+        <omgdc:Bounds height="28.0" width="28.0" x="1035.0" y="371.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-76CE154F-B67C-4302-AFBA-A6F0CBF0B180" id="BPMNShape_sid-76CE154F-B67C-4302-AFBA-A6F0CBF0B180">
+        <omgdc:Bounds height="80.0" width="100.0" x="585.0" y="345.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="sid-5583558D-89D5-490C-B61E-93AF48A28A6E" id="BPMNEdge_sid-5583558D-89D5-490C-B61E-93AF48A28A6E">
+        <omgdi:waypoint x="684.9499999999999" y="385.0"></omgdi:waypoint>
+        <omgdi:waypoint x="795.0" y="385.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-C24174FD-6D96-4D2B-9402-02C944D58196" id="BPMNEdge_sid-C24174FD-6D96-4D2B-9402-02C944D58196">
+        <omgdi:waypoint x="584.9999999999554" y="385.0"></omgdi:waypoint>
+        <omgdi:waypoint x="429.9499999997888" y="385.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-9A785468-6976-4B3C-A8F5-CE49D6086297" id="BPMNEdge_sid-9A785468-6976-4B3C-A8F5-CE49D6086297">
+        <omgdi:waypoint x="635.0" y="159.94999968266256"></omgdi:waypoint>
+        <omgdi:waypoint x="635.0" y="345.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-0CBC1D6D-FE45-49F5-9D88-9A314395B4D7" id="BPMNEdge_sid-0CBC1D6D-FE45-49F5-9D88-9A314395B4D7">
+        <omgdi:waypoint x="429.95000000000005" y="405.0"></omgdi:waypoint>
+        <omgdi:waypoint x="584.9999999997791" y="405.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-6B163AD6-8471-4C6A-A660-14E4B40C8544" id="BPMNEdge_sid-6B163AD6-8471-4C6A-A660-14E4B40C8544">
+        <omgdi:waypoint x="894.9499999999999" y="385.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1035.0" y="385.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

+ 177 - 0
ldt-core/src/test/resources/processes/shop.bpmn20.xml

@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
+  <process id="shop" name="shop" isExecutable="true">
+    <startEvent id="sid-8E372D44-FE99-4818-B416-7FB3D7CA1383" name="商户提交审核"></startEvent>
+    <exclusiveGateway id="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" name="是否由平台审核"></exclusiveGateway>
+    <sequenceFlow id="sid-2B99BAC0-B361-43D7-AA6C-EAB56D16B080" sourceRef="sid-8E372D44-FE99-4818-B416-7FB3D7CA1383" targetRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E"></sequenceFlow>
+    <userTask id="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" name="平台审核" flowable:assignee="${auditor}">
+      <extensionElements>
+        <flowable:taskListener event="complete" class="org.springblade.flow.shop.listener.ShopPlatformCompleteListener"></flowable:taskListener>
+        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+      </extensionElements>
+    </userTask>
+    <userTask id="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" name="商场审核" flowable:assignee="${mallTask}">
+      <extensionElements>
+        <flowable:taskListener event="complete" class="org.springblade.flow.shop.listener.ShopMallCompleteListener"></flowable:taskListener>
+        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+      </extensionElements>
+    </userTask>
+    <userTask id="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773" name="修改待提交" flowable:assignee="$INITIATOR">
+      <extensionElements>
+        <flowable:taskListener event="complete" class="org.springblade.flow.shop.listener.ShopUserCompleteListener"></flowable:taskListener>
+        <modeler:activiti-idm-initiator xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
+      </extensionElements>
+    </userTask>
+    <sequenceFlow id="sid-B6C00913-2561-48D5-A9FB-CE0F175D5EF2" name="重新提交" sourceRef="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773" targetRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E"></sequenceFlow>
+    <userTask id="sid-DC3319D8-8341-4D84-84B5-9FEDDB589EA9" name="用户签约" flowable:assignee="$INITIATOR">
+      <extensionElements>
+        <modeler:activiti-idm-initiator xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
+      </extensionElements>
+    </userTask>
+    <serviceTask id="sid-A3C23932-5A4B-4429-970D-C1285AC33519" name="微信实名申请" flowable:class="org.springblade.flow.shop.task.WechatApplyTask"></serviceTask>
+    <userTask id="sid-FA31163F-C9D1-4867-BDFF-C498B114A57C" name="微信实名确认" flowable:assignee="$INITIATOR">
+      <extensionElements>
+        <modeler:activiti-idm-initiator xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
+      </extensionElements>
+    </userTask>
+    <endEvent id="sid-025F8850-A5D1-4F33-AEA5-D1EDDC5E2928" name="完成"></endEvent>
+    <userTask id="sid-69C08CE7-5055-4006-92A7-F8B96D394F8B" name="进件审核" flowable:assignee="${yeepay}">
+      <extensionElements>
+        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+      </extensionElements>
+    </userTask>
+    <sequenceFlow id="sid-66BD7003-670A-485E-89D7-96E0A8128A0E" sourceRef="sid-FA31163F-C9D1-4867-BDFF-C498B114A57C" targetRef="sid-025F8850-A5D1-4F33-AEA5-D1EDDC5E2928"></sequenceFlow>
+    <sequenceFlow id="sid-24C5F08E-64D6-4317-A5B4-B011560E7858" sourceRef="sid-A3C23932-5A4B-4429-970D-C1285AC33519" targetRef="sid-FA31163F-C9D1-4867-BDFF-C498B114A57C"></sequenceFlow>
+    <sequenceFlow id="sid-20A9D72B-4C74-45DD-A383-163EF498A4F0" sourceRef="sid-DC3319D8-8341-4D84-84B5-9FEDDB589EA9" targetRef="sid-A3C23932-5A4B-4429-970D-C1285AC33519"></sequenceFlow>
+    <sequenceFlow id="sid-AD68D081-2EAF-4F9B-B43F-4437B64184DC" name="审核通过" sourceRef="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" targetRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-CD05402D-E128-49C2-8C89-C019C82EBC0E" name="审核驳回" sourceRef="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" targetRef="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+    </sequenceFlow>
+    <exclusiveGateway id="sid-07CF0DFA-13D5-4494-946C-0C1456206DCD"></exclusiveGateway>
+    <sequenceFlow id="sid-2EB67410-D094-44E3-AD0C-78C50C9EE03A" sourceRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" targetRef="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!toPlatform}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-C6F1E9E9-B970-4690-BECC-FE39A72A34E1" sourceRef="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" targetRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${toPlatform}]]></conditionExpression>
+    </sequenceFlow>
+    <serviceTask id="sid-83D4FE80-5E0A-49C9-9DA7-5397049FF6BE" name="提交入驻申请" flowable:class="org.springblade.flow.shop.task.InvitationTask"></serviceTask>
+    <sequenceFlow id="sid-B19EA25D-1E07-4FBD-A0D5-B2CD0D89B25F" name="审核驳回" sourceRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" targetRef="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-CFC436CE-76A6-4B8C-B204-E649C642104B" name="审核通过" sourceRef="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" targetRef="sid-83D4FE80-5E0A-49C9-9DA7-5397049FF6BE">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-331B51FE-0859-4F5B-82A7-0B0E57E37AC1" name="审核通过" sourceRef="sid-07CF0DFA-13D5-4494-946C-0C1456206DCD" targetRef="sid-DC3319D8-8341-4D84-84B5-9FEDDB589EA9">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-479B0EB9-124A-4C76-A5DA-DE82A27830C1" name="商家信息有误" sourceRef="sid-07CF0DFA-13D5-4494-946C-0C1456206DCD" targetRef="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!approve}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-94F4B125-4763-4A9E-A364-4441F506C34A" sourceRef="sid-69C08CE7-5055-4006-92A7-F8B96D394F8B" targetRef="sid-07CF0DFA-13D5-4494-946C-0C1456206DCD"></sequenceFlow>
+    <sequenceFlow id="sid-6C2899AD-2A27-41E3-9F27-938CCD72B3EA" sourceRef="sid-83D4FE80-5E0A-49C9-9DA7-5397049FF6BE" targetRef="sid-69C08CE7-5055-4006-92A7-F8B96D394F8B"></sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_shop">
+    <bpmndi:BPMNPlane bpmnElement="shop" id="BPMNPlane_shop">
+      <bpmndi:BPMNShape bpmnElement="sid-8E372D44-FE99-4818-B416-7FB3D7CA1383" id="BPMNShape_sid-8E372D44-FE99-4818-B416-7FB3D7CA1383">
+        <omgdc:Bounds height="30.0" width="30.0" x="61.98346912026307" y="220.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-DF21CEF6-BEB1-4136-B73B-04B90014520E" id="BPMNShape_sid-DF21CEF6-BEB1-4136-B73B-04B90014520E">
+        <omgdc:Bounds height="40.0" width="40.0" x="297.5206517772627" y="215.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-BBC62A41-8EA3-4428-8345-B61594ECB80E" id="BPMNShape_sid-BBC62A41-8EA3-4428-8345-B61594ECB80E">
+        <omgdc:Bounds height="80.0" width="100.0" x="465.0" y="195.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63" id="BPMNShape_sid-26F8CF3B-CFD7-4D03-81B6-3A6A526E4C63">
+        <omgdc:Bounds height="80.0" width="100.0" x="267.52065177726263" y="383.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773" id="BPMNShape_sid-CF1FAAE9-5FF5-4A60-BB9B-775649E4E773">
+        <omgdc:Bounds height="80.0" width="100.0" x="465.0" y="383.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-DC3319D8-8341-4D84-84B5-9FEDDB589EA9" id="BPMNShape_sid-DC3319D8-8341-4D84-84B5-9FEDDB589EA9">
+        <omgdc:Bounds height="80.0" width="100.0" x="855.0" y="383.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-A3C23932-5A4B-4429-970D-C1285AC33519" id="BPMNShape_sid-A3C23932-5A4B-4429-970D-C1285AC33519">
+        <omgdc:Bounds height="80.0" width="100.0" x="855.0" y="195.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-FA31163F-C9D1-4867-BDFF-C498B114A57C" id="BPMNShape_sid-FA31163F-C9D1-4867-BDFF-C498B114A57C">
+        <omgdc:Bounds height="80.0" width="100.0" x="1020.0" y="195.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-025F8850-A5D1-4F33-AEA5-D1EDDC5E2928" id="BPMNShape_sid-025F8850-A5D1-4F33-AEA5-D1EDDC5E2928">
+        <omgdc:Bounds height="28.0" width="28.0" x="1056.0" y="416.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-69C08CE7-5055-4006-92A7-F8B96D394F8B" id="BPMNShape_sid-69C08CE7-5055-4006-92A7-F8B96D394F8B">
+        <omgdc:Bounds height="80.0" width="100.0" x="660.0" y="330.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-07CF0DFA-13D5-4494-946C-0C1456206DCD" id="BPMNShape_sid-07CF0DFA-13D5-4494-946C-0C1456206DCD">
+        <omgdc:Bounds height="40.0" width="40.0" x="690.0" y="480.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-83D4FE80-5E0A-49C9-9DA7-5397049FF6BE" id="BPMNShape_sid-83D4FE80-5E0A-49C9-9DA7-5397049FF6BE">
+        <omgdc:Bounds height="80.0" width="100.0" x="660.0" y="180.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="sid-2EB67410-D094-44E3-AD0C-78C50C9EE03A" id="BPMNEdge_sid-2EB67410-D094-44E3-AD0C-78C50C9EE03A">
+        <omgdi:waypoint x="317.96984963822524" y="254.49557723142706"></omgdi:waypoint>
+        <omgdi:waypoint x="317.627185110596" y="383.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-2B99BAC0-B361-43D7-AA6C-EAB56D16B080" id="BPMNEdge_sid-2B99BAC0-B361-43D7-AA6C-EAB56D16B080">
+        <omgdi:waypoint x="91.93346880430559" y="235.0"></omgdi:waypoint>
+        <omgdi:waypoint x="297.5206517772627" y="235.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-B6C00913-2561-48D5-A9FB-CE0F175D5EF2" id="BPMNEdge_sid-B6C00913-2561-48D5-A9FB-CE0F175D5EF2">
+        <omgdi:waypoint x="472.9825808517718" y="383.0"></omgdi:waypoint>
+        <omgdi:waypoint x="327.739781442084" y="244.72970411331303"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-24C5F08E-64D6-4317-A5B4-B011560E7858" id="BPMNEdge_sid-24C5F08E-64D6-4317-A5B4-B011560E7858">
+        <omgdi:waypoint x="954.9499999999836" y="235.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1020.0" y="235.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-6C2899AD-2A27-41E3-9F27-938CCD72B3EA" id="BPMNEdge_sid-6C2899AD-2A27-41E3-9F27-938CCD72B3EA">
+        <omgdi:waypoint x="710.0" y="259.95000000000005"></omgdi:waypoint>
+        <omgdi:waypoint x="710.0" y="330.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-66BD7003-670A-485E-89D7-96E0A8128A0E" id="BPMNEdge_sid-66BD7003-670A-485E-89D7-96E0A8128A0E">
+        <omgdi:waypoint x="1070.0" y="274.95000000000005"></omgdi:waypoint>
+        <omgdi:waypoint x="1070.0" y="416.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-AD68D081-2EAF-4F9B-B43F-4437B64184DC" id="BPMNEdge_sid-AD68D081-2EAF-4F9B-B43F-4437B64184DC">
+        <omgdi:waypoint x="359.4850132745943" y="383.0"></omgdi:waypoint>
+        <omgdi:waypoint x="472.98311739941755" y="274.95000000000005"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-C6F1E9E9-B970-4690-BECC-FE39A72A34E1" id="BPMNEdge_sid-C6F1E9E9-B970-4690-BECC-FE39A72A34E1">
+        <omgdi:waypoint x="337.01403120685205" y="235.45164886240752"></omgdi:waypoint>
+        <omgdi:waypoint x="465.0" y="235.12678994130778"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-CFC436CE-76A6-4B8C-B204-E649C642104B" id="BPMNEdge_sid-CFC436CE-76A6-4B8C-B204-E649C642104B">
+        <omgdi:waypoint x="564.95" y="235.0"></omgdi:waypoint>
+        <omgdi:waypoint x="660.0" y="235.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-B19EA25D-1E07-4FBD-A0D5-B2CD0D89B25F" id="BPMNEdge_sid-B19EA25D-1E07-4FBD-A0D5-B2CD0D89B25F">
+        <omgdi:waypoint x="515.0" y="274.95000000000005"></omgdi:waypoint>
+        <omgdi:waypoint x="515.0" y="383.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-20A9D72B-4C74-45DD-A383-163EF498A4F0" id="BPMNEdge_sid-20A9D72B-4C74-45DD-A383-163EF498A4F0">
+        <omgdi:waypoint x="905.0" y="383.0"></omgdi:waypoint>
+        <omgdi:waypoint x="905.0" y="274.95000000000005"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-331B51FE-0859-4F5B-82A7-0B0E57E37AC1" id="BPMNEdge_sid-331B51FE-0859-4F5B-82A7-0B0E57E37AC1">
+        <omgdi:waypoint x="729.4415401804155" y="500.5"></omgdi:waypoint>
+        <omgdi:waypoint x="822.4000244140625" y="500.5"></omgdi:waypoint>
+        <omgdi:waypoint x="873.3692341149319" y="462.95000000000005"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-94F4B125-4763-4A9E-A364-4441F506C34A" id="BPMNEdge_sid-94F4B125-4763-4A9E-A364-4441F506C34A">
+        <omgdi:waypoint x="710.0" y="409.95000000000005"></omgdi:waypoint>
+        <omgdi:waypoint x="710.0" y="480.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-CD05402D-E128-49C2-8C89-C019C82EBC0E" id="BPMNEdge_sid-CD05402D-E128-49C2-8C89-C019C82EBC0E">
+        <omgdi:waypoint x="367.4706517771375" y="423.0"></omgdi:waypoint>
+        <omgdi:waypoint x="464.9999999998561" y="423.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-479B0EB9-124A-4C76-A5DA-DE82A27830C1" id="BPMNEdge_sid-479B0EB9-124A-4C76-A5DA-DE82A27830C1">
+        <omgdi:waypoint x="690.9946122630136" y="499.0"></omgdi:waypoint>
+        <omgdi:waypoint x="612.4000244140625" y="499.0"></omgdi:waypoint>
+        <omgdi:waypoint x="564.9499999999999" y="461.9753495734434"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

+ 9 - 0
ldt-core/src/test/resources/rules/test.drl

@@ -0,0 +1,9 @@
+package com.ldt
+import org.springblade.ldt.bills.entity.Bills;
+rule "book_discount_1"
+    when
+        $bills:Bills(cost < 100)
+    then
+        $bills.setPayStatus("付款成功");
+        System.out.println("成功匹配到规则一:支付状态:支付成功");
+end

BIN
ldt-core/src/test/resources/static/favicon.ico


+ 1 - 1
ldt-core/src/test/resources/templates/controller.java.vm

@@ -62,7 +62,7 @@ public class $!{table.controllerName} extends $!{superControllerClass} {
 public class $!{table.controllerName} {
 #end
 
-	private $!{table.serviceName} $!{table.entityPath}Service;
+	private final $!{table.serviceName} $!{table.entityPath}Service;
 
 #if($!{cfg.hasWrapper})
 	/**

+ 35 - 0
ldt-core/src/test/resources/wxConfig.properties

@@ -0,0 +1,35 @@
+#爱效科技
+#wx.appId = wx7e7a38f071b360e9
+#wx.appSecret = 4e862f91b48ac85a91380fa0991c9fda
+
+#guoxin
+#wx.appId = wx6dacff40877a1b1a
+#wx.appSecret = eac73798c4c509e43dc7cb475de82f4d
+
+#南粤药业
+#wx.appId = wx322e246549d7620d
+#wx.appSecret = 118059d75bc8c1a08162fc8a8cf5ac04
+
+# 音乐之声
+#wx.appId = wxf3f84c916a741cac
+#wx.appSecret = 8377629994436f17210500a11bbce6cc
+
+#联兑通客户端
+wx.client.appId = wx9ad53e8c83ae1a51
+wx.client.appSecret = 9b9b5eafad345f5664e5e373b8cae10a
+
+
+wx.shop.appId = wx2db9c41e85d5a4fc
+wx.shop.appSecret = 89a59cc73a3d77ac1e636ced0531cd08
+wx.shop.signPage = pages/webView/webView?url=%s
+wx.shop.authPage = pages/webView/webView?url=%s
+wx.shop.appName = 联兑通商家
+
+
+#联兑通大B端
+wx.mall.appId = wxdb5d1dcc471a46d4
+wx.mall.appSecret = aac0f305b9358fc03e19c3b3bb4e24e0
+
+wx.common.domain = https://ldt.guosen-fumao.cn/api/
+wx.common.businessUrls[0] = https://elecsign.yeepay.com/
+wx.common.businessUrls[1] = http://img.yeepay.com/

+ 1 - 6
ldt-risk/dependency-reduced-pom.xml

@@ -7,7 +7,7 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>ldt-risk</artifactId>
-  <name>Flink Quickstart Job</name>
+  <name>ldt-risk</name>
   <url>http://www.myorganization.org</url>
   <build>
     <pluginManagement>
@@ -176,10 +176,5 @@
       <scope>runtime</scope>
     </dependency>
   </dependencies>
-  <properties>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
-  </properties>
 </project>
 

+ 24 - 13
ldt-risk/pom.xml

@@ -28,14 +28,9 @@ under the License.
     <artifactId>ldt-risk</artifactId>
     <packaging>jar</packaging>
 
-    <name>Flink Quickstart Job</name>
+    <name>ldt-risk</name>
     <url>http://www.myorganization.org</url>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compiler.source>${java.version}</maven.compiler.source>
-        <maven.compiler.target>${java.version}</maven.compiler.target>
-    </properties>
 
     <repositories>
         <repository>
@@ -67,7 +62,21 @@ under the License.
             <scope>provided</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-clients_${scala.binary.version}</artifactId>
+            <version>${flink.version}</version>
+        </dependency>
+
+
+
         <!-- Add connector dependencies here. They must be in the default scope (compile). -->
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-connector-rabbitmq_${scala.binary.version}</artifactId>
+            <version>${flink.version}</version>
+        </dependency>
+
 
         <!-- Example:
 
@@ -92,16 +101,18 @@ under the License.
             <version>1.2.17</version>
             <scope>runtime</scope>
         </dependency>
+
+
+        <!-- Mongodb driver for Java -->
         <dependency>
-            <groupId>org.apache.flink</groupId>
-            <artifactId>flink-clients_${scala.binary.version}</artifactId>
-            <version>${flink.version}</version>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongo-java-driver</artifactId>
+            <version>${mongo.version}</version>
         </dependency>
-
         <dependency>
-            <groupId>org.apache.flink</groupId>
-            <artifactId>flink-connector-rabbitmq_${scala.binary.version}</artifactId>
-            <version>${flink.version}</version>
+            <groupId>org.mongodb</groupId>
+            <artifactId>bson</artifactId>
+            <version>${mongo.version}</version>
         </dependency>
     </dependencies>
 

+ 66 - 0
ldt-risk/src/main/java/org/springblade/BatchJob.java

@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springblade;
+
+import org.apache.flink.api.java.ExecutionEnvironment;
+
+/**
+ * Skeleton for a Flink Batch Job.
+ *
+ * <p>For a tutorial how to write a Flink batch application, check the
+ * tutorials and examples on the <a href="http://flink.apache.org/docs/stable/">Flink Website</a>.
+ *
+ * <p>To package your application into a JAR file for execution,
+ * change the main class in the POM.xml file to this class (simply search for 'mainClass')
+ * and run 'mvn clean package' on the command line.
+ */
+public class BatchJob {
+
+	public static void main(String[] args) throws Exception {
+		// set up the batch execution environment
+		final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+		/*
+		 * Here, you can start creating your execution plan for Flink.
+		 *
+		 * Start with getting some data from the environment, like
+		 * 	env.readTextFile(textPath);
+		 *
+		 * then, transform the resulting DataSet<String> using operations
+		 * like
+		 * 	.filter()
+		 * 	.flatMap()
+		 * 	.join()
+		 * 	.coGroup()
+		 *
+		 * and many more.
+		 * Have a look at the programming guide for the Java API:
+		 *
+		 * http://flink.apache.org/docs/latest/apis/batch/index.html
+		 *
+		 * and the examples
+		 *
+		 * http://flink.apache.org/docs/latest/apis/batch/examples.html
+		 *
+		 */
+
+		// execute program
+		env.execute("Flink Batch Java API Skeleton");
+	}
+}

+ 12 - 5
ldt-risk/src/main/java/org/springblade/StreamingJob.java

@@ -23,6 +23,9 @@ import org.apache.flink.streaming.api.datastream.DataStream;
 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
 import org.apache.flink.streaming.connectors.rabbitmq.RMQSource;
 import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.sink.MongoSink;
 
 /**
  * Skeleton for a Flink Streaming Job.
@@ -38,6 +41,9 @@ import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig
  */
 public class StreamingJob {
 
+	// 创建Logger对象
+	private static final Logger log = LoggerFactory.getLogger(StreamingJob.class);
+
 	public static void main(String[] args) throws Exception {
 		// set up the streaming execution environment
 		final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
@@ -62,12 +68,13 @@ public class StreamingJob {
 		 *
 		 */
 
+		// execute program
 		final RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()
 			.setHost("192.168.1.218")
-			.setVirtualHost("ldt")
+			.setPort(5672)
 			.setUserName("guest")
 			.setPassword("guest")
-			.setPort(5672)
+			.setVirtualHost("ldt")
 			.build();
 
 		final DataStream<String> stream = env
@@ -78,9 +85,9 @@ public class StreamingJob {
 				new SimpleStringSchema()))   // deserialization schema to turn messages into Java objects
 			.setParallelism(1);
 
-		stream.print("test");
-
-		// execute program
+		stream.addSink(new MongoSink());
+		stream.print("demo");
+		log.error("ceshi===========================================================================");
 		env.execute("Flink Streaming Java API Skeleton");
 	}
 }

+ 68 - 0
ldt-risk/src/main/java/org/springblade/sink/MongoSink.java

@@ -0,0 +1,68 @@
+package org.springblade.sink;
+
+import com.mongodb.MongoClient;
+import com.mongodb.MongoClientOptions;
+import com.mongodb.MongoCredential;
+import com.mongodb.ServerAddress;
+import com.mongodb.client.MongoDatabase;
+import org.apache.flink.configuration.Configuration;
+import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
+import org.bson.Document;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author: lianghanqiang
+ * @description: 自定义 sink for mongodb
+ * @since: 10/26/21 -- 11:12 AM
+ */
+public class MongoSink extends RichSinkFunction<String> {
+
+	private MongoClient mongoClient;
+	private MongoDatabase mongoDatabase;
+
+	/**
+	 * 链接mongo
+	 */
+	@Override
+	public void open(Configuration parameters) throws Exception {
+		if(Objects.isNull(mongoDatabase)){
+			//通过连接认证获取MongoDB连接
+			ServerAddress serverAddress = new ServerAddress("192.168.1.218",27017);
+			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
+			addrs.add(serverAddress);
+
+			//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
+			MongoCredential credential = MongoCredential.createScramSha1Credential("root", "ldt", "123456".toCharArray());
+			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
+			credentials.add(credential);
+
+			//通过连接认证获取MongoDB连接
+			this.mongoClient = new MongoClient(addrs,credentials);
+			this.mongoDatabase = mongoClient.getDatabase("ldt");
+		}
+		super.open(parameters);
+	}
+
+	/**
+	 * 将数据写入
+	 */
+	@Override
+	public void invoke(String value, Context context) throws Exception {
+		System.out.println(value);
+		Document document = new Document();
+		document.append("data","data");
+		this.mongoDatabase.getCollection("log").insertOne(document);
+	}
+
+	/**
+	 * 释放资源
+	 */
+	@Override
+	public void close() throws Exception {
+		this.mongoClient.close();
+		super.close();
+	}
+}

+ 3 - 1
pom.xml

@@ -18,11 +18,13 @@
         <bladex.project.version>2.8.2.RELEASE</bladex.project.version>
         <java.version>1.8</java.version>
         <flink.version>1.14.0</flink.version>
+        <mongo.version>3.12.10</mongo.version>
         <scala.binary.version>2.11</scala.binary.version>
         <maven.plugin.version>3.8.1</maven.plugin.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
         <flowable.version>6.4.2</flowable.version>
 
         <spring.boot.version>2.3.12.RELEASE</spring.boot.version>