feat(approval): 添加审批撤销功能

- 在IWmsApprovalService中新增cancelApproval方法定义
- 在IWmsApprovalTaskService中新增deleteByApprovalId方法定义
- 在WmsApprovalController中新增cancelApproval接口
- 在WmsApprovalServiceImpl中实现撤销审批业务逻辑
- 在WmsApprovalTaskServiceImpl中实现按审批ID删除任务功能
- 添加撤销审批的权限验证和重复提交限制
- 实现审批状态校验和关联任务清理机制
This commit is contained in:
2026-03-11 15:52:28 +08:00
parent 70b9d620b2
commit 30a06d297b
5 changed files with 86 additions and 0 deletions

View File

@@ -142,4 +142,18 @@ public class WmsApprovalController extends BaseController {
public R<List<WmsApprovalTaskVo>> getTasks(@PathVariable Long approvalId) {
return R.ok(iWmsApprovalTaskService.queryByApprovalId(approvalId));
}
/**
* 撤销审批
*
* @param approvalId 审批ID
*/
@Log(title = "撤销审批", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/cancel")
public R<Map<String, Object>> cancelApproval(
@NotNull(message = "审批ID不能为空")
@RequestParam Long approvalId) {
return R.ok(iWmsApprovalService.cancelApproval(approvalId));
}
}

View File

@@ -65,4 +65,12 @@ public interface IWmsApprovalService {
* @return 操作结果
*/
Map<String, Object> rejectTask(Long taskId, String approvalOpinion);
/**
* 撤销审批
*
* @param approvalId 审批ID
* @return 操作结果
*/
Map<String, Object> cancelApproval(Long approvalId);
}

View File

@@ -31,4 +31,12 @@ public interface IWmsApprovalTaskService {
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<WmsApprovalTaskVo> queryByApprovalId(Long approvalId);
/**
* 根据审批ID删除所有相关任务
*
* @param approvalId 审批ID
* @return 删除数量
*/
Integer deleteByApprovalId(Long approvalId);
}

View File

@@ -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<String, Object> cancelApproval(Long approvalId) {
Map<String, Object> 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<WmsApprovalTaskVo> 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;
}
}

View File

@@ -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.<WmsApprovalTask>lambdaQuery()
.eq(WmsApprovalTask::getApprovalId, approvalId));
}
}