refactor(flowable): 移除自定义流程图配置和相关工具类

- 删除 application.yml 中的 Flowable 配置项
- 移除 CustomProcessDiagramCanvas 自定义流程图绘制类
- 移除 CustomProcessDiagramGenerator 自定义流程图生成器
- 移除 FindNextNodeUtil 流程节点查找工具类
- 移除 FlowableConfig 配置类
This commit is contained in:
2025-12-29 16:21:33 +08:00
parent 9b8c5ab80b
commit ee88de3e99
89 changed files with 0 additions and 9274 deletions

View File

@@ -1,117 +0,0 @@
package com.klp.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.klp.common.annotation.Log;
import com.klp.common.annotation.RepeatSubmit;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.workflow.domain.WfCategory;
import com.klp.workflow.domain.vo.WfCategoryVo;
import com.klp.workflow.service.IWfCategoryService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 流程分类Controller
*
* @author KonBAI
* @createTime 2022/3/10 00:12
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/category")
public class WfCategoryController extends BaseController {
private final IWfCategoryService categoryService;
/**
* 查询流程分类列表
*/
@SaCheckPermission("workflow:category:list")
@GetMapping("/list")
public TableDataInfo<WfCategoryVo> list(WfCategory category, PageQuery pageQuery) {
return categoryService.queryPageList(category, pageQuery);
}
/**
* 查询全部的流程分类列表
*/
@SaCheckLogin
@GetMapping("/listAll")
public R<List<WfCategoryVo>> listAll(WfCategory category) {
return R.ok(categoryService.queryList(category));
}
/**
* 导出流程分类列表
*/
@SaCheckPermission("workflow:category:export")
@Log(title = "流程分类", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(@Validated WfCategory category, HttpServletResponse response) {
List<WfCategoryVo> list = categoryService.queryList(category);
ExcelUtil.exportExcel(list, "流程分类", WfCategoryVo.class, response);
}
/**
* 获取流程分类详细信息
* @param categoryId 分类主键
*/
@SaCheckPermission("workflow:category:query")
@GetMapping("/{categoryId}")
public R<WfCategoryVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable("categoryId") Long categoryId) {
return R.ok(categoryService.queryById(categoryId));
}
/**
* 新增流程分类
*/
@SaCheckPermission("workflow:category:add")
@Log(title = "流程分类", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated @RequestBody WfCategory category) {
if (!categoryService.checkCategoryCodeUnique(category)) {
return R.fail("新增流程分类'" + category.getCategoryName() + "'失败,流程编码已存在");
}
return toAjax(categoryService.insertCategory(category));
}
/**
* 修改流程分类
*/
@SaCheckPermission("workflow:category:edit")
@Log(title = "流程分类", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated @RequestBody WfCategory category) {
if (!categoryService.checkCategoryCodeUnique(category)) {
return R.fail("修改流程分类'" + category.getCategoryName() + "'失败,流程编码已存在");
}
return toAjax(categoryService.updateCategory(category));
}
/**
* 删除流程分类
* @param categoryIds 分类主键串
*/
@SaCheckPermission("workflow:category:remove")
@Log(title = "流程分类" , businessType = BusinessType.DELETE)
@DeleteMapping("/{categoryIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] categoryIds) {
return toAjax(categoryService.deleteWithValidByIds(Arrays.asList(categoryIds), true));
}
}

View File

