1
昨天 6e695903059e82c1c376bf2926ffb8b209c0dc3e
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -404,7 +404,9 @@
            if (Objects.isNull(station) || !station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
                throw new CoolException("站点不存在或站点不处于空库状态!!");
            }
            station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
            if (!station.getType().equals(0)){
                station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
            }
            if (!basStationService.updateById(station)) {
                 throw new CoolException("站点状态更新失败!!");
@@ -854,39 +856,61 @@
                || 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())) {
            task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
        } else if (TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.equals(task.getTaskType())
                || 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_LOC_MOVE.type.equals(task.getTaskType())
                || TaskType.TASK_TYPE_OUT.type.equals(task.getTaskType())
                || TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.equals(task.getTaskType())
                || TaskType.TASK_TYPE_MERGE_OUT.type.equals(task.getTaskType())
                || TaskType.TASK_TYPE_CHECK_OUT.type.equals(task.getTaskType())
                || 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);
            task.setTaskStatus(TaskStsType.MISSION_TRANSFER.id);
        } else {
            return;
        }
        updateById(task);
    }
    /** 终态或等待定时任务更新库存的状态,不展示完成按钮 */
    /** 终态或等待定时任务更新库存的状态、9999,不展示完结按钮 */
    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));
            TaskStsType.MISSION_TRANSFER.id, TaskStsType.MISSION_TRANSFER_END.id));
    /** 完结不依赖流程步骤,仅未终态任务展示完成按钮 */
    /** 终态/9999 无按钮;状态在步骤中找不到或无下一步(最后一步)则无完结按钮 */
    @Override
    public void fillCanComplete(List<Task> tasks) {
        if (tasks == null || tasks.isEmpty()) {
            return;
        }
        Set<Integer> terminalSet = TERMINAL_OR_WAITING_STATUS;
        List<String> codes = tasks.stream().map(Task::getTaskCode).filter(Objects::nonNull).distinct().collect(Collectors.toList());
        if (codes.isEmpty()) {
            tasks.forEach(t -> t.setCanComplete(Boolean.FALSE));
            return;
        }
        List<FlowStepInstance> steps = codes.size() == 1
                ? flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>().eq(FlowStepInstance::getTaskNo, codes.get(0)).orderByAsc(FlowStepInstance::getStepOrder))
                : flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>().in(FlowStepInstance::getTaskNo, codes).orderByAsc(FlowStepInstance::getStepOrder));
        Map<String, List<FlowStepInstance>> stepsByTaskNo = steps.stream().collect(Collectors.groupingBy(FlowStepInstance::getTaskNo));
        for (Task task : tasks) {
            boolean terminal = task.getTaskStatus() != null && TERMINAL_OR_WAITING_STATUS.contains(task.getTaskStatus());
            task.setCanComplete(!terminal);
            if (task.getTaskStatus() != null && terminalSet.contains(task.getTaskStatus())) {
                task.setCanComplete(Boolean.FALSE);
                continue;
            }
            List<FlowStepInstance> taskSteps = stepsByTaskNo.get(task.getTaskCode());
            if (taskSteps == null || taskSteps.isEmpty()) {
                task.setCanComplete(Boolean.FALSE);
                continue;
            }
            FlowStepInstance match = taskSteps.stream()
                    .filter(s -> s.getWmsNowTaskStatus() != null && s.getWmsNowTaskStatus().equals(task.getTaskStatus()))
                    .findFirst().orElse(null);
            if (match == null) {
                task.setCanComplete(Boolean.FALSE);
                continue;
            }
            boolean isLastStep = match.getWmsNextTaskStatus() == null || match.getWmsNextTaskStatus().equals(TaskStsType.MISSION_TRANSFER.id);
            task.setCanComplete(!isLastStep);
        }
    }
@@ -1334,7 +1358,9 @@
                if (null == basStation) {
                    throw new CoolException("站点状态错误!!");
                }
                basStation.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
                if (!basStation.getType().equals(0)){
                    basStation.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
                }
                if (!basStationService.updateById(basStation)) {
                    throw new CoolException("更新站点状态失败!!");
                }
@@ -2159,12 +2185,16 @@
            /**判断是否光电站点,非光店站点需管控站点状态*/
            if (!Objects.isNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
                if (task.getTaskType() <= TaskType.TASK_TYPE_CHECK_IN.type && !task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
                    station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
                    if (!station.getType().equals(0)){
                        station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
                    }
                    if (!basStationService.updateById(station)) {
                        throw new CoolException("站点状态更新失败!!");
                    }
                } else if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type) {
                    station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
                    if (!station.getType().equals(0)){
                        station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
                    }
                    if (!basStationService.updateById(station)) {
                        throw new CoolException("站点状态更新失败!!");
                    }