1
1 天以前 51c27e505842ce3343dfabfb994d2fc28ae0d8a8
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -33,6 +33,8 @@
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;
@@ -120,6 +122,10 @@
    private RestTemplate restTemplate;
    @Autowired
    private RemotesInfoProperties.RcsApi rcsApi;
    @Autowired
    private FlowStepInstanceService flowStepInstanceService;
    @Autowired
    private RemotesInfoProperties.WmsOpenApi wmsOpenApi;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -806,27 +812,83 @@
    @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);
        }
    }
    /**
     * 修改任务优先级