@@ -1,107 +0,0 @@
package com.klp.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.JsonUtils;
import com.klp.flowable.core.domain.ProcessQuery;
import com.klp.workflow.domain.vo.WfDeployVo;
import com.klp.workflow.domain.vo.WfFormVo;
import com.klp.workflow.service.IWfDeployFormService;
import com.klp.workflow.service.IWfDeployService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
/**
* 流程部署
*
* @author KonBAI
* @createTime 2022/3/24 20:57
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/deploy")
public class WfDeployController extends BaseController {
private final IWfDeployService deployService;
private final IWfDeployFormService deployFormService;
/**
* 查询流程部署列表
*/
@SaCheckPermission("workflow:deploy:list")
@GetMapping("/list")
public TableDataInfo<WfDeployVo> list(ProcessQuery processQuery, PageQuery pageQuery) {
return deployService.queryPageList(processQuery, pageQuery);
}
/**
* 查询流程部署版本列表
*/
@SaCheckPermission("workflow:deploy:list")
@GetMapping("/publishList")
public TableDataInfo<WfDeployVo> publishList(@RequestParam String processKey, PageQuery pageQuery) {
return deployService.queryPublishList(processKey, pageQuery);
}
/**
* 激活或挂起流程
*
* @param state 状态active:激活 suspended:挂起)
* @param definitionId 流程定义ID
*/
@SaCheckPermission("workflow:deploy:state")
@PutMapping(value = "/changeState")
public R<Void> changeState(@RequestParam String state, @RequestParam String definitionId) {
deployService.updateState(definitionId, state);
return R.ok();
}
/**
* 读取xml文件
* @param definitionId 流程定义ID
* @return
*/
@SaCheckPermission("workflow:deploy:query")
@GetMapping("/bpmnXml/{definitionId}")
public R<String> getBpmnXml(@PathVariable(value = "definitionId") String definitionId) {
return R.ok(null, deployService.queryBpmnXmlById(definitionId));
}
/**
* 删除流程模型
* @param deployIds 流程部署ids
*/
@SaCheckPermission("workflow:deploy:remove")
@Log(title = "删除流程部署", businessType = BusinessType.DELETE)
@DeleteMapping("/{deployIds}")
public R<String> remove(@NotEmpty(message = "主键不能为空") @PathVariable String[] deployIds) {
deployService.deleteByIds(Arrays.asList(deployIds));
return R.ok();
}
/**
* 查询流程部署关联表单信息
*
* @param deployId 流程部署id
*/
@GetMapping("/form/{deployId}")
public R<?> start(@PathVariable(value = "deployId") String deployId) {
WfFormVo formVo = deployFormService.selectDeployFormByDeployId(deployId);
if (Objects.isNull(formVo)) {
return R.fail("请先配置流程表单");
}
return R.ok(JsonUtils.parseObject(formVo.getContent(), Map.class));
}
}

View File

@@ -1,112 +0,0 @@
package com.klp.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.validate.QueryGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.workflow.domain.WfDeployForm;
import com.klp.workflow.domain.bo.WfFormBo;
import com.klp.workflow.domain.vo.WfFormVo;
import com.klp.workflow.service.IWfDeployFormService;
import com.klp.workflow.service.IWfFormService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 流程表单Controller
*
* @author KonBAI
* @createTime 2022/3/7 22:07
*/
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/form")
public class WfFormController extends BaseController {
private final IWfFormService formService;
private final IWfDeployFormService deployFormService;
/**
* 查询流程表单列表
*/
@SaCheckPermission("workflow:form:list")
@GetMapping("/list")
public TableDataInfo<WfFormVo> list(@Validated(QueryGroup.class) WfFormBo bo, PageQuery pageQuery) {
return formService.queryPageList(bo, pageQuery);
}
/**
* 导出流程表单列表
*/
@SaCheckPermission("workflow:form:export")
@Log(title = "流程表单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(@Validated WfFormBo bo, HttpServletResponse response) {
List<WfFormVo> list = formService.queryList(bo);
ExcelUtil.exportExcel(list, "流程表单", WfFormVo.class, response);
}
/**
* 获取流程表单详细信息
* @param formId 主键
*/
@SaCheckPermission("workflow:form:query")
@GetMapping(value = "/{formId}")
public R<WfFormVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable("formId") Long formId) {
return R.ok(formService.queryById(formId));
}
/**
* 新增流程表单
*/
@SaCheckPermission("workflow:form:add")
@Log(title = "流程表单", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@RequestBody WfFormBo bo) {
return toAjax(formService.insertForm(bo));
}
/**
* 修改流程表单
*/
@SaCheckPermission("workflow:form:edit")
@Log(title = "流程表单", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@RequestBody WfFormBo bo) {
return toAjax(formService.updateForm(bo));
}
/**
* 删除流程表单
* @param formIds 主键串
*/
@SaCheckPermission("workflow:form:remove")
@Log(title = "流程表单", businessType = BusinessType.DELETE)
@DeleteMapping("/{formIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] formIds) {
return toAjax(formService.deleteWithValidByIds(Arrays.asList(formIds)) ? 1 : 0);
}
/**
* 挂载流程表单
*/
@Log(title = "流程表单", businessType = BusinessType.INSERT)
@PostMapping("/addDeployForm")
public R<Void> addDeployForm(@RequestBody WfDeployForm deployForm) {
return toAjax(deployFormService.insertWfDeployForm(deployForm));
}
}

