package org.ruoyi.flowable.workflow.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.core.domain.R; import org.ruoyi.common.core.domain.model.LoginUser; import org.ruoyi.common.core.utils.MapstructUtils; import org.ruoyi.common.excel.utils.ExcelUtil; import org.ruoyi.common.satoken.utils.LoginHelper; import org.ruoyi.common.web.core.BaseController; import org.ruoyi.flowable.core.domain.ProcessQuery; import org.ruoyi.flowable.core.domain.model.PageQuery; import org.ruoyi.flowable.core.page.TableDataInfo; import org.ruoyi.flowable.workflow.domain.bo.WfCopyBo; import org.ruoyi.flowable.workflow.domain.vo.*; import org.ruoyi.flowable.workflow.service.IWfCopyService; import org.ruoyi.flowable.workflow.service.IWfProcessService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; /** * 工作流流程管理 * * @author KonBAI * @createTime 2022/3/24 18:54 */ @Slf4j @RequiredArgsConstructor @RestController @RequestMapping("/process") public class WfProcessController extends BaseController { private final IWfProcessService processService; private final IWfCopyService copyService; /** * 查询可发起流程列表 * * @param pageQuery 分页参数 */ @GetMapping(value = "/list") public TableDataInfo startProcessList(ProcessQuery processQuery, PageQuery pageQuery) { return processService.selectPageStartProcessList(processQuery, pageQuery); } /** * 我拥有的流程 */ @GetMapping(value = "/ownList") public TableDataInfo ownProcessList(ProcessQuery processQuery, PageQuery pageQuery) { return processService.selectPageOwnProcessList(processQuery, pageQuery); } /** * 获取待办列表 */ @GetMapping(value = "/todoList") public TableDataInfo todoProcessList(ProcessQuery processQuery, PageQuery pageQuery) { return processService.selectPageTodoProcessList(processQuery, pageQuery); } /** * 获取待签列表 * * @param processQuery 流程业务对象 * @param pageQuery 分页参数 */ @GetMapping(value = "/claimList") public TableDataInfo claimProcessList(ProcessQuery processQuery, PageQuery pageQuery) { return processService.selectPageClaimProcessList(processQuery, pageQuery); } /** * 获取已办列表 * * @param pageQuery 分页参数 */ @GetMapping(value = "/finishedList") public TableDataInfo finishedProcessList(ProcessQuery processQuery, PageQuery pageQuery) { return processService.selectPageFinishedProcessList(processQuery, pageQuery); } /** * 获取抄送列表 * * @param copyBo 流程抄送对象 * @param pageQuery 分页参数 */ @GetMapping(value = "/copyList") public TableDataInfo copyProcessList(WfCopyBo copyBo, PageQuery pageQuery) { // 获取当前的用户 LoginUser loginUser = LoginHelper.getLoginUser(); if (ObjectUtil.isNotNull(loginUser)) { copyBo.setUserId(loginUser.getUserId()); } return copyService.selectPageList(copyBo, pageQuery); } /** * 导出可发起流程列表 */ @PostMapping("/startExport") public void startExport(@Validated ProcessQuery processQuery, HttpServletResponse response) { List list = processService.selectStartProcessList(processQuery); List convert = MapstructUtils.convert(list, WfDefinitionVo.class); ExcelUtil.exportExcel(convert, "可发起流程", WfDefinitionVo.class, response); } /** * 导出我拥有流程列表 */ @PostMapping("/ownExport") public void ownExport(@Validated ProcessQuery processQuery, HttpServletResponse response) { List list = processService.selectOwnProcessList(processQuery); List listVo = BeanUtil.copyToList(list, WfOwnTaskExportVo.class); for (WfOwnTaskExportVo exportVo : listVo) { exportVo.setStatus(ObjectUtil.isNull(exportVo.getFinishTime()) ? "进行中" : "已完成"); } List convert = MapstructUtils.convert(listVo, WfOwnTaskExportVo.class); ExcelUtil.exportExcel(convert, "我拥有的流程", WfOwnTaskExportVo.class, response); } /** * 导出待办流程列表 */ @PostMapping("/todoExport") public void todoExport(@Validated ProcessQuery processQuery, HttpServletResponse response) { List list = processService.selectTodoProcessList(processQuery); List listVo = BeanUtil.copyToList(list, WfTodoTaskExportVo.class); List convert = MapstructUtils.convert(listVo, WfTodoTaskExportVo.class); ExcelUtil.exportExcel(convert, "待办流程", WfTodoTaskExportVo.class, response); } /** * 导出待签流程列表 */ @PostMapping("/claimExport") public void claimExport(@Validated ProcessQuery processQuery, HttpServletResponse response) { List list = processService.selectClaimProcessList(processQuery); List listVo = BeanUtil.copyToList(list, WfClaimTaskExportVo.class); List convert = MapstructUtils.convert(listVo, WfClaimTaskExportVo.class); ExcelUtil.exportExcel(convert, "待签流程", WfClaimTaskExportVo.class, response); } /** * 导出已办流程列表 */ @PostMapping("/finishedExport") public void finishedExport(@Validated ProcessQuery processQuery, HttpServletResponse response) { List list = processService.selectFinishedProcessList(processQuery); List listVo = BeanUtil.copyToList(list, WfFinishedTaskExportVo.class); List convert = MapstructUtils.convert(listVo, WfFinishedTaskExportVo.class); ExcelUtil.exportExcel(convert, "已办流程", WfFinishedTaskExportVo.class, response); } /** * 导出抄送流程列表 */ @PostMapping("/copyExport") public void copyExport(WfCopyBo copyBo, HttpServletResponse response) { // 获取当前的用户 LoginUser loginUser = LoginHelper.getLoginUser(); if (ObjectUtil.isNotNull(loginUser)) { copyBo.setUserId(loginUser.getUserId()); } List list = copyService.selectList(copyBo); List convert = MapstructUtils.convert(list, WfCopyVo.class); ExcelUtil.exportExcel(convert, "抄送流程", WfCopyVo.class, response); } /** * 查询流程部署关联表单信息 * * @param definitionId 流程定义id * @param deployId 流程部署id */ @GetMapping("/getProcessForm") 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对象 */ @PostMapping("/start/{processDefId}") public R start(@PathVariable(value = "processDefId") String processDefId, @RequestBody Map variables) { processService.startProcessByDefId(processDefId, variables); return R.ok("流程启动成功"); } /** * 删除流程实例 * * @param instanceIds 流程实例ID串 */ @DeleteMapping("/instance/{instanceIds}") public R delete(@PathVariable String[] instanceIds) { processService.deleteProcessByIds(instanceIds); return R.ok("操作成功"); } /** * 读取xml文件 * @param processDefId 流程定义ID */ @GetMapping("/bpmnXml/{processDefId}") public R getBpmnXml(@PathVariable(value = "processDefId") String processDefId) { return R.ok(processService.queryBpmnXmlById(processDefId),null ); } /** * 查询流程详情信息 * * @param procInsId 流程实例ID * @param taskId 任务ID */ @GetMapping("/detail") public R detail(String procInsId, String taskId) { return R.ok(processService.queryProcessDetail(procInsId, taskId)); } }