diff --git a/xm-bootstrap/pom.xml b/xm-bootstrap/pom.xml
index 4e3d4262..39fd8f83 100644
--- a/xm-bootstrap/pom.xml
+++ b/xm-bootstrap/pom.xml
@@ -4,26 +4,21 @@
4.0.0
xm-bootstrap
jar
- xm-bootstrap 唛盟云-项目管理系统服务端启动器
+ xm-bootstrap 唛盟云-项目管理系统服务端单体应用启动器
com.xm
xm-backend
2.0.0-RELEASE
-
- com.xm
- xm-core
-
com.mdp
- mdp-oauth2-client-cloud
+ mdp-boot-starter
${mdp.version}
- com.mdp
- mdp-cloud-starter
- ${mdp.version}
+ com.xm
+ xm-core
diff --git a/xm-bootstrap/src/main/java/com/XmApplication.java b/xm-bootstrap/src/main/java/com/XmApplication.java
index 410f5e25..fe8eb5ff 100644
--- a/xm-bootstrap/src/main/java/com/XmApplication.java
+++ b/xm-bootstrap/src/main/java/com/XmApplication.java
@@ -1,10 +1,8 @@
package com;
import org.springframework.boot.SpringApplication;
-import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
-@SpringCloudApplication
@EnableRedisHttpSession
public class XmApplication {
diff --git a/xm-bootstrap/src/main/resources/application-prod.yml b/xm-bootstrap/src/main/resources/application-prod.yml
index 1d84a84a..4700b290 100644
--- a/xm-bootstrap/src/main/resources/application-prod.yml
+++ b/xm-bootstrap/src/main/resources/application-prod.yml
@@ -268,10 +268,25 @@ logging:
# mdp平台授权验证服务器访问地址 cloud环境下换成 http://gate,本地调试如果不起验证服务器,可改为 https://www.qingqinkj.com/api/m1/oauth2/oauth2
# 客户端必须在数据库表adm.oauth_client_details中配置,否则无法访问
mdp:
- api-gate: http://gate
+ #cloud环境下换成 http://gate,如果是本地运行,填写服务器的gate的微服务的ip地址及端口即可;如果不需要调第三方接口,无须填写
+ api-gate: http://127.0.0.1:7014
+ #平台管理机构号
platform-branch-id: platform-branch-001
- # 站点语言类型cn\en等
+ #配置图片文件上传下载的相关参数
+ arc:
+ #图片上传存放的根目录
+ image-upload-root-path: D:/arcfile/images
+ #图片下载、预览的url前缀
+ image-download-base-uri: https://127.0.1:7014/
+ #文件上传存放的根目录
+ file-upload-root-path: D:/arcfile/files
+ #文件下载、预览的url前缀
+ file-download-base-uri: https://127.0.1:7014/
+ # 站点语言类型中文站点cn、英文站点en等
site-type: cn
+ jwt:
+ # 如果不对接oauth2授权中心,jwt将由本地系统自行分发自行验证 设为false
+ connect-oauth2-server: false
oauth2:
server:
uri: http://oauth2server
diff --git a/xm-cloud-bootstrap/README.md b/xm-cloud-bootstrap/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/xm-cloud-bootstrap/pom.xml b/xm-cloud-bootstrap/pom.xml
new file mode 100644
index 00000000..aa12d8b4
--- /dev/null
+++ b/xm-cloud-bootstrap/pom.xml
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+ xm-bootstrap
+ jar
+ xm-bootstrap 唛盟云-项目管理系统服务端cloud启动器
+
+ com.xm
+ xm-backend
+ 2.0.0-RELEASE
+
+
+
+ com.xm
+ xm-core
+
+
+ com.mdp
+ mdp-oauth2-client-cloud
+ ${mdp.version}
+
+
+ com.mdp
+ mdp-cloud-starter
+ ${mdp.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+ 唛盟云-项目管理系统微服务启动器
+
\ No newline at end of file
diff --git a/xm-cloud-bootstrap/src/main/java/com/AutoConfig.java b/xm-cloud-bootstrap/src/main/java/com/AutoConfig.java
new file mode 100644
index 00000000..eb3c3b90
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/java/com/AutoConfig.java
@@ -0,0 +1,15 @@
+package com;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+
+/**
+ * 要使用mdp平台功能,必须 扫码com.mdp包
+ * 一些默认公共配置
+ */
+@ComponentScan(basePackages={"com.mdp"})
+@Configuration
+public class AutoConfig {
+}
diff --git a/xm-cloud-bootstrap/src/main/java/com/SwaggerConfig.java b/xm-cloud-bootstrap/src/main/java/com/SwaggerConfig.java
new file mode 100644
index 00000000..565943e3
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/java/com/SwaggerConfig.java
@@ -0,0 +1,100 @@
+package com;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * api 文档,
+ * 生产环境需要禁止访问,每个项目需要单独引入swagger包,不能继承
+ * 如果要mdp swagger enhance生效,必须 把启动文件置于com.mdp的上层或者顶层目录下,否则加载不到升级文件
+ * mdp swagger enhance主要解决的是接收参数是map的时候的文档输出问题。参考 https://blog.csdn.net/x11819130/article/details/111608470
+ * 需要将下面路径放到 WebSecurityConfig 中
+ *
+ * "/swagger-ui.html",
+ * "/webjars/**",
+ * "/swagger-ui/**",
+ * "/swagger-resources/**",
+ * "/v2/*",
+ * "/csrf",
+ * "/"
+ */
+
+//@ConditionalOnProperty(havingValue = "dev",name = {"spring.profiles.active"})
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+ @Value(value = "${spring.application.name:}")
+ String applicationName="";
+
+ @Value(value = "${spring.application.name:}")
+ String springProfilesActive="";
+
+ @Value(value = "${server.port:}")
+ String serverPort="";
+
+ @Value(value = "${swagger2.enable:true}")
+ boolean enableSwagger2;
+
+ @Bean
+ public Docket customDocket() {
+ ParameterBuilder tokenPar= new ParameterBuilder();
+ List pars=new ArrayList<>();
+ tokenPar.name("Authorization").description("令牌 格式:【bearer 令牌值】,注意bearer后根一个空格。").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
+ pars.add(tokenPar.build());
+ tokenPar.name("accessToken").description("令牌,直接填写令牌值").modelRef(new ModelRef("string")).parameterType("query").required(false).build();
+ pars.add(tokenPar.build());
+ Docket docket= new Docket(DocumentationType.SWAGGER_2).select().
+ apis(RequestHandlerSelectors.any())
+ .build().globalOperationParameters(pars)
+ .apiInfo(apiInfo()).enable(enableSwagger2);
+
+ /*
+ * 下面的语句是开启对JWT的支持,当用户用Swagger调用受JWT认证保护的方法,
+ * 必须要先提交参数(例如令牌)
+ */
+ //存储用户必须提交的参数
+ List apikey = new ArrayList();
+ //规定用户需要输入什么参数
+ apikey.add(new ApiKey("accesToken", "accesToken", "accesToken"));
+ docket.securitySchemes(apikey);
+
+ //以下定义如果用户JWT认证通过,则在Swagger中全局有效
+ AuthorizationScope scope = new AuthorizationScope("global", "accessEverything");
+ AuthorizationScope[] scopeArray = {scope};
+ //存储令牌和作用域
+ SecurityReference reference = new SecurityReference("token", scopeArray);
+ List refList = new ArrayList();
+ refList.add(reference);
+ SecurityContext context = SecurityContext.builder().securityReferences(refList).build();
+ List cxtList = new ArrayList();
+ cxtList.add(context);
+ docket.securityContexts(cxtList);
+ return docket;
+ }
+
+
+ private ApiInfo apiInfo() {
+ Contact contact = new Contact("广州擎勤网络科技有限公司", String.format("https://www.qingqinkj.com/api/m1/%s/swagger-ui.html",applicationName), "cyc58469@163.com");
+ return new ApiInfoBuilder()
+ .title("唛盟接口")
+ .description(String.format("接口文档 本地访问地址 http://localhost:%s/swagger-ui.html",serverPort))
+ .contact(contact)
+ .version("1.0.0")
+ .build();
+ }
+
+
+}
diff --git a/xm-cloud-bootstrap/src/main/java/com/WebSecurityConfig.java b/xm-cloud-bootstrap/src/main/java/com/WebSecurityConfig.java
new file mode 100644
index 00000000..a64fb0b1
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/java/com/WebSecurityConfig.java
@@ -0,0 +1,66 @@
+package com;
+
+import com.mdp.safe.client.jwt.JwtAuthenticationConverter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.builders.WebSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.oauth2.jwt.JwtDecoder;
+
+/**
+ * com.qqkj.WebSecurityConfig
+ *
+ * @author chenyc
+ * @date 2019/10/10
+ */
+@EnableWebSecurity
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+
+
+ @Autowired
+ JwtAuthenticationConverter jwtConverter;
+
+
+ @Autowired
+ JwtDecoder jwtDecoder;
+
+ @Override
+ public void configure(WebSecurity web) throws Exception {
+ web.ignoring().antMatchers("/webjars/**");
+ }
+
+ /**
+ * 允许匿名访问所有接口 主要是 oauth 接口
+ * @param http
+ * @throws Exception
+ */
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http.authorizeRequests().antMatchers(
+ "/**/xm/core/xmTask/shareTaskDetail",
+ "/**/xm/core/xmTask/getOutTask",
+ "/**/xm/core/xmTask/upBrowseTimes",
+ "/**/xm/core/xmBranchState/list/portal/allBranchSum",
+ "/**/xm/core/xmProjectState/list/portal",
+ "/**/core/xmRecordVisit/add",
+
+ "/swagger-ui.html",
+ "/webjars/**",
+ "/swagger-ui/**",
+ "/swagger-resources/**",
+ "/v2/*",
+ "/csrf",
+ "/"
+
+ ).permitAll().
+
+ anyRequest().authenticated();
+ http.oauth2Client().and().logout().disable();
+ http.formLogin().usernameParameter("userloginid");
+ http.oauth2Login();
+ http.oauth2ResourceServer().jwt().decoder(jwtDecoder).jwtAuthenticationConverter(jwtConverter);
+ http.csrf().disable();
+ }
+
+}
diff --git a/xm-cloud-bootstrap/src/main/java/com/XmApplication.java b/xm-cloud-bootstrap/src/main/java/com/XmApplication.java
new file mode 100644
index 00000000..410f5e25
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/java/com/XmApplication.java
@@ -0,0 +1,17 @@
+package com;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.cloud.client.SpringCloudApplication;
+import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
+
+@SpringCloudApplication
+@EnableRedisHttpSession
+public class XmApplication {
+
+
+ public static void main(String[] args) {
+ SpringApplication.run(XmApplication.class,args);
+
+ }
+
+}
diff --git a/xm-cloud-bootstrap/src/main/resources/application-prod.yml b/xm-cloud-bootstrap/src/main/resources/application-prod.yml
new file mode 100644
index 00000000..1d84a84a
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/resources/application-prod.yml
@@ -0,0 +1,278 @@
+server:
+ port: 7067
+ servlet:
+ context-path:
+ session:
+ timeout: 43200
+ storeType: none
+ tomcat:
+ max-swallow-size: -1
+ util:
+ http:
+ parser:
+ HttpParser: requestTargetAllow=|{}[]
+ error:
+ include-exception: true
+ include-stacktrace: ALWAYS
+ include-message: ALWAYS
+ compression:
+ enabled: true
+ min-response-size: 1024
+ mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
+
+management:
+ endpoints:
+ web:
+ exposure:
+ include: metrics,httptrace
+
+spring:
+ cloud:
+ consul:
+ host: 134.175.57.249
+ port: 8500
+ inetutils:
+ preferredNetworks[0]: ^10\.
+ preferredNetworks[1]: ^172\.
+ discovery:
+ prefer-ip-address: true
+ healthCheckInterval: 15s
+ servlet:
+ multipart:
+ max-file-size: 10MB
+ max-request-size: 10MB
+ # 安全模块
+ security:
+ oauth2:
+ resourceserver:
+ jwt:
+ jwk-set-uri: ${mdp.oauth2.server.uri}/oauth2/jwks
+ client:
+ # 下面配置 password 模式
+ registration:
+ password-client:
+ provider: def-oauth-server
+ client-id: ${spring.application.name}
+ client-secret: ${spring.application.name}-8888
+ authorization-grant-type: password
+ scope: all
+ # 下面配置 client_credentials 模式
+ def-client:
+ provider: def-oauth-server
+ client-id: ${spring.application.name}
+ client-secret: ${spring.application.name}-8888
+ authorization-grant-type: client_credentials
+ scope: all
+ # 下面配置authorization_code模式
+ code-client:
+ provider: def-oauth-server
+ client-id: ${spring.application.name}
+ client-secret: ${spring.application.name}-8888
+ authorization-grant-type: authorization_code
+ # 授权码模式下需要配置重定向地址
+ redirect-uri: ${messages.base-uri}/authorized
+ scope: all
+ provider:
+ def-oauth-server:
+ # 授权码方式获取code
+ authorization-uri: ${mdp.oauth2.server.uri}/oauth2/authorize
+ # 获取token接口
+ token-uri: ${mdp.oauth2.server.uri}/oauth2/token
+ mail:
+ host: smtp.mxhichina.com
+ port: 25
+ username: kf@qingqinkj.com
+ password: QqKj@169$458
+ default-encoding: UTF-8
+ properties:
+ mail:
+ smtp:
+ auth: true
+ starttls:
+ enable: true
+ required: true
+ socketFactoryClass: javax.net.ssl.SSLSocketFactory
+ debug: true
+ jackson:
+ mapper:
+ default-view-inclusion: false
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ serialization:
+ indent_output: true
+ fail_on_empty_beans: false
+ deserialization:
+ fail_on_unknown_properties: false
+ parser:
+ allow_unquoted_control_chars: true
+ allow_single_quotes: true
+
+ mvc:
+ date-format: yyyy-MM-dd HH:mm:ss
+ ## quartz定时任务,采用数据库方式
+ quartz:
+ job-store-type: jdbc
+ initialize-schema: embedded
+ #定时任务启动开关,true-开 false-关
+ auto-startup: false
+ #启动时更新己存在的Job
+ overwrite-existing-jobs: false
+ properties:
+ org:
+ quartz:
+ scheduler:
+ instanceName: MyScheduler
+ instanceId: AUTO
+ jobStore:
+ class: org.quartz.impl.jdbcjobstore.JobStoreTX
+ driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+ tablePrefix: QRTZ_
+ isClustered: true
+ misfireThreshold: 60000
+ clusterCheckinInterval: 10000
+ threadPool:
+ class: org.quartz.simpl.SimpleThreadPool
+ threadCount: 10
+ threadPriority: 5
+ threadsInheritContextClassLoaderOfInitializingThread: true
+ jpa:
+ open-in-view: false
+ activiti:
+ check-process-definitions: false
+ #启用作业执行器
+ async-executor-activate: false
+ #启用异步执行器
+ job-executor-activate: false
+ aop:
+ proxy-target-class: true
+ #配置freemarker
+ freemarker:
+ # 设置模板后缀名
+ suffix: .ftl
+ # 设置文档类型
+ content-type: text/html
+ # 设置页面编码格式
+ charset: UTF-8
+ # 设置页面缓存
+ cache: false
+ prefer-file-system-access: false
+ # 设置ftl文件路径
+ template-loader-path:
+ - classpath:/templates
+ resource:
+ static-locations: classpath:/static/,classpath:/public/
+ autoconfigure:
+ exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ datasource:
+ primary: master
+ strict: false,
+ druid:
+ stat-view-servlet:
+ enabled: true
+ loginUsername: root
+ loginPassword: 123456
+ allow:
+ web-stat-filter:
+ enabled: true
+ dynamic:
+ druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
+ # 连接池的配置信息
+ # 初始化大小,最小,最大
+ initial-size: 5
+ min-idle: 5
+ maxActive: 20
+ # 配置获取连接等待超时的时间
+ maxWait: 60000
+ # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ timeBetweenEvictionRunsMillis: 60000
+ # 配置一个连接在池中最小生存的时间,单位是毫秒
+ minEvictableIdleTimeMillis: 300000
+ validationQuery: SELECT 1
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ # 打开PSCache,并且指定每个连接上PSCache的大小
+ poolPreparedStatements: true
+ maxPoolPreparedStatementPerConnectionSize: 20
+ # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+ filters: stat,wall,slf4j
+ # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+ connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+ datasource:
+ master:
+ # url: jdbc:mysql://124.223.85.6:31605/xm?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+ #username: zchcgl
+ #password: zchcgl123!@#
+ #driver-class-name: com.mysql.cj.jdbc.Driver
+
+ url: jdbc:mysql://123.207.117.5:3306/xm?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=CTT
+ username: root
+ password: 1qaz@WSX
+ driver-class-name: com.mysql.cj.jdbc.Driver
+
+
+ # 多数据源配置
+ #multi-datasource1:
+ #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
+ #username: root
+ #password: root
+ #driver-class-name: com.mysql.cj.jdbc.Driver
+ mem-ds:
+ url: jdbc:mysql://123.207.117.5:3306/adm?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=CTT
+ username: root
+ password: 1qaz@WSX
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ mall-ds:
+ url: jdbc:mysql://123.207.117.5:3306/adm?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=CTT
+ username: root
+ password: 1qaz@WSX
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ #redis 配置
+ redis:
+ database: 0
+ host: 134.175.57.249
+ timeout: 300s
+ lettuce:
+ pool:
+ max-active: 8 #最大连接数据库连接数,设 -1 为没有限制
+ max-idle: 20 #最大等待连接中的数量,设 0 为没有限制
+ max-wait: 10000 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
+ min-idle: 8 #最小等待连接中的数量,设 0 为没有限制
+ shutdown-timeout: 100ms
+ password: QqKj*123
+ port: 6379
+#mybatis plus 设置
+mybatis-plus:
+ mapper-locations: classpath*:/**/**Mapper.xml
+ global-config:
+ # 关闭MP3.0自带的banner
+ banner: false
+ db-config:
+ #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
+ id-type: ASSIGN_ID
+ # 默认数据库表下划线命名
+ table-underline: true
+ logic-delete-value: 1
+ logic-not-delete-value: 0
+ configuration:
+ # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ # 返回类型为Map,显示null对应的字段
+ call-setters-on-nulls: true
+
+#Mybatis输出sql日志
+logging:
+ level:
+ org.jeecg.modules.system.mapper : info
+
+# mdp平台授权验证服务器访问地址 cloud环境下换成 http://gate,本地调试如果不起验证服务器,可改为 https://www.qingqinkj.com/api/m1/oauth2/oauth2
+# 客户端必须在数据库表adm.oauth_client_details中配置,否则无法访问
+mdp:
+ api-gate: http://gate
+ platform-branch-id: platform-branch-001
+ # 站点语言类型cn\en等
+ site-type: cn
+ oauth2:
+ server:
+ uri: http://oauth2server
+
diff --git a/xm-cloud-bootstrap/src/main/resources/application.yml b/xm-cloud-bootstrap/src/main/resources/application.yml
new file mode 100644
index 00000000..f747d326
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/resources/application.yml
@@ -0,0 +1,5 @@
+spring:
+ application:
+ name: xm
+ profiles:
+ active: prod
\ No newline at end of file
diff --git a/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.engine.sql b/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.engine.sql
new file mode 100644
index 00000000..664b7f35
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.engine.sql
@@ -0,0 +1,510 @@
+create table ACT_GE_PROPERTY (
+ NAME_ NVARCHAR2(64),
+ VALUE_ NVARCHAR2(300),
+ REV_ INTEGER,
+ primary key (NAME_)
+);
+
+insert into ACT_GE_PROPERTY
+values ('schema.version', '6.0.0.4', 1);
+
+insert into ACT_GE_PROPERTY
+values ('schema.history', 'create(6.0.0.4)', 1);
+
+insert into ACT_GE_PROPERTY
+values ('next.dbid', '1', 1);
+
+create table ACT_GE_BYTEARRAY (
+ ID_ NVARCHAR2(64),
+ REV_ INTEGER,
+ NAME_ NVARCHAR2(255),
+ DEPLOYMENT_ID_ NVARCHAR2(64),
+ BYTES_ BLOB,
+ GENERATED_ NUMBER(1,0) CHECK (GENERATED_ IN (1,0)),
+ primary key (ID_)
+);
+
+create table ACT_RE_DEPLOYMENT (
+ ID_ NVARCHAR2(64),
+ NAME_ NVARCHAR2(255),
+ CATEGORY_ NVARCHAR2(255),
+ KEY_ NVARCHAR2(255),
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ DEPLOY_TIME_ TIMESTAMP(6),
+ ENGINE_VERSION_ NVARCHAR2(255),
+ primary key (ID_)
+);
+
+create table ACT_RE_MODEL (
+ ID_ NVARCHAR2(64) not null,
+ REV_ INTEGER,
+ NAME_ NVARCHAR2(255),
+ KEY_ NVARCHAR2(255),
+ CATEGORY_ NVARCHAR2(255),
+ CREATE_TIME_ TIMESTAMP(6),
+ LAST_UPDATE_TIME_ TIMESTAMP(6),
+ VERSION_ INTEGER,
+ META_INFO_ NVARCHAR2(2000),
+ DEPLOYMENT_ID_ NVARCHAR2(64),
+ EDITOR_SOURCE_VALUE_ID_ NVARCHAR2(64),
+ EDITOR_SOURCE_EXTRA_VALUE_ID_ NVARCHAR2(64),
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ primary key (ID_)
+);
+
+create table ACT_RU_EXECUTION (
+ ID_ NVARCHAR2(64),
+ REV_ INTEGER,
+ PROC_INST_ID_ NVARCHAR2(64),
+ BUSINESS_KEY_ NVARCHAR2(255),
+ PARENT_ID_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ SUPER_EXEC_ NVARCHAR2(64),
+ ROOT_PROC_INST_ID_ NVARCHAR2(64),
+ ACT_ID_ NVARCHAR2(255),
+ IS_ACTIVE_ NUMBER(1,0) CHECK (IS_ACTIVE_ IN (1,0)),
+ IS_CONCURRENT_ NUMBER(1,0) CHECK (IS_CONCURRENT_ IN (1,0)),
+ IS_SCOPE_ NUMBER(1,0) CHECK (IS_SCOPE_ IN (1,0)),
+ IS_EVENT_SCOPE_ NUMBER(1,0) CHECK (IS_EVENT_SCOPE_ IN (1,0)),
+ IS_MI_ROOT_ NUMBER(1,0) CHECK (IS_MI_ROOT_ IN (1,0)),
+ SUSPENSION_STATE_ INTEGER,
+ CACHED_ENT_STATE_ INTEGER,
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ NAME_ NVARCHAR2(255),
+ START_TIME_ TIMESTAMP(6),
+ START_USER_ID_ NVARCHAR2(255),
+ LOCK_TIME_ TIMESTAMP(6),
+ IS_COUNT_ENABLED_ NUMBER(1,0) CHECK (IS_COUNT_ENABLED_ IN (1,0)),
+ EVT_SUBSCR_COUNT_ INTEGER,
+ TASK_COUNT_ INTEGER,
+ JOB_COUNT_ INTEGER,
+ TIMER_JOB_COUNT_ INTEGER,
+ SUSP_JOB_COUNT_ INTEGER,
+ DEADLETTER_JOB_COUNT_ INTEGER,
+ VAR_COUNT_ INTEGER,
+ ID_LINK_COUNT_ INTEGER,
+ primary key (ID_)
+);
+
+create table ACT_RU_JOB (
+ ID_ NVARCHAR2(64) NOT NULL,
+ REV_ INTEGER,
+ TYPE_ NVARCHAR2(255) NOT NULL,
+ LOCK_EXP_TIME_ TIMESTAMP(6),
+ LOCK_OWNER_ NVARCHAR2(255),
+ EXCLUSIVE_ NUMBER(1,0) CHECK (EXCLUSIVE_ IN (1,0)),
+ EXECUTION_ID_ NVARCHAR2(64),
+ PROCESS_INSTANCE_ID_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ RETRIES_ INTEGER,
+ EXCEPTION_STACK_ID_ NVARCHAR2(64),
+ EXCEPTION_MSG_ NVARCHAR2(2000),
+ DUEDATE_ TIMESTAMP(6),
+ REPEAT_ NVARCHAR2(255),
+ HANDLER_TYPE_ NVARCHAR2(255),
+ HANDLER_CFG_ NVARCHAR2(2000),
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ primary key (ID_)
+);
+
+create table ACT_RU_TIMER_JOB (
+ ID_ NVARCHAR2(64) NOT NULL,
+ REV_ INTEGER,
+ TYPE_ NVARCHAR2(255) NOT NULL,
+ LOCK_EXP_TIME_ TIMESTAMP(6),
+ LOCK_OWNER_ NVARCHAR2(255),
+ EXCLUSIVE_ NUMBER(1,0) CHECK (EXCLUSIVE_ IN (1,0)),
+ EXECUTION_ID_ NVARCHAR2(64),
+ PROCESS_INSTANCE_ID_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ RETRIES_ INTEGER,
+ EXCEPTION_STACK_ID_ NVARCHAR2(64),
+ EXCEPTION_MSG_ NVARCHAR2(2000),
+ DUEDATE_ TIMESTAMP(6),
+ REPEAT_ NVARCHAR2(255),
+ HANDLER_TYPE_ NVARCHAR2(255),
+ HANDLER_CFG_ NVARCHAR2(2000),
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ primary key (ID_)
+);
+
+create table ACT_RU_SUSPENDED_JOB (
+ ID_ NVARCHAR2(64) NOT NULL,
+ REV_ INTEGER,
+ TYPE_ NVARCHAR2(255) NOT NULL,
+ EXCLUSIVE_ NUMBER(1,0) CHECK (EXCLUSIVE_ IN (1,0)),
+ EXECUTION_ID_ NVARCHAR2(64),
+ PROCESS_INSTANCE_ID_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ RETRIES_ INTEGER,
+ EXCEPTION_STACK_ID_ NVARCHAR2(64),
+ EXCEPTION_MSG_ NVARCHAR2(2000),
+ DUEDATE_ TIMESTAMP(6),
+ REPEAT_ NVARCHAR2(255),
+ HANDLER_TYPE_ NVARCHAR2(255),
+ HANDLER_CFG_ NVARCHAR2(2000),
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ primary key (ID_)
+);
+
+create table ACT_RU_DEADLETTER_JOB (
+ ID_ NVARCHAR2(64) NOT NULL,
+ REV_ INTEGER,
+ TYPE_ NVARCHAR2(255) NOT NULL,
+ EXCLUSIVE_ NUMBER(1,0) CHECK (EXCLUSIVE_ IN (1,0)),
+ EXECUTION_ID_ NVARCHAR2(64),
+ PROCESS_INSTANCE_ID_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ EXCEPTION_STACK_ID_ NVARCHAR2(64),
+ EXCEPTION_MSG_ NVARCHAR2(2000),
+ DUEDATE_ TIMESTAMP(6),
+ REPEAT_ NVARCHAR2(255),
+ HANDLER_TYPE_ NVARCHAR2(255),
+ HANDLER_CFG_ NVARCHAR2(2000),
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ primary key (ID_)
+);
+
+create table ACT_RE_PROCDEF (
+ ID_ NVARCHAR2(64) NOT NULL,
+ REV_ INTEGER,
+ CATEGORY_ NVARCHAR2(255),
+ NAME_ NVARCHAR2(255),
+ KEY_ NVARCHAR2(255) NOT NULL,
+ VERSION_ INTEGER NOT NULL,
+ DEPLOYMENT_ID_ NVARCHAR2(64),
+ RESOURCE_NAME_ NVARCHAR2(2000),
+ DGRM_RESOURCE_NAME_ varchar(4000),
+ DESCRIPTION_ NVARCHAR2(2000),
+ HAS_START_FORM_KEY_ NUMBER(1,0) CHECK (HAS_START_FORM_KEY_ IN (1,0)),
+ HAS_GRAPHICAL_NOTATION_ NUMBER(1,0) CHECK (HAS_GRAPHICAL_NOTATION_ IN (1,0)),
+ SUSPENSION_STATE_ INTEGER,
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ ENGINE_VERSION_ NVARCHAR2(255),
+ primary key (ID_)
+);
+
+create table ACT_RU_TASK (
+ ID_ NVARCHAR2(64),
+ REV_ INTEGER,
+ EXECUTION_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ NAME_ NVARCHAR2(255),
+ PARENT_TASK_ID_ NVARCHAR2(64),
+ DESCRIPTION_ NVARCHAR2(2000),
+ TASK_DEF_KEY_ NVARCHAR2(255),
+ OWNER_ NVARCHAR2(255),
+ ASSIGNEE_ NVARCHAR2(255),
+ DELEGATION_ NVARCHAR2(64),
+ PRIORITY_ INTEGER,
+ CREATE_TIME_ TIMESTAMP(6),
+ DUE_DATE_ TIMESTAMP(6),
+ CATEGORY_ NVARCHAR2(255),
+ SUSPENSION_STATE_ INTEGER,
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ FORM_KEY_ NVARCHAR2(255),
+ CLAIM_TIME_ TIMESTAMP(6),
+ primary key (ID_)
+);
+
+create table ACT_RU_IDENTITYLINK (
+ ID_ NVARCHAR2(64),
+ REV_ INTEGER,
+ GROUP_ID_ NVARCHAR2(255),
+ TYPE_ NVARCHAR2(255),
+ USER_ID_ NVARCHAR2(255),
+ TASK_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ primary key (ID_)
+);
+
+create table ACT_RU_VARIABLE (
+ ID_ NVARCHAR2(64) not null,
+ REV_ INTEGER,
+ TYPE_ NVARCHAR2(255) not null,
+ NAME_ NVARCHAR2(255) not null,
+ EXECUTION_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ TASK_ID_ NVARCHAR2(64),
+ BYTEARRAY_ID_ NVARCHAR2(64),
+ DOUBLE_ NUMBER(*,10),
+ LONG_ NUMBER(19,0),
+ TEXT_ NVARCHAR2(2000),
+ TEXT2_ NVARCHAR2(2000),
+ primary key (ID_)
+);
+
+create table ACT_RU_EVENT_SUBSCR (
+ ID_ NVARCHAR2(64) not null,
+ REV_ integer,
+ EVENT_TYPE_ NVARCHAR2(255) not null,
+ EVENT_NAME_ NVARCHAR2(255),
+ EXECUTION_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ ACTIVITY_ID_ NVARCHAR2(64),
+ CONFIGURATION_ NVARCHAR2(255),
+ CREATED_ TIMESTAMP(6) not null,
+ PROC_DEF_ID_ NVARCHAR2(64),
+ TENANT_ID_ NVARCHAR2(255) DEFAULT '',
+ primary key (ID_)
+);
+
+create table ACT_EVT_LOG (
+ LOG_NR_ NUMBER(19),
+ TYPE_ NVARCHAR2(64),
+ PROC_DEF_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ EXECUTION_ID_ NVARCHAR2(64),
+ TASK_ID_ NVARCHAR2(64),
+ TIME_STAMP_ TIMESTAMP(6) not null,
+ USER_ID_ NVARCHAR2(255),
+ DATA_ BLOB,
+ LOCK_OWNER_ NVARCHAR2(255),
+ LOCK_TIME_ TIMESTAMP(6) null,
+ IS_PROCESSED_ NUMBER(3) default 0,
+ primary key (LOG_NR_)
+);
+
+create sequence act_evt_log_seq;
+
+create table ACT_PROCDEF_INFO (
+ ID_ NVARCHAR2(64) not null,
+ PROC_DEF_ID_ NVARCHAR2(64) not null,
+ REV_ integer,
+ INFO_JSON_ID_ NVARCHAR2(64),
+ primary key (ID_)
+);
+
+create index ACT_IDX_EXEC_BUSKEY on ACT_RU_EXECUTION(BUSINESS_KEY_);
+create index ACT_IDX_EXEC_ROOT on ACT_RU_EXECUTION(ROOT_PROC_INST_ID_);
+create index ACT_IDX_TASK_CREATE on ACT_RU_TASK(CREATE_TIME_);
+create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK(GROUP_ID_);
+create index ACT_IDX_EVENT_SUBSCR_CONFIG_ on ACT_RU_EVENT_SUBSCR(CONFIGURATION_);
+create index ACT_IDX_VARIABLE_TASK_ID on ACT_RU_VARIABLE(TASK_ID_);
+
+create index ACT_IDX_BYTEAR_DEPL on ACT_GE_BYTEARRAY(DEPLOYMENT_ID_);
+alter table ACT_GE_BYTEARRAY
+ add constraint ACT_FK_BYTEARR_DEPL
+ foreign key (DEPLOYMENT_ID_)
+ references ACT_RE_DEPLOYMENT (ID_);
+
+alter table ACT_RE_PROCDEF
+ add constraint ACT_UNIQ_PROCDEF
+ unique (KEY_,VERSION_, TENANT_ID_);
+
+create index ACT_IDX_EXE_PROCINST on ACT_RU_EXECUTION(PROC_INST_ID_);
+alter table ACT_RU_EXECUTION
+ add constraint ACT_FK_EXE_PROCINST
+ foreign key (PROC_INST_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_EXE_PARENT on ACT_RU_EXECUTION(PARENT_ID_);
+alter table ACT_RU_EXECUTION
+ add constraint ACT_FK_EXE_PARENT
+ foreign key (PARENT_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_EXE_SUPER on ACT_RU_EXECUTION(SUPER_EXEC_);
+alter table ACT_RU_EXECUTION
+ add constraint ACT_FK_EXE_SUPER
+ foreign key (SUPER_EXEC_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_EXE_PROCDEF on ACT_RU_EXECUTION(PROC_DEF_ID_);
+alter table ACT_RU_EXECUTION
+ add constraint ACT_FK_EXE_PROCDEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+create index ACT_IDX_TSKASS_TASK on ACT_RU_IDENTITYLINK(TASK_ID_);
+alter table ACT_RU_IDENTITYLINK
+ add constraint ACT_FK_TSKASS_TASK
+ foreign key (TASK_ID_)
+ references ACT_RU_TASK (ID_);
+
+create index ACT_IDX_ATHRZ_PROCEDEF on ACT_RU_IDENTITYLINK(PROC_DEF_ID_);
+alter table ACT_RU_IDENTITYLINK
+ add constraint ACT_FK_ATHRZ_PROCEDEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+create index ACT_IDX_IDL_PROCINST on ACT_RU_IDENTITYLINK(PROC_INST_ID_);
+alter table ACT_RU_IDENTITYLINK
+ add constraint ACT_FK_IDL_PROCINST
+ foreign key (PROC_INST_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_TASK_EXEC on ACT_RU_TASK(EXECUTION_ID_);
+alter table ACT_RU_TASK
+ add constraint ACT_FK_TASK_EXE
+ foreign key (EXECUTION_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_TASK_PROCINST on ACT_RU_TASK(PROC_INST_ID_);
+alter table ACT_RU_TASK
+ add constraint ACT_FK_TASK_PROCINST
+ foreign key (PROC_INST_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_TASK_PROCDEF on ACT_RU_TASK(PROC_DEF_ID_);
+alter table ACT_RU_TASK
+ add constraint ACT_FK_TASK_PROCDEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+create index ACT_IDX_VAR_EXE on ACT_RU_VARIABLE(EXECUTION_ID_);
+alter table ACT_RU_VARIABLE
+ add constraint ACT_FK_VAR_EXE
+ foreign key (EXECUTION_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_VAR_PROCINST on ACT_RU_VARIABLE(PROC_INST_ID_);
+alter table ACT_RU_VARIABLE
+ add constraint ACT_FK_VAR_PROCINST
+ foreign key (PROC_INST_ID_)
+ references ACT_RU_EXECUTION(ID_);
+
+create index ACT_IDX_VAR_BYTEARRAY on ACT_RU_VARIABLE(BYTEARRAY_ID_);
+alter table ACT_RU_VARIABLE
+ add constraint ACT_FK_VAR_BYTEARRAY
+ foreign key (BYTEARRAY_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_JOB_EXECUTION_ID on ACT_RU_JOB(EXECUTION_ID_);
+alter table ACT_RU_JOB
+ add constraint ACT_FK_JOB_EXECUTION
+ foreign key (EXECUTION_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_JOB_PROC_INST_ID on ACT_RU_JOB(PROCESS_INSTANCE_ID_);
+alter table ACT_RU_JOB
+ add constraint ACT_FK_JOB_PROCESS_INSTANCE
+ foreign key (PROCESS_INSTANCE_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_JOB_PROC_DEF_ID on ACT_RU_JOB(PROC_DEF_ID_);
+alter table ACT_RU_JOB
+ add constraint ACT_FK_JOB_PROC_DEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+create index ACT_IDX_JOB_EXCEPTION on ACT_RU_JOB(EXCEPTION_STACK_ID_);
+alter table ACT_RU_JOB
+ add constraint ACT_FK_JOB_EXCEPTION
+ foreign key (EXCEPTION_STACK_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_TJOB_EXECUTION_ID on ACT_RU_TIMER_JOB(EXECUTION_ID_);
+alter table ACT_RU_TIMER_JOB
+ add constraint ACT_FK_TJOB_EXECUTION
+ foreign key (EXECUTION_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_TJOB_PROC_INST_ID on ACT_RU_TIMER_JOB(PROCESS_INSTANCE_ID_);
+alter table ACT_RU_TIMER_JOB
+ add constraint ACT_FK_TJOB_PROCESS_INSTANCE
+ foreign key (PROCESS_INSTANCE_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_TJOB_PROC_DEF_ID on ACT_RU_TIMER_JOB(PROC_DEF_ID_);
+alter table ACT_RU_TIMER_JOB
+ add constraint ACT_FK_TJOB_PROC_DEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+create index ACT_IDX_TJOB_EXCEPTION on ACT_RU_TIMER_JOB(EXCEPTION_STACK_ID_);
+alter table ACT_RU_TIMER_JOB
+ add constraint ACT_FK_TJOB_EXCEPTION
+ foreign key (EXCEPTION_STACK_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_SJOB_EXECUTION_ID on ACT_RU_SUSPENDED_JOB(EXECUTION_ID_);
+alter table ACT_RU_SUSPENDED_JOB
+ add constraint ACT_FK_SJOB_EXECUTION
+ foreign key (EXECUTION_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_SJOB_PROC_INST_ID on ACT_RU_SUSPENDED_JOB(PROCESS_INSTANCE_ID_);
+alter table ACT_RU_SUSPENDED_JOB
+ add constraint ACT_FK_SJOB_PROCESS_INSTANCE
+ foreign key (PROCESS_INSTANCE_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_SJOB_PROC_DEF_ID on ACT_RU_SUSPENDED_JOB(PROC_DEF_ID_);
+alter table ACT_RU_SUSPENDED_JOB
+ add constraint ACT_FK_SJOB_PROC_DEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+create index ACT_IDX_SJOB_EXCEPTION on ACT_RU_SUSPENDED_JOB(EXCEPTION_STACK_ID_);
+alter table ACT_RU_SUSPENDED_JOB
+ add constraint ACT_FK_SJOB_EXCEPTION
+ foreign key (EXCEPTION_STACK_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_DJOB_EXECUTION_ID on ACT_RU_DEADLETTER_JOB(EXECUTION_ID_);
+alter table ACT_RU_DEADLETTER_JOB
+ add constraint ACT_FK_DJOB_EXECUTION
+ foreign key (EXECUTION_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_DJOB_PROC_INST_ID on ACT_RU_DEADLETTER_JOB(PROCESS_INSTANCE_ID_);
+alter table ACT_RU_DEADLETTER_JOB
+ add constraint ACT_FK_DJOB_PROCESS_INSTANCE
+ foreign key (PROCESS_INSTANCE_ID_)
+ references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_DJOB_PROC_DEF_ID on ACT_RU_DEADLETTER_JOB(PROC_DEF_ID_);
+alter table ACT_RU_DEADLETTER_JOB
+ add constraint ACT_FK_DJOB_PROC_DEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+create index ACT_IDX_DJOB_EXCEPTION on ACT_RU_DEADLETTER_JOB(EXCEPTION_STACK_ID_);
+alter table ACT_RU_DEADLETTER_JOB
+ add constraint ACT_FK_DJOB_EXCEPTION
+ foreign key (EXCEPTION_STACK_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_EVENT_SUBSCR on ACT_RU_EVENT_SUBSCR(EXECUTION_ID_);
+alter table ACT_RU_EVENT_SUBSCR
+ add constraint ACT_FK_EVENT_EXEC
+ foreign key (EXECUTION_ID_)
+ references ACT_RU_EXECUTION(ID_);
+
+create index ACT_IDX_MODEL_SOURCE on ACT_RE_MODEL(EDITOR_SOURCE_VALUE_ID_);
+alter table ACT_RE_MODEL
+ add constraint ACT_FK_MODEL_SOURCE
+ foreign key (EDITOR_SOURCE_VALUE_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_MODEL_SOURCE_EXTRA on ACT_RE_MODEL(EDITOR_SOURCE_EXTRA_VALUE_ID_);
+alter table ACT_RE_MODEL
+ add constraint ACT_FK_MODEL_SOURCE_EXTRA
+ foreign key (EDITOR_SOURCE_EXTRA_VALUE_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_MODEL_DEPLOYMENT on ACT_RE_MODEL(DEPLOYMENT_ID_);
+alter table ACT_RE_MODEL
+ add constraint ACT_FK_MODEL_DEPLOYMENT
+ foreign key (DEPLOYMENT_ID_)
+ references ACT_RE_DEPLOYMENT (ID_);
+
+create index ACT_IDX_PROCDEF_INFO_JSON on ACT_PROCDEF_INFO(INFO_JSON_ID_);
+alter table ACT_PROCDEF_INFO
+ add constraint ACT_FK_INFO_JSON_BA
+ foreign key (INFO_JSON_ID_)
+ references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_PROCDEF_INFO_PROC on ACT_PROCDEF_INFO(PROC_DEF_ID_);
+alter table ACT_PROCDEF_INFO
+ add constraint ACT_FK_INFO_PROCDEF
+ foreign key (PROC_DEF_ID_)
+ references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_PROCDEF_INFO
+ add constraint ACT_UNIQ_INFO_PROCDEF
+ unique (PROC_DEF_ID_);
diff --git a/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.history.sql b/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.history.sql
new file mode 100644
index 00000000..05191157
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.history.sql
@@ -0,0 +1,156 @@
+create table ACT_HI_PROCINST (
+ ID_ NVARCHAR2(64) not null,
+ PROC_INST_ID_ NVARCHAR2(64) not null,
+ BUSINESS_KEY_ NVARCHAR2(255),
+ PROC_DEF_ID_ NVARCHAR2(64) not null,
+ START_TIME_ TIMESTAMP(6) not null,
+ END_TIME_ TIMESTAMP(6),
+ DURATION_ NUMBER(19,0),
+ START_USER_ID_ NVARCHAR2(255),
+ START_ACT_ID_ NVARCHAR2(255),
+ END_ACT_ID_ NVARCHAR2(255),
+ SUPER_PROCESS_INSTANCE_ID_ NVARCHAR2(64),
+ DELETE_REASON_ NVARCHAR2(2000),
+ TENANT_ID_ NVARCHAR2(255) default '',
+ NAME_ NVARCHAR2(255),
+ primary key (ID_),
+ unique (PROC_INST_ID_)
+);
+
+create table ACT_HI_ACTINST (
+ ID_ NVARCHAR2(64) not null,
+ PROC_DEF_ID_ NVARCHAR2(64) not null,
+ PROC_INST_ID_ NVARCHAR2(64) not null,
+ EXECUTION_ID_ NVARCHAR2(64) not null,
+ ACT_ID_ NVARCHAR2(255) not null,
+ TASK_ID_ NVARCHAR2(64),
+ CALL_PROC_INST_ID_ NVARCHAR2(64),
+ ACT_NAME_ NVARCHAR2(255),
+ ACT_TYPE_ NVARCHAR2(255) not null,
+ ASSIGNEE_ NVARCHAR2(255),
+ START_TIME_ TIMESTAMP(6) not null,
+ END_TIME_ TIMESTAMP(6),
+ DURATION_ NUMBER(19,0),
+ DELETE_REASON_ NVARCHAR2(2000),
+ TENANT_ID_ NVARCHAR2(255) default '',
+ primary key (ID_)
+);
+
+create table ACT_HI_TASKINST (
+ ID_ NVARCHAR2(64) not null,
+ PROC_DEF_ID_ NVARCHAR2(64),
+ TASK_DEF_KEY_ NVARCHAR2(255),
+ PROC_INST_ID_ NVARCHAR2(64),
+ EXECUTION_ID_ NVARCHAR2(64),
+ PARENT_TASK_ID_ NVARCHAR2(64),
+ NAME_ NVARCHAR2(255),
+ DESCRIPTION_ NVARCHAR2(2000),
+ OWNER_ NVARCHAR2(255),
+ ASSIGNEE_ NVARCHAR2(255),
+ START_TIME_ TIMESTAMP(6) not null,
+ CLAIM_TIME_ TIMESTAMP(6),
+ END_TIME_ TIMESTAMP(6),
+ DURATION_ NUMBER(19,0),
+ DELETE_REASON_ NVARCHAR2(2000),
+ PRIORITY_ INTEGER,
+ DUE_DATE_ TIMESTAMP(6),
+ FORM_KEY_ NVARCHAR2(255),
+ CATEGORY_ NVARCHAR2(255),
+ TENANT_ID_ NVARCHAR2(255) default '',
+ primary key (ID_)
+);
+
+create table ACT_HI_VARINST (
+ ID_ NVARCHAR2(64) not null,
+ PROC_INST_ID_ NVARCHAR2(64),
+ EXECUTION_ID_ NVARCHAR2(64),
+ TASK_ID_ NVARCHAR2(64),
+ NAME_ NVARCHAR2(255) not null,
+ VAR_TYPE_ NVARCHAR2(100),
+ REV_ INTEGER,
+ BYTEARRAY_ID_ NVARCHAR2(64),
+ DOUBLE_ NUMBER(*,10),
+ LONG_ NUMBER(19,0),
+ TEXT_ NVARCHAR2(2000),
+ TEXT2_ NVARCHAR2(2000),
+ CREATE_TIME_ TIMESTAMP(6),
+ LAST_UPDATED_TIME_ TIMESTAMP(6),
+ primary key (ID_)
+);
+
+create table ACT_HI_DETAIL (
+ ID_ NVARCHAR2(64) not null,
+ TYPE_ NVARCHAR2(255) not null,
+ PROC_INST_ID_ NVARCHAR2(64),
+ EXECUTION_ID_ NVARCHAR2(64),
+ TASK_ID_ NVARCHAR2(64),
+ ACT_INST_ID_ NVARCHAR2(64),
+ NAME_ NVARCHAR2(255) not null,
+ VAR_TYPE_ NVARCHAR2(64),
+ REV_ INTEGER,
+ TIME_ TIMESTAMP(6) not null,
+ BYTEARRAY_ID_ NVARCHAR2(64),
+ DOUBLE_ NUMBER(*,10),
+ LONG_ NUMBER(19,0),
+ TEXT_ NVARCHAR2(2000),
+ TEXT2_ NVARCHAR2(2000),
+ primary key (ID_)
+);
+
+create table ACT_HI_COMMENT (
+ ID_ NVARCHAR2(64) not null,
+ TYPE_ NVARCHAR2(255),
+ TIME_ TIMESTAMP(6) not null,
+ USER_ID_ NVARCHAR2(255),
+ TASK_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ ACTION_ NVARCHAR2(255),
+ MESSAGE_ NVARCHAR2(2000),
+ FULL_MSG_ BLOB,
+ primary key (ID_)
+);
+
+create table ACT_HI_ATTACHMENT (
+ ID_ NVARCHAR2(64) not null,
+ REV_ INTEGER,
+ USER_ID_ NVARCHAR2(255),
+ NAME_ NVARCHAR2(255),
+ DESCRIPTION_ NVARCHAR2(2000),
+ TYPE_ NVARCHAR2(255),
+ TASK_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ URL_ NVARCHAR2(2000),
+ CONTENT_ID_ NVARCHAR2(64),
+ TIME_ TIMESTAMP(6),
+ primary key (ID_)
+);
+
+create table ACT_HI_IDENTITYLINK (
+ ID_ NVARCHAR2(64),
+ GROUP_ID_ NVARCHAR2(255),
+ TYPE_ NVARCHAR2(255),
+ USER_ID_ NVARCHAR2(255),
+ TASK_ID_ NVARCHAR2(64),
+ PROC_INST_ID_ NVARCHAR2(64),
+ primary key (ID_)
+);
+
+create index ACT_IDX_HI_PRO_INST_END on ACT_HI_PROCINST(END_TIME_);
+create index ACT_IDX_HI_PRO_I_BUSKEY on ACT_HI_PROCINST(BUSINESS_KEY_);
+create index ACT_IDX_HI_ACT_INST_START on ACT_HI_ACTINST(START_TIME_);
+create index ACT_IDX_HI_ACT_INST_END on ACT_HI_ACTINST(END_TIME_);
+create index ACT_IDX_HI_DETAIL_PROC_INST on ACT_HI_DETAIL(PROC_INST_ID_);
+create index ACT_IDX_HI_DETAIL_ACT_INST on ACT_HI_DETAIL(ACT_INST_ID_);
+create index ACT_IDX_HI_DETAIL_TIME on ACT_HI_DETAIL(TIME_);
+create index ACT_IDX_HI_DETAIL_NAME on ACT_HI_DETAIL(NAME_);
+create index ACT_IDX_HI_DETAIL_TASK_ID on ACT_HI_DETAIL(TASK_ID_);
+create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_);
+create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_);
+create index ACT_IDX_HI_PROCVAR_TASK_ID on ACT_HI_VARINST(TASK_ID_);
+create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_HI_IDENT_LNK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_);
+create index ACT_IDX_HI_IDENT_LNK_PROCINST on ACT_HI_IDENTITYLINK(PROC_INST_ID_);
+
+create index ACT_IDX_HI_ACT_INST_PROCINST on ACT_HI_ACTINST(PROC_INST_ID_, ACT_ID_);
+create index ACT_IDX_HI_ACT_INST_EXEC on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_);
+create index ACT_IDX_HI_TASK_INST_PROCINST on ACT_HI_TASKINST(PROC_INST_ID_);
diff --git a/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.identity.sql b/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.identity.sql
new file mode 100644
index 00000000..d63bac36
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/resources/db/activiti.oracle.create.identity.sql
@@ -0,0 +1,48 @@
+create table ACT_ID_GROUP (
+ ID_ NVARCHAR2(64),
+ REV_ INTEGER,
+ NAME_ NVARCHAR2(255),
+ TYPE_ NVARCHAR2(255),
+ primary key (ID_)
+);
+
+create table ACT_ID_MEMBERSHIP (
+ USER_ID_ NVARCHAR2(64),
+ GROUP_ID_ NVARCHAR2(64),
+ primary key (USER_ID_, GROUP_ID_)
+);
+
+create table ACT_ID_USER (
+ ID_ NVARCHAR2(64),
+ REV_ INTEGER,
+ FIRST_ NVARCHAR2(255),
+ LAST_ NVARCHAR2(255),
+ EMAIL_ NVARCHAR2(255),
+ PWD_ NVARCHAR2(255),
+ PICTURE_ID_ NVARCHAR2(64),
+ primary key (ID_)
+);
+
+create table ACT_ID_INFO (
+ ID_ NVARCHAR2(64),
+ REV_ INTEGER,
+ USER_ID_ NVARCHAR2(64),
+ TYPE_ NVARCHAR2(64),
+ KEY_ NVARCHAR2(255),
+ VALUE_ NVARCHAR2(255),
+ PASSWORD_ BLOB,
+ PARENT_ID_ NVARCHAR2(255),
+ primary key (ID_)
+);
+
+create index ACT_IDX_MEMB_GROUP on ACT_ID_MEMBERSHIP(GROUP_ID_);
+alter table ACT_ID_MEMBERSHIP
+ add constraint ACT_FK_MEMB_GROUP
+ foreign key (GROUP_ID_)
+ references ACT_ID_GROUP (ID_);
+
+create index ACT_IDX_MEMB_USER on ACT_ID_MEMBERSHIP(USER_ID_);
+alter table ACT_ID_MEMBERSHIP
+ add constraint ACT_FK_MEMB_USER
+ foreign key (USER_ID_)
+ references ACT_ID_USER (ID_);
diff --git a/xm-cloud-bootstrap/src/main/resources/locale/message_zh.properties b/xm-cloud-bootstrap/src/main/resources/locale/message_zh.properties
new file mode 100644
index 00000000..da88fd9d
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/resources/locale/message_zh.properties
@@ -0,0 +1,8 @@
+# 消息转换器,格式为:
+# 技术错误码=业务错误码+消息
+# 支持动态数据转换.如下面重试次数是通过程序传入的.
+# errcode01=[0760881]您输入的密码不正确,请重新输入,您还可以再试{0}次.
+#
+#
+#tips001=[0760000]网络不给力,请稍后再试.
+t123456162Service27=[0760001]测试错误码转义
diff --git a/xm-cloud-bootstrap/src/main/resources/logback-spring.xml b/xm-cloud-bootstrap/src/main/resources/logback-spring.xml
new file mode 100644
index 00000000..e00fed6b
--- /dev/null
+++ b/xm-cloud-bootstrap/src/main/resources/logback-spring.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ [%X{gloNo}][%d{yyyy-MM-dd HH:mm:ss}][%-5level][%logger][%X{reqNo}] -%msg%n
+
+
+
+
+
+ logs/xm.log
+
+ logs/xm.%d{yyyy-MM-dd}.%i.log
+
+ 20
+ 100MB
+
+
+ [%X{gloNo}][%d{yyyy-MM-dd HH:mm:ss}][%-5level][%logger][%X{reqNo}] -%msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xm-cloud-bootstrap/src/main/resources/processes/readme.txt b/xm-cloud-bootstrap/src/main/resources/processes/readme.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java
index 2f34ad7a..c948ad0f 100644
--- a/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java
+++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java
@@ -7,6 +7,8 @@ import com.mdp.core.entity.Result;
import com.mdp.core.query.QueryTools;
import com.mdp.core.utils.RequestUtils;
import com.mdp.msg.client.PushNotifyMsgService;
+import com.mdp.safe.client.cache.DeptRedisCacheService;
+import com.mdp.safe.client.entity.Dept;
import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils;
import com.mdp.sensitive.SensitiveWordService;
@@ -68,6 +70,9 @@ public class XmProductController {
@Autowired
SensitiveWordService sensitiveWordService;
+ @Autowired
+ DeptRedisCacheService deptRedisCacheService;
+
Map fieldsMap = toMap(new XmProduct());
@Value("${mdp.platform-branch-id:platform-branch-001}")
@@ -180,6 +185,11 @@ public class XmProductController {
params.put("linkBranchId",user.getBranchId());
QueryTools.alias(params,"branchId res.branchId");
QueryWrapper qw = QueryTools.initQueryWrapper(XmProduct.class , params);
+ Dept dept=deptRedisCacheService.getDept(user.getDeptid());
+ params.put("myIdPath",dept.getIdPath());
+ params.put("myDeptid",user.getDeptid());
+ params.put("myBranchId",user.getBranchId());
+ params.put("myUserid",user.getUserid());
List