|
|
@@ -92,11 +92,11 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
|
|
|
private final SysUserService sysUserService;
|
|
|
|
|
|
@Override
|
|
|
- public PageResult<ApprovalTaskDTO> todoList(Long assigneeId, String assigneeType, String processName, String formFilters, Integer pageNum, Integer pageSize) {
|
|
|
+ public PageResult<ApprovalTaskDTO> todoList(Long assigneeId, String assigneeType, String processName, String formFilters, String currentNodeId, Integer pageNum, Integer pageSize) {
|
|
|
List<Long> roleIds = loadRoleIdsIfSystemUser(assigneeId, assigneeType);
|
|
|
Page<ApprovalTask> page = new Page<>(pageNum, pageSize);
|
|
|
Map<String, String> filterMap = this.parseFormFilters(formFilters);
|
|
|
- this.approvalTaskMapper.selectTodoList(page, assigneeId, assigneeType, roleIds, processName, filterMap);
|
|
|
+ this.approvalTaskMapper.selectTodoList(page, assigneeId, assigneeType, roleIds, processName, filterMap, currentNodeId);
|
|
|
List<ApprovalTaskDTO> records = page.getRecords().stream()
|
|
|
.map(ApprovalTaskDTO::of)
|
|
|
.peek(this::fillUrgency)
|
|
|
@@ -172,11 +172,13 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void batchApprove(BatchTaskDTO dto) {
|
|
|
+ this.validateSameInstanceAndNode(dto.getTaskIds());
|
|
|
for (Long taskId : dto.getTaskIds()) {
|
|
|
ApproveTaskDTO approveDto = new ApproveTaskDTO();
|
|
|
approveDto.setTaskId(taskId);
|
|
|
approveDto.setComment(dto.getComment());
|
|
|
approveDto.setAttachmentUrls(dto.getAttachmentUrls());
|
|
|
+ approveDto.setTargetNodeId(dto.getTargetNodeId());
|
|
|
this.approve(approveDto);
|
|
|
}
|
|
|
}
|
|
|
@@ -184,6 +186,7 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void batchReject(BatchTaskDTO dto) {
|
|
|
+ this.validateSameInstanceAndNode(dto.getTaskIds());
|
|
|
for (Long taskId : dto.getTaskIds()) {
|
|
|
ApproveTaskDTO rejectDto = new ApproveTaskDTO();
|
|
|
rejectDto.setTaskId(taskId);
|
|
|
@@ -193,6 +196,17 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /** 校验所有任务属于同一个流程节点的任务(允许跨实例) */
|
|
|
+ private void validateSameInstanceAndNode(List<Long> taskIds) {
|
|
|
+ if (taskIds == null || taskIds.size() <= 1) return;
|
|
|
+ List<ApprovalTask> tasks = this.approvalTaskMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<ApprovalTask>().in(ApprovalTask::getId, taskIds));
|
|
|
+ long distinctNodes = tasks.stream().map(ApprovalTask::getNodeId).distinct().count();
|
|
|
+ if (distinctNodes > 1) {
|
|
|
+ throw new BusinessException("选择流程处于多个节点,无法批量审批");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void returnTask(ApproveTaskDTO dto) {
|