diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfInstanceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfInstanceController.java index 4de0cdc6..5030e9a3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfInstanceController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfInstanceController.java @@ -51,6 +51,7 @@ public class WfInstanceController { * @param instanceId 流程实例ID * @param deleteReason 删除原因 */ + @Deprecated @DeleteMapping(value = "/delete") public R delete(@RequestParam String instanceId, String deleteReason) { instanceService.delete(instanceId, deleteReason); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java index 615fedf4..04f48ada 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java @@ -206,6 +206,17 @@ public class WfProcessController extends BaseController { } + /** + * 删除流程实例 + * + * @param instanceIds 流程实例ID串 + */ + @DeleteMapping("/instance/{instanceIds}") + public R delete(@PathVariable String[] instanceIds) { + processService.deleteProcessByIds(instanceIds); + return R.ok(); + } + /** * 读取xml文件 * @param processDefId 流程定义ID diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java index dfc268e0..1befc0bc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java @@ -94,6 +94,11 @@ public interface IWfProcessService { */ void startProcessByDefKey(String procDefKey, Map variables); + /** + * 删除流程实例 + */ + void deleteProcessByIds(String[] instanceIds); + /** * 读取xml文件 diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java index 56d97e29..be272d30 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java @@ -613,6 +613,20 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce } } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteProcessByIds(String[] instanceIds) { + List ids = Arrays.asList(instanceIds); + // 校验流程是否结束 + long activeInsCount = runtimeService.createProcessInstanceQuery() + .processInstanceIds(new HashSet<>(ids)).active().count(); + if (activeInsCount > 0) { + throw new ServiceException("不允许删除进行中的流程实例"); + } + // 删除历史流程实例 + historyService.bulkDeleteHistoricProcessInstances(ids); + } + /** * 读取xml文件 * @param processDefId 流程定义ID @@ -764,7 +778,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce .eq(WfDeployForm::getDeployId, historicProcIns.getDeploymentId()) .eq(WfDeployForm::getFormKey, formKey) .eq(localScope, WfDeployForm::getNodeKey, flowElement.getId())); - + //@update by Brath:避免空集合导致的NULL空指针 WfDeployFormVo formInfo = formInfoList.stream().findFirst().orElse(null); diff --git a/ruoyi-ui/src/api/workflow/process.js b/ruoyi-ui/src/api/workflow/process.js index 66f204ec..a6a8862b 100644 --- a/ruoyi-ui/src/api/workflow/process.js +++ b/ruoyi-ui/src/api/workflow/process.js @@ -27,6 +27,14 @@ export function startProcess(processDefId, data) { }) } +// 删除流程实例 +export function delProcess(ids) { + return request({ + url: '/workflow/process/instance/' + ids, + method: 'delete' + }) +} + // 获取流程图 export function getBpmnXml(processDefId) { return request({ @@ -96,11 +104,3 @@ export function stopProcess(data) { data: data }) } - -// 删除流程实例 -export function delProcess(id) { - return request({ - url: '/workflow/instance/delete/?instanceId=' + id, - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/views/workflow/work/own.vue b/ruoyi-ui/src/views/workflow/work/own.vue index eca2f510..d48e519e 100644 --- a/ruoyi-ui/src/views/workflow/work/own.vue +++ b/ruoyi-ui/src/views/workflow/work/own.vue @@ -103,6 +103,7 @@ size="mini" icon="el-icon-delete" @click="handleDelete(scope.row)" + v-if="scope.row.finishTime" v-hasPermi="['workflow:process:remove']" >删除 item.id) - this.single = selection.length!==1 - this.multiple = !selection.length + this.ids = selection.map(item => item.procInsId); + this.single = selection.length !== 1; + this.multiple = !selection.length; }, handleAgain(row) { this.$router.push({ @@ -275,7 +276,7 @@ export default { }, /** 删除按钮操作 */ handleDelete(row) { - const ids = row.procInsId; + const ids = row.procInsId || this.ids; this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消",