From 992e67475383873d71d68b778c905bc1878775cb Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Tue, 10 May 2022 09:57:08 +0800
Subject: [PATCH] 删除事务模块
---
/dev/null | 80 ----------------------------------------
1 files changed, 0 insertions(+), 80 deletions(-)
diff --git a/src/main/java/org/springblade/flow/business/controller/WorkController.java b/src/main/java/org/springblade/flow/business/controller/WorkController.java
deleted file mode 100644
index 21addaf..0000000
--- a/src/main/java/org/springblade/flow/business/controller/WorkController.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.flowable.engine.TaskService;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.business.service.FlowBusinessService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * 流程事务通用接口
- *
- * @author Chill
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/work")
-@Api(value = "流程事务通用接口", tags = "流程事务通用接口")
-public class WorkController {
-
- private final TaskService taskService;
- private final FlowEngineService flowEngineService;
- private final FlowBusinessService flowBusinessService;
-
- /**
- * 发起事务列表页
- */
- @GetMapping("start-list")
- @ApiOperationSupport(order = 1)
- @ApiOperation(value = "发起事务列表页", notes = "传入流程类型")
- public R<IPage<FlowProcess>> startList(@ApiParam("流程类型") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
- IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
- return R.data(pages);
- }
-
- /**
- * 待签事务列表页
- */
- @GetMapping("claim-list")
- @ApiOperationSupport(order = 2)
- @ApiOperation(value = "待签事务列表页", notes = "传入流程信息")
- public R<IPage<BladeFlow>> claimList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
- IPage<BladeFlow> pages = flowBusinessService.selectClaimPage(Condition.getPage(query), bladeFlow);
- return R.data(pages);
- }
-
- /**
- * 待办事务列表页
- */
- @GetMapping("todo-list")
- @ApiOperationSupport(order = 3)
- @ApiOperation(value = "待办事务列表页", notes = "传入流程信息")
- public R<IPage<BladeFlow>> todoList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
- IPage<BladeFlow> pages = flowBusinessService.selectTodoPage(Condition.getPage(query), bladeFlow);
- return R.data(pages);
- }
-
- /**
- * 已发事务列表页
- */
- @GetMapping("send-list")
- @ApiOperationSupport(order = 4)
- @ApiOperation(value = "已发事务列表页", notes = "传入流程信息")
- public R<IPage<BladeFlow>> sendList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
- IPage<BladeFlow> pages = flowBusinessService.selectSendPage(Condition.getPage(query), bladeFlow);
- return R.data(pages);
- }
-
- /**
- * 办结事务列表页
- */
- @GetMapping("done-list")
- @ApiOperationSupport(order = 5)
- @ApiOperation(value = "办结事务列表页", notes = "传入流程信息")
- public R<IPage<BladeFlow>> doneList(@ApiParam("流程信息") BladeFlow bladeFlow, Query query) {
- IPage<BladeFlow> pages = flowBusinessService.selectDonePage(Condition.getPage(query), bladeFlow);
- return R.data(pages);
- }
-
- /**
- * 签收事务
- *
- * @param taskId 任务id
- */
- @PostMapping("claim-task")
- @ApiOperationSupport(order = 6)
- @ApiOperation(value = "签收事务", notes = "传入流程信息")
- public R claimTask(@ApiParam("任务id") String taskId) {
- taskService.claim(taskId, TaskUtil.getTaskUser());
- return R.success("签收事务成功");
- }
-
- /**
- * 完成任务
- *
- * @param flow 请假信息
- */
- @PostMapping("complete-task")
- @ApiOperationSupport(order = 7)
- @ApiOperation(value = "完成任务", notes = "传入流程信息")
- public R completeTask(@ApiParam("任务信息") @RequestBody BladeFlow flow) {
- return R.status(flowBusinessService.completeTask(flow));
- }
-
- /**
- * 删除任务
- *
- * @param taskId 任务id
- * @param reason 删除原因
- */
- @PostMapping("delete-task")
- @ApiOperationSupport(order = 8)
- @ApiOperation(value = "删除任务", notes = "传入流程信息")
- public R deleteTask(@ApiParam("任务id") String taskId, @ApiParam("删除原因") String reason) {
- taskService.deleteTask(taskId, reason);
- return R.success("删除任务成功");
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java b/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java
deleted file mode 100644
index 8fb4227..0000000
--- a/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.flow.core.entity.BladeFlow;
-
-/**
- * 流程业务类
- *
- * @author Chill
- */
-public interface FlowBusinessService {
-
- /**
- * 流程待签列表
- *
- * @param page 分页工具
- * @param bladeFlow 流程类
- * @return
- */
- IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
- /**
- * 流程待办列表
- *
- * @param page 分页工具
- * @param bladeFlow 流程类
- * @return
- */
- IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
- /**
- * 流程已发列表
- *
- * @param page 分页工具
- * @param bladeFlow 流程类
- * @return
- */
- IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
- /**
- * 流程办结列表
- *
- * @param page 分页工具
- * @param bladeFlow 流程类
- * @return
- */
- IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
- /**
- * 完成任务
- *
- * @param leave 请假信息
- * @return boolean
- */
- boolean completeTask(BladeFlow leave);
-}
diff --git a/src/main/java/org/springblade/flow/business/service/IFlowService.java b/src/main/java/org/springblade/flow/business/service/IFlowService.java
deleted file mode 100644
index 60aafb3..0000000
--- a/src/main/java/org/springblade/flow/business/service/IFlowService.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service;
-
-import org.springblade.flow.core.entity.BladeFlow;
-
-import java.util.Map;
-
-/**
- * 工作流调用接口.
- *
- * @author Chill
- */
-public interface IFlowService {
-
- /**
- * 开启流程
- *
- * @param processDefinitionId 流程id
- * @param businessKey 业务key
- * @param variables 参数
- * @return BladeFlow
- */
- BladeFlow startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables);
-
- /**
- * 开启流程
- *
- * @param processDefinitionKey 流程标识
- * @param businessKey 业务key
- * @param variables 参数
- * @return BladeFlow
- */
- BladeFlow startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables);
-
- /**
- * 完成任务
- *
- * @param taskId 任务id
- * @param processInstanceId 流程实例id
- * @param comment 评论
- * @param variables 参数
- * @return R
- */
- boolean completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables);
-
- /**
- * 获取流程变量
- *
- * @param taskId 任务id
- * @param variableName 变量名
- * @return R
- */
- Object taskVariable(String taskId, String variableName);
-
- /**
- * 获取流程变量集合
- *
- * @param taskId 任务id
- * @return R
- */
- Map<String, Object> taskVariables(String taskId);
-}
diff --git a/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java b/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
deleted file mode 100644
index 0db6bba..0000000
--- a/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.history.HistoricProcessInstanceQuery;
-import org.flowable.task.api.TaskQuery;
-import org.flowable.task.api.history.HistoricTaskInstance;
-import org.flowable.task.api.history.HistoricTaskInstanceQuery;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.business.service.FlowBusinessService;
-import org.springblade.flow.core.constant.ProcessConstant;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.utils.FlowCache;
-import org.springframework.stereotype.Service;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 流程业务实现类
- *
- * @author Chill
- */
-@Service
-@AllArgsConstructor
-public class FlowBusinessServiceImpl implements FlowBusinessService {
-
- private final TaskService taskService;
- private final HistoryService historyService;
-
- @Override
- public IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
- String taskUser = TaskUtil.getTaskUser();
- String taskGroup = TaskUtil.getCandidateGroup();
- List<BladeFlow> flowList = new LinkedList<>();
-
- // 个人等待签收的任务
- TaskQuery claimUserQuery = taskService.createTaskQuery().taskCandidateUser(taskUser)
- .includeProcessVariables().active().orderByTaskCreateTime().desc();
- // 定制流程等待签收的任务
- TaskQuery claimRoleWithTenantIdQuery = taskService.createTaskQuery().taskTenantId(AuthUtil.getTenantId()).taskCandidateGroupIn(Func.toStrList(taskGroup))
- .includeProcessVariables().active().orderByTaskCreateTime().desc();
- // 通用流程等待签收的任务
- TaskQuery claimRoleWithoutTenantIdQuery = taskService.createTaskQuery().taskWithoutTenantId().taskCandidateGroupIn(Func.toStrList(taskGroup))
- .includeProcessVariables().active().orderByTaskCreateTime().desc();
-
- // 构建列表数据
- buildFlowTaskList(bladeFlow, flowList, claimUserQuery, FlowEngineConstant.STATUS_CLAIM);
- buildFlowTaskList(bladeFlow, flowList, claimRoleWithTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
- buildFlowTaskList(bladeFlow, flowList, claimRoleWithoutTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
-
- // 计算总数
- long count = claimUserQuery.count() + claimRoleWithTenantIdQuery.count() + claimRoleWithoutTenantIdQuery.count();
- // 设置页数
- page.setSize(count);
- // 设置总数
- page.setTotal(count);
- // 设置数据
- page.setRecords(flowList);
- return page;
- }
-
- @Override
- public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
- String taskUser = TaskUtil.getTaskUser();
- List<BladeFlow> flowList = new LinkedList<>();
-
- // 已签收的任务
- TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
- .includeProcessVariables().orderByTaskCreateTime().desc();
-
- // 构建列表数据
- buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
-
- // 计算总数
- long count = todoQuery.count();
- // 设置页数
- page.setSize(count);
- // 设置总数
- page.setTotal(count);
- // 设置数据
- page.setRecords(flowList);
- return page;
- }
-
- @Override
- public IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
- String taskUser = TaskUtil.getTaskUser();
- List<BladeFlow> flowList = new LinkedList<>();
-
- HistoricProcessInstanceQuery historyQuery = historyService.createHistoricProcessInstanceQuery().startedBy(taskUser).orderByProcessInstanceStartTime().desc();
-
- if (bladeFlow.getCategory() != null) {
- historyQuery.processDefinitionCategory(bladeFlow.getCategory());
- }
- if (bladeFlow.getProcessDefinitionName() != null) {
- historyQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
- }
- if (bladeFlow.getBeginDate() != null) {
- historyQuery.startedAfter(bladeFlow.getBeginDate());
- }
- if (bladeFlow.getEndDate() != null) {
- historyQuery.startedBefore(bladeFlow.getEndDate());
- }
-
- // 查询列表
- List<HistoricProcessInstance> historyList = historyQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-
- historyList.forEach(historicProcessInstance -> {
- BladeFlow flow = new BladeFlow();
- // historicProcessInstance
- flow.setCreateTime(historicProcessInstance.getStartTime());
- flow.setEndTime(historicProcessInstance.getEndTime());
- flow.setVariables(historicProcessInstance.getProcessVariables());
- String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
- if (businessKey.length > 1) {
- flow.setBusinessTable(businessKey[0]);
- flow.setBusinessId(businessKey[1]);
- }
- flow.setHistoryActivityName(historicProcessInstance.getName());
- flow.setProcessInstanceId(historicProcessInstance.getId());
- flow.setHistoryProcessInstanceId(historicProcessInstance.getId());
- // ProcessDefinition
- FlowProcess processDefinition = FlowCache.getProcessDefinition(historicProcessInstance.getProcessDefinitionId());
- flow.setProcessDefinitionId(processDefinition.getId());
- flow.setProcessDefinitionName(processDefinition.getName());
- flow.setProcessDefinitionVersion(processDefinition.getVersion());
- flow.setProcessDefinitionKey(processDefinition.getKey());
- flow.setCategory(processDefinition.getCategory());
- flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
- flow.setProcessInstanceId(historicProcessInstance.getId());
- // HistoricTaskInstance
- List<HistoricTaskInstance> historyTasks = historyService.createHistoricTaskInstanceQuery().processInstanceId(historicProcessInstance.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
- if (Func.isNotEmpty(historyTasks)) {
- HistoricTaskInstance historyTask = historyTasks.iterator().next();
- flow.setTaskId(historyTask.getId());
- flow.setTaskName(historyTask.getName());
- flow.setTaskDefinitionKey(historyTask.getTaskDefinitionKey());
- }
- // Status
- if (historicProcessInstance.getEndActivityId() != null) {
- flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
- } else {
- flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
- }
- flow.setStatus(FlowEngineConstant.STATUS_FINISH);
- flowList.add(flow);
- });
-
- // 计算总数
- long count = historyQuery.count();
- // 设置总数
- page.setTotal(count);
- page.setRecords(flowList);
- return page;
- }
-
- @Override
- public IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
- String taskUser = TaskUtil.getTaskUser();
- List<BladeFlow> flowList = new LinkedList<>();
-
- HistoricTaskInstanceQuery doneQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(taskUser).finished()
- .includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc();
-
- if (bladeFlow.getCategory() != null) {
- doneQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
- }
- if (bladeFlow.getProcessDefinitionName() != null) {
- doneQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
- }
- if (bladeFlow.getBeginDate() != null) {
- doneQuery.taskCompletedAfter(bladeFlow.getBeginDate());
- }
- if (bladeFlow.getEndDate() != null) {
- doneQuery.taskCompletedBefore(bladeFlow.getEndDate());
- }
-
- // 查询列表
- List<HistoricTaskInstance> doneList = doneQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
- doneList.forEach(historicTaskInstance -> {
- BladeFlow flow = new BladeFlow();
- flow.setTaskId(historicTaskInstance.getId());
- flow.setTaskDefinitionKey(historicTaskInstance.getTaskDefinitionKey());
- flow.setTaskName(historicTaskInstance.getName());
- flow.setAssignee(historicTaskInstance.getAssignee());
- flow.setCreateTime(historicTaskInstance.getCreateTime());
- flow.setExecutionId(historicTaskInstance.getExecutionId());
- flow.setHistoryTaskEndTime(historicTaskInstance.getEndTime());
- flow.setVariables(historicTaskInstance.getProcessVariables());
-
- FlowProcess processDefinition = FlowCache.getProcessDefinition(historicTaskInstance.getProcessDefinitionId());
- flow.setProcessDefinitionId(processDefinition.getId());
- flow.setProcessDefinitionName(processDefinition.getName());
- flow.setProcessDefinitionKey(processDefinition.getKey());
- flow.setProcessDefinitionVersion(processDefinition.getVersion());
- flow.setCategory(processDefinition.getCategory());
- flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-
- flow.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
- flow.setHistoryProcessInstanceId(historicTaskInstance.getProcessInstanceId());
- HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance((historicTaskInstance.getProcessInstanceId()));
- if (Func.isNotEmpty(historicProcessInstance)) {
- String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
- flow.setBusinessTable(businessKey[0]);
- flow.setBusinessId(businessKey[1]);
- if (historicProcessInstance.getEndActivityId() != null) {
- flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
- } else {
- flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
- }
- }
- flow.setStatus(FlowEngineConstant.STATUS_FINISH);
- flowList.add(flow);
- });
- // 计算总数
- long count = doneQuery.count();
- // 设置总数
- page.setTotal(count);
- page.setRecords(flowList);
- return page;
- }
-
- @Override
- public boolean completeTask(BladeFlow flow) {
- String taskId = flow.getTaskId();
- String processInstanceId = flow.getProcessInstanceId();
- String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
- // 增加评论
- if (StringUtil.isNoneBlank(processInstanceId, comment)) {
- taskService.addComment(taskId, processInstanceId, comment);
- }
- // 创建变量
- Map<String, Object> variables = flow.getVariables();
- if (variables == null) {
- variables = Kv.create();
- }
- variables.put(ProcessConstant.PASS_KEY, flow.isPass());
- // 完成任务
- taskService.complete(taskId, variables);
- return true;
- }
-
- /**
- * 构建流程
- *
- * @param bladeFlow 流程通用类
- * @param flowList 流程列表
- * @param taskQuery 任务查询类
- * @param status 状态
- */
- private void buildFlowTaskList(BladeFlow bladeFlow, List<BladeFlow> flowList, TaskQuery taskQuery, String status) {
- if (bladeFlow.getCategory() != null) {
- taskQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
- }
- if (bladeFlow.getProcessDefinitionName() != null) {
- taskQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
- }
- if (bladeFlow.getBeginDate() != null) {
- taskQuery.taskCreatedAfter(bladeFlow.getBeginDate());
- }
- if (bladeFlow.getEndDate() != null) {
- taskQuery.taskCreatedBefore(bladeFlow.getEndDate());
- }
- taskQuery.list().forEach(task -> {
- BladeFlow flow = new BladeFlow();
- flow.setTaskId(task.getId());
- flow.setTaskDefinitionKey(task.getTaskDefinitionKey());
- flow.setTaskName(task.getName());
- flow.setAssignee(task.getAssignee());
- flow.setCreateTime(task.getCreateTime());
- flow.setClaimTime(task.getClaimTime());
- flow.setExecutionId(task.getExecutionId());
- flow.setVariables(task.getProcessVariables());
-
- HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId());
- if (Func.isNotEmpty(historicProcessInstance)) {
- String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
- flow.setBusinessTable(businessKey[0]);
- flow.setBusinessId(businessKey[1]);
- }
-
- FlowProcess processDefinition = FlowCache.getProcessDefinition(task.getProcessDefinitionId());
- flow.setCategory(processDefinition.getCategory());
- flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
- flow.setProcessDefinitionId(processDefinition.getId());
- flow.setProcessDefinitionName(processDefinition.getName());
- flow.setProcessDefinitionKey(processDefinition.getKey());
- flow.setProcessDefinitionVersion(processDefinition.getVersion());
- flow.setProcessInstanceId(task.getProcessInstanceId());
- flow.setStatus(status);
- flowList.add(flow);
- });
- }
-
- /**
- * 获取历史流程
- *
- * @param processInstanceId 流程实例id
- * @return HistoricProcessInstance
- */
- private HistoricProcessInstance getHistoricProcessInstance(String processInstanceId) {
- return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/business/service/impl/FlowServiceImpl.java b/src/main/java/org/springblade/flow/business/service/impl/FlowServiceImpl.java
deleted file mode 100644
index dcd160f..0000000
--- a/src/main/java/org/springblade/flow/business/service/impl/FlowServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.business.service.impl;
-
-import lombok.AllArgsConstructor;
-import org.flowable.engine.IdentityService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.business.service.IFlowService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Map;
-
-/**
- * 流程实现类
- *
- * @author Chill
- */
-@RestController
-@AllArgsConstructor
-public class FlowServiceImpl implements IFlowService {
-
- private final RuntimeService runtimeService;
- private final IdentityService identityService;
- private final TaskService taskService;
-
- @Override
- public BladeFlow startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables) {
- // 设置流程启动用户
- identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
- // 开启流程
- ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);
- // 组装流程通用类
- BladeFlow flow = new BladeFlow();
- flow.setProcessInstanceId(processInstance.getId());
- return flow;
- }
-
- @Override
- public BladeFlow startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables) {
- // 设置流程启动用户
- identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
- // 开启流程
- ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
- // 组装流程通用类
- BladeFlow flow = new BladeFlow();
- flow.setProcessInstanceId(processInstance.getId());
- return flow;
- }
-
- @Override
- public boolean completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables) {
- // 增加评论
- if (StringUtil.isNoneBlank(processInstanceId, comment)) {
- taskService.addComment(taskId, processInstanceId, comment);
- }
- // 非空判断
- if (Func.isEmpty(variables)) {
- variables = Kv.create();
- }
- // 完成任务
- taskService.complete(taskId, variables);
- return true;
- }
-
- @Override
- public Object taskVariable(String taskId, String variableName) {
- return R.data(taskService.getVariable(taskId, variableName));
- }
-
- @Override
- public Map<String, Object> taskVariables(String taskId) {
- return taskService.getVariables(taskId);
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java b/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java
deleted file mode 100644
index 8657f7b..0000000
--- a/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.constant;
-
-/**
- * 流程常量.
- *
- * @author Chill
- */
-public interface ProcessConstant {
-
- /**
- * 请假流程标识
- */
- String LEAVE_KEY = "Leave";
-
- /**
- * 报销流程标识
- */
- String EXPENSE_KEY = "Expense";
-
- /**
- * 同意标识
- */
- String PASS_KEY = "pass";
-
- /**
- * 同意代号
- */
- String PASS_ALIAS = "ok";
-
- /**
- * 同意默认批复
- */
- String PASS_COMMENT = "同意";
-
- /**
- * 驳回默认批复
- */
- String NOT_PASS_COMMENT = "驳回";
-
- /**
- * 创建人变量名
- */
- String TASK_VARIABLE_CREATE_USER = "createUser";
-
-}
diff --git a/src/main/java/org/springblade/flow/core/entity/BladeFlow.java b/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
deleted file mode 100644
index 0492844..0000000
--- a/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.entity;
-
-import lombok.Data;
-import org.springblade.flow.core.constant.ProcessConstant;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * 工作流通用实体类
- *
- * @author Chill
- */
-@Data
-public class BladeFlow implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**
- * 任务编号
- */
- private String taskId;
- /**
- * 任务名称
- */
- private String taskName;
- /**
- * 任务定义Key
- */
- private String taskDefinitionKey;
- /**
- * 任务执行人编号
- */
- private String assignee;
- /**
- * 任务执行人名称
- */
- private String assigneeName;
- /**
- * 流程分类
- */
- private String category;
- /**
- * 流程分类名
- */
- private String categoryName;
- /**
- * 创建时间
- */
- private Date createTime;
- /**
- * 结束时间
- */
- private Date endTime;
- /**
- * 签收时间
- */
- private Date claimTime;
- /**
- * 历史任务结束时间
- */
- private Date historyTaskEndTime;
- /**
- * 执行ID
- */
- private String executionId;
- /**
- * 流程实例ID
- */
- private String processInstanceId;
- /**
- * 流程ID
- */
- private String processDefinitionId;
- /**
- * 流程标识
- */
- private String processDefinitionKey;
- /**
- * 流程名
- */
- private String processDefinitionName;
- /**
- * 流程版本
- */
- private int processDefinitionVersion;
- /**
- * 流程说明
- */
- private String processDefinitionDesc;
- /**
- * 流程简图名
- */
- private String processDefinitionDiagramResName;
- /**
- * 流程重命名
- */
- private String processDefinitionResName;
- /**
- * 历史任务流程实例ID 查看流程图会用到
- */
- private String historyProcessInstanceId;
- /**
- * 流程实例是否结束
- */
- private String processIsFinished;
- /**
- * 历史活动ID
- */
- private String historyActivityId;
- /**
- * 历史活动流程
- */
- private String historyActivityName;
- /**
- * 历史活动耗时
- */
- private String historyActivityDurationTime;
- /**
- * 业务绑定Table
- */
- private String businessTable;
- /**
- * 业务绑定ID
- */
- private String businessId;
- /**
- * 任务状态
- */
- private String status;
- /**
- * 任务意见
- */
- private String comment;
- /**
- * 是否通过
- */
- private boolean isPass;
- /**
- * 是否通过代号
- */
- private String flag;
- /**
- * 开始查询日期
- */
- private Date beginDate;
- /**
- * 结束查询日期
- */
- private Date endDate;
- /**
- * 流程参数
- */
- private Map<String, Object> variables;
-
- /**
- * 获取是否通过
- */
- public boolean isPass() {
- return ProcessConstant.PASS_ALIAS.equals(flag) || ProcessConstant.PASS_COMMENT.equals(comment);
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/core/entity/FlowEntity.java b/src/main/java/org/springblade/flow/core/entity/FlowEntity.java
deleted file mode 100644
index bedc62e..0000000
--- a/src/main/java/org/springblade/flow/core/entity/FlowEntity.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.entity;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * FlowEntity
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FlowEntity extends BaseEntity {
-
- @TableField(exist = false)
- private BladeFlow flow;
-
- public BladeFlow getFlow() {
- if (flow == null) {
- flow = new BladeFlow();
- }
- return flow;
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java b/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java
deleted file mode 100644
index c5ab5c7..0000000
--- a/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 流程类型枚举
- *
- * @author Chill
- */
-@Getter
-@AllArgsConstructor
-public enum FlowModeEnum {
-
- /**
- * 通用流程
- */
- COMMON("common", 1),
-
- /**
- * 定制流程
- */
- CUSTOM("custom", 2),
- ;
-
- final String name;
- final int mode;
-
-}
diff --git a/src/main/java/org/springblade/flow/core/utils/FlowUtil.java b/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
deleted file mode 100644
index fd1b28e..0000000
--- a/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.utils;
-
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.constant.ProcessConstant;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 工作流工具类
- *
- * @author Chill
- */
-public class FlowUtil {
-
- /**
- * 定义流程key对应的表名
- */
- private final static Map<String, String> BUSINESS_TABLE = new HashMap<>();
-
- static {
- BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave");
- }
-
- /**
- * 通过流程key获取业务表名
- *
- * @param key 流程key
- */
- public static String getBusinessTable(String key) {
- String businessTable = BUSINESS_TABLE.get(key);
- if (Func.isEmpty(businessTable)) {
- throw new RuntimeException("流程启动失败,未找到相关业务表");
- }
- return businessTable;
- }
-
- /**
- * 获取业务标识
- *
- * @param businessTable 业务表
- * @param businessId 业务表主键
- * @return businessKey
- */
- public static String getBusinessKey(String businessTable, String businessId) {
- return StringUtil.format("{}:{}", businessTable, businessId);
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/core/utils/TaskUtil.java b/src/main/java/org/springblade/flow/core/utils/TaskUtil.java
deleted file mode 100644
index 3366224..0000000
--- a/src/main/java/org/springblade/flow/core/utils/TaskUtil.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.core.utils;
-
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-
-import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
-
-/**
- * 工作流任务工具类
- *
- * @author Chill
- */
-public class TaskUtil {
-
- /**
- * 获取任务用户格式
- *
- * @return taskUser
- */
- public static String getTaskUser() {
- return StringUtil.format("{}{}", TASK_USR_PREFIX, AuthUtil.getUserId());
- }
-
- /**
- * 获取任务用户格式
- *
- * @param userId 用户id
- * @return taskUser
- */
- public static String getTaskUser(String userId) {
- return StringUtil.format("{}{}", TASK_USR_PREFIX, userId);
- }
-
-
- /**
- * 获取用户主键
- *
- * @param taskUser 任务用户
- * @return userId
- */
- public static Long getUserId(String taskUser) {
- return Func.toLong(StringUtil.removePrefix(taskUser, TASK_USR_PREFIX));
- }
-
- /**
- * 获取用户组格式
- *
- * @return candidateGroup
- */
- public static String getCandidateGroup() {
- return AuthUtil.getUserRole();
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/demo/leave/controller/LeaveController.java b/src/main/java/org/springblade/flow/demo/leave/controller/LeaveController.java
deleted file mode 100644
index edc52a4..0000000
--- a/src/main/java/org/springblade/flow/demo/leave/controller/LeaveController.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.demo.leave.controller;
-
-import lombok.AllArgsConstructor;
-import org.springblade.common.cache.UserCache;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
-import org.springblade.flow.demo.leave.service.ILeaveService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * 控制器
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@RequestMapping(AppConstant.APPLICATION_DESK_NAME + "/process/leave")
-@AllArgsConstructor
-public class LeaveController {
-
- private final ILeaveService leaveService;
-
- /**
- * 详情
- *
- * @param businessId 主键
- */
- @GetMapping("detail")
- public R<ProcessLeave> detail(Long businessId) {
- ProcessLeave detail = leaveService.getById(businessId);
- detail.getFlow().setAssigneeName(UserCache.getUser(detail.getCreateUser()).getName());
- return R.data(detail);
- }
-
- /**
- * 新增或修改
- *
- * @param leave 请假信息
- */
- @PostMapping("start-process")
- public R startProcess(@RequestBody ProcessLeave leave) {
- return R.status(leaveService.startProcess(leave));
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/demo/leave/entity/ProcessLeave.java b/src/main/java/org/springblade/flow/demo/leave/entity/ProcessLeave.java
deleted file mode 100644
index a5319de..0000000
--- a/src/main/java/org/springblade/flow/demo/leave/entity/ProcessLeave.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.demo.leave.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.flow.core.entity.FlowEntity;
-
-import java.util.Date;
-
-/**
- * 请假流程实体类
- *
- * @author Chill
- */
-@Data
-@TableName("blade_process_leave")
-@EqualsAndHashCode(callSuper = true)
-public class ProcessLeave extends FlowEntity {
-
- private static final long serialVersionUID = 1L;
-
- /**
- * 流程定义id
- */
- private String processDefinitionId;
- /**
- * 流程实例id
- */
- private String processInstanceId;
- /**
- * 请假开始时间
- */
- private Date startTime;
- /**
- * 请假结束时间
- */
- private Date endTime;
- /**
- * 请假理由
- */
- private String reason;
- /**
- * 审批人
- */
- private String taskUser;
- /**
- * 流程申请时间
- */
- private Date applyTime;
-
-}
diff --git a/src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.java b/src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.java
deleted file mode 100644
index f343be8..0000000
--- a/src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.demo.leave.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
-
-/**
- * Mapper 接口
- *
- * @author Chill
- */
-public interface LeaveMapper extends BaseMapper<ProcessLeave> {
-
-}
diff --git a/src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.xml b/src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.xml
deleted file mode 100644
index 64ad626..0000000
--- a/src/main/java/org/springblade/flow/demo/leave/mapper/LeaveMapper.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.flow.demo.leave.mapper.LeaveMapper">
-
-
-</mapper>
diff --git a/src/main/java/org/springblade/flow/demo/leave/service/ILeaveService.java b/src/main/java/org/springblade/flow/demo/leave/service/ILeaveService.java
deleted file mode 100644
index d52fab9..0000000
--- a/src/main/java/org/springblade/flow/demo/leave/service/ILeaveService.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.demo.leave.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
-
-/**
- * 服务类
- *
- * @author Chill
- */
-public interface ILeaveService extends BaseService<ProcessLeave> {
-
- /**
- * 开启流程
- *
- * @param leave 请假实体
- * @return boolean
- */
- boolean startProcess(ProcessLeave leave);
-
-}
diff --git a/src/main/java/org/springblade/flow/demo/leave/service/impl/LeaveServiceImpl.java b/src/main/java/org/springblade/flow/demo/leave/service/impl/LeaveServiceImpl.java
deleted file mode 100644
index ff64a58..0000000
--- a/src/main/java/org/springblade/flow/demo/leave/service/impl/LeaveServiceImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.demo.leave.service.impl;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.business.service.IFlowService;
-import org.springblade.flow.core.constant.ProcessConstant;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.FlowUtil;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.demo.leave.entity.ProcessLeave;
-import org.springblade.flow.demo.leave.mapper.LeaveMapper;
-import org.springblade.flow.demo.leave.service.ILeaveService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 服务实现类
- *
- * @author Chill
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class LeaveServiceImpl extends BaseServiceImpl<LeaveMapper, ProcessLeave> implements ILeaveService {
-
- private final IFlowService flowService;
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public boolean startProcess(ProcessLeave leave) {
- String businessTable = FlowUtil.getBusinessTable(ProcessConstant.LEAVE_KEY);
- if (Func.isEmpty(leave.getId())) {
- // 保存leave
- leave.setApplyTime(DateUtil.now());
- save(leave);
- // 启动流程
- Kv variables = Kv.create()
- .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName())
- .set("taskUser", TaskUtil.getTaskUser(leave.getTaskUser()))
- .set("days", DateUtil.between(leave.getStartTime(), leave.getEndTime()).toDays());
- BladeFlow flow = flowService.startProcessInstanceById(leave.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(leave.getId())), variables);
- if (Func.isNotEmpty(flow)) {
- log.debug("流程已启动,流程ID:" + flow.getProcessInstanceId());
- // 返回流程id写入leave
- leave.setProcessInstanceId(flow.getProcessInstanceId());
- updateById(leave);
- } else {
- throw new ServiceException("开启流程失败");
- }
- } else {
-
- updateById(leave);
- }
- return true;
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/demo/package-info.java b/src/main/java/org/springblade/flow/demo/package-info.java
deleted file mode 100644
index 281e074..0000000
--- a/src/main/java/org/springblade/flow/demo/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Created by Blade.
- *
- * @author zhuangqian
- */
-package org.springblade.flow.demo;
diff --git a/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java b/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java
deleted file mode 100644
index 8403924..0000000
--- a/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.config;
-
-import lombok.AllArgsConstructor;
-import org.flowable.spring.SpringProcessEngineConfiguration;
-import org.flowable.spring.boot.EngineConfigurationConfigurer;
-import org.flowable.spring.boot.FlowableProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Flowable配置类
- *
- * @author Chill
- */
-@Configuration
-@AllArgsConstructor
-@EnableConfigurationProperties(FlowableProperties.class)
-public class FlowableConfiguration implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {
- private final FlowableProperties flowableProperties;
-
- @Override
- public void configure(SpringProcessEngineConfiguration engineConfiguration) {
- engineConfiguration.setActivityFontName(flowableProperties.getActivityFontName());
- engineConfiguration.setLabelFontName(flowableProperties.getLabelFontName());
- engineConfiguration.setAnnotationFontName(flowableProperties.getAnnotationFontName());
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java b/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java
deleted file mode 100644
index bb660ab..0000000
--- a/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.constant;
-
-/**
- * 流程常量.
- *
- * @author zhuangqian
- */
-public interface FlowEngineConstant {
-
- String FLOWABLE_BASE_PACKAGES = "org.flowable.ui";
-
- String SUFFIX = ".bpmn20.xml";
-
- String ACTIVE = "active";
-
- String SUSPEND = "suspend";
-
- String STATUS_TODO = "todo";
-
- String STATUS_CLAIM = "claim";
-
- String STATUS_SEND = "send";
-
- String STATUS_DONE = "done";
-
- String STATUS_FINISHED = "finished";
-
- String STATUS_UNFINISHED = "unfinished";
-
- String STATUS_FINISH = "finish";
-
- String START_EVENT = "startEvent";
-
- String END_EVENT = "endEvent";
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java b/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java
deleted file mode 100644
index 3693d50..0000000
--- a/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * 流程状态控制器
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/follow")
-@AllArgsConstructor
-@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-@ApiIgnore
-public class FlowFollowController {
-
- private final FlowEngineService flowEngineService;
-
- /**
- * 流程状态列表
- */
- @GetMapping("list")
- @ApiOperationSupport(order = 1)
- @ApiOperation(value = "分页", notes = "传入notice")
- public R<IPage<FlowExecution>> list(Query query, @ApiParam(value = "流程实例id") String processInstanceId, @ApiParam(value = "流程key") String processDefinitionKey) {
- IPage<FlowExecution> pages = flowEngineService.selectFollowPage(Condition.getPage(query), processInstanceId, processDefinitionKey);
- return R.data(pages);
- }
-
- /**
- * 删除流程实例
- */
- @PostMapping("delete-process-instance")
- @ApiOperationSupport(order = 2)
- @ApiOperation(value = "删除", notes = "传入主键集合")
- public R deleteProcessInstance(@ApiParam(value = "流程实例id") @RequestParam String processInstanceId, @ApiParam(value = "删除原因") @RequestParam String deleteReason) {
- boolean temp = flowEngineService.deleteProcessInstance(processInstanceId, deleteReason);
- return R.status(temp);
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java b/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java
deleted file mode 100644
index 70b03bc..0000000
--- a/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 流程管理接口
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/manager")
-@AllArgsConstructor
-@Api(value = "流程管理接口", tags = "流程管理接口")
-@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-@ApiIgnore
-public class FlowManagerController {
-
- private final FlowEngineService flowEngineService;
-
- /**
- * 分页
- */
- @GetMapping("list")
- @ApiOperationSupport(order = 1)
- @ApiOperation(value = "分页", notes = "传入流程类型")
- public R<IPage<FlowProcess>> list(@ApiParam("流程类型") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
- IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
- return R.data(pages);
- }
-
- /**
- * 变更流程状态
- *
- * @param state 状态
- * @param processId 流程id
- */
- @PostMapping("change-state")
- @ApiOperationSupport(order = 2)
- @ApiOperation(value = "变更流程状态", notes = "传入state,processId")
- public R changeState(@RequestParam String state, @RequestParam String processId) {
- String msg = flowEngineService.changeState(state, processId);
- return R.success(msg);
- }
-
- /**
- * 删除部署流程
- *
- * @param deploymentIds 部署流程id集合
- */
- @PostMapping("delete-deployment")
- @ApiOperationSupport(order = 3)
- @ApiOperation(value = "删除部署流程", notes = "部署流程id集合")
- public R deleteDeployment(String deploymentIds) {
- return R.status(flowEngineService.deleteDeployment(deploymentIds));
- }
-
- /**
- * 检查流程文件格式
- *
- * @param file 流程文件
- */
- @PostMapping("check-upload")
- @ApiOperationSupport(order = 4)
- @ApiOperation(value = "上传部署流程文件", notes = "传入文件")
- public R checkUpload(@RequestParam MultipartFile file) {
- boolean temp = Objects.requireNonNull(file.getOriginalFilename()).endsWith(FlowEngineConstant.SUFFIX);
- return R.data(Kv.create().set("name", file.getOriginalFilename()).set("success", temp));
- }
-
- /**
- * 上传部署流程文件
- *
- * @param files 流程文件
- * @param category 类型
- */
- @PostMapping("deploy-upload")
- @ApiOperationSupport(order = 5)
- @ApiOperation(value = "上传部署流程文件", notes = "传入文件")
- public R deployUpload(@RequestParam List<MultipartFile> files,
- @RequestParam String category,
- @RequestParam(required = false, defaultValue = "") String tenantIds) {
- return R.status(flowEngineService.deployUpload(files, category, Func.toStrList(tenantIds)));
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java b/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java
deleted file mode 100644
index 73f31d9..0000000
--- a/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.Map;
-
-/**
- * 流程模型控制器
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/model")
-@AllArgsConstructor
-@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-@ApiIgnore
-public class FlowModelController {
-
- private final FlowEngineService flowEngineService;
-
- /**
- * 分页
- */
- @GetMapping("/list")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "modelKey", value = "模型标识", paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "name", value = "模型名称", paramType = "query", dataType = "string")
- })
- @ApiOperationSupport(order = 1)
- @ApiOperation(value = "分页", notes = "传入notice")
- public R<IPage<FlowModel>> list(@ApiIgnore @RequestParam Map<String, Object> flow, Query query) {
- IPage<FlowModel> pages = flowEngineService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, FlowModel.class)
- .select("id,model_key modelKey,name,description,version,created,last_updated lastUpdated")
- .orderByDesc("last_updated"));
- return R.data(pages);
- }
-
- /**
- * 删除
- */
- @PostMapping("/remove")
- @ApiOperationSupport(order = 2)
- @ApiOperation(value = "删除", notes = "传入主键集合")
- public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) {
- boolean temp = flowEngineService.removeByIds(Func.toStrList(ids));
- return R.status(temp);
- }
-
- /**
- * 部署
- */
- @PostMapping("/deploy")
- @ApiOperationSupport(order = 3)
- @ApiOperation(value = "部署", notes = "传入模型id和分类")
- public R deploy(@ApiParam(value = "模型id") @RequestParam String modelId,
- @ApiParam(value = "工作流分类") @RequestParam String category,
- @ApiParam(value = "租户ID") @RequestParam(required = false, defaultValue = "") String tenantIds) {
- boolean temp = flowEngineService.deployModel(modelId, category, Func.toStrList(tenantIds));
- return R.status(temp);
- }
-
- @PostMapping("submit")
- @ApiOperationSupport(order = 4)
- @ApiOperation(value = "保存/编辑")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "模型id"),
- @ApiImplicitParam(name = "name", value = "模型名称", required = true),
- @ApiImplicitParam(name = "modelKey", value = "模型key", required = true),
- @ApiImplicitParam(name = "description", value = "模型描述"),
- @ApiImplicitParam(name = "xml", value = "模型xml", required = true),
- })
- public R<FlowModel> submit(@RequestBody @ApiIgnore FlowModel model) {
- return R.data(flowEngineService.submitModel(model));
- }
-
- @GetMapping("detail")
- @ApiOperation(value = "详情")
- @ApiOperationSupport(order = 5)
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "模型id", required = true),
- })
- public R<FlowModel> detail(String id) {
- return R.data(flowEngineService.getById(id));
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java b/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java
deleted file mode 100644
index 616ba67..0000000
--- a/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * 流程通用控制器
- *
- * @author Chill
- */
-@NonDS
-@Slf4j
-@RestController
-@AllArgsConstructor
-@RequestMapping(AppConstant.APPLICATION_FLOW_NAME + "/process")
-@ApiIgnore
-public class FlowProcessController {
-
- private static final String IMAGE_NAME = "image";
- private final FlowEngineService flowEngineService;
-
- /**
- * 获取流转历史列表
- *
- * @param processInstanceId 流程实例id
- * @param startActivityId 开始节点id
- * @param endActivityId 结束节点id
- */
- @GetMapping(value = "history-flow-list")
- public R<List<BladeFlow>> historyFlowList(@RequestParam String processInstanceId, String startActivityId, String endActivityId) {
- return R.data(flowEngineService.historyFlowList(processInstanceId, startActivityId, endActivityId));
- }
-
- /**
- * 流程节点进程图
- *
- * @param processDefinitionId 流程id
- * @param processInstanceId 流程实例id
- */
- @GetMapping(value = "model-view")
- public R modelView(String processDefinitionId, String processInstanceId) {
- return R.data(flowEngineService.modelView(processDefinitionId, processInstanceId));
- }
-
- /**
- * 流程节点进程图
- *
- * @param processInstanceId 流程实例id
- * @param httpServletResponse http响应
- */
- @GetMapping(value = "diagram-view")
- public void diagramView(String processInstanceId, HttpServletResponse httpServletResponse) {
- flowEngineService.diagramView(processInstanceId, httpServletResponse);
- }
-
- /**
- * 流程图展示
- *
- * @param processDefinitionId 流程id
- * @param processInstanceId 实例id
- * @param resourceType 资源类型
- * @param response 响应
- */
- @GetMapping("resource-view")
- public void resourceView(@RequestParam String processDefinitionId, String processInstanceId, @RequestParam(defaultValue = IMAGE_NAME) String resourceType, HttpServletResponse response) {
- flowEngineService.resourceView(processDefinitionId, processInstanceId, resourceType, response);
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java b/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java
deleted file mode 100644
index f8ed862..0000000
--- a/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 运行实体类
- *
- * @author Chill
- */
-@Data
-public class FlowExecution implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- private String id;
- private String name;
- private String startUserId;
- private String startUser;
- private Date startTime;
- private String taskDefinitionId;
- private String taskDefinitionKey;
- private String category;
- private String categoryName;
- private String processInstanceId;
- private String processDefinitionId;
- private String processDefinitionKey;
- private String activityId;
- private int suspensionState;
- private String executionId;
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/entity/FlowModel.java b/src/main/java/org/springblade/flow/engine/entity/FlowModel.java
deleted file mode 100644
index b37109a..0000000
--- a/src/main/java/org/springblade/flow/engine/entity/FlowModel.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 流程模型
- *
- * @author Chill
- */
-@Data
-@TableName("ACT_DE_MODEL")
-public class FlowModel implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- public static final int MODEL_TYPE_BPMN = 0;
- public static final int MODEL_TYPE_FORM = 2;
- public static final int MODEL_TYPE_APP = 3;
- public static final int MODEL_TYPE_DECISION_TABLE = 4;
- public static final int MODEL_TYPE_CMMN = 5;
-
- private String id;
- private String name;
- private String modelKey;
- private String description;
- private Date created;
- private Date lastUpdated;
- private String createdBy;
- private String lastUpdatedBy;
- private Integer version;
- private String modelEditorJson;
- private String modelComment;
- private Integer modelType;
- private String tenantId;
- private byte[] thumbnail;
- private String modelEditorXml;
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java b/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java
deleted file mode 100644
index f9df6d9..0000000
--- a/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.springblade.flow.engine.utils.FlowCache;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * FlowProcess
- *
- * @author Chill
- */
-@Data
-@NoArgsConstructor
-public class FlowProcess implements Serializable {
-
- private String id;
- private String tenantId;
- private String name;
- private String key;
- private String category;
- private String categoryName;
- private Integer version;
- private String deploymentId;
- private String resourceName;
- private String diagramResourceName;
- private Integer suspensionState;
- private Date deploymentTime;
-
- public FlowProcess(ProcessDefinitionEntityImpl entity) {
- if (entity != null) {
- this.id = entity.getId();
- this.tenantId = entity.getTenantId();
- this.name = entity.getName();
- this.key = entity.getKey();
- this.category = entity.getCategory();
- this.categoryName = FlowCache.getCategoryName(entity.getCategory());
- this.version = entity.getVersion();
- this.deploymentId = entity.getDeploymentId();
- this.resourceName = entity.getResourceName();
- this.diagramResourceName = entity.getDiagramResourceName();
- this.suspensionState = entity.getSuspensionState();
- }
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java b/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java
deleted file mode 100644
index 681b385..0000000
--- a/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.flow.engine.entity.FlowModel;
-
-import java.util.List;
-
-/**
- * FlowMapper.
- *
- * @author Chill
- */
-public interface FlowMapper extends BaseMapper<FlowModel> {
-
- /**
- * 自定义分页
- * @param page
- * @param flowModel
- * @return
- */
- List<FlowModel> selectFlowPage(IPage page, FlowModel flowModel);
-
- /**
- * 获取模型
- * @param parentModelId
- * @return
- */
- List<FlowModel> findByParentModelId(String parentModelId);
-}
diff --git a/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml b/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml
deleted file mode 100644
index a7af970..0000000
--- a/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.flow.engine.mapper.FlowMapper">
-
- <!-- 通用查询映射结果 -->
- <resultMap id="flowModelResultMap" type="org.springblade.flow.engine.entity.FlowModel">
- <result column="id" property="id"/>
- <result column="name" property="name"/>
- <result column="model_key" property="modelKey"/>
- <result column="description" property="description"/>
- <result column="model_comment" property="modelComment"/>
- <result column="created" property="created"/>
- <result column="created_by" property="createdBy"/>
- <result column="last_updated" property="lastUpdated"/>
- <result column="last_updated_by" property="lastUpdatedBy"/>
- <result column="version" property="version"/>
- <result column="model_editor_json" property="modelEditorJson"/>
- <result column="thumbnail" property="thumbnail"/>
- <result column="model_type" property="modelType"/>
- <result column="tenant_id" property="tenantId"/>
- </resultMap>
-
- <select id="selectFlowPage" resultMap="flowModelResultMap">
- SELECT
- a.id,
- a.name,
- a.model_key,
- a.description,
- a.model_comment,
- a.created,
- a.created_by,
- a.last_updated,
- a.last_updated_by,
- a.version,
- a.model_editor_json,
- a.thumbnail,
- a.model_type,
- a.tenant_id
- FROM
- ACT_DE_MODEL a
- WHERE
- 1 = 1
- ORDER BY
- a.created DESC
- </select>
-
- <select id="findByParentModelId" parameterType="string" resultMap="flowModelResultMap">
- select model.* from ACT_DE_MODEL_RELATION modelrelation
- inner join ACT_DE_MODEL model on modelrelation.model_id = model.id
- where modelrelation.parent_model_id = #{_parameter}
- </select>
-
-</mapper>
diff --git a/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java b/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java
deleted file mode 100644
index 19a2929..0000000
--- a/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-import java.util.Map;
-
-/**
- * FlowEngineService
- *
- * @author Chill
- */
-public interface FlowEngineService extends IService<FlowModel> {
-
- /**
- * 自定义分页
- *
- * @param page 分页工具
- * @param flowModel 流程模型
- * @return
- */
- IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel);
-
- /**
- * 流程管理列表
- *
- * @param page 分页工具
- * @param category 分类
- * @param mode 形态
- * @return
- */
- IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode);
-
- /**
- * 流程管理列表
- *
- * @param page 分页工具
- * @param processInstanceId 流程实例id
- * @param processDefinitionKey 流程key
- * @return
- */
- IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey);
-
- /**
- * 获取流转历史列表
- *
- * @param processInstanceId 流程实例id
- * @param startActivityId 开始节点id
- * @param endActivityId 结束节点id
- * @return
- */
- List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId);
-
- /**
- * 变更流程状态
- *
- * @param state 状态
- * @param processId 流程ID
- * @return
- */
- String changeState(String state, String processId);
-
- /**
- * 删除部署流程
- *
- * @param deploymentIds 部署流程id集合
- * @return
- */
- boolean deleteDeployment(String deploymentIds);
-
- /**
- * 上传部署流程
- *
- * @param files 流程配置文件
- * @param category 流程分类
- * @param tenantIdList 租户id集合
- * @return
- */
- boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList);
-
- /**
- * 部署流程
- *
- * @param modelId 模型id
- * @param category 分类
- * @param tenantIdList 租户id集合
- * @return
- */
- boolean deployModel(String modelId, String category, List<String> tenantIdList);
-
- /**
- * 删除流程实例
- *
- * @param processInstanceId 流程实例id
- * @param deleteReason 删除原因
- * @return
- */
- boolean deleteProcessInstance(String processInstanceId, String deleteReason);
-
- /**
- * 保存/更新模型
- *
- * @param model 模型
- * @return 模型
- */
- FlowModel submitModel(FlowModel model);
-
- /**
- * 流程节点进程图
- *
- * @param processDefinitionId
- * @param processInstanceId
- * @return
- */
- Map<String, Object> modelView(String processDefinitionId, String processInstanceId);
-
- /**
- * 流程节点进程图
- *
- * @param processInstanceId
- * @param httpServletResponse
- */
- void diagramView(String processInstanceId, HttpServletResponse httpServletResponse);
-
- /**
- * 流程图展示
- *
- * @param processDefinitionId
- * @param processInstanceId
- * @param resourceType
- * @param response
- */
- void resourceView(String processDefinitionId, String processInstanceId, String resourceType, HttpServletResponse response);
-
- /**
- * 获取XML
- *
- * @param model
- * @return
- */
- byte[] getModelEditorXML(FlowModel model);
-}
diff --git a/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java b/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java
deleted file mode 100644
index c72948f..0000000
--- a/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.flowable.bpmn.converter.BpmnXMLConverter;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.Process;
-import org.flowable.common.engine.impl.util.IoUtil;
-import org.flowable.common.engine.impl.util.io.StringStreamSource;
-import org.flowable.editor.language.json.converter.BpmnJsonConverter;
-import org.flowable.engine.*;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.flowable.engine.repository.Deployment;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.engine.repository.ProcessDefinitionQuery;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.engine.runtime.ProcessInstanceQuery;
-import org.flowable.engine.task.Comment;
-import org.flowable.image.ProcessDiagramGenerator;
-import org.springblade.common.cache.UserCache;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.FileUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.enums.FlowModeEnum;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.mapper.FlowMapper;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springblade.flow.engine.utils.FlowCache;
-import org.springblade.modules.system.entity.User;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.*;
-
-/**
- * 工作流服务实现类
- *
- * @author Chill
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class FlowEngineServiceImpl extends ServiceImpl<FlowMapper, FlowModel> implements FlowEngineService {
- private static final String ALREADY_IN_STATE = "already in state";
- private static final String USR_TASK = "userTask";
- private static final String IMAGE_NAME = "image";
- private static final String XML_NAME = "xml";
- private static final Integer INT_1024 = 1024;
- private static final BpmnJsonConverter BPMN_JSON_CONVERTER = new BpmnJsonConverter();
- private static final BpmnXMLConverter BPMN_XML_CONVERTER = new BpmnXMLConverter();
- private final ObjectMapper objectMapper;
- private final RepositoryService repositoryService;
- private final RuntimeService runtimeService;
- private final HistoryService historyService;
- private final TaskService taskService;
- private final ProcessEngine processEngine;
-
- @Override
- public IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel) {
- return page.setRecords(baseMapper.selectFlowPage(page, flowModel));
- }
-
- @Override
- public IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode) {
- ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().latestVersion().orderByProcessDefinitionKey().asc();
- // 通用流程
- if (mode == FlowModeEnum.COMMON.getMode()) {
- processDefinitionQuery.processDefinitionWithoutTenantId();
- }
- // 定制流程
- else if (!AuthUtil.isAdministrator()) {
- processDefinitionQuery.processDefinitionTenantId(AuthUtil.getTenantId());
- }
- if (StringUtils.isNotEmpty(category)) {
- processDefinitionQuery.processDefinitionCategory(category);
- }
- List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
- List<FlowProcess> flowProcessList = new ArrayList<>();
- processDefinitionList.forEach(processDefinition -> {
- String deploymentId = processDefinition.getDeploymentId();
- Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
- FlowProcess flowProcess = new FlowProcess((ProcessDefinitionEntityImpl) processDefinition);
- flowProcess.setDeploymentTime(deployment.getDeploymentTime());
- flowProcessList.add(flowProcess);
- });
- page.setTotal(processDefinitionQuery.count());
- page.setRecords(flowProcessList);
- return page;
- }
-
- @Override
- public IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey) {
- ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
- if (StringUtil.isNotBlank(processInstanceId)) {
- processInstanceQuery.processInstanceId(processInstanceId);
- }
- if (StringUtil.isNotBlank(processDefinitionKey)) {
- processInstanceQuery.processDefinitionKey(processDefinitionKey);
- }
- List<FlowExecution> flowList = new ArrayList<>();
- List<ProcessInstance> procInsList = processInstanceQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
- procInsList.forEach(processInstance -> {
- ExecutionEntityImpl execution = (ExecutionEntityImpl) processInstance;
- FlowExecution flowExecution = new FlowExecution();
- flowExecution.setId(execution.getId());
- flowExecution.setName(execution.getName());
- flowExecution.setStartUserId(execution.getStartUserId());
- User taskUser = UserCache.getUserByTaskUser(execution.getStartUserId());
- if (taskUser != null) {
- flowExecution.setStartUser(taskUser.getName());
- }
- flowExecution.setStartTime(execution.getStartTime());
- flowExecution.setExecutionId(execution.getId());
- flowExecution.setProcessInstanceId(execution.getProcessInstanceId());
- flowExecution.setProcessDefinitionId(execution.getProcessDefinitionId());
- flowExecution.setProcessDefinitionKey(execution.getProcessDefinitionKey());
- flowExecution.setSuspensionState(execution.getSuspensionState());
- FlowProcess processDefinition = FlowCache.getProcessDefinition(execution.getProcessDefinitionId());
- flowExecution.setCategory(processDefinition.getCategory());
- flowExecution.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
- flowList.add(flowExecution);
- });
- page.setTotal(processInstanceQuery.count());
- page.setRecords(flowList);
- return page;
- }
-
- @Override
- public List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) {
- List<BladeFlow> flowList = new LinkedList<>();
- List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().orderByHistoricActivityInstanceEndTime().asc().list();
- boolean start = false;
- Map<String, Integer> activityMap = new HashMap<>(16);
- for (int i = 0; i < historicActivityInstanceList.size(); i++) {
- HistoricActivityInstance historicActivityInstance = historicActivityInstanceList.get(i);
- // 过滤开始节点前的节点
- if (StringUtil.isNotBlank(startActivityId) && startActivityId.equals(historicActivityInstance.getActivityId())) {
- start = true;
- }
- if (StringUtil.isNotBlank(startActivityId) && !start) {
- continue;
- }
- // 显示开始节点和结束节点,并且执行人不为空的任务
- if (StringUtils.equals(USR_TASK, historicActivityInstance.getActivityType())
- || FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())
- || FlowEngineConstant.END_EVENT.equals(historicActivityInstance.getActivityType())) {
- // 给节点增加序号
- Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
- if (activityNum == null) {
- activityMap.put(historicActivityInstance.getActivityId(), activityMap.size());
- }
- BladeFlow flow = new BladeFlow();
- flow.setHistoryActivityId(historicActivityInstance.getActivityId());
- flow.setHistoryActivityName(historicActivityInstance.getActivityName());
- flow.setCreateTime(historicActivityInstance.getStartTime());
- flow.setEndTime(historicActivityInstance.getEndTime());
- String durationTime = DateUtil.secondToTime(Func.toLong(historicActivityInstance.getDurationInMillis(), 0L) / 1000);
- flow.setHistoryActivityDurationTime(durationTime);
- // 获取流程发起人名称
- if (FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())) {
- List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).orderByProcessInstanceStartTime().asc().list();
- if (processInstanceList.size() > 0) {
- if (StringUtil.isNotBlank(processInstanceList.get(0).getStartUserId())) {
- String taskUser = processInstanceList.get(0).getStartUserId();
- User user = UserCache.getUser(TaskUtil.getUserId(taskUser));
- if (user != null) {
- flow.setAssignee(historicActivityInstance.getAssignee());
- flow.setAssigneeName(user.getName());
- }
- }
- }
- }
- // 获取任务执行人名称
- if (StringUtil.isNotBlank(historicActivityInstance.getAssignee())) {
- User user = UserCache.getUser(TaskUtil.getUserId(historicActivityInstance.getAssignee()));
- if (user != null) {
- flow.setAssignee(historicActivityInstance.getAssignee());
- flow.setAssigneeName(user.getName());
- }
- }
- // 获取意见评论内容
- if (StringUtil.isNotBlank(historicActivityInstance.getTaskId())) {
- List<Comment> commentList = taskService.getTaskComments(historicActivityInstance.getTaskId());
- if (commentList.size() > 0) {
- flow.setComment(commentList.get(0).getFullMessage());
- }
- }
- flowList.add(flow);
- }
- // 过滤结束节点后的节点
- if (StringUtils.isNotBlank(endActivityId) && endActivityId.equals(historicActivityInstance.getActivityId())) {
- boolean temp = false;
- Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
- // 该活动节点,后续节点是否在结束节点之前,在后续节点中是否存在
- for (int j = i + 1; j < historicActivityInstanceList.size(); j++) {
- HistoricActivityInstance hi = historicActivityInstanceList.get(j);
- Integer activityNumA = activityMap.get(hi.getActivityId());
- boolean numberTemp = activityNumA != null && activityNumA < activityNum;
- boolean equalsTemp = StringUtils.equals(hi.getActivityId(), historicActivityInstance.getActivityId());
- if (numberTemp || equalsTemp) {
- temp = true;
- }
- }
- if (!temp) {
- break;
- }
- }
- }
- return flowList;
- }
-
- @Override
- public String changeState(String state, String processId) {
- try {
- if (state.equals(FlowEngineConstant.ACTIVE)) {
- repositoryService.activateProcessDefinitionById(processId, true, null);
- return StringUtil.format("激活ID为 [{}] 的流程成功", processId);
- } else if (state.equals(FlowEngineConstant.SUSPEND)) {
- repositoryService.suspendProcessDefinitionById(processId, true, null);
- return StringUtil.format("挂起ID为 [{}] 的流程成功", processId);
- } else {
- return "暂无流程变更";
- }
- } catch (Exception e) {
- if (e.getMessage().contains(ALREADY_IN_STATE)) {
- return StringUtil.format("ID为 [{}] 的流程已是此状态,无需操作", processId);
- }
- return e.getMessage();
- }
- }
-
- @Override
- public boolean deleteDeployment(String deploymentIds) {
- Func.toStrList(deploymentIds).forEach(deploymentId -> repositoryService.deleteDeployment(deploymentId, true));
- return true;
- }
-
- @Override
- public boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList) {
- files.forEach(file -> {
- try {
- String fileName = file.getOriginalFilename();
- InputStream fileInputStream = file.getInputStream();
- byte[] bytes = FileUtil.copyToByteArray(fileInputStream);
- if (Func.isNotEmpty(tenantIdList)) {
- tenantIdList.forEach(tenantId -> {
- Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).tenantId(tenantId).deploy();
- deploy(deployment, category);
- });
- } else {
- Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).deploy();
- deploy(deployment, category);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- });
- return true;
- }
-
- @Override
- public boolean deployModel(String modelId, String category, List<String> tenantIdList) {
- FlowModel model = this.getById(modelId);
- if (model == null) {
- throw new ServiceException("未找到模型 id: " + modelId);
- }
- byte[] bytes = getBpmnXML(model);
- String processName = model.getName();
- if (!StringUtil.endsWithIgnoreCase(processName, FlowEngineConstant.SUFFIX)) {
- processName += FlowEngineConstant.SUFFIX;
- }
- String finalProcessName = processName;
- if (Func.isNotEmpty(tenantIdList)) {
- tenantIdList.forEach(tenantId -> {
- Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).tenantId(tenantId).deploy();
- deploy(deployment, category);
- });
- } else {
- Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).deploy();
- deploy(deployment, category);
- }
- return true;
- }
-
- @Override
- public boolean deleteProcessInstance(String processInstanceId, String deleteReason) {
- runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
- return true;
- }
-
- private void deploy(Deployment deployment, String category) {
- log.debug("流程部署--------deploy: " + deployment + " 分类---------->" + category);
- List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
- StringBuilder logBuilder = new StringBuilder(500);
- List<Object> logArgs = new ArrayList<>();
- // 设置流程分类
- for (ProcessDefinition processDefinition : list) {
- if (StringUtil.isNotBlank(category)) {
- repositoryService.setProcessDefinitionCategory(processDefinition.getId(), category);
- }
- logBuilder.append("部署成功,流程ID={} \n");
- logArgs.add(processDefinition.getId());
- }
- if (list.size() == 0) {
- throw new ServiceException("部署失败,未找到流程");
- } else {
- log.info(logBuilder.toString(), logArgs.toArray());
- }
- }
-
- @Override
- public FlowModel submitModel(FlowModel model) {
- FlowModel flowModel = new FlowModel();
- flowModel.setId(model.getId());
- flowModel.setVersion(Func.toInt(model.getVersion(), 0) + 1);
- flowModel.setName(model.getName());
- flowModel.setModelKey(model.getModelKey());
- flowModel.setModelType(FlowModel.MODEL_TYPE_BPMN);
- flowModel.setCreatedBy(TaskUtil.getTaskUser());
- flowModel.setDescription(model.getDescription());
- flowModel.setLastUpdated(Calendar.getInstance().getTime());
- flowModel.setLastUpdatedBy(TaskUtil.getTaskUser());
- flowModel.setTenantId(AuthUtil.getTenantId());
- flowModel.setModelEditorXml(model.getModelEditorXml());
- if (StringUtil.isBlank(model.getId())) {
- flowModel.setCreated(Calendar.getInstance().getTime());
- }
- if (StringUtil.isNotBlank(model.getModelEditorXml())) {
- flowModel.setModelEditorJson(getBpmnJson(model.getModelEditorXml()));
- }
- this.saveOrUpdate(flowModel);
- return flowModel;
- }
-
- @Override
- public Map<String, Object> modelView(String processDefinitionId, String processInstanceId) {
- Map<String, Object> result = new HashMap<>();
- // 节点标记
- if (StringUtil.isNotBlank(processInstanceId)) {
- result.put("flow", this.historyFlowList(processInstanceId, null, null));
- HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery()
- .processInstanceId(processInstanceId)
- .singleResult();
- processDefinitionId = processInstance.getProcessDefinitionId();
- }
- BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
- // 流程图展示
- result.put("xml", new String(new BpmnXMLConverter().convertToXML(bpmnModel)));
- return result;
- }
-
- @Override
- public void diagramView(String processInstanceId, HttpServletResponse httpServletResponse) {
- // 获得当前活动的节点
- String processDefinitionId;
- // 如果流程已经结束,则得到结束节点
- if (this.isFinished(processInstanceId)) {
- HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
- processDefinitionId = pi.getProcessDefinitionId();
- } else {
- // 如果流程没有结束,则取当前活动节点
- // 根据流程实例ID获得当前处于活动状态的ActivityId合集
- ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
- processDefinitionId = pi.getProcessDefinitionId();
- }
- List<String> highLightedActivities = new ArrayList<>();
-
- // 获得活动的节点
- List<HistoricActivityInstance> highLightedActivityList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
-
- for (HistoricActivityInstance tempActivity : highLightedActivityList) {
- String activityId = tempActivity.getActivityId();
- highLightedActivities.add(activityId);
- }
-
- List<String> flows = new ArrayList<>();
- // 获取流程图
- BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
- ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration();
-
- ProcessDiagramGenerator diagramGenerator = engConf.getProcessDiagramGenerator();
- InputStream in = diagramGenerator.generateDiagram(bpmnModel, "bmp", highLightedActivities, flows, engConf.getActivityFontName(),
- engConf.getLabelFontName(), engConf.getAnnotationFontName(), engConf.getClassLoader(), 1.0, true);
- OutputStream out = null;
- byte[] buf = new byte[1024];
- int length;
- try {
- out = httpServletResponse.getOutputStream();
- while ((length = in.read(buf)) != -1) {
- out.write(buf, 0, length);
- }
- } catch (IOException e) {
- log.error("操作异常", e);
- } finally {
- IoUtil.closeSilently(out);
- IoUtil.closeSilently(in);
- }
- }
-
- @Override
- public void resourceView(String processDefinitionId, String processInstanceId, String resourceType, HttpServletResponse response) {
- if (StringUtil.isAllBlank(processDefinitionId, processInstanceId)) {
- return;
- }
- if (StringUtil.isBlank(processDefinitionId)) {
- ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
- processDefinitionId = processInstance.getProcessDefinitionId();
- }
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
- String resourceName = "";
- if (resourceType.equals(IMAGE_NAME)) {
- resourceName = processDefinition.getDiagramResourceName();
- } else if (resourceType.equals(XML_NAME)) {
- resourceName = processDefinition.getResourceName();
- }
- try {
- InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName);
- byte[] b = new byte[1024];
- int len;
- while ((len = resourceAsStream.read(b, 0, INT_1024)) != -1) {
- response.getOutputStream().write(b, 0, len);
- }
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-
- @Override
- public byte[] getModelEditorXML(FlowModel model) {
- return getBpmnXML(model);
- }
-
- /**
- * 是否已完结
- *
- * @param processInstanceId 流程实例id
- * @return bool
- */
- private boolean isFinished(String processInstanceId) {
- return historyService.createHistoricProcessInstanceQuery().finished()
- .processInstanceId(processInstanceId).count() > 0;
- }
-
-
- /**
- * xml转bpmn json
- *
- * @param xml xml
- * @return json
- */
- private String getBpmnJson(String xml) {
- return BPMN_JSON_CONVERTER.convertToJson(getBpmnModel(xml)).toString();
- }
-
- /**
- * xml转bpmnModel
- *
- * @param xml xml
- * @return bpmnModel
- */
- private BpmnModel getBpmnModel(String xml) {
- return BPMN_XML_CONVERTER.convertToBpmnModel(new StringStreamSource(xml), false, false);
- }
-
- private byte[] getBpmnXML(FlowModel model) {
- BpmnModel bpmnModel = getBpmnModel(model);
- return getBpmnXML(bpmnModel);
- }
-
- private byte[] getBpmnXML(BpmnModel bpmnModel) {
- for (Process process : bpmnModel.getProcesses()) {
- if (StringUtils.isNotEmpty(process.getId())) {
- char firstCharacter = process.getId().charAt(0);
- if (Character.isDigit(firstCharacter)) {
- process.setId("a" + process.getId());
- }
- }
- }
- return BPMN_XML_CONVERTER.convertToXML(bpmnModel);
- }
-
- private BpmnModel getBpmnModel(FlowModel model) {
- BpmnModel bpmnModel;
- try {
- Map<String, FlowModel> formMap = new HashMap<>(16);
- Map<String, FlowModel> decisionTableMap = new HashMap<>(16);
-
- List<FlowModel> referencedModels = baseMapper.findByParentModelId(model.getId());
- for (FlowModel childModel : referencedModels) {
- if (FlowModel.MODEL_TYPE_FORM == childModel.getModelType()) {
- formMap.put(childModel.getId(), childModel);
-
- } else if (FlowModel.MODEL_TYPE_DECISION_TABLE == childModel.getModelType()) {
- decisionTableMap.put(childModel.getId(), childModel);
- }
- }
- bpmnModel = getBpmnModel(model, formMap, decisionTableMap);
- } catch (Exception e) {
- log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
- throw new ServiceException("Could not generate BPMN 2.0 model");
- }
- return bpmnModel;
- }
-
- private BpmnModel getBpmnModel(FlowModel model, Map<String, FlowModel> formMap, Map<String, FlowModel> decisionTableMap) {
- try {
- ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(model.getModelEditorJson());
- Map<String, String> formKeyMap = new HashMap<>(16);
- for (FlowModel formModel : formMap.values()) {
- formKeyMap.put(formModel.getId(), formModel.getModelKey());
- }
- Map<String, String> decisionTableKeyMap = new HashMap<>(16);
- for (FlowModel decisionTableModel : decisionTableMap.values()) {
- decisionTableKeyMap.put(decisionTableModel.getId(), decisionTableModel.getModelKey());
- }
- return BPMN_JSON_CONVERTER.convertToBpmnModel(editorJsonNode, formKeyMap, decisionTableKeyMap);
- } catch (Exception e) {
- log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
- throw new ServiceException("Could not generate BPMN 2.0 model");
- }
- }
-
-}
diff --git a/src/main/java/org/springblade/flow/engine/utils/FlowCache.java b/src/main/java/org/springblade/flow/engine/utils/FlowCache.java
deleted file mode 100644
index bb23baf..0000000
--- a/src/main/java/org/springblade/flow/engine/utils/FlowCache.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the dreamlu.net developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.flow.engine.utils;
-
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.springblade.common.cache.DictCache;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.flow.engine.entity.FlowProcess;
-
-/**
- * 流程缓存
- *
- * @author Chill
- */
-public class FlowCache {
-
- private static final String FLOW_CACHE = "flow:process";
- private static final String FLOW_DEFINITION_ID = "definition:id";
- private static RepositoryService repositoryService;
-
- private static RepositoryService getRepositoryService() {
- if (repositoryService == null) {
- repositoryService = SpringUtil.getBean(RepositoryService.class);
- }
- return repositoryService;
- }
-
- /**
- * 获得流程定义对象
- *
- * @param processDefinitionId 流程对象id
- * @return
- */
- public static FlowProcess getProcessDefinition(String processDefinitionId) {
- return CacheUtil.get(FLOW_CACHE, FLOW_DEFINITION_ID, processDefinitionId, () -> {
- ProcessDefinition processDefinition = getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
- ProcessDefinitionEntityImpl processDefinitionEntity = BeanUtil.copy(processDefinition, ProcessDefinitionEntityImpl.class);
- return new FlowProcess(processDefinitionEntity);
- });
- }
-
- /**
- * 获取流程类型名
- *
- * @param category 流程类型
- * @return
- */
- public static String getCategoryName(String category) {
- if (Func.isEmpty(category)) {
- return StringPool.EMPTY;
- }
- String[] categoryArr = category.split(StringPool.UNDERSCORE);
- if (categoryArr.length <= 1) {
- return StringPool.EMPTY;
- } else {
- return DictCache.getValue(category.split(StringPool.UNDERSCORE)[0], Func.toInt(category.split(StringPool.UNDERSCORE)[1]));
- }
- }
-
-}
--
Gitblit v1.9.3