From 30a06d297b4076999600a30853c80735de0542d0 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 11 Mar 2026 15:52:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(approval):=20=E6=B7=BB=E5=8A=A0=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E6=92=A4=E9=94=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在IWmsApprovalService中新增cancelApproval方法定义 - 在IWmsApprovalTaskService中新增deleteByApprovalId方法定义 - 在WmsApprovalController中新增cancelApproval接口 - 在WmsApprovalServiceImpl中实现撤销审批业务逻辑 - 在WmsApprovalTaskServiceImpl中实现按审批ID删除任务功能 - 添加撤销审批的权限验证和重复提交限制 - 实现审批状态校验和关联任务清理机制 --- .../klp/controller/WmsApprovalController.java | 14 ++++++ .../com/klp/service/IWmsApprovalService.java | 8 +++ .../klp/service/IWmsApprovalTaskService.java | 8 +++ .../service/impl/WmsApprovalServiceImpl.java | 50 +++++++++++++++++++ .../impl/WmsApprovalTaskServiceImpl.java | 6 +++ 5 files changed, 86 insertions(+) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsApprovalController.java b/klp-wms/src/main/java/com/klp/controller/WmsApprovalController.java index 62f50a9a..aa13c246 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsApprovalController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsApprovalController.java @@ -142,4 +142,18 @@ public class WmsApprovalController extends BaseController { public R> getTasks(@PathVariable Long approvalId) { return R.ok(iWmsApprovalTaskService.queryByApprovalId(approvalId)); } + + /** + * 撤销审批 + * + * @param approvalId 审批ID + */ + @Log(title = "撤销审批", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/cancel") + public R> cancelApproval( + @NotNull(message = "审批ID不能为空") + @RequestParam Long approvalId) { + return R.ok(iWmsApprovalService.cancelApproval(approvalId)); + } } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsApprovalService.java b/klp-wms/src/main/java/com/klp/service/IWmsApprovalService.java index 9dd7ec2b..a4ab6545 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsApprovalService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsApprovalService.java @@ -65,4 +65,12 @@ public interface IWmsApprovalService { * @return 操作结果 */ Map rejectTask(Long taskId, String approvalOpinion); + + /** + * 撤销审批 + * + * @param approvalId 审批ID + * @return 操作结果 + */ + Map cancelApproval(Long approvalId); } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsApprovalTaskService.java b/klp-wms/src/main/java/com/klp/service/IWmsApprovalTaskService.java index fb9b19c7..03ca4597 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsApprovalTaskService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsApprovalTaskService.java @@ -31,4 +31,12 @@ public interface IWmsApprovalTaskService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); List queryByApprovalId(Long approvalId); + + /** + * 根据审批ID删除所有相关任务 + * + * @param approvalId 审批ID + * @return 删除数量 + */ + Integer deleteByApprovalId(Long approvalId); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalServiceImpl.java index 291b0ed9..801ee225 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalServiceImpl.java @@ -47,6 +47,7 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService { private final WmsApprovalMapper baseMapper; private final WmsApprovalTaskMapper approvalTaskMapper; + private final IWmsApprovalTaskService approvalTaskService; private final WmsLeaveRequestMapper leaveRequestMapper; private final WmsOutRequestMapper outRequestMapper; private final ISysUserService userService; @@ -499,4 +500,53 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService { return result; } + @Override + @Transactional(rollbackFor = Exception.class) + public Map cancelApproval(Long approvalId) { + Map result = new HashMap<>(); + result.put("success", false); + + if (approvalId == null) { + result.put("message", "审批ID不能为空"); + return result; + } + + WmsApproval approval = baseMapper.selectById(approvalId); + if (approval == null) { + result.put("message", "审批记录不存在"); + return result; + } + + if ("已撤销".equals(approval.getApprovalStatus())) { + result.put("message", "该审批已被撤销"); + return result; + } + + if ("已同意".equals(approval.getApprovalStatus())) { + result.put("message", "已通过的审批不能撤销"); + return result; + } + + List tasks = approvalTaskService.queryByApprovalId(approvalId); + if (tasks != null && !tasks.isEmpty()) { + for (WmsApprovalTaskVo task : tasks) { + if (task.getTaskStatus() != null && !"pending".equals(task.getTaskStatus())) { + result.put("message", "该审批已被审批,不能撤销(审批人:" + task.getApproverName() + ",状态:" + task.getTaskStatus() + ")"); + return result; + } + } + } + + Integer deletedCount = approvalTaskService.deleteByApprovalId(approvalId); + + approval.setApprovalStatus("已撤销"); + approval.setFinalStatus("cancelled"); + baseMapper.updateById(approval); + + result.put("success", true); + result.put("message", "撤销成功"); + result.put("deletedTaskCount", deletedCount); + return result; + } + } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalTaskServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalTaskServiceImpl.java index 35a99fa7..df1759a2 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalTaskServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsApprovalTaskServiceImpl.java @@ -201,4 +201,10 @@ public class WmsApprovalTaskServiceImpl implements IWmsApprovalTaskService { .eq(WmsApprovalTask::getApprovalId, approvalId) .orderByAsc(WmsApprovalTask::getCreateTime)); } + + @Override + public Integer deleteByApprovalId(Long approvalId) { + return baseMapper.delete(Wrappers.lambdaQuery() + .eq(WmsApprovalTask::getApprovalId, approvalId)); + } }