View File

@@ -1,71 +0,0 @@
package com.klp.web.controller.workflow;
import com.klp.common.core.domain.R;
import com.klp.workflow.domain.bo.WfTaskBo;
import com.klp.workflow.service.IWfInstanceService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
/**
* 工作流流程实例管理
*
* @author KonBAI
* @createTime 2022/3/10 00:12
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/instance")
public class WfInstanceController {
private final IWfInstanceService instanceService;
/**
* 激活或挂起流程实例
*
* @param state 1:激活,2:挂起
* @param instanceId 流程实例ID
*/
@PostMapping(value = "/updateState")
public R updateState(@RequestParam Integer state, @RequestParam String instanceId) {
instanceService.updateState(state, instanceId);
return R.ok();
}
/**
* 结束流程实例
*
* @param bo 流程任务业务对象
*/
@PostMapping(value = "/stopProcessInstance")
public R stopProcessInstance(@RequestBody WfTaskBo bo) {
instanceService.stopProcessInstance(bo);
return R.ok();
}
/**
* 删除流程实例
*
* @param instanceId 流程实例ID
* @param deleteReason 删除原因
*/
@Deprecated
@DeleteMapping(value = "/delete")
public R delete(@RequestParam String instanceId, String deleteReason) {
instanceService.delete(instanceId, deleteReason);
return R.ok();
}
/**
* 查询流程实例详情信息
*
* @param procInsId 流程实例ID
* @param deployId 流程部署ID
*/
@GetMapping("/detail")
public R detail(String procInsId, String deployId) {
return R.ok(instanceService.queryDetailProcess(procInsId, deployId));
}
}

View File

