diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5e77bc2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,46 @@
+# 基础包依赖及框架配置
+
+#### 介绍
+基础包,对工具类及框架代码进行封装
+
+#### 功能
+1. 封装Shiro权限部分,通过接口继承即可
+2. 对SwaggerUI部分封装,可通过yml文件进行配置
+3. 对Druid连接池部分进行封装,可通过yml文件进行配置
+4. 提供封装VO返回结果
+5. 提供PageHelper方法封装
+6. 将pageNum,pageSize,order,sort封装成对象,并提供是否包含排序校验,提供sql拼装校验
+7. 异常统一封装
+8. 通用mapper封装
+9. 接口参数日志封装,可通过yml文件进行配置
+10. redis工具类封装,可通过yml文件进行配置
+11. Spring上下文工具类封装
+12. 加密工具类封装
+13. 日期工具类封装
+
+
+#### 安装教程
+
+1. git拉去目录
+
+2. 发布达梦数据库驱动包
+```bash
+mvn install:install-file -Dfile=lib/Dm7JdbcDriver18.jar -DgroupId=com.dm -DartifactId=Dm7JdbcDriver -Dversion=1.8 -Dpackaging=jar
+```
+3. 发布oracle数据库驱动包
+```bash
+mvn install:install-file -Dfile=lib/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.4 -Dpackaging=jar
+```
+4. 刷新maven依赖
+5. 进入基础包目录
+```bash
+cd hcframe-parent/hcframe-base/
+```
+6. 执行``mvn install``
+7. 刷新其他项目maven依赖
+8. 进入starter目录
+```bash
+cd ../hcframe-starter
+```
+9. 执行 ``mvn install``
+10. 刷新maven依赖
diff --git a/hcframe-parent/hcframe-activiti/pom.xml b/hcframe-parent/hcframe-activiti/pom.xml
new file mode 100644
index 0000000..838410f
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/pom.xml
@@ -0,0 +1,35 @@
+
+
+
+ parent
+ com.hcframe
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ hcframe-activiti
+
+
+ 8
+ 8
+
+
+
+ com.hcframe
+ hcframe-starter
+ 1.0-SNAPSHOT
+
+
+ com.hcframe
+ hcframe-base
+ 1.2.1-SNAPSHOT
+
+
+ org.activiti
+ activiti-spring-boot-starter
+ 7.1.0.M1
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/ActivitiApplication.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/ActivitiApplication.java
new file mode 100644
index 0000000..f260a0c
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/ActivitiApplication.java
@@ -0,0 +1,26 @@
+package com.hcframe.activiti;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+@EnableAspectJAutoProxy(proxyTargetClass = true)
+@EnableSwagger2
+@ServletComponentScan
+@EnableCaching
+//@EnableDiscoveryClient
+//@EnableFeignClients
+@ComponentScan(basePackages = {"com.hcframe.**"})
+public class ActivitiApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ActivitiApplication.class, args);
+ }
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/ServletInitializer.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/ServletInitializer.java
new file mode 100644
index 0000000..780ba7c
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/ServletInitializer.java
@@ -0,0 +1,13 @@
+package com.hcframe.activiti;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+public class ServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(ActivitiApplication.class);
+ }
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/ActivitiUtils.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/ActivitiUtils.java
new file mode 100644
index 0000000..66af3cb
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/ActivitiUtils.java
@@ -0,0 +1,514 @@
+package com.hcframe.activiti.activiti;
+
+import com.hcframe.base.common.ResultPageInfo;
+import com.hcframe.base.common.ServiceException;
+import com.hcframe.base.common.WebPageInfo;
+import com.hcframe.base.common.utils.EmptyCheckUtils;
+import org.activiti.engine.*;
+import org.activiti.engine.impl.ProcessInstanceQueryProperty;
+import org.activiti.engine.impl.TaskQueryProperty;
+import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
+import org.activiti.engine.repository.Deployment;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.repository.ProcessDefinitionQuery;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.activiti.engine.task.TaskQuery;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @author lhc
+ * @date 2020-07-06
+ * @description activiti工具类
+ */
+@Component
+public class ActivitiUtils {
+
+ private final static Logger logger = LoggerFactory.getLogger(ActivitiUtils.class);
+
+ @Resource
+ RuntimeService runtimeService;
+
+ @Resource
+ private RepositoryService repositoryService;
+
+ @Resource
+ private TaskService taskService;
+
+ @Resource
+ private HistoryService historyService;
+
+ @Resource
+ private ManagementService managementService;
+
+
+ /**
+ * 发布流程classpath
+ *
+ * @param name 流程名称
+ * @param classpath 流程文件地址,在项目classpath路径下的相对路径地址
+ * @return 流程信息
+ */
+ public Deployment deployProcessFormClasspath(String name, String classpath) {
+ EmptyCheckUtils.checkWithException(name, "name不能为空!");
+ EmptyCheckUtils.checkWithException(classpath, "classpath不能为空");
+ try {
+ Deployment deployment = repositoryService.createDeployment()
+ .addClasspathResource(classpath)
+ .name(name)
+ .deploy();
+ logger.info("流程ID:" + deployment.getId());
+ logger.info("流程名称:" + deployment.getName());
+ return deployment;
+ } catch (Exception e) {
+ logger.error("流程发布失败", e);
+ throw new ServiceException("流程发布失败!");
+ }
+ }
+
+ /**
+ * 发布流程基于InputStream
+ *
+ * @param name 流程名称
+ * @param is 输入流
+ * @return 流程信息
+ */
+ public Deployment deployProcessFormInputStream(String name, InputStream is, String fileName) {
+ EmptyCheckUtils.checkWithException(name, "name不能为空!");
+ EmptyCheckUtils.checkWithException(fileName, "fileName不能为空!");
+ try {
+ Deployment deployment = repositoryService.createDeployment()
+ .addInputStream(fileName, is)
+ .name(name)
+ .deploy();
+ logger.info("流程ID:" + deployment.getId());
+ logger.info("流程名称:" + deployment.getName());
+ return deployment;
+ } catch (Exception e) {
+ logger.error("流程发布失败", e);
+ throw new ServiceException("流程发布失败!");
+ }
+ }
+
+ /**
+ * 删除一个process实例
+ *
+ * @param id processId
+ * @param flag 是否连级删除所有信息
+ * @return
+ */
+ public boolean deleteDeploymenet(String id, boolean flag) {
+ EmptyCheckUtils.checkWithException(id, "id不能为空!");
+ try {
+ repositoryService.deleteDeployment(id, flag);
+ return true;
+ } catch (Exception e) {
+ logger.error("删除失败", e);
+ throw new ServiceException("删除失败");
+ }
+ }
+
+ /**
+ * 获取流程列表
+ *
+ * @param commonProcessDefinition 查询参数,可查询内容包括name,key,version
+ * @param webPageInfo 分页及排序参数
+ * @param isLatestVersion 是否只显示最新版本
+ * @return 返回结果列表
+ */
+ public ResultPageInfo getDeployProcessList(CommonProcessDefinition commonProcessDefinition,
+ WebPageInfo webPageInfo, Boolean isLatestVersion) {
+ ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
+ if (WebPageInfo.hasSort(webPageInfo)) {
+ ProcessInstanceQueryProperty queryProperty = new ProcessInstanceQueryProperty(webPageInfo.getSortField());
+ query = query.orderBy(queryProperty);
+ if (webPageInfo.getOrder().equals(WebPageInfo.ASC)) {
+ query = query.asc();
+ } else {
+ query = query.desc();
+ }
+ }
+ if (StringUtils.isNotEmpty(commonProcessDefinition.getName())) {
+ query = query.processDefinitionNameLike("%" + commonProcessDefinition.getName() + "%");
+ }
+ if (StringUtils.isNotEmpty(commonProcessDefinition.getKey())) {
+ query = query.processDefinitionNameLike("%" + commonProcessDefinition.getKey() + "%");
+ }
+ if (!org.springframework.util.StringUtils.isEmpty(commonProcessDefinition.getVersion())) {
+ query = query.processDefinitionVersion(commonProcessDefinition.getVersion());
+ }
+ if (isLatestVersion) {
+ query = query.latestVersion();
+ }
+ long total = query.count();
+ List list = query.listPage((webPageInfo.getPageNum() - 1) * webPageInfo.getPageSize(), webPageInfo.getPageSize());
+ List resultList = new LinkedList<>();
+ for (ProcessDefinition processDefinition : list) {
+ CommonProcessDefinition commonProcessDefinition1 = new CommonProcessDefinition();
+ BeanUtils.copyProperties(processDefinition, commonProcessDefinition1);
+ resultList.add(commonProcessDefinition1);
+ }
+ ResultPageInfo resultPageInfo = new ResultPageInfo<>();
+ resultPageInfo.setList(resultList);
+ resultPageInfo.setTotal(total);
+ return resultPageInfo;
+ }
+
+ /**
+ * 获取单个发布流程实例
+ *
+ * @param deploymentId 发布实例
+ * @return 返回单个实例结果
+ */
+ public CommonProcessDefinition getSingleProcessById(String deploymentId) {
+ EmptyCheckUtils.checkWithException(deploymentId, "deploymentId不能为空!");
+ ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult();
+ CommonProcessDefinition commonProcessDefinition = new CommonProcessDefinition();
+ BeanUtils.copyProperties(processDefinition, commonProcessDefinition);
+ return commonProcessDefinition;
+ }
+
+ /**
+ * 通过Key开始一个流程
+ *
+ * @param key 流程key
+ * @param map 流程变量
+ * @return 流程实例
+ */
+ public Map startProcessInstanceByKey(String key, Map map) {
+ EmptyCheckUtils.checkWithException(key, "key不能为空!");
+ try {
+ ProcessInstance instance;
+ if (map == null || map.isEmpty()) {
+ instance = runtimeService.startProcessInstanceByKey(key);
+ } else {
+ instance = runtimeService.startProcessInstanceByKey(key, map);
+ }
+ logger.info("流程实例ID:" + instance.getId());
+ logger.info("流程定义ID:" + instance.getProcessDefinitionId());
+ logger.info("流程发布ID:" + instance.getDeploymentId());
+ Map resultMap = new HashMap<>();
+ resultMap.put("id", instance.getId());
+ resultMap.put("processDefinitionId", instance.getProcessDefinitionId());
+ return resultMap;
+ } catch (Exception e) {
+ logger.error("流程开始失败:", e);
+ throw new ServiceException("流程开始失败!");
+ }
+ }
+
+
+ /**
+ * 通过Id开始一个流程
+ *
+ * @param id 流程Id
+ * @param map 流程变量
+ * @return 流程实例
+ */
+ public Map startProcessInstanceById(String id, Map map) {
+ EmptyCheckUtils.checkWithException(id, "id不能为空!");
+ try {
+ ProcessInstance instance;
+ if (map == null || map.isEmpty()) {
+ instance = runtimeService.startProcessInstanceById(id);
+ } else {
+ instance = runtimeService.startProcessInstanceByKey(id, map);
+ }
+
+ logger.info("流程实例ID:" + instance.getId());
+ logger.info("流程定义ID:" + instance.getProcessDefinitionId());
+ Map resultMap = new HashMap<>();
+ resultMap.put("id", instance.getId());
+ resultMap.put("deploymentId", instance.getDeploymentId());
+ resultMap.put("processDefinitionId", instance.getProcessDefinitionId());
+ return resultMap;
+ } catch (Exception e) {
+ logger.error("流程开始失败:", e);
+ throw new ServiceException("流程开始失败!");
+ }
+ }
+
+ /**
+ * 执行任务
+ *
+ * @param taskId 任务Id
+ * @return 是否成功
+ */
+ public boolean completeTask(String taskId) {
+ EmptyCheckUtils.checkWithException(taskId, "taskId不能为空!");
+ try {
+ taskService.complete(taskId);
+ logger.info("完成任务:任务ID:" + taskId);
+ return true;
+ } catch (Exception e) {
+ logger.error("任务执行失败", e);
+ throw new ServiceException("任务执行失败!");
+ }
+ }
+
+ /**
+ * 获取任务列表
+ *
+ * @param commonTask
+ * @param webPageInfo
+ * @param map
+ * @return
+ */
+ public ResultPageInfo getTaskList(CommonTask commonTask, WebPageInfo webPageInfo, Map map) {
+ TaskQuery taskQuery = taskService.createTaskQuery();
+ if (WebPageInfo.hasSort(webPageInfo)) {
+ TaskQueryProperty queryProperty = new TaskQueryProperty(webPageInfo.getSortField());
+ taskQuery = taskQuery.orderBy(queryProperty);
+ if (webPageInfo.getOrder().equals(WebPageInfo.ASC)) {
+ taskQuery = taskQuery.asc();
+ } else {
+ taskQuery = taskQuery.desc();
+ }
+ }
+ if (StringUtils.isNotEmpty(commonTask.getAssignee())) {
+ taskQuery = taskQuery.taskAssignee(commonTask.getAssignee());
+ }
+ if (StringUtils.isNotEmpty(commonTask.getId())) {
+ taskQuery = taskQuery.taskId(commonTask.getId());
+ }
+ if (StringUtils.isNotEmpty(commonTask.getName())) {
+ taskQuery = taskQuery.taskName(commonTask.getName());
+ }
+ if (StringUtils.isNotEmpty(commonTask.getTaskDefinitionKey())) {
+ taskQuery = taskQuery.taskDefinitionKey(commonTask.getTaskDefinitionKey());
+ }
+ if (StringUtils.isNotEmpty(commonTask.getCategory())) {
+ taskQuery = taskQuery.taskCategory(commonTask.getCategory());
+ }
+ if (StringUtils.isNotEmpty(commonTask.getDescription())) {
+ taskQuery = taskQuery.taskCategory(commonTask.getCategory());
+ }
+ if (StringUtils.isNotEmpty(commonTask.getExecutionId())) {
+ taskQuery = taskQuery.taskCategory(commonTask.getExecutionId());
+ }
+ if (map != null && !map.isEmpty()) {
+ taskQuery = taskQuery.taskVariableValueEquals(map);
+ }
+ if (StringUtils.isNotEmpty(commonTask.getOwner())) {
+ taskQuery = taskQuery.taskOwner(commonTask.getOwner());
+ }
+ if (StringUtils.isNotEmpty(commonTask.getParentTaskId())) {
+ taskQuery = taskQuery.taskParentTaskId(commonTask.getParentTaskId());
+ }
+ long total = taskQuery.count();
+ List taskList = taskQuery.listPage((webPageInfo.getPageNum() - 1) * webPageInfo.getPageSize(), webPageInfo.getPageSize());
+ List list = new LinkedList<>();
+ for (Task task : taskList) {
+ CommonTask resultTask = new CommonTask();
+ BeanUtils.copyProperties(task, resultTask);
+ String tableName= (String) taskService.getVariable(task.getId(),"tableName" );
+ resultTask.setTableName(tableName);
+ list.add(resultTask);
+ }
+ ResultPageInfo resultPageInfo = new ResultPageInfo<>();
+ resultPageInfo.setTotal(total);
+ resultPageInfo.setList(list);
+ return resultPageInfo;
+ }
+
+ /**
+ * Description: 任务认领(加锁)
+ *
+ * @param taskId
+ * @param userId
+ */
+ public synchronized boolean claimTask(String taskId, String userId) {
+ EmptyCheckUtils.checkWithException(taskId, "taskId不能为空!");
+ EmptyCheckUtils.checkWithException(userId, "userId不能为空!");
+ try {
+ taskService.claim(taskId, userId);
+ return true;
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ throw new ServiceException("任务不能加锁(taskId:" + taskId + ")");
+ }
+ }
+
+ /**
+ * Description: 任务解锁
+ *
+ * @param taskId 任务Id
+ */
+ public synchronized boolean unClaimTask(String taskId) {
+ EmptyCheckUtils.checkWithException(taskId, "taskId不能为空!");
+ try {
+ taskService.claim(taskId, null);
+ return true;
+ } catch (Exception e) {
+ throw new ServiceException("任务解锁失败,任务Id:" + taskId);
+ }
+ }
+
+ /**
+ * 完成任务
+ *
+ * @return
+ */
+ public boolean completeTask(String taskId, Map map) {
+ EmptyCheckUtils.checkWithException(taskId, "taskId不能为空!");
+ try {
+ if (map == null || map.isEmpty()) {
+ taskService.complete(taskId);
+ } else {
+ taskService.complete(taskId, map);
+ }
+ return true;
+ } catch (Exception e) {
+ throw new ServiceException("任务提交失败");
+ }
+ }
+
+ /**
+ * 设置候选人(可设置多个)
+ *
+ * @param taskId
+ * @param userIds
+ */
+ public boolean addCandidateUser(String taskId, String userIds) {
+ EmptyCheckUtils.checkWithException(taskId, "taskId不能为空!");
+ EmptyCheckUtils.checkWithException(userIds, "userIds不能为空!");
+ try {
+ taskService.addCandidateUser(taskId, userIds);
+ return true;
+ } catch (Exception e) {
+ throw new ServiceException("设置候选人失败");
+ }
+ }
+
+ /**
+ * 更新候选人
+ *
+ * @param taskId
+ * @param userIds
+ * @return
+ */
+ public boolean updateCandidateUser(String taskId, String userIds) {
+ EmptyCheckUtils.checkWithException(taskId, "taskId不能为空!");
+ EmptyCheckUtils.checkWithException(userIds, "userIds不能为空!");
+ try {
+ taskService.addCandidateUser(taskId, null);
+ taskService.addCandidateUser(taskId, userIds);
+ return true;
+ } catch (Exception e) {
+ throw new ServiceException("更新候选人失败");
+ }
+ }
+
+ /**
+ * 校验名称是否唯一
+ *
+ * @param name name
+ * @return
+ */
+ public boolean uniqueName(String name) {
+ List list = repositoryService.createProcessDefinitionQuery().processDefinitionName(name).list();
+ return list == null || list.size() == 0;
+ }
+
+ /**
+ * 校验key是否唯一
+ *
+ * @param key
+ * @return
+ */
+ public boolean uniqueKey(String key) {
+ List list = repositoryService.createProcessDefinitionQuery().processDefinitionKey(key).list();
+ return list == null || list.size() == 0;
+ }
+
+ /**
+ * 删除未完成实例
+ * @param id id主键
+ * @param reason 删除原因
+ * @param flag 是否删除历史记录
+ * @return
+ */
+ public boolean deleteProcessInstance(String id, String reason, boolean flag){
+ try {
+ runtimeService.deleteProcessInstance(id,reason);
+ if (flag) {
+ historyService.deleteHistoricProcessInstance(id);
+ }
+ return true;
+ } catch (Exception e) {
+ logger.error("删除流程失败",e);
+ throw new ServiceException("删除流程失败",e);
+ }
+ }
+
+ public void rollBackToAssignWoekFlow(String processInstanceId, String destTaskkey) {
+// // 取得当前任务.当前任务节点
+// destTaskkey ="usertask2";
+// HistoricTaskInstance currTask = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
+// Map variables;
+ ExecutionEntity entity = (ExecutionEntity) runtimeService.createExecutionQuery().executionId(processInstanceId).singleResult();
+// ProcessDefinitionEntity definition = (ProcessDefinitionEntity)((RepositoryServiceImpl)repositoryService)
+// .getDeployedProcessDefinition(entity.getProcessDefinitionId());
+// variables = entity.getProcessVariables();
+// //当前活动环节
+// ActivityImpl currActivityImpl = definition.findActivity(entity.getActivityId());
+// //目标活动节点
+// ActivityImpl nextActivityImpl = ((ProcessDefinitionImpl) definition).findActivity(destTaskkey);
+// if(currActivityImpl !=null){
+// //所有的出口集合
+// List pvmTransitions = currActivityImpl.getOutgoingTransitions();
+// List oriPvmTransitions = new ArrayList();
+// for(PvmTransition transition : pvmTransitions){
+// oriPvmTransitions.add(transition);
+// }
+// //清除所有出口
+// pvmTransitions.clear();
+// //建立新的出口
+// List transitionImpls = new ArrayList();
+// TransitionImpl tImpl = currActivityImpl.createOutgoingTransition();
+// tImpl.setDestination(nextActivityImpl);
+// transitionImpls.add(tImpl);
+//
+// List list = taskService.createTaskQuery().processInstanceId(entity.getProcessInstanceId())
+// .taskDefinitionKey(entity.getActivityId()).list();
+// for(Task task:list){
+// taskService.complete(task.getId(), variables);
+// historyService.deleteHistoricTaskInstance(task.getId());
+// }
+//
+// for(TransitionImpl transitionImpl:transitionImpls){
+// currActivityImpl.getOutgoingTransitions().remove(transitionImpl);
+// }
+//
+// for(PvmTransition pvmTransition:oriPvmTransitions){
+// pvmTransitions.add(pvmTransition);
+// }
+// }
+ }
+
+ /**
+ * 删除一个历史流程
+ * @param instansId
+ * @return
+ */
+ public boolean deleteProcessInstanceHistory(String instansId) {
+ try {
+ historyService.deleteHistoricProcessInstance(instansId);
+ return true;
+ } catch (Exception e) {
+ throw new ServiceException("删除流程历史记录失败!", e);
+ }
+ }
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/CommonProcessDefinition.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/CommonProcessDefinition.java
new file mode 100644
index 0000000..ea07432
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/CommonProcessDefinition.java
@@ -0,0 +1,60 @@
+package com.hcframe.activiti.activiti;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author lhc
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+@ApiModel("工具Process")
+public class CommonProcessDefinition {
+
+ public static String BPMN = "bpmn";
+
+ @ApiModelProperty(hidden = true)
+ private String id;
+
+ @ApiModelProperty(hidden = true)
+ private String category;
+
+ @ApiModelProperty(
+ value="流程Process名称"
+ )
+ private String name;
+
+ @ApiModelProperty(
+ value="流程Process的KEY"
+ )
+ private String key;
+
+ @ApiModelProperty(hidden = true)
+ private String description;
+
+ @ApiModelProperty(
+ value="版本"
+ )
+ private Integer version;
+
+ @ApiModelProperty(hidden = true)
+ private String resourceName;
+
+ @ApiModelProperty(hidden = true)
+ private String deploymentId;
+
+ @ApiModelProperty(hidden = true)
+ private String diagramResourceName;
+
+ @ApiModelProperty(hidden = true)
+ private String tenantId;
+
+ @ApiModelProperty(hidden = true)
+ private String engineVersion;
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/CommonTask.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/CommonTask.java
new file mode 100644
index 0000000..72d8898
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/activiti/CommonTask.java
@@ -0,0 +1,79 @@
+package com.hcframe.activiti.activiti;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author lhc
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class CommonTask {
+
+ private String id;
+
+ @ApiModelProperty(
+ value="流程名称"
+ )
+ private String name;
+
+ private String description;
+
+ private Integer priority;
+
+ private String owner;
+
+ @ApiModelProperty(
+ value="流程人"
+ )
+ private String assignee;
+
+ private String processInstanceId;
+
+ private String executionId;
+
+ private String processDefinitionId;
+
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ private String taskDefinitionKey;
+
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date dueDate;
+
+ private String category;
+
+ private String parentTaskId;
+
+ private String tenantId;
+
+ private String formKey;
+
+ private Map taskLocalVariables;
+
+ private Map processVariables;
+
+ private Date claimTime;
+
+ @ApiModelProperty(
+ value="是否只显示未锁定条目",
+ allowableValues="true,false"
+ )
+ private Boolean isUnAssignee = false;
+
+ private String tableName;
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/common/ShiroRealmConfig.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/common/ShiroRealmConfig.java
new file mode 100644
index 0000000..57b35b8
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/common/ShiroRealmConfig.java
@@ -0,0 +1,77 @@
+package com.hcframe.activiti.common;
+
+import com.hcframe.base.module.auth.dao.FtUserDao;
+import com.hcframe.base.module.shiro.service.ShiroType;
+import com.hcframe.base.module.shiro.service.SystemRealm;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.LinkedHashMap;
+
+/**
+ * @author lhc
+ * @date 2020-07-28
+ * @decription shiro 配置类
+ */
+@Component
+public class ShiroRealmConfig implements SystemRealm {
+
+ @Resource
+ FtUserDao ftUserDao;
+
+ /**
+ * 根据用户信息注入权限
+ * @param user 用户信息
+ * @return 权限信息
+ */
+ @Override
+ public SimpleAuthorizationInfo setAuthoriztion(Object user) {
+ return new SimpleAuthorizationInfo();
+ }
+
+ /**
+ * 根据用户Id查询用户信息并注入到shiro框架中
+ * @param userId 用户id
+ * @return 用户信息
+ */
+ @Override
+ public Object findByUserId(String userId) {
+ // TODO 需要实现获取用户信息方法
+ return null;
+ }
+
+ /**
+ * 配置拦截及放行路径
+ * @return 返回拦截及放行路径Map
+ */
+ @Override
+ public LinkedHashMap setShiroUrl() {
+ LinkedHashMap map = new LinkedHashMap<>();
+ // 用户登陆
+ map.put("/ftUser/login", ShiroType.ANON);
+ // Vue静态资源
+ map.put("/img/**", ShiroType.ANON);
+ map.put("/static/**", ShiroType.ANON);
+ map.put("/tinymce/**", ShiroType.ANON);
+ map.put("/favicon.ico", ShiroType.ANON);
+ map.put("/manifest.json", ShiroType.ANON);
+ map.put("/robots.txt", ShiroType.ANON);
+ map.put("/precache*", ShiroType.ANON);
+ map.put("/service-worker.js", ShiroType.ANON);
+ // swagger UI 静态资源
+ map.put("/swagger-ui.html", ShiroType.ANON);
+ map.put("/doc.html", ShiroType.ANON);
+ map.put("/swagger-resources/**", ShiroType.ANON);
+ map.put("/webjars/**", ShiroType.ANON);
+ map.put("/v2/api-docs", ShiroType.ANON);
+ map.put("/v2/api-docs-ext", ShiroType.ANON);
+ map.put("/swagger/**", ShiroType.ANON);
+ // druid 资源路径
+ map.put("/druid/**", ShiroType.ANON);
+ // 其余路径均拦截
+ map.put("/**", ShiroType.ANON);
+ return map;
+ }
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/controller/ProcessController.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/controller/ProcessController.java
new file mode 100644
index 0000000..ce42de7
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/controller/ProcessController.java
@@ -0,0 +1,102 @@
+package com.hcframe.activiti.controller;
+
+import com.hcframe.activiti.activiti.CommonProcessDefinition;
+import com.hcframe.activiti.service.ProcessService;
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.base.common.WebPageInfo;
+import io.lettuce.core.dynamic.annotation.Param;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author lhc
+ */
+@Api(tags = "activiti操作接口")
+@RequestMapping("/process")
+@RestController
+public class ProcessController {
+
+ @Resource
+ ProcessService processService;
+
+ @ApiOperation(value = "获取工作流Process列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "isLatestVersion", value = "是否只显示最新版", allowableValues = "true,false", defaultValue = "false")
+ })
+ @GetMapping("")
+ public ResultVO getProcessDefinitionList(CommonProcessDefinition processDefinition, WebPageInfo webPageInfo,
+ @RequestParam(defaultValue = "true") Boolean isLatestVersion) {
+ return processService.getProcessDefinitionList(processDefinition, webPageInfo, isLatestVersion);
+ }
+
+ @ApiOperation(value = "删除工作流列表Process列表")
+ @DeleteMapping("/{id}")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "state", value = "状态,为true则删除全部关联数据,为false则只删除Process", required = true),
+ @ApiImplicitParam(name = "id", value = "获取流程的deploymentId", required = true)
+ })
+ public ResultVO deleteProcessDefinition(@PathVariable String id, boolean state) {
+ return processService.deleteProcessDefinitionList(id, state);
+ }
+
+ @ApiOperation(value = "新增/更新Process,若为更新只需文件名和process名称保持一致即可")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name", value = "流程名称"),
+ @ApiImplicitParam(name = "file", value = "上传的文件")
+ })
+ @PostMapping("")
+ public ResultVO addProcessDefinition(@Param("file") MultipartFile file, String name) {
+ return processService.addProccessDefinition(file, name);
+ }
+
+ @ApiOperation(value = "新增Process,通过xml字符串方式更新")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name", value = "流程名称",required = true),
+ @ApiImplicitParam(name = "file", value = "上传的文件",required = true),
+ @ApiImplicitParam(name = "fileName", value = "文件名称需要有后缀.bpmn",required = true)
+ })
+ @PostMapping("/byXml")
+ public ResultVO addProcessDefinitionByXMl(String file, String name,String fileName) {
+ return processService.addProccessDefinitionByXml(file, name,fileName);
+ }
+
+ @ApiOperation(value = "修改Process,通过xml字符串方式更新")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name", value = "流程名称",required = true),
+ @ApiImplicitParam(name = "file", value = "上传的文件",required = true),
+ @ApiImplicitParam(name = "fileName", value = "文件名称需要有后缀.bpmn",required = true),
+ @ApiImplicitParam(name = "version", value = "当前版本(数字)",required = true)
+ })
+ @PutMapping("/byXml")
+ public ResultVO updateProcessDefinitionByXml(String file, String name, String fileName,Integer version) {
+ return processService.updateProcessDefinitionByXml(file, name, fileName,version);
+ }
+
+ @ApiOperation(value = "获取流程图bpmn流程图并展示")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deploymentId", value = "流程发布Id"),
+ @ApiImplicitParam(name = "resourceName", value = "流程发布Id")
+ })
+ @GetMapping("bpmn")
+ public ResultVO getBpmnFile(String deploymentId,String resourceName, HttpServletResponse response) {
+ return processService.getBpmnFile(deploymentId,resourceName, response);
+ }
+
+ @ApiOperation(value = "校验key和name是否唯一")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name", value = "名称", required = true),
+ @ApiImplicitParam(name = "key", value = "标识", required = true)
+ })
+ @PostMapping("unique")
+ public ResultVO uniqueRecord(String name, String key) {
+ return processService.uniqueRecord(name, key);
+ }
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/controller/TaskController.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/controller/TaskController.java
new file mode 100644
index 0000000..506447c
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/controller/TaskController.java
@@ -0,0 +1,105 @@
+package com.hcframe.activiti.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.hcframe.activiti.activiti.CommonTask;
+import com.hcframe.activiti.service.TaskSysService;
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.base.common.WebPageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@Api(tags = "获取工作状态")
+@RestController
+@RequestMapping("/task")
+public class TaskController {
+
+ @Resource
+ TaskSysService taskSysService;
+
+ @ApiOperation(value = "获取任务列表")
+ @GetMapping("")
+ public ResultVO getTaskList(CommonTask commonTask, WebPageInfo webPageInfo, String data) {
+ Map map = JSON.parseObject(data);
+ return taskSysService.getTaskList(commonTask, webPageInfo, map);
+ }
+
+ @ApiOperation(value = "开始一个流程,设置流程人员参数等(通过key)")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "tableName", value = "表名,与流程绑定", required = true),
+ @ApiImplicitParam(name = "tableId", value = "表Id,与流程绑定", required = true),
+ @ApiImplicitParam(name = "key", value = "ProcessInstance的key值", required = true),
+ @ApiImplicitParam(name = "...", value = "其余参数请根据需求,及设计好的流程图进行设计", required = true)
+ })
+ @PostMapping("/{key}/key")
+ public ResultVO startTaskByKey(@PathVariable String key, @RequestParam Map map) {
+ return taskSysService.startTaskByKey(key, map);
+ }
+
+ @ApiOperation(value = "开始一个流程,设置人员参数等(通过Id)")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "tableName", value = "表名,与流程绑定", required = true),
+ @ApiImplicitParam(name = "tableId", value = "表Id,与流程绑定", required = true),
+ @ApiImplicitParam(name = "id", value = "ProcessInstance的Id", required = true),
+ @ApiImplicitParam(name = "...", value = "其余参数请根据需求,及设计好的流程图进行设计", required = true)
+ })
+ @PostMapping("/{id}/id")
+ public ResultVO startTaskById(@PathVariable String id, Map map) {
+ return taskSysService.startTaskById(id, map);
+ }
+
+ @ApiOperation(value = "流程记录加锁")
+ @PostMapping("/claim")
+ public ResultVO claimTask(String taskId, String userId) {
+ return taskSysService.claimTask(taskId, userId);
+ }
+
+ @ApiOperation(value = "任务解锁")
+ @PostMapping("/unclaim")
+ public ResultVO unclaimTask(String taskId) {
+ return taskSysService.unclaimTask(taskId);
+ }
+
+ @ApiOperation(value = "完成任务")
+ @PostMapping("/{taskId}/commit")
+ public ResultVO commitTask(@PathVariable String taskId, String map,Boolean isBack,String reason) {
+ return taskSysService.commitTask(taskId, map,isBack,reason);
+ }
+
+ @ApiOperation(value = "设置候选人(可设置多个候选人,标识符逗号隔开即可)")
+ @PostMapping("/{taskId}/addCandidateUser")
+ public ResultVO addCandidateUser(@PathVariable String taskId, String names) {
+ return taskSysService.addCandidateUser(taskId, names);
+ }
+
+ @ApiOperation(value = "获取任务高亮json")
+ @PostMapping("/{taskId}/highLight")
+ public ResultVO getHighLightInfo(@PathVariable String taskId) {
+ return taskSysService.getHighLightInfo(taskId);
+ }
+
+ @ApiOperation(value = "删除一个进行中流程实例")
+ @DeleteMapping("/{instansId}")
+ public ResultVO deleteTaskInstans(@PathVariable String instansId,@RequestParam String reason,@RequestParam Boolean flag){
+ return taskSysService.deleteTaskIstans(instansId, reason,flag);
+ }
+
+ @ApiOperation(value = "删除一个历史流程实例")
+ @DeleteMapping("/{instansId}/history")
+ public ResultVO deleteTaskHisInstans(@PathVariable String instansId){
+ return taskSysService.deleteTaskIstansHitory(instansId);
+ }
+
+ @ApiOperation(value = "获取退回意见")
+ @GetMapping("/{taskId}/reason")
+ public ResultVO getBackReason(@PathVariable String taskId) {
+ return taskSysService.getBackReason(taskId);
+ }
+
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/BackReasonDao.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/BackReasonDao.java
new file mode 100644
index 0000000..a91f12a
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/BackReasonDao.java
@@ -0,0 +1,15 @@
+package com.hcframe.activiti.dao;
+
+import com.hcframe.activiti.entity.BackReason;
+import com.hcframe.base.common.Mapper;
+
+/**
+ * (BackReason)表数据库访问层
+ *
+ * @author lhc
+ * @since 2020-09-04 09:54:13
+ */
+public interface BackReasonDao extends Mapper {
+
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/CandidateUserDao.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/CandidateUserDao.java
new file mode 100644
index 0000000..517e59e
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/CandidateUserDao.java
@@ -0,0 +1,16 @@
+package com.hcframe.activiti.dao;
+
+
+import com.hcframe.activiti.entity.CandidateUser;
+import com.hcframe.base.common.Mapper;
+
+/**
+ * (CandidateUser)表数据库访问层
+ *
+ * @author lhc
+ * @since 2020-09-04 13:29:17
+ */
+public interface CandidateUserDao extends Mapper {
+
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/DataTaskDao.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/DataTaskDao.java
new file mode 100644
index 0000000..5d6fd9f
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/DataTaskDao.java
@@ -0,0 +1,16 @@
+package com.hcframe.activiti.dao;
+
+
+import com.hcframe.activiti.entity.DataTask;
+import com.hcframe.base.common.Mapper;
+
+/**
+ * (DataTask)表数据库访问层
+ *
+ * @author lhc
+ * @since 2020-09-03 17:39:38
+ */
+public interface DataTaskDao extends Mapper {
+
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/DataTaskHisDao.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/DataTaskHisDao.java
new file mode 100644
index 0000000..d497e1c
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/dao/DataTaskHisDao.java
@@ -0,0 +1,15 @@
+package com.hcframe.activiti.dao;
+
+import com.hcframe.activiti.entity.DataTaskHis;
+import com.hcframe.base.common.Mapper;
+
+/**
+ * (DataTaskHis)表数据库访问层
+ *
+ * @author lhc
+ * @since 2020-09-04 08:58:42
+ */
+public interface DataTaskHisDao extends Mapper {
+
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/BackReason.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/BackReason.java
new file mode 100644
index 0000000..0902a38
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/BackReason.java
@@ -0,0 +1,31 @@
+package com.hcframe.activiti.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * (BackReason)实体类
+ *
+ * @author lhc
+ * @since 2020-09-04 09:54:13
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class BackReason implements Serializable {
+ private static final long serialVersionUID = -15171833204492182L;
+
+ private Integer backId;
+
+ private String taskId;
+
+ private String reason;
+
+ private String title;
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/CandidateUser.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/CandidateUser.java
new file mode 100644
index 0000000..e9a0aca
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/CandidateUser.java
@@ -0,0 +1,32 @@
+package com.hcframe.activiti.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+/**
+ * (CandidateUser)实体类
+ *
+ * @author lhc
+ * @since 2020-09-04 13:29:17
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class CandidateUser implements Serializable {
+ private static final long serialVersionUID = -32069051744595036L;
+ @Id
+ @GeneratedValue(generator="JDBC")
+ private Integer caId;
+
+ private String taskId;
+
+ private String userId;
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/DataTask.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/DataTask.java
new file mode 100644
index 0000000..1ffde84
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/DataTask.java
@@ -0,0 +1,45 @@
+package com.hcframe.activiti.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+/**
+ * (DataTask)实体类
+ *
+ * @author lhc
+ * @since 2020-09-03 17:39:38
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class DataTask implements Serializable {
+ private static final long serialVersionUID = -69233663931357928L;
+
+ @Id
+ @GeneratedValue(generator="JDBC")
+ private Integer dataTaskId;
+
+ private String tableName;
+
+ private String tableId;
+
+ private String taskId;
+
+ private String taskKey;
+
+ private String taskName;
+
+ private String processId;
+
+ private Integer isBack;
+
+ private String assignee;
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/DataTaskHis.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/DataTaskHis.java
new file mode 100644
index 0000000..c98d6fd
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/entity/DataTaskHis.java
@@ -0,0 +1,46 @@
+package com.hcframe.activiti.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+/**
+ * (DataTaskHis)实体类
+ *
+ * @author lhc
+ * @since 2020-09-04 08:58:42
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class DataTaskHis implements Serializable {
+ private static final long serialVersionUID = -66890927690522795L;
+
+ @Id
+ @GeneratedValue(generator="JDBC")
+ private Integer hisTaskId;
+
+ private String tableName;
+
+ private String tableId;
+
+ private String taskId;
+
+ private String taskKey;
+
+ private String processId;
+
+ private String taskName;
+
+ private Integer isBack;
+
+ private String assignee;
+
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/ProcessService.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/ProcessService.java
new file mode 100644
index 0000000..2ba0eda
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/ProcessService.java
@@ -0,0 +1,25 @@
+package com.hcframe.activiti.service;
+
+import com.hcframe.activiti.activiti.CommonProcessDefinition;
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.base.common.WebPageInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+public interface ProcessService {
+
+ ResultVO getProcessDefinitionList(CommonProcessDefinition processDefinition, WebPageInfo webPageInfo, Boolean isLatestVersion);
+
+ ResultVO deleteProcessDefinitionList(String id, boolean state);
+
+ ResultVO addProccessDefinition(MultipartFile file, String name);
+
+ ResultVO getBpmnFile(String deploymentId, String resourceName, HttpServletResponse response);
+
+ ResultVO addProccessDefinitionByXml(String file, String name,String fileName);
+
+ ResultVO updateProcessDefinitionByXml(String file, String name, String fileName, Integer version);
+
+ ResultVO uniqueRecord(String name, String key);
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/TaskSysService.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/TaskSysService.java
new file mode 100644
index 0000000..cc7d5fe
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/TaskSysService.java
@@ -0,0 +1,32 @@
+package com.hcframe.activiti.service;
+
+import com.hcframe.activiti.activiti.CommonTask;
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.base.common.WebPageInfo;
+
+import java.util.Map;
+
+public interface TaskSysService {
+
+ ResultVO getTaskList(CommonTask commonTask, WebPageInfo webPageInfo, Map map);
+
+ ResultVO startTaskByKey(String key, Map map);
+
+ ResultVO startTaskById(String id, Map map);
+
+ ResultVO claimTask(String taskId, String userId);
+
+ ResultVO commitTask(String taskId,String map,Boolean isBack,String reason);
+
+ ResultVO unclaimTask(String taskId);
+
+ ResultVO addCandidateUser(String taskId, String names);
+
+ ResultVO getHighLightInfo(String taskId);
+
+ ResultVO deleteTaskIstans(String instansId, String reason, boolean flag);
+
+ ResultVO deleteTaskIstansHitory(String instansId);
+
+ ResultVO getBackReason(String taskId);
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/impl/ProcessServiceImpl.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/impl/ProcessServiceImpl.java
new file mode 100644
index 0000000..8d3fcab
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/impl/ProcessServiceImpl.java
@@ -0,0 +1,214 @@
+package com.hcframe.activiti.service.impl;
+
+import com.hcframe.activiti.activiti.ActivitiUtils;
+import com.hcframe.activiti.activiti.CommonProcessDefinition;
+import com.hcframe.activiti.service.ProcessService;
+import com.hcframe.activiti.utils.FileUtil;
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.base.common.ServiceException;
+import com.hcframe.base.common.WebPageInfo;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.repository.Deployment;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ResourceUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class ProcessServiceImpl implements ProcessService {
+
+ private final static Logger logger = LoggerFactory.getLogger(ProcessServiceImpl.class);
+
+ /**
+ * 获取编译后的文件路径
+ */
+ public static String CLASSPATH;
+
+ static {
+ try {
+ CLASSPATH = ResourceUtils.getURL(ResourceUtils.CLASSPATH_URL_PREFIX + "bpmn").getPath() + "/";
+ } catch (FileNotFoundException e) {
+ throw new ServiceException("获取bpmn文件上传路径出错!");
+ }
+ }
+
+ @Resource
+ private RepositoryService repositoryService;
+
+ @Resource
+ ActivitiUtils activitiUtils;
+
+ @Override
+ public ResultVO getProcessDefinitionList(CommonProcessDefinition commonProcessDefinition,
+ WebPageInfo webPageInfo, Boolean isLatestVersion) {
+ return ResultVO.getSuccess(activitiUtils.getDeployProcessList(commonProcessDefinition, webPageInfo, isLatestVersion));
+ }
+
+ @Override
+ public ResultVO deleteProcessDefinitionList(String id, boolean state) {
+ activitiUtils.deleteDeploymenet(id, true);
+ return ResultVO.getSuccess("删除成功");
+ }
+
+ @Override
+ public ResultVO addProccessDefinition(MultipartFile file, String name) {
+ if (file == null || file.isEmpty()) {
+ throw new ServiceException("bpmn文件为空");
+ }
+ String fileName = file.getOriginalFilename();
+ assert fileName != null : "文件名不存在";
+ String suffixName = fileName.substring(fileName.lastIndexOf("."));
+ assert !suffixName.equals(CommonProcessDefinition.BPMN) : "文件类型错误";
+ Map map = new HashMap<>(2);
+ try {
+ Deployment deployment = activitiUtils.deployProcessFormInputStream(name, file.getInputStream(), fileName);
+ map.put("流程名称", deployment.getName());
+ map.put("流程ID", deployment.getId());
+ } catch (IOException e) {
+ logger.error("bpmn文件持久化出错", e);
+ throw new ServiceException("文件持久化出错");
+ }
+ return ResultVO.getSuccess(map);
+ }
+
+ @Override
+ public ResultVO getBpmnFile(String deploymentId, String resourceName, HttpServletResponse response) {
+ response.addHeader("Content-Disposition", "attachment;fileName=" + resourceName);
+ byte[] buffer = new byte[1024];
+ BufferedInputStream bis = null;
+ InputStream bpmnIs = null;
+ try {
+ bpmnIs = repositoryService.getResourceAsStream(deploymentId, resourceName);
+ bis = new BufferedInputStream(bpmnIs);
+ OutputStream os = response.getOutputStream();
+ int i = bis.read(buffer);
+ while (i != -1) {
+ os.write(buffer, 0, i);
+ i = bis.read(buffer);
+ }
+ return null;
+ } catch (Exception e) {
+ throw new ServiceException("文件下载失败");
+ } finally {
+ if (bis != null) {
+ try {
+ bis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (bpmnIs != null) {
+ try {
+ bpmnIs.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ @Override
+ public ResultVO addProccessDefinitionByXml(String file, String name, String fileName) {
+ if (file == null || file.isEmpty()) {
+ throw new ServiceException("bpmn文件为空");
+ }
+ String filePath = CLASSPATH + fileName;
+ File dest = new File(filePath);
+ if (dest.exists()) {
+ dest.delete();
+ }
+ if (!activitiUtils.uniqueName(name)) {
+ throw new ServiceException("name已存在,请重新命名!");
+ }
+ Map map = new HashMap<>(2);
+ InputStream is = null;
+ try {
+ boolean flag = dest.createNewFile();
+ if (!flag) {
+ throw new ServiceException("创建文件失败!");
+ }
+ FileUtil.replaceContentToFile(file, filePath);
+ is= new FileInputStream(filePath);
+ Deployment deployment = activitiUtils.deployProcessFormInputStream(name, is, fileName);
+ map.put("流程名称", deployment.getName());
+ map.put("流程ID", deployment.getId());
+
+ } catch (IOException e) {
+ logger.error("bpmn文件持久化出错", e);
+ throw new ServiceException("文件持久化出错");
+ }finally {
+ if (is != null) {
+ try {
+ is.close();
+ dest.delete();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return ResultVO.getSuccess(map);
+ }
+
+ @Override
+ public ResultVO updateProcessDefinitionByXml(String file, String name, String fileName, Integer version) {
+ if (file == null || file.isEmpty()) {
+ throw new ServiceException("bpmn文件为空");
+ }
+ String filePath = CLASSPATH + fileName;
+ File dest = new File(filePath);
+ if (dest.exists()) {
+ dest.delete();
+ }
+ Map map = new HashMap<>(2);
+ InputStream is = null;
+ try {
+ boolean flag = dest.createNewFile();
+ if (!flag) {
+ throw new ServiceException("创建文件失败!");
+ }
+ FileUtil.replaceContentToFile(file, filePath);
+ is = new FileInputStream(filePath);
+ Deployment deployment = activitiUtils.deployProcessFormInputStream(name, is, fileName);
+ map.put("流程名称", deployment.getName());
+ map.put("流程ID", deployment.getId());
+ } catch (IOException e) {
+ logger.error("bpmn文件持久化出错", e);
+ throw new ServiceException("文件持久化出错");
+ } finally {
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return ResultVO.getSuccess(map);
+ }
+
+ @Override
+ public ResultVO uniqueRecord(String name, String key) {
+ boolean flag = true;
+ flag = activitiUtils.uniqueName(name);
+ if (!flag) {
+ return ResultVO.getFailed("流程名称已存在!");
+ }
+ flag = activitiUtils.uniqueKey(key);
+ if (!flag) {
+ return ResultVO.getFailed("流程标识已存在!");
+ }
+ return ResultVO.getSuccess();
+ }
+
+
+ public static void main(String[] args) throws FileNotFoundException {
+ }
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/impl/TaskSysServiceImpl.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/impl/TaskSysServiceImpl.java
new file mode 100644
index 0000000..7ec0c14
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/service/impl/TaskSysServiceImpl.java
@@ -0,0 +1,197 @@
+package com.hcframe.activiti.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hcframe.activiti.activiti.ActivitiUtils;
+import com.hcframe.activiti.activiti.CommonTask;
+import com.hcframe.activiti.dao.BackReasonDao;
+import com.hcframe.activiti.dao.CandidateUserDao;
+import com.hcframe.activiti.dao.DataTaskDao;
+import com.hcframe.activiti.dao.DataTaskHisDao;
+import com.hcframe.activiti.entity.BackReason;
+import com.hcframe.activiti.entity.CandidateUser;
+import com.hcframe.activiti.entity.DataTask;
+import com.hcframe.activiti.entity.DataTaskHis;
+import com.hcframe.activiti.service.TaskSysService;
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.base.common.ServiceException;
+import com.hcframe.base.common.WebPageInfo;
+import com.hcframe.base.common.utils.EmptyCheckUtils;
+import org.activiti.engine.*;
+import org.activiti.engine.task.Task;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import tk.mybatis.mapper.entity.Example;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TaskSysServiceImpl implements TaskSysService {
+
+ @Resource
+ ActivitiUtils activitiUtils;
+
+ @Resource
+ private TaskService taskService;
+
+ @Resource
+ DataTaskDao dataTaskDao;
+
+ @Resource
+ DataTaskHisDao dataTaskHisDao;
+
+ @Resource
+ BackReasonDao backReasonDao;
+
+ @Resource
+ CandidateUserDao candidateUserDao;
+
+
+ @Override
+ public ResultVO getTaskList(CommonTask commonTask, WebPageInfo webPageInfo, Map map) {
+ return ResultVO.getSuccess(activitiUtils.getTaskList(commonTask, webPageInfo, map));
+ }
+
+ @Override
+ @Transactional
+ public ResultVO startTaskByKey(String key, Map map) {
+ EmptyCheckUtils.checkWithException(map, "参数列表不能为空");
+ EmptyCheckUtils.checkWithException(map.get("tableName"), "tableName 不能为空!");
+ EmptyCheckUtils.checkWithException(map.get("tableId"), "tableId不能为空!");
+ Map activitiMap = activitiUtils.startProcessInstanceByKey(key, map);
+ String processId = activitiMap.get("id").toString();
+ Task task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
+ System.out.println(task.getAssignee());
+ String[] ids = map.get("tableId").toString().split(",");
+ for (String id : ids) {
+ DataTask dataTask = DataTask
+ .builder()
+ .taskId(task.getId())
+ .taskName(task.getName())
+ .taskKey(task.getTaskDefinitionKey())
+ .tableName(map.get("tableName").toString())
+ .tableId(id)
+ .processId(processId)
+ .assignee(task.getAssignee())
+ .build();
+ int i = dataTaskDao.insertSelective(dataTask);
+ if (i < 1) {
+ throw new ServiceException("开始流程失败");
+ }
+ }
+ activitiMap.put("taskId", task.getId());
+ return ResultVO.getSuccess(activitiMap);
+ }
+
+ @Override
+ public ResultVO startTaskById(String id, Map map) {
+ EmptyCheckUtils.checkWithException(map, "参数列表不能为空");
+ EmptyCheckUtils.checkWithException(map.get("tableName"), "tableName 不能为空!");
+ EmptyCheckUtils.checkWithException(map.get("tableId"), "tableId不能为空!");
+ return ResultVO.getSuccess(activitiUtils.startProcessInstanceById(id, map));
+ }
+
+ @Override
+ @Transactional
+ public ResultVO claimTask(String taskId, String userId) {
+ Example example = new Example(DataTask.class);
+ example.createCriteria().andEqualTo("taskId",taskId);
+ dataTaskDao.updateByExampleSelective(DataTask.builder().assignee(userId).build(),example);
+ return ResultVO.getSuccess(activitiUtils.claimTask(taskId, userId));
+ }
+
+ @Override
+ @Transactional
+ public ResultVO commitTask(String taskId, String map, Boolean isBack, String reason) {
+ Map variables = JSONObject.parseObject(map);
+ if (activitiUtils.completeTask(taskId, variables)) {
+ DataTask dataTask = dataTaskDao.selectOne(DataTask.builder().taskId(taskId).build());
+ DataTaskHis dataTaskHis = new DataTaskHis();
+ BeanUtils.copyProperties(dataTask, dataTaskHis);
+ dataTaskHis.setHisTaskId(null);
+ int i = dataTaskHisDao.insertSelective(dataTaskHis);
+ if (i < 1) {
+ throw new ServiceException("任务提交失败");
+ }
+ List dataTaskList = dataTaskDao.select(DataTask.builder().processId(dataTask.getProcessId()).build());
+ List list = new ArrayList<>();
+ for (DataTask data : dataTaskList) {
+ list.add(data.getDataTaskId());
+ }
+ Example dataExample = new Example(DataTask.class);
+ dataExample.createCriteria().andIn("dataTaskId", list);
+ dataTaskDao.deleteByExample(dataExample);
+ List taskList = taskService.createTaskQuery().processInstanceId(dataTask.getProcessId()).list();
+ for (Task task : taskList) {
+ DataTask dataTask1 = DataTask
+ .builder()
+ .taskId(task.getId())
+ .taskName(task.getName())
+ .taskKey(task.getTaskDefinitionKey())
+ .tableName((String) taskService.getVariable(task.getId(), "tableName"))
+ .tableId((String) taskService.getVariable(task.getId(), "tableId"))
+ .processId(task.getProcessInstanceId())
+ .assignee(task.getAssignee())
+ .build();
+ i = dataTaskDao.insertSelective(dataTask1);
+ if (i < 1) {
+ throw new ServiceException("任务提交失败");
+ }
+ }
+ return ResultVO.getSuccess();
+ } else {
+ return ResultVO.getFailed("完成任务失败");
+ }
+ }
+
+
+ @Override
+ @Transactional
+ public ResultVO unclaimTask(String taskId) {
+ Example example = new Example(DataTask.class);
+ example.createCriteria().andEqualTo("taskId",taskId);
+ dataTaskDao.updateByExampleSelective(DataTask.builder().assignee("0").build(),example);
+ return ResultVO.getSuccess(activitiUtils.unClaimTask(taskId));
+ }
+
+ @Override
+ @Transactional
+ public ResultVO addCandidateUser(String taskId, String names) {
+ for (String userId : names.split(",")) {
+ candidateUserDao.insert(CandidateUser.builder().taskId(taskId).userId(userId).build());
+ }
+ return ResultVO.getSuccess(activitiUtils.addCandidateUser(taskId, names));
+ }
+
+ @Override
+ public ResultVO getHighLightInfo(String taskId) {
+ return null;
+ }
+
+ @Override
+ @Transactional
+ public ResultVO deleteTaskIstans(String instansId, String reason, boolean flag) {
+ dataTaskDao.delete(DataTask.builder().processId(instansId).build());
+ if (flag) {
+ dataTaskHisDao.delete(DataTaskHis.builder().processId(instansId).build());
+ }
+ activitiUtils.deleteProcessInstance(instansId, reason, flag);
+ return ResultVO.getSuccess();
+ }
+
+ @Override
+ @Transactional
+ public ResultVO deleteTaskIstansHitory(String instansId) {
+ dataTaskHisDao.delete(DataTaskHis.builder().processId(instansId).build());
+ return ResultVO.getSuccess(activitiUtils.deleteProcessInstanceHistory(instansId));
+ }
+
+ @Override
+ public ResultVO getBackReason(String taskId) {
+ BackReason backReason=backReasonDao.selectOne(BackReason.builder().taskId(taskId).build());
+ return ResultVO.getSuccess(backReason);
+ }
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/servicetask/TaskServe.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/servicetask/TaskServe.java
new file mode 100644
index 0000000..cdc6f2b
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/servicetask/TaskServe.java
@@ -0,0 +1,16 @@
+package com.hcframe.activiti.servicetask;
+
+
+
+import org.activiti.engine.delegate.DelegateExecution;
+import org.activiti.engine.delegate.JavaDelegate;
+
+import java.io.Serializable;
+
+public class TaskServe implements JavaDelegate, Serializable {
+
+ @Override
+ public void execute(DelegateExecution delegateExecution) {
+
+ }
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/utils/FileUtil.java b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/utils/FileUtil.java
new file mode 100644
index 0000000..02063ab
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/java/com/hcframe/activiti/utils/FileUtil.java
@@ -0,0 +1,74 @@
+package com.hcframe.activiti.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.*;
+
+/***
+ * @author lhc
+ * @date 2020.1.2
+ */
+public class FileUtil {
+
+ private static Logger logger = LoggerFactory.getLogger(FileUtil.class);
+
+ /**
+ * 读取文件内容
+ * @param filePath 文件地址
+ * @return 文件内容
+ */
+ public static String readFile(String filePath) {
+ String record = "";
+ // 创建文件记录读取数据最后一条的时间戳和id
+ InputStream is = null;
+ try {
+ is= new FileInputStream(filePath);
+ StringBuilder stringBuilder = new StringBuilder();
+ int temp;
+ //当temp等于-1时,表示已经到了文件结尾,停止读取
+ while ((temp = is.read()) != -1) {
+ stringBuilder.append((char) temp);
+ }
+ record = stringBuilder.toString();
+ } catch (IOException e) {
+ logger.error("File read Error!!!",e);
+ }finally {
+ try {
+ assert is != null;
+ is.close();
+ } catch (IOException e) {
+ logger.error("Cannot close File read Stream!!!",e);
+ }
+ }
+ return record;
+ }
+
+ /**
+ * 替换文件内容
+ * @param string ---需要替换的内容
+ * @return 是否成功
+ */
+ public static boolean replaceContentToFile(String string,String filePath) {
+ File file = new File(filePath);
+ Writer out = null;
+ boolean flag = true;
+ try {
+ out = new FileWriter(file);
+ out.write(string);
+ } catch (IOException e) {
+ flag = false;
+ logger.error("Write string to file Error!!",e);
+ }finally {
+ try {
+ assert out != null;
+ out.close();
+ } catch (IOException e) {
+ logger.error("close replaceContentToFile Stream Error",e);
+ }
+ }
+ return flag;
+ }
+
+
+}
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/activiti7.sql b/hcframe-parent/hcframe-activiti/src/main/resources/activiti7.sql
new file mode 100644
index 0000000..0ef790b
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/activiti7.sql
@@ -0,0 +1,697 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : 192.168.4.119
+ Source Server Type : MySQL
+ Source Server Version : 50731
+ Source Host : 192.168.4.119:3306
+ Source Schema : activiti7
+
+ Target Server Type : MySQL
+ Target Server Version : 50731
+ File Encoding : 65001
+
+ Date: 04/09/2020 13:52:31
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for ACT_EVT_LOG
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_EVT_LOG`;
+CREATE TABLE `ACT_EVT_LOG` (
+ `LOG_NR_` bigint(20) NOT NULL AUTO_INCREMENT,
+ `TYPE_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
+ `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `DATA_` longblob,
+ `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `IS_PROCESSED_` tinyint(4) DEFAULT '0',
+ PRIMARY KEY (`LOG_NR_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_GE_BYTEARRAY
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_GE_BYTEARRAY`;
+CREATE TABLE `ACT_GE_BYTEARRAY` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `BYTES_` longblob,
+ `GENERATED_` tinyint(4) DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_FK_BYTEARR_DEPL` (`DEPLOYMENT_ID_`),
+ CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `ACT_RE_DEPLOYMENT` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_GE_PROPERTY
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_GE_PROPERTY`;
+CREATE TABLE `ACT_GE_PROPERTY` (
+ `NAME_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `VALUE_` varchar(300) COLLATE utf8_bin DEFAULT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ PRIMARY KEY (`NAME_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_ACTINST
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_ACTINST`;
+CREATE TABLE `ACT_HI_ACTINST` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `ACT_ID_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `CALL_PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `ACT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `ACT_TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `START_TIME_` datetime(3) NOT NULL,
+ `END_TIME_` datetime(3) DEFAULT NULL,
+ `DURATION_` bigint(20) DEFAULT NULL,
+ `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_HI_ACT_INST_START` (`START_TIME_`),
+ KEY `ACT_IDX_HI_ACT_INST_END` (`END_TIME_`),
+ KEY `ACT_IDX_HI_ACT_INST_PROCINST` (`PROC_INST_ID_`,`ACT_ID_`),
+ KEY `ACT_IDX_HI_ACT_INST_EXEC` (`EXECUTION_ID_`,`ACT_ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_ATTACHMENT
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_ATTACHMENT`;
+CREATE TABLE `ACT_HI_ATTACHMENT` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `URL_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `CONTENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TIME_` datetime(3) DEFAULT NULL,
+ PRIMARY KEY (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_COMMENT
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_COMMENT`;
+CREATE TABLE `ACT_HI_COMMENT` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TIME_` datetime(3) NOT NULL,
+ `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `ACTION_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `MESSAGE_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `FULL_MSG_` longblob,
+ PRIMARY KEY (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_DETAIL
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_DETAIL`;
+CREATE TABLE `ACT_HI_DETAIL` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `ACT_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `VAR_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `TIME_` datetime(3) NOT NULL,
+ `BYTEARRAY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `DOUBLE_` double DEFAULT NULL,
+ `LONG_` bigint(20) DEFAULT NULL,
+ `TEXT_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TEXT2_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_HI_DETAIL_PROC_INST` (`PROC_INST_ID_`),
+ KEY `ACT_IDX_HI_DETAIL_ACT_INST` (`ACT_INST_ID_`),
+ KEY `ACT_IDX_HI_DETAIL_TIME` (`TIME_`),
+ KEY `ACT_IDX_HI_DETAIL_NAME` (`NAME_`),
+ KEY `ACT_IDX_HI_DETAIL_TASK_ID` (`TASK_ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_IDENTITYLINK
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_IDENTITYLINK`;
+CREATE TABLE `ACT_HI_IDENTITYLINK` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `GROUP_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_HI_IDENT_LNK_USER` (`USER_ID_`),
+ KEY `ACT_IDX_HI_IDENT_LNK_TASK` (`TASK_ID_`),
+ KEY `ACT_IDX_HI_IDENT_LNK_PROCINST` (`PROC_INST_ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_PROCINST
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_PROCINST`;
+CREATE TABLE `ACT_HI_PROCINST` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `BUSINESS_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `START_TIME_` datetime(3) NOT NULL,
+ `END_TIME_` datetime(3) DEFAULT NULL,
+ `DURATION_` bigint(20) DEFAULT NULL,
+ `START_USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `START_ACT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `END_ACT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `SUPER_PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ UNIQUE KEY `PROC_INST_ID_` (`PROC_INST_ID_`),
+ KEY `ACT_IDX_HI_PRO_INST_END` (`END_TIME_`),
+ KEY `ACT_IDX_HI_PRO_I_BUSKEY` (`BUSINESS_KEY_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_TASKINST
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_TASKINST`;
+CREATE TABLE `ACT_HI_TASKINST` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_DEF_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `PARENT_TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `START_TIME_` datetime(3) NOT NULL,
+ `CLAIM_TIME_` datetime(3) DEFAULT NULL,
+ `END_TIME_` datetime(3) DEFAULT NULL,
+ `DURATION_` bigint(20) DEFAULT NULL,
+ `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `PRIORITY_` int(11) DEFAULT NULL,
+ `DUE_DATE_` datetime(3) DEFAULT NULL,
+ `FORM_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_HI_TASK_INST_PROCINST` (`PROC_INST_ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_HI_VARINST
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_HI_VARINST`;
+CREATE TABLE `ACT_HI_VARINST` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `VAR_TYPE_` varchar(100) COLLATE utf8_bin DEFAULT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `BYTEARRAY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `DOUBLE_` double DEFAULT NULL,
+ `LONG_` bigint(20) DEFAULT NULL,
+ `TEXT_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TEXT2_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `CREATE_TIME_` datetime(3) DEFAULT NULL,
+ `LAST_UPDATED_TIME_` datetime(3) DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_HI_PROCVAR_PROC_INST` (`PROC_INST_ID_`),
+ KEY `ACT_IDX_HI_PROCVAR_NAME_TYPE` (`NAME_`,`VAR_TYPE_`),
+ KEY `ACT_IDX_HI_PROCVAR_TASK_ID` (`TASK_ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_PROCDEF_INFO
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_PROCDEF_INFO`;
+CREATE TABLE `ACT_PROCDEF_INFO` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `INFO_JSON_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ UNIQUE KEY `ACT_UNIQ_INFO_PROCDEF` (`PROC_DEF_ID_`),
+ KEY `ACT_IDX_INFO_PROCDEF` (`PROC_DEF_ID_`),
+ KEY `ACT_FK_INFO_JSON_BA` (`INFO_JSON_ID_`),
+ CONSTRAINT `ACT_FK_INFO_JSON_BA` FOREIGN KEY (`INFO_JSON_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`),
+ CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RE_DEPLOYMENT
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RE_DEPLOYMENT`;
+CREATE TABLE `ACT_RE_DEPLOYMENT` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ `DEPLOY_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `ENGINE_VERSION_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RE_MODEL
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RE_MODEL`;
+CREATE TABLE `ACT_RE_MODEL` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `LAST_UPDATE_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `VERSION_` int(11) DEFAULT NULL,
+ `META_INFO_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EDITOR_SOURCE_VALUE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EDITOR_SOURCE_EXTRA_VALUE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_FK_MODEL_SOURCE` (`EDITOR_SOURCE_VALUE_ID_`),
+ KEY `ACT_FK_MODEL_SOURCE_EXTRA` (`EDITOR_SOURCE_EXTRA_VALUE_ID_`),
+ KEY `ACT_FK_MODEL_DEPLOYMENT` (`DEPLOYMENT_ID_`),
+ CONSTRAINT `ACT_FK_MODEL_DEPLOYMENT` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `ACT_RE_DEPLOYMENT` (`ID_`),
+ CONSTRAINT `ACT_FK_MODEL_SOURCE` FOREIGN KEY (`EDITOR_SOURCE_VALUE_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`),
+ CONSTRAINT `ACT_FK_MODEL_SOURCE_EXTRA` FOREIGN KEY (`EDITOR_SOURCE_EXTRA_VALUE_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RE_PROCDEF
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RE_PROCDEF`;
+CREATE TABLE `ACT_RE_PROCDEF` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `KEY_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `VERSION_` int(11) NOT NULL,
+ `DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `RESOURCE_NAME_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `DGRM_RESOURCE_NAME_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `HAS_START_FORM_KEY_` tinyint(4) DEFAULT NULL,
+ `HAS_GRAPHICAL_NOTATION_` tinyint(4) DEFAULT NULL,
+ `SUSPENSION_STATE_` int(11) DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ `ENGINE_VERSION_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ UNIQUE KEY `ACT_UNIQ_PROCDEF` (`KEY_`,`VERSION_`,`TENANT_ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_DEADLETTER_JOB
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_DEADLETTER_JOB`;
+CREATE TABLE `ACT_RU_DEADLETTER_JOB` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `EXCLUSIVE_` tinyint(1) DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `DUEDATE_` timestamp(3) NULL DEFAULT NULL,
+ `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_FK_DEADLETTER_JOB_EXECUTION` (`EXECUTION_ID_`),
+ KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`),
+ KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF` (`PROC_DEF_ID_`),
+ KEY `ACT_FK_DEADLETTER_JOB_EXCEPTION` (`EXCEPTION_STACK_ID_`),
+ CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`),
+ CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_EVENT_SUBSCR
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_EVENT_SUBSCR`;
+CREATE TABLE `ACT_RU_EVENT_SUBSCR` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `EVENT_TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `EVENT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `ACTIVITY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `CONFIGURATION_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `CREATED_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_EVENT_SUBSCR_CONFIG_` (`CONFIGURATION_`),
+ KEY `ACT_FK_EVENT_EXEC` (`EXECUTION_ID_`),
+ CONSTRAINT `ACT_FK_EVENT_EXEC` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_EXECUTION
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_EXECUTION`;
+CREATE TABLE `ACT_RU_EXECUTION` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `BUSINESS_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `PARENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `SUPER_EXEC_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `ROOT_PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `ACT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `IS_ACTIVE_` tinyint(4) DEFAULT NULL,
+ `IS_CONCURRENT_` tinyint(4) DEFAULT NULL,
+ `IS_SCOPE_` tinyint(4) DEFAULT NULL,
+ `IS_EVENT_SCOPE_` tinyint(4) DEFAULT NULL,
+ `IS_MI_ROOT_` tinyint(4) DEFAULT NULL,
+ `SUSPENSION_STATE_` int(11) DEFAULT NULL,
+ `CACHED_ENT_STATE_` int(11) DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `START_TIME_` datetime(3) DEFAULT NULL,
+ `START_USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `IS_COUNT_ENABLED_` tinyint(4) DEFAULT NULL,
+ `EVT_SUBSCR_COUNT_` int(11) DEFAULT NULL,
+ `TASK_COUNT_` int(11) DEFAULT NULL,
+ `JOB_COUNT_` int(11) DEFAULT NULL,
+ `TIMER_JOB_COUNT_` int(11) DEFAULT NULL,
+ `SUSP_JOB_COUNT_` int(11) DEFAULT NULL,
+ `DEADLETTER_JOB_COUNT_` int(11) DEFAULT NULL,
+ `VAR_COUNT_` int(11) DEFAULT NULL,
+ `ID_LINK_COUNT_` int(11) DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_EXEC_BUSKEY` (`BUSINESS_KEY_`),
+ KEY `ACT_IDC_EXEC_ROOT` (`ROOT_PROC_INST_ID_`),
+ KEY `ACT_FK_EXE_PROCINST` (`PROC_INST_ID_`),
+ KEY `ACT_FK_EXE_PARENT` (`PARENT_ID_`),
+ KEY `ACT_FK_EXE_SUPER` (`SUPER_EXEC_`),
+ KEY `ACT_FK_EXE_PROCDEF` (`PROC_DEF_ID_`),
+ CONSTRAINT `ACT_FK_EXE_PARENT` FOREIGN KEY (`PARENT_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ON DELETE CASCADE,
+ CONSTRAINT `ACT_FK_EXE_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`),
+ CONSTRAINT `ACT_FK_EXE_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `ACT_FK_EXE_SUPER` FOREIGN KEY (`SUPER_EXEC_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_IDENTITYLINK
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_IDENTITYLINK`;
+CREATE TABLE `ACT_RU_IDENTITYLINK` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `GROUP_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_IDENT_LNK_USER` (`USER_ID_`),
+ KEY `ACT_IDX_IDENT_LNK_GROUP` (`GROUP_ID_`),
+ KEY `ACT_IDX_ATHRZ_PROCEDEF` (`PROC_DEF_ID_`),
+ KEY `ACT_FK_TSKASS_TASK` (`TASK_ID_`),
+ KEY `ACT_FK_IDL_PROCINST` (`PROC_INST_ID_`),
+ CONSTRAINT `ACT_FK_ATHRZ_PROCEDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`),
+ CONSTRAINT `ACT_FK_IDL_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `ACT_RU_TASK` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_INTEGRATION
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_INTEGRATION`;
+CREATE TABLE `ACT_RU_INTEGRATION` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `FLOW_NODE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `CREATED_DATE_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_FK_INT_EXECUTION` (`EXECUTION_ID_`),
+ KEY `ACT_FK_INT_PROC_INST` (`PROCESS_INSTANCE_ID_`),
+ KEY `ACT_FK_INT_PROC_DEF` (`PROC_DEF_ID_`),
+ CONSTRAINT `ACT_FK_INT_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ON DELETE CASCADE,
+ CONSTRAINT `ACT_FK_INT_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`),
+ CONSTRAINT `ACT_FK_INT_PROC_INST` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_JOB
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_JOB`;
+CREATE TABLE `ACT_RU_JOB` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `EXCLUSIVE_` tinyint(1) DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `RETRIES_` int(11) DEFAULT NULL,
+ `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `DUEDATE_` timestamp(3) NULL DEFAULT NULL,
+ `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_FK_JOB_EXECUTION` (`EXECUTION_ID_`),
+ KEY `ACT_FK_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`),
+ KEY `ACT_FK_JOB_PROC_DEF` (`PROC_DEF_ID_`),
+ KEY `ACT_FK_JOB_EXCEPTION` (`EXCEPTION_STACK_ID_`),
+ CONSTRAINT `ACT_FK_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`),
+ CONSTRAINT `ACT_FK_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_SUSPENDED_JOB
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_SUSPENDED_JOB`;
+CREATE TABLE `ACT_RU_SUSPENDED_JOB` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `EXCLUSIVE_` tinyint(1) DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `RETRIES_` int(11) DEFAULT NULL,
+ `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `DUEDATE_` timestamp(3) NULL DEFAULT NULL,
+ `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_FK_SUSPENDED_JOB_EXECUTION` (`EXECUTION_ID_`),
+ KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`),
+ KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF` (`PROC_DEF_ID_`),
+ KEY `ACT_FK_SUSPENDED_JOB_EXCEPTION` (`EXCEPTION_STACK_ID_`),
+ CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`),
+ CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_TASK
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_TASK`;
+CREATE TABLE `ACT_RU_TASK` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `PARENT_TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_DEF_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `DELEGATION_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PRIORITY_` int(11) DEFAULT NULL,
+ `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `DUE_DATE_` datetime(3) DEFAULT NULL,
+ `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `SUSPENSION_STATE_` int(11) DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ `FORM_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `CLAIM_TIME_` datetime(3) DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_TASK_CREATE` (`CREATE_TIME_`),
+ KEY `ACT_FK_TASK_EXE` (`EXECUTION_ID_`),
+ KEY `ACT_FK_TASK_PROCINST` (`PROC_INST_ID_`),
+ KEY `ACT_FK_TASK_PROCDEF` (`PROC_DEF_ID_`),
+ CONSTRAINT `ACT_FK_TASK_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_TASK_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`),
+ CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_TIMER_JOB
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_TIMER_JOB`;
+CREATE TABLE `ACT_RU_TIMER_JOB` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL,
+ `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `EXCLUSIVE_` tinyint(1) DEFAULT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `RETRIES_` int(11) DEFAULT NULL,
+ `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `DUEDATE_` timestamp(3) NULL DEFAULT NULL,
+ `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '',
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_FK_TIMER_JOB_EXECUTION` (`EXECUTION_ID_`),
+ KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`),
+ KEY `ACT_FK_TIMER_JOB_PROC_DEF` (`PROC_DEF_ID_`),
+ KEY `ACT_FK_TIMER_JOB_EXCEPTION` (`EXCEPTION_STACK_ID_`),
+ CONSTRAINT `ACT_FK_TIMER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`),
+ CONSTRAINT `ACT_FK_TIMER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_TIMER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_TIMER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for ACT_RU_VARIABLE
+-- ----------------------------
+DROP TABLE IF EXISTS `ACT_RU_VARIABLE`;
+CREATE TABLE `ACT_RU_VARIABLE` (
+ `ID_` varchar(64) COLLATE utf8_bin NOT NULL,
+ `REV_` int(11) DEFAULT NULL,
+ `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `NAME_` varchar(255) COLLATE utf8_bin NOT NULL,
+ `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `BYTEARRAY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
+ `DOUBLE_` double DEFAULT NULL,
+ `LONG_` bigint(20) DEFAULT NULL,
+ `TEXT_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ `TEXT2_` varchar(4000) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ID_`),
+ KEY `ACT_IDX_VARIABLE_TASK_ID` (`TASK_ID_`),
+ KEY `ACT_FK_VAR_EXE` (`EXECUTION_ID_`),
+ KEY `ACT_FK_VAR_PROCINST` (`PROC_INST_ID_`),
+ KEY `ACT_FK_VAR_BYTEARRAY` (`BYTEARRAY_ID_`),
+ CONSTRAINT `ACT_FK_VAR_BYTEARRAY` FOREIGN KEY (`BYTEARRAY_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`),
+ CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`),
+ CONSTRAINT `ACT_FK_VAR_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for back_reason
+-- ----------------------------
+DROP TABLE IF EXISTS `back_reason`;
+CREATE TABLE `back_reason` (
+ `back_id` int(11) NOT NULL AUTO_INCREMENT,
+ `task_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `reason` text COLLATE utf8_bin,
+ `title` varchar(2000) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`back_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for candidate_user
+-- ----------------------------
+DROP TABLE IF EXISTS `candidate_user`;
+CREATE TABLE `candidate_user` (
+ `ca_id` int(11) NOT NULL AUTO_INCREMENT,
+ `task_id` varchar(225) COLLATE utf8_bin DEFAULT NULL,
+ `user_id` varchar(225) COLLATE utf8_bin DEFAULT NULL,
+ PRIMARY KEY (`ca_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for data_task
+-- ----------------------------
+DROP TABLE IF EXISTS `data_task`;
+CREATE TABLE `data_task` (
+ `data_task_id` int(11) NOT NULL AUTO_INCREMENT,
+ `table_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `table_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `task_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `task_key` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `process_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `task_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `is_back` int(11) DEFAULT '0',
+ `assignee` varchar(255) COLLATE utf8_bin DEFAULT '0',
+ PRIMARY KEY (`data_task_id`),
+ KEY `tableid` (`table_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for data_task_his
+-- ----------------------------
+DROP TABLE IF EXISTS `data_task_his`;
+CREATE TABLE `data_task_his` (
+ `his_task_id` int(11) NOT NULL AUTO_INCREMENT,
+ `table_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `table_id` varchar(2000) COLLATE utf8_bin DEFAULT NULL,
+ `task_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `task_key` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `process_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `task_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+ `is_back` int(11) DEFAULT '0',
+ `assignee` varchar(255) COLLATE utf8_bin DEFAULT '0',
+ PRIMARY KEY (`his_task_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/application.yml b/hcframe-parent/hcframe-activiti/src/main/resources/application.yml
new file mode 100644
index 0000000..ca64daf
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/application.yml
@@ -0,0 +1,92 @@
+spring:
+ application:
+ name: activiti-cloud
+ #Activiti property configuration
+ activiti:
+ database-schema-update: true
+ history-level: full
+ db-history-used: true
+# redis:
+# database: 0
+# host: 192.168.100.145
+# port: 6379
+# password: root
+# lettuce:
+# pool:
+# # 连接池中的最大空闲连接 默认8
+# max-idle: 8
+# # 连接池中的最小空闲连接 默认0
+# min-idle: 0
+# # 连接池最大连接数 默认8 ,负数表示没有限制
+# max-active: 8
+# # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
+# max-wait: -1
+# timeout: 30000
+ datasource:
+ url: jdbc:mysql://192.168.4.119:3306/activiti7?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
+ username: root
+ password: root
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ type: com.alibaba.druid.pool.DruidDataSource
+ initialization-mode: always
+ initialSize: 5
+ minIdle: 5
+ maxActive: 20
+ maxWait: 60000
+ timeBetweenEvictionRunsMillis: 60000
+ minEvictableIdleTimeMillis: 300000
+ validationQuery: select 'x'
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ poolPreparedStatements: true
+ filters: stat,wall,slf4j
+ maxPoolPreparedStatementPerConnectionSize: 20
+ useGlobalDataSourceStat: true
+ connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
+ mvc:
+ view:
+ prefix: /templates/
+ suffix: .html
+ static-path-pattern: /static/**
+mybatis:
+ mapper-locations: classpath:mapping/**
+ type-aliases-package: com.hcframe.activiti.entity
+logging:
+ level:
+ com.hcframe.activiti: debug
+ pattern:
+ console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(-%5p) %clr(${PID:- }){magenta} --- %clr([%15.15t]){faint} %highlight(%-80.80logger{300}){cyan} %clr(:) %m %n%wEx"
+server:
+ port: 8080
+ servlet:
+ context-path: /activiti
+# 是否开启redis 用户登录,若开启此项,需要配置redis节点及相关配置,若不开启,需要注释掉redis相关配置信息
+isRedisLogin: true
+# 用户登陆超时设置,单位为小时,此值不能为0
+login-time-out: 4
+swagger:
+ # 配置controller包路径
+ path: com.hcframe.activiti.controller
+ # 是否开启权限
+ enableAuth: false
+ # 用户名
+ username: admin
+ # 密码
+ password: admin
+# Druid连接配置
+druid:
+ # Druid用户名
+ username: test
+ # Druid密码
+ password: test
+ # Druid 允许访问的IP,默认全部允许
+ # allow: 127.0.0.1
+ # Druid 拒绝访问的IP,默认不拒绝全部
+# deny: 10.0.0.2
+# 是否开启controller 日志显示
+show-controller-log: true
+eureka:
+ client:
+ service-url:
+ defaultZone: http://admin:123456@192.168.4.119:8081/eureka/
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/banner.txt b/hcframe-parent/hcframe-activiti/src/main/resources/banner.txt
new file mode 100644
index 0000000..0b703cf
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/banner.txt
@@ -0,0 +1,25 @@
+ __ __ ______ ______
+| \ | \ / \ / \
+| $$ | $$| $$$$$$\ | $$$$$$\ ______ ______ ______ ____ ______
+| $$__| $$| $$ \$$ | $$_ \$$/ \ | \ | \ \ / \
+| $$ $$| $$ | $$ \ | $$$$$$\ \$$$$$$\| $$$$$$\$$$$\| $$$$$$\
+| $$$$$$$$| $$ __ | $$$$ | $$ \$$/ $$| $$ | $$ | $$| $$ $$
+| $$ | $$| $$__/ \ | $$ | $$ | $$$$$$$| $$ | $$ | $$| $$$$$$$$ __
+| $$ | $$ \$$ $$ | $$ | $$ \$$ $$| $$ | $$ | $$ \$$ \| \
+ \$$ \$$ \$$$$$$ \$$ \$$ \$$$$$$$ \$$ \$$ \$$ \$$$$$$$ \$$
+
+
+
+
+ __ __ _______ __ __
+| \ | \ | \ | \ | \
+| $$\ | $$ ______ | $$$$$$$\ __ __ ______ | $$ | $$ ______ ______ ______
+| $$$\| $$ / \ | $$__/ $$| \ | \ / \ | $$__| $$ / \ / \ / \
+| $$$$\ $$| $$$$$$\ | $$ $$| $$ | $$| $$$$$$\ | $$ $$| $$$$$$\| $$$$$$\| $$$$$$\
+| $$\$$ $$| $$ | $$ | $$$$$$$\| $$ | $$| $$ | $$ | $$$$$$$$| $$ | $$| $$ | $$| $$ $$
+| $$ \$$$$| $$__/ $$ | $$__/ $$| $$__/ $$| $$__| $$ | $$ | $$| $$__/ $$| $$__/ $$| $$$$$$$$ __
+| $$ \$$$ \$$ $$ | $$ $$ \$$ $$ \$$ $$ | $$ | $$ \$$ $$| $$ $$ \$$ \| \
+ \$$ \$$ \$$$$$$ \$$$$$$$ \$$$$$$ _\$$$$$$$ \$$ \$$ \$$$$$$ | $$$$$$$ \$$$$$$$ \$$
+ | \__| $$ | $$
+ \$$ $$ | $$
+ \$$$$$$ \$$
\ No newline at end of file
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/baoxiao.bpmn b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/baoxiao.bpmn
new file mode 100644
index 0000000..3d5e69a
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/baoxiao.bpmn
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+ SequenceFlow_1tepjd8
+
+
+
+ SequenceFlow_16kfu0c
+ SequenceFlow_08rzzfi
+ SequenceFlow_16octdj
+ SequenceFlow_05mw1rb
+
+
+
+ ${money>5000}
+
+
+ ${money>2000}
+
+
+ ${money<=2000}
+
+
+ SequenceFlow_1tepjd8
+ SequenceFlow_16kfu0c
+
+
+ SequenceFlow_08rzzfi
+ SequenceFlow_0fj2awn
+
+
+ SequenceFlow_05mw1rb
+ SequenceFlow_0r5llta
+
+
+ SequenceFlow_1isb5u2
+ SequenceFlow_0fj2awn
+ SequenceFlow_0r5llta
+
+
+
+
+
+ SequenceFlow_16octdj
+ SequenceFlow_1isb5u2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/task__111.bpmn b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/task__111.bpmn
new file mode 100644
index 0000000..62ba418
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/task__111.bpmn
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+ SequenceFlow_09zceg0
+
+
+
+ SequenceFlow_09zceg0
+ SequenceFlow_13ur3ks
+
+
+ SequenceFlow_13ur3ks
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/task__111_v1.bpmn b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/task__111_v1.bpmn
new file mode 100644
index 0000000..62ba418
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/task__111_v1.bpmn
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+ SequenceFlow_09zceg0
+
+
+
+ SequenceFlow_09zceg0
+ SequenceFlow_13ur3ks
+
+
+ SequenceFlow_13ur3ks
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/数据采集(数据应用室发起).bpmn b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/数据采集(数据应用室发起).bpmn
new file mode 100644
index 0000000..640ed89
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/数据采集(数据应用室发起).bpmn
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/数据采集(数据应用室发起).xml b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/数据采集(数据应用室发起).xml
new file mode 100644
index 0000000..77b7692
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/bpmn/数据采集(数据应用室发起).xml
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/mapping/BackReasonDao.xml b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/BackReasonDao.xml
new file mode 100644
index 0000000..653f9ce
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/BackReasonDao.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/mapping/CandidateUserDao.xml b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/CandidateUserDao.xml
new file mode 100644
index 0000000..f982368
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/CandidateUserDao.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/mapping/DataTaskDao.xml b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/DataTaskDao.xml
new file mode 100644
index 0000000..2d06f60
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/DataTaskDao.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-activiti/src/main/resources/mapping/DataTaskHisDao.xml b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/DataTaskHisDao.xml
new file mode 100644
index 0000000..f348388
--- /dev/null
+++ b/hcframe-parent/hcframe-activiti/src/main/resources/mapping/DataTaskHisDao.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hcframe-parent/hcframe-es/pom.xml b/hcframe-parent/hcframe-es/pom.xml
new file mode 100644
index 0000000..f7143d3
--- /dev/null
+++ b/hcframe-parent/hcframe-es/pom.xml
@@ -0,0 +1,56 @@
+
+
+
+ parent
+ com.hcframe
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ hcframe-es
+
+
+ 8
+ 8
+ 7.6.2
+
+
+
+ com.hcframe
+ hcframe-base
+ 1.2.1-SNAPSHOT
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-high-level-client
+ ${elasticsearch.version}
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-client
+
+
+ org.elasticsearch
+ elasticsearch
+
+
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-client
+ ${elasticsearch.version}
+
+
+ org.elasticsearch
+ elasticsearch
+ ${elasticsearch.version}
+
+
+ com.hcframe
+ hcframe-starter
+ 1.0-SNAPSHOT
+
+
+
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/EsApplication.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/EsApplication.java
new file mode 100644
index 0000000..7417644
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/EsApplication.java
@@ -0,0 +1,27 @@
+package com.hcframe.es;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+@EnableAspectJAutoProxy(proxyTargetClass = true)
+@EnableSwagger2
+@ServletComponentScan
+@EnableCaching
+//@EnableDiscoveryClient
+//@EnableFeignClients
+@ComponentScan(basePackages = {"com.hcframe.**"})
+public class EsApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(EsApplication.class, args);
+ }
+
+
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/ServletInitializer.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/ServletInitializer.java
new file mode 100644
index 0000000..933a07a
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/ServletInitializer.java
@@ -0,0 +1,13 @@
+package com.hcframe.es;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+public class ServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(EsApplication.class);
+ }
+
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/annotation/LogAnno.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/annotation/LogAnno.java
new file mode 100644
index 0000000..dbf425d
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/annotation/LogAnno.java
@@ -0,0 +1,26 @@
+package com.hcframe.es.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 日志注解
+ *
+ * @author lhc
+ */
+// 方法注解
+@Target(ElementType.METHOD)
+// 运行时可见
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LogAnno {
+ // 记录日志的操作类型
+ String operateType();
+ // 记录日志主键
+ String primaryKey() default "id";
+ // 记录日志表
+ String tableName() default "-";
+
+ boolean isBefore() default false;
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/config/CommandLineRunnerImpl.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/config/CommandLineRunnerImpl.java
new file mode 100644
index 0000000..5659c73
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/config/CommandLineRunnerImpl.java
@@ -0,0 +1,36 @@
+package com.hcframe.es.config;
+
+import com.hcframe.base.module.cache.CacheService;
+import com.hcframe.base.module.datasource.utils.DataSourceUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @author lhc
+ * @date 2020-10-09
+ * @description springboot启动执行配置类
+ */
+@Component
+public class CommandLineRunnerImpl implements CommandLineRunner {
+
+ private static final Logger logger = LoggerFactory.getLogger(CommandLineRunnerImpl.class);
+
+ @Autowired
+ List cacheServices;
+
+ @Override
+ public void run(String... args) {
+// DataSourceUtil.initDataSource();
+ // 初始化缓存
+// for (CacheService cacheService : cacheServices) {
+// cacheService.initTableCache();
+// }
+ logger.info("start success");
+ }
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/config/ShiroRealmConfig.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/config/ShiroRealmConfig.java
new file mode 100644
index 0000000..f9a0bdf
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/config/ShiroRealmConfig.java
@@ -0,0 +1,77 @@
+package com.hcframe.es.config;
+
+import com.hcframe.base.module.auth.dao.FtUserDao;
+import com.hcframe.base.module.auth.entity.FtUser;
+import com.hcframe.base.module.shiro.service.ShiroType;
+import com.hcframe.base.module.shiro.service.SystemRealm;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.LinkedHashMap;
+
+/**
+ * @author lhc
+ * @date 2020-07-28
+ * @decription shiro 配置类
+ */
+@Component
+public class ShiroRealmConfig implements SystemRealm {
+
+ @Resource
+ FtUserDao ftUserDao;
+
+ /**
+ * 根据用户信息注入权限
+ * @param user 用户信息
+ * @return 权限信息
+ */
+ @Override
+ public SimpleAuthorizationInfo setAuthoriztion(Object user) {
+ return new SimpleAuthorizationInfo();
+ }
+
+ /**
+ * 根据用户Id查询用户信息并注入到shiro框架中
+ * @param userId 用户id
+ * @return 用户信息
+ */
+ @Override
+ public Object findByUserId(String userId) {
+ return ftUserDao.selectOne(FtUser.builder().userId(Integer.parseInt(userId)).build());
+ }
+
+ /**
+ * 配置拦截及放行路径
+ * @return 返回拦截及放行路径Map
+ */
+ @Override
+ public LinkedHashMap setShiroUrl() {
+ LinkedHashMap map = new LinkedHashMap<>();
+// // 用户登陆
+// map.put("/ftUser/login", ShiroType.ANON);
+// // Vue静态资源
+// map.put("/img/**", ShiroType.ANON);
+// map.put("/static/**", ShiroType.ANON);
+// map.put("/tinymce/**", ShiroType.ANON);
+// map.put("/favicon.ico", ShiroType.ANON);
+// map.put("/manifest.json", ShiroType.ANON);
+// map.put("/robots.txt", ShiroType.ANON);
+// map.put("/precache*", ShiroType.ANON);
+// map.put("/service-worker.js", ShiroType.ANON);
+// // swagger UI 静态资源
+// map.put("/swagger-ui.html",ShiroType.ANON);
+// map.put("/doc.html",ShiroType.ANON);
+// map.put("/swagger-resources/**",ShiroType.ANON);
+// map.put("/webjars/**",ShiroType.ANON);
+// map.put("/v2/api-docs",ShiroType.ANON);
+// map.put("/v2/api-docs-ext",ShiroType.ANON);
+// map.put("/swagger/**",ShiroType.ANON);
+// // druid 资源路径
+// map.put("/druid/**",ShiroType.ANON);
+ // 其余路径均拦截
+ map.put("/**", ShiroType.ANON);
+ return map;
+ }
+
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/controller/SearchController.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/controller/SearchController.java
new file mode 100644
index 0000000..ee6ec7a
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/controller/SearchController.java
@@ -0,0 +1,48 @@
+package com.hcframe.es.controller;
+
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.es.service.SearchService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@Api(tags = "ES搜索相关接口")
+@RequestMapping("/search")
+public class SearchController {
+
+ @Resource
+ SearchService searchService;
+
+ @ApiOperation(value = "全文检索接口样例")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "text", value = "关键词", required = true),
+ @ApiImplicitParam(name = "pageNum", value = "页码", required = true),
+ @ApiImplicitParam(name = "pageSize", value = "每页显示条数", required = true),
+ @ApiImplicitParam(name = "indexType", value = "索引,以逗号隔开", required = true),
+ })
+ @GetMapping("/fulltext")
+ public ResultVO getFullText(HttpServletRequest request, String text, Integer pageNum, Integer pageSize, String indexType) {
+ return searchService.getFullText(request, text,pageNum,pageSize,indexType);
+ }
+
+ @ApiOperation(value = "高级检索接口样例")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "data", value = "查询条件,在前端将查询对象通过JSON.toString(obj)方法进行格式化成字符串", required = true),
+ @ApiImplicitParam(name = "pageNum", value = "页码", required = true),
+ @ApiImplicitParam(name = "pageSize", value = "每页显示条数", required = true),
+ @ApiImplicitParam(name = "index", value = "索引", required = true),
+ })
+ @GetMapping("/expertSearch")
+ public ResultVO expertSearch(HttpServletRequest request,String data,Integer pageNum,Integer pageSize,String index) {
+ return searchService.expertSearch(request, data, pageNum, pageSize, index);
+ }
+
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/entity/FtUser.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/entity/FtUser.java
new file mode 100644
index 0000000..75d2714
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/entity/FtUser.java
@@ -0,0 +1,76 @@
+package com.hcframe.es.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * (FtUser)实体类
+ *
+ * @author lhc
+ * @since 2020-02-11 19:29:10
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class FtUser implements Serializable {
+ private static final long serialVersionUID = 115625188750279606L;
+ /**
+ * 主键ID
+ */
+ @Id
+ @GeneratedValue(
+ strategy = GenerationType.IDENTITY,
+ generator = "select USER_ID.nextval from dual")
+ private Integer userId;
+ /**
+ * 用户名
+ */
+ private String username;
+ /**
+ * 密码
+ */
+ private String password;
+ /**
+ * 手机号
+ */
+ private String phone;
+ /**
+ * 用户类型
+ */
+ private Integer userType;
+ /**
+ * 启用/禁用
+ */
+ private Integer enabled;
+ /**
+ * 用户信息主键
+ */
+ private Integer userInfoId;
+ /**
+ * 创建时间
+ */
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ /**
+ * 修改时间
+ */
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ private Integer orgId;
+
+
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/esmapper/EsMapper.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/esmapper/EsMapper.java
new file mode 100644
index 0000000..d9db31a
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/esmapper/EsMapper.java
@@ -0,0 +1,14 @@
+package com.hcframe.es.esmapper;
+
+import org.elasticsearch.action.search.SearchResponse;
+
+import java.util.Map;
+
+public interface EsMapper {
+
+
+ SearchResponse fullTextSearch(String text, Integer pageNum, Integer pageSize, String[] indexArr, String[] includeFields, String[] excludeFields);
+
+
+ SearchResponse expertSearch(Map map, Integer pageNum, Integer pageSize, String indexArr, String[] includeFields, String[] excludeFields);
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/esmapper/impl/EsMapperImpl.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/esmapper/impl/EsMapperImpl.java
new file mode 100644
index 0000000..60c8780
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/esmapper/impl/EsMapperImpl.java
@@ -0,0 +1,80 @@
+package com.hcframe.es.esmapper.impl;
+
+import com.hcframe.base.common.ServiceException;
+import com.hcframe.es.esmapper.EsMapper;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.Map;
+
+@Component
+public class EsMapperImpl implements EsMapper {
+
+ @Autowired
+ private RestHighLevelClient client;
+
+
+ @Override
+ public SearchResponse fullTextSearch(String text, Integer pageNum,
+ Integer pageSize, String[] indexArr, String[] includeFields,
+ String[] excludeFields) {
+ // 设置高亮配置
+ HighlightBuilder highlightBuilder = new HighlightBuilder();
+ HighlightBuilder.Field highlight = new HighlightBuilder.Field("*");
+ highlight.highlighterType("unified");
+ highlightBuilder.field(highlight);
+ // 配置搜索条件
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+ searchSourceBuilder
+ .highlighter(highlightBuilder)
+ .query(QueryBuilders.queryStringQuery(text))
+ .size(pageSize)
+ .from((pageNum - 1) * pageSize)
+ .fetchSource(includeFields,excludeFields);
+ // 建立搜索Request
+ SearchRequest searchRequest = new SearchRequest(indexArr);
+ searchRequest.source(searchSourceBuilder);
+ try {
+ // 通过客户端搜索
+ return client.search(searchRequest, RequestOptions.DEFAULT);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new ServiceException("全文检索,全文检索服务器异常");
+ }
+ }
+
+ @Override
+ public SearchResponse expertSearch(Map map, Integer pageNum, Integer pageSize, String indexArr, String[] includeFields, String[] excludeFields) {
+ // 建立联合查询对象
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+ // 遍历查询条件map,进行模糊查询
+ for (Map.Entry entry : map.entrySet()) {
+ String key = entry.getKey();
+ key = key + ".keyword";
+ boolQueryBuilder.filter(QueryBuilders.wildcardQuery(key, "*" + entry.getValue() + "*"));
+ }
+ // 创建搜索builder对象
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+ searchSourceBuilder
+ .query(boolQueryBuilder)
+ .size(pageSize)
+ .from((pageNum - 1) * pageSize)
+ .fetchSource(includeFields,excludeFields);
+ SearchRequest searchRequest = new SearchRequest(indexArr);
+ searchRequest.source(searchSourceBuilder);
+ try {
+ return client.search(searchRequest, RequestOptions.DEFAULT);
+ } catch (IOException e) {
+ throw new ServiceException("高级检索,全文检索服务器异常");
+ }
+ }
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/service/SearchService.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/service/SearchService.java
new file mode 100644
index 0000000..d4264f8
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/service/SearchService.java
@@ -0,0 +1,15 @@
+package com.hcframe.es.service;
+
+
+import com.hcframe.base.common.ResultVO;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface SearchService {
+
+
+ ResultVO getFullText(HttpServletRequest request, String text, Integer pageNum, Integer pageSize, String indexType);
+
+
+ ResultVO expertSearch(HttpServletRequest request, String data, Integer pageNum, Integer pageSize, String indexType);
+}
diff --git a/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/service/impl/SearchServiceImpl.java b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/service/impl/SearchServiceImpl.java
new file mode 100644
index 0000000..c0033c6
--- /dev/null
+++ b/hcframe-parent/hcframe-es/src/main/java/com/hcframe/es/service/impl/SearchServiceImpl.java
@@ -0,0 +1,98 @@
+package com.hcframe.es.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.hcframe.base.common.ResultVO;
+import com.hcframe.es.esmapper.EsMapper;
+import com.hcframe.es.service.SearchService;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.common.text.Text;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.SearchHits;
+import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class SearchServiceImpl implements SearchService {
+
+ @Resource
+ EsMapper esMapper;
+
+ @Override
+ public ResultVO getFullText(HttpServletRequest request, String text, Integer pageNum,
+ Integer pageSize, String indexType) {
+ // 获取查询索引数组
+ String[] indexArr = indexType.split(",");
+ // 返回结果包含字段的数组,默认返回全部,需要返回全部时,必须传null
+ String[] includeFields = null;
+ // 返回结果排除的字段数组,不排除字段时,必须传null
+ String[] excludeFields = null;
+ SearchResponse searchResponse = esMapper
+ .fullTextSearch(text, pageNum, pageSize,
+ indexArr, includeFields, excludeFields);
+ // 返回结果
+ Map resultMap = new HashMap<>(4);
+ // 返回结果列表
+ List