Junjie
8 天以前 fc67e7de548d5fc4ba84a2c09d3e99aad2fc11d7
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -32,8 +32,10 @@
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Component
public class StationOperateProcessUtils {
@@ -199,9 +201,24 @@
        if (wrkMast == null) {
            return;
        }
        if (!Objects.equals(wrkMast.getStaNo(), stationObjModel.getStationId())) {
            News.info("入库站点到达扫描忽略,工作号={},扫描站点={},任务目标站={},原因=target_mismatch",
                    wrkMast.getWrkNo(), stationObjModel.getStationId(), wrkMast.getStaNo());
            return;
        }
        if (!Objects.equals(wrkMast.getWrkSts(), WrkStsType.INBOUND_STATION_RUN.sts)) {
            News.info("入库站点到达扫描忽略,工作号={},扫描站点={},任务状态={},原因=wrk_sts_mismatch",
                    wrkMast.getWrkNo(), stationObjModel.getStationId(), wrkMast.getWrkSts());
            return;
        }
        News.info("入库站点到达扫描命中,工作号={},扫描站点={},目标站={},站点taskNo={},准备转状态3",
                wrkMast.getWrkNo(), stationObjModel.getStationId(), wrkMast.getStaNo(), stationProtocol.getTaskNo());
        boolean updated = wrkAnalysisService.completeInboundStationRun(wrkMast, new Date());
        if (updated) {
            News.info("入库站点到达扫描命中,工作号={},目标站={}", wrkMast.getWrkNo(), wrkMast.getStaNo());
            News.info("入库站点到达扫描完成,工作号={},目标站={},结果=updated_to_3", wrkMast.getWrkNo(), wrkMast.getStaNo());
        }
        else {
            News.info("入库站点到达扫描结束,工作号={},目标站={},结果=skip_update", wrkMast.getWrkNo(), wrkMast.getStaNo());
        }
    }
@@ -285,22 +302,43 @@
    public void submitCrnStationOutTasks(MainProcessLane lane, long minIntervalMs) {
        List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
                .eq("wrk_sts", WrkStsType.OUTBOUND_RUN_COMPLETE.sts)
                .isNotNull("crn_no"));
                .isNotNull("crn_no")
                .orderByAsc("io_time", "wrk_no"));
        MainProcessLane pendingConfirmLane = resolveStationOutPendingConfirmLane(lane);
        LinkedHashSet<Integer> sourceStationIdSet = new LinkedHashSet<>();
        for (WrkMast wrkMast : wrkMasts) {
            Integer laneKey = wrkMast == null ? null : wrkMast.getSourceStaNo();
            if (laneKey == null) {
                laneKey = wrkMast == null ? null : wrkMast.getWrkNo();
            if (wrkMast == null || wrkMast.getWrkNo() == null) {
                continue;
            }
            mainProcessTaskSubmitter.submitKeyedSerialTask(
                    lane,
                    laneKey,
                    "crnStationOutExecute",
                    pendingConfirmLane,
                    wrkMast.getWrkNo(),
                    "confirmPendingCrnStationOutDispatch",
                    minIntervalMs,
                    () -> crnStationOutExecute(wrkMast)
                    () -> stationOutboundDispatchProcessor.confirmPendingCrnStationOutDispatch(wrkMast)
            );
            if (wrkMast.getSourceStaNo() != null) {
                sourceStationIdSet.add(wrkMast.getSourceStaNo());
            }
        }
        for (Integer sourceStationId : sourceStationIdSet) {
            mainProcessTaskSubmitter.submitKeyedSerialTask(
                    lane,
                    sourceStationId,
                    "dispatchNextCrnStationOutTask",
                    minIntervalMs,
                    () -> stationOutboundDispatchProcessor.dispatchNextCrnStationOutTask(sourceStationId)
            );
        }
    }
    private MainProcessLane resolveStationOutPendingConfirmLane(MainProcessLane lane) {
        if (lane == MainProcessLane.FAKE_STATION_OUT) {
            return MainProcessLane.FAKE_STATION_OUT_PENDING_CONFIRM;
        }
        return MainProcessLane.STATION_OUT_PENDING_CONFIRM;
    }
    public void submitDualCrnStationOutTasks(long minIntervalMs) {
        submitDualCrnStationOutTasks(MainProcessLane.DUAL_STATION_OUT, minIntervalMs);
    }