@@ -1,187 +0,0 @@
package com.klp.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import com.klp.common.annotation.Log;
import com.klp.common.annotation.RepeatSubmit;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.workflow.domain.WfCategory;
import com.klp.workflow.domain.bo.WfModelBo;
import com.klp.workflow.domain.vo.WfCategoryVo;
import com.klp.workflow.domain.vo.WfModelExportVo;
import com.klp.workflow.domain.vo.WfModelVo;
import com.klp.workflow.service.IWfCategoryService;
import com.klp.workflow.service.IWfModelService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 工作流流程模型管理
*
* @author KonBAI
* @createTime 2022/6/21 9:09
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/model")
public class WfModelController extends BaseController {
private final IWfModelService modelService;
private final IWfCategoryService categoryService;
/**
* 查询流程模型列表
*
* @param modelBo 流程模型对象
* @param pageQuery 分页参数
*/
@SaCheckPermission("workflow:model:list")
@GetMapping("/list")
public TableDataInfo<WfModelVo> list(WfModelBo modelBo, PageQuery pageQuery) {
return modelService.list(modelBo, pageQuery);
}
/**
* 查询流程模型列表
*
* @param modelBo 流程模型对象
* @param pageQuery 分页参数
*/
@SaCheckPermission("workflow:model:list")
@GetMapping("/historyList")
public TableDataInfo<WfModelVo> historyList(WfModelBo modelBo, PageQuery pageQuery) {
return modelService.historyList(modelBo, pageQuery);
}
/**
* 获取流程模型详细信息
*
* @param modelId 模型主键
*/
@SaCheckPermission("workflow:model:query")
@GetMapping(value = "/{modelId}")
public R<WfModelVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable("modelId") String modelId) {
return R.ok(modelService.getModel(modelId));
}
/**
* 获取流程表单详细信息
*
* @param modelId 模型主键
*/
@SaCheckPermission("workflow:model:query")
@GetMapping(value = "/bpmnXml/{modelId}")
public R<String> getBpmnXml(@NotNull(message = "主键不能为空") @PathVariable("modelId") String modelId) {
return R.ok("操作成功", modelService.queryBpmnXmlById(modelId));
}
/**
* 新增流程模型
*/
@SaCheckPermission("workflow:model:add")
@Log(title = "流程模型", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated(AddGroup.class) @RequestBody WfModelBo modelBo) {
modelService.insertModel(modelBo);
return R.ok();
}
/**
* 修改流程模型
*/
@SaCheckPermission("workflow:model:edit")
@Log(title = "流程模型", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WfModelBo modelBo) {
modelService.updateModel(modelBo);
return R.ok();
}
/**
* 保存流程模型
*/
@SaCheckPermission("workflow:model:save")
@Log(title = "保存流程模型", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/save")
public R<String> save(@RequestBody WfModelBo modelBo) {
modelService.saveModel(modelBo);
return R.ok();
}
/**
* 设为最新流程模型
* @param modelId
* @return
*/
@SaCheckPermission("workflow:model:save")
@Log(title = "设为最新流程模型", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/latest")
public R<?> latest(@RequestParam String modelId) {
modelService.latestModel(modelId);
return R.ok();
}
/**
* 删除流程模型
*
* @param modelIds 流程模型主键串
*/
@SaCheckPermission("workflow:model:remove")
@Log(title = "删除流程模型", businessType = BusinessType.DELETE)
@DeleteMapping("/{modelIds}")
public R<String> remove(@NotEmpty(message = "主键不能为空") @PathVariable String[] modelIds) {
modelService.deleteByIds(Arrays.asList(modelIds));
return R.ok();
}
/**
* 部署流程模型
*
* @param modelId 流程模型主键
*/
@SaCheckPermission("workflow:model:deploy")
@Log(title = "部署流程模型", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/deploy")
public R<Void> deployModel(@RequestParam String modelId) {
return toAjax(modelService.deployModel(modelId));
}
/**
* 导出流程模型数据
*/
@Log(title = "导出流程模型数据", businessType = BusinessType.EXPORT)
@SaCheckPermission("workflow:model:export")
@PostMapping("/export")
public void export(WfModelBo modelBo, HttpServletResponse response) {
List<WfModelVo> list = modelService.list(modelBo);
List<WfModelExportVo> listVo = BeanUtil.copyToList(list, WfModelExportVo.class);
List<WfCategoryVo> categoryVos = categoryService.queryList(new WfCategory());
Map<String, String> categoryMap = categoryVos.stream()
.collect(Collectors.toMap(WfCategoryVo::getCode, WfCategoryVo::getCategoryName));
for (WfModelExportVo exportVo : listVo) {
exportVo.setCategoryName(categoryMap.get(exportVo.getCategory()));
}
ExcelUtil.exportExcel(listVo, "流程模型数据", WfModelExportVo.class, response);
}
}

View File

@@ -1,239 +0,0 @@
package com.klp.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.flowable.core.domain.ProcessQuery;
import com.klp.workflow.domain.bo.WfCopyBo;
import com.klp.workflow.domain.vo.*;
import com.klp.workflow.service.IWfCopyService;
import com.klp.workflow.service.IWfProcessService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* 工作流流程管理
*
* @author KonBAI
* @createTime 2022/3/24 18:54
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/process")
public class WfProcessController extends BaseController {
private final IWfProcessService processService;
private final IWfCopyService copyService;
/**
* 查询可发起流程列表
*
* @param pageQuery 分页参数
*/
@GetMapping(value = "/list")
@SaCheckPermission("workflow:process:startList")
public TableDataInfo<WfDefinitionVo> startProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
return processService.selectPageStartProcessList(processQuery, pageQuery);
}
/**
* 我拥有的流程
*/
@SaCheckPermission("workflow:process:ownList")
@GetMapping(value = "/ownList")
public TableDataInfo<WfTaskVo> ownProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
return processService.selectPageOwnProcessList(processQuery, pageQuery);
}
/**
* 获取待办列表
*/
@SaCheckPermission("workflow:process:todoList")
@GetMapping(value = "/todoList")
public TableDataInfo<WfTaskVo> todoProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
return processService.selectPageTodoProcessList(processQuery, pageQuery);
}
/**
* 获取待签列表
*
* @param processQuery 流程业务对象
* @param pageQuery 分页参数
*/
@SaCheckPermission("workflow:process:claimList")
@GetMapping(value = "/claimList")
public TableDataInfo<WfTaskVo> claimProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
return processService.selectPageClaimProcessList(processQuery, pageQuery);
}
/**
* 获取已办列表
*
* @param pageQuery 分页参数
*/
@SaCheckPermission("workflow:process:finishedList")
@GetMapping(value = "/finishedList")
public TableDataInfo<WfTaskVo> finishedProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
return processService.selectPageFinishedProcessList(processQuery, pageQuery);
}
/**
* 获取抄送列表
*
* @param copyBo 流程抄送对象
* @param pageQuery 分页参数
*/
@SaCheckPermission("workflow:process:copyList")
@GetMapping(value = "/copyList")
public TableDataInfo<WfCopyVo> copyProcessList(WfCopyBo copyBo, PageQuery pageQuery) {
copyBo.setUserId(getUserId());
return copyService.selectPageList(copyBo, pageQuery);
}
/**
* 导出可发起流程列表
*/
@SaCheckPermission("workflow:process:startExport")
@Log(title = "可发起流程", businessType = BusinessType.EXPORT)
@PostMapping("/startExport")
public void startExport(@Validated ProcessQuery processQuery, HttpServletResponse response) {
List<WfDefinitionVo> list = processService.selectStartProcessList(processQuery);
ExcelUtil.exportExcel(list, "可发起流程", WfDefinitionVo.class, response);
}
/**
* 导出我拥有流程列表
*/
@SaCheckPermission("workflow:process:ownExport")
@Log(title = "我拥有流程", businessType = BusinessType.EXPORT)
@PostMapping("/ownExport")
public void ownExport(@Validated ProcessQuery processQuery, HttpServletResponse response) {
List<WfTaskVo> list = processService.selectOwnProcessList(processQuery);
List<WfOwnTaskExportVo> listVo = BeanUtil.copyToList(list, WfOwnTaskExportVo.class);
for (WfOwnTaskExportVo exportVo : listVo) {
exportVo.setStatus(ObjectUtil.isNull(exportVo.getFinishTime()) ? "进行中" : "已完成");
}
ExcelUtil.exportExcel(listVo, "我拥有流程", WfOwnTaskExportVo.class, response);
}
/**
* 导出待办流程列表
*/
@SaCheckPermission("workflow:process:todoExport")
@Log(title = "待办流程", businessType = BusinessType.EXPORT)
@PostMapping("/todoExport")
public void todoExport(@Validated ProcessQuery processQuery, HttpServletResponse response) {
List<WfTaskVo> list = processService.selectTodoProcessList(processQuery);
List<WfTodoTaskExportVo> listVo = BeanUtil.copyToList(list, WfTodoTaskExportVo.class);
ExcelUtil.exportExcel(listVo, "待办流程", WfTodoTaskExportVo.class, response);
}
/**
* 导出待签流程列表
*/
@SaCheckPermission("workflow:process:claimExport")
@Log(title = "待签流程", businessType = BusinessType.EXPORT)
@PostMapping("/claimExport")
public void claimExport(@Validated ProcessQuery processQuery, HttpServletResponse response) {
List<WfTaskVo> list = processService.selectClaimProcessList(processQuery);
List<WfClaimTaskExportVo> listVo = BeanUtil.copyToList(list, WfClaimTaskExportVo.class);
ExcelUtil.exportExcel(listVo, "待签流程", WfClaimTaskExportVo.class, response);
}
/**
* 导出已办流程列表
*/
@SaCheckPermission("workflow:process:finishedExport")
@Log(title = "已办流程", businessType = BusinessType.EXPORT)
@PostMapping("/finishedExport")
public void finishedExport(@Validated ProcessQuery processQuery, HttpServletResponse response) {
List<WfTaskVo> list = processService.selectFinishedProcessList(processQuery);
List<WfFinishedTaskExportVo> listVo = BeanUtil.copyToList(list, WfFinishedTaskExportVo.class);
ExcelUtil.exportExcel(listVo, "已办流程", WfFinishedTaskExportVo.class, response);
}
/**
* 导出抄送流程列表
*/
@SaCheckPermission("workflow:process:copyExport")
@Log(title = "抄送流程", businessType = BusinessType.EXPORT)
@PostMapping("/copyExport")
public void copyExport(WfCopyBo copyBo, HttpServletResponse response) {
copyBo.setUserId(getUserId());
List<WfCopyVo> list = copyService.selectList(copyBo);
ExcelUtil.exportExcel(list, "抄送流程", WfCopyVo.class, response);
}
/**
* 查询流程部署关联表单信息
*
* @param definitionId 流程定义id
* @param deployId 流程部署id
*/
@GetMapping("/getProcessForm")
@SaCheckPermission("workflow:process:start")
public R<?> getForm(@RequestParam(value = "definitionId") String definitionId,
@RequestParam(value = "deployId") String deployId,
@RequestParam(value = "procInsId", required = false) String procInsId) {
return R.ok(processService.selectFormContent(definitionId, deployId, procInsId));
}
/**
* 根据流程定义id启动流程实例
*
* @param processDefId 流程定义id
* @param variables 变量集合,json对象
*/
@SaCheckPermission("workflow:process:start")
@PostMapping("/start/{processDefId}")
public R<Void> start(@PathVariable(value = "processDefId") String processDefId, @RequestBody Map<String, Object> variables) {
// 如果包含审批人信息,则处理审批人信息
processService.startProcessByDefId(processDefId, variables);
return R.ok("流程启动成功");
}
/**
* 删除流程实例
*
* @param instanceIds 流程实例ID串
*/
@DeleteMapping("/instance/{instanceIds}")
public R<Void> delete(@PathVariable String[] instanceIds) {
processService.deleteProcessByIds(instanceIds);
return R.ok();
}
/**
* 读取xml文件
* @param processDefId 流程定义ID
*/
@GetMapping("/bpmnXml/{processDefId}")
public R<String> getBpmnXml(@PathVariable(value = "processDefId") String processDefId) {
return R.ok(null, processService.queryBpmnXmlById(processDefId));
}
/**
* 查询流程详情信息
*
* @param procInsId 流程实例ID
* @param taskId 任务ID
*/
@GetMapping("/detail")
public R detail(String procInsId, String taskId) {
return R.ok(processService.queryProcessDetail(procInsId, taskId));
}
}

