| | |
| | | import com.vincent.rsf.server.manager.enums.LocStsType; |
| | | import com.vincent.rsf.server.system.entity.Config; |
| | | import com.vincent.rsf.server.system.service.ConfigService; |
| | | import com.vincent.rsf.server.system.entity.FlowStepInstance; |
| | | import com.vincent.rsf.server.system.service.FlowStepInstanceService; |
| | | import com.vincent.rsf.server.system.utils.SerialRuleUtils; |
| | | import com.vincent.rsf.server.system.utils.SystemAuthUtils; |
| | | import lombok.Synchronized; |
| | |
| | | private RestTemplate restTemplate; |
| | | @Autowired |
| | | private RemotesInfoProperties.RcsApi rcsApi; |
| | | @Autowired |
| | | private FlowStepInstanceService flowStepInstanceService; |
| | | @Autowired |
| | | private RemotesInfoProperties.WmsOpenApi wmsOpenApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Task operateComplete(Long id, Long loginUserId) { |
| | | List<Integer> longs = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id); |
| | | Task task = taskService.getOne(new LambdaQueryWrapper<Task>() |
| | | .eq(Task::getId, id) |
| | | .in(Task::getTaskStatus, longs)); |
| | | |
| | | Task task = getById(id); |
| | | if (Objects.isNull(task)) { |
| | | throw new CoolException("数据错误:当前任务不可执行完结操作!!"); |
| | | throw new CoolException("数据错误:任务不存在!!"); |
| | | } |
| | | |
| | | if (task.getTaskStatus() != null && TERMINAL_OR_WAITING_STATUS.contains(task.getTaskStatus())) { |
| | | throw new CoolException("任务已处于终态或等待库存更新,无需完结"); |
| | | } |
| | | List<FlowStepInstance> steps = flowStepInstanceService.list( |
| | | new LambdaQueryWrapper<FlowStepInstance>() |
| | | .eq(FlowStepInstance::getTaskNo, task.getTaskCode()) |
| | | .orderByAsc(FlowStepInstance::getStepOrder)); |
| | | int maxCompletedOrder = steps.stream() |
| | | .filter(s -> s.getStepOrder() != null && s.getStatus() != null && s.getStatus() == 3) |
| | | .mapToInt(FlowStepInstance::getStepOrder) |
| | | .max().orElse(-1); |
| | | for (FlowStepInstance step : steps) { |
| | | if (step.getStepOrder() != null && step.getStepOrder() > maxCompletedOrder) { |
| | | step.setStatus((short) 5); |
| | | flowStepInstanceService.updateById(step); |
| | | } |
| | | } |
| | | modiftyTaskSort(task, loginUserId); |
| | | // |
| | | // if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { |
| | | // task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); |
| | | // } else { |
| | | task.setTaskStatus(task.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : task.getTaskType()==101? TaskStsType.COMPLETE_OUT.id:TaskStsType.AWAIT.id); |
| | | // } |
| | | if (!this.updateById(task)) { |
| | | throw new CoolException("完成任务失败"); |
| | | applyTransferEndStatus(task); |
| | | // applyTransferEndStatus 未匹配到的任务类型(未置为 98/196/198/9999)时兜底置终态 |
| | | if (task.getTaskStatus() == null || (!task.getTaskStatus().equals(TaskStsType.COMPLETE_IN.id) |
| | | && !task.getTaskStatus().equals(TaskStsType.AWAIT.id) |
| | | && !task.getTaskStatus().equals(TaskStsType.COMPLETE_OUT.id) |
| | | && !task.getTaskStatus().equals(TaskStsType.MISSION_TRANSFER.id))) { |
| | | task.setTaskStatus(task.getTaskType() != null && task.getTaskType() < 100 |
| | | ? TaskStsType.COMPLETE_IN.id |
| | | : Integer.valueOf(101).equals(task.getTaskType()) ? TaskStsType.COMPLETE_OUT.id : TaskStsType.AWAIT.id); |
| | | updateById(task); |
| | | } |
| | | return task; |
| | | } |
| | | @Override |
| | | public void applyTransferEndStatus(Task task) { |
| | | if (TaskType.TASK_TYPE_IN.type.equals(task.getTaskType()) |
| | | || TaskType.TASK_TYPE_PICK_IN.type.equals(task.getTaskType()) |
| | | || TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType()) |
| | | || TaskType.TASK_TYPE_EMPTY_IN.type.equals(task.getTaskType()) |
| | | || TaskType.TASK_TYPE_MERGE_IN.type.equals(task.getTaskType()) |
| | | || TaskType.TASK_TYPE_LOC_MOVE.type.equals(task.getTaskType())) { |
| | | task.setTaskStatus(TaskStsType.COMPLETE_IN.id); |
| | | } else if (TaskType.TASK_TYPE_OUT.type.equals(task.getTaskType()) |
| | | || TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.equals(task.getTaskType())) { |
| | | task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); |
| | | } else if (TaskType.TASK_TYPE_CHECK_OUT.type.equals(task.getTaskType())) { |
| | | task.setTaskStatus(TaskStsType.AWAIT.id); |
| | | } else if (TaskType.TASK_TYPE_MERGE_OUT.type.equals(task.getTaskType())) { |
| | | task.setTaskStatus(TaskStsType.MISSION_TRANSFER.id); |
| | | } else if (TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type.equals(task.getTaskType()) |
| | | || TaskType.TASK_TYPE_EMPTY_OUT.type.equals(task.getTaskType())) { |
| | | task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); |
| | | } else { |
| | | return; |
| | | } |
| | | updateById(task); |
| | | } |
| | | |
| | | /** 终态或等待定时任务更新库存的状态,不展示完成按钮 */ |
| | | private static final Set<Integer> TERMINAL_OR_WAITING_STATUS = new HashSet<>(Arrays.asList( |
| | | TaskStsType.COMPLETE_IN.id, TaskStsType.REPORT_IN.id, TaskStsType.UPDATED_IN.id, |
| | | TaskStsType.COMPLETE_OUT.id, TaskStsType.WAVE_SEED.id, TaskStsType.UPDATED_OUT.id, |
| | | TaskStsType.MISSION_TRANSFER_END.id)); |
| | | |
| | | /** 完结不依赖流程步骤,仅未终态任务展示完成按钮 */ |
| | | @Override |
| | | public void fillCanComplete(List<Task> tasks) { |
| | | if (tasks == null || tasks.isEmpty()) { |
| | | return; |
| | | } |
| | | for (Task task : tasks) { |
| | | boolean terminal = task.getTaskStatus() != null && TERMINAL_OR_WAITING_STATUS.contains(task.getTaskStatus()); |
| | | task.setCanComplete(!terminal); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 修改任务优先级 |