feat(approval): 添加审批撤销功能
- 在IWmsApprovalService中新增cancelApproval方法定义 - 在IWmsApprovalTaskService中新增deleteByApprovalId方法定义 - 在WmsApprovalController中新增cancelApproval接口 - 在WmsApprovalServiceImpl中实现撤销审批业务逻辑 - 在WmsApprovalTaskServiceImpl中实现按审批ID删除任务功能 - 添加撤销审批的权限验证和重复提交限制 - 实现审批状态校验和关联任务清理机制
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user