View File

@@ -1,189 +0,0 @@
package com.klp.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
import com.klp.common.core.domain.R;
import com.klp.workflow.domain.bo.WfTaskBo;
import com.klp.workflow.service.IWfTaskService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 工作流任务管理
*
* @author KonBAI
* @createTime 2022/3/10 00:12
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/task")
public class WfTaskController {
private final IWfTaskService flowTaskService;
/**
* 取消流程
*/
@PostMapping(value = "/stopProcess")
@SaCheckPermission("workflow:process:cancel")
public R stopProcess(@RequestBody WfTaskBo bo) {
flowTaskService.stopProcess(bo);
return R.ok();
}
/**
* 撤回流程
*/
@PostMapping(value = "/revokeProcess")
@SaCheckPermission("workflow:process:revoke")
public R revokeProcess(@RequestBody WfTaskBo bo) {
flowTaskService.revokeProcess(bo);
return R.ok();
}
/**
* 获取流程变量
* @param taskId 流程任务Id
*/
@GetMapping(value = "/processVariables/{taskId}")
@SaCheckPermission("workflow:process:query")
public R processVariables(@PathVariable(value = "taskId") String taskId) {
return R.ok(flowTaskService.getProcessVariables(taskId));
}
/**
* 审批任务
*/
@PostMapping(value = "/complete")
@SaCheckPermission("workflow:process:approval")
public R complete(@RequestBody WfTaskBo bo) {
flowTaskService.complete(bo);
return R.ok();
}
/**
* 拒绝任务
*/
@PostMapping(value = "/reject")
@SaCheckPermission("workflow:process:approval")
public R taskReject(@RequestBody WfTaskBo taskBo) {
flowTaskService.taskReject(taskBo);
return R.ok();
}
/**
* 退回任务
*/
@PostMapping(value = "/return")
@SaCheckPermission("workflow:process:approval")
public R taskReturn(@RequestBody WfTaskBo bo) {
flowTaskService.taskReturn(bo);
return R.ok();
}
/**
* 获取所有可回退的节点
*/
@PostMapping(value = "/returnList")
@SaCheckPermission("workflow:process:query")
public R findReturnTaskList(@RequestBody WfTaskBo bo) {
return R.ok(flowTaskService.findReturnTaskList(bo));
}
/**
* 删除任务
*/
@DeleteMapping(value = "/delete")
@SaCheckPermission("workflow:process:approval")
public R delete(@RequestBody WfTaskBo bo) {
flowTaskService.deleteTask(bo);
return R.ok();
}
/**
* 认领/签收任务
*/
@PostMapping(value = "/claim")
@SaCheckPermission("workflow:process:claim")
public R claim(@RequestBody WfTaskBo bo) {
flowTaskService.claim(bo);
return R.ok();
}
/**
* 取消认领/签收任务
*/
@PostMapping(value = "/unClaim")
@SaCheckPermission("workflow:process:claim")
public R unClaim(@RequestBody WfTaskBo bo) {
flowTaskService.unClaim(bo);
return R.ok();
}
/**
* 委派任务
*/
@PostMapping(value = "/delegate")
@SaCheckPermission("workflow:process:approval")
public R delegate(@RequestBody WfTaskBo bo) {
if (ObjectUtil.hasNull(bo.getTaskId(), bo.getUserId())) {
return R.fail("参数错误!");
}
flowTaskService.delegateTask(bo);
return R.ok();
}
/**
* 转办任务
*/
@PostMapping(value = "/transfer")
@SaCheckPermission("workflow:process:approval")
public R transfer(@RequestBody WfTaskBo bo) {
if (ObjectUtil.hasNull(bo.getTaskId(), bo.getUserId())) {
return R.fail("参数错误!");
}
flowTaskService.transferTask(bo);
return R.ok();
}
/**
* 生成流程图
*
* @param processId 任务ID
*/
@RequestMapping("/diagram/{processId}")
public void genProcessDiagram(HttpServletResponse response,
@PathVariable("processId") String processId) {
InputStream inputStream = flowTaskService.diagram(processId);
OutputStream os = null;
BufferedImage image = null;
try {
image = ImageIO.read(inputStream);
response.setContentType("image/png");
os = response.getOutputStream();
if (image != null) {
ImageIO.write(image, "png", os);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.flush();
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

View File

@@ -298,19 +298,6 @@ management:
logfile:
external-file: ./logs/sys-console.log
--- # Flowable 配置
flowable:
# 关闭定时任务 job
async-executor-activate: false
# 库与数据库表结构不一致时,会自动将数据库表结构升级至新版本。
database-schema-update: true
idm:
# 关闭idm引擎 数据库不会创建act_id_*表流程流转不会使用act_id_*相关的表
enabled: false
# 关闭流程定义文件自动检查
check-process-definitions: false
# 关闭历史任务定时任务job
async-history-executor-activate: false
# 图像识别 OCR 配置(语言包绝对路径)
tesseract: