Junjie
2026-04-19 d9b0b37cb2ff5b0066c5a6550da34bb78adddc97
src/main/java/com/zy/core/plugin/GslProcess.java
@@ -1,23 +1,11 @@
package com.zy.core.plugin;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.WrkLastno;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.WrkLastnoService;
import com.zy.common.service.CommonService;
import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.dispatch.StationCommandDispatcher;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.enums.SlaveType;
import com.zy.core.enums.StationCommandType;
import com.zy.core.enums.WrkIoType;
import com.zy.core.model.StationObjModel;
import com.zy.core.model.command.StationCommand;
import com.zy.core.model.protocol.StationProtocol;
import com.zy.core.plugin.api.MainProcessPluginApi;
import com.zy.core.plugin.store.InTaskApplyRequest;
@@ -45,17 +33,9 @@
    @Autowired
    private StationOperateProcessUtils stationOperateProcessUtils;
    @Autowired
    private CommonService commonService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private WrkLastnoService wrkLastnoService;
    @Autowired
    private StoreInTaskGenerationService storeInTaskGenerationService;
    @Autowired
    private StationCommandDispatcher stationCommandDispatcher;
    @Override
    public void run() {
@@ -107,46 +87,7 @@
            List<StationObjModel> barcodeStations = getBarcodeStations(basDevp);
            for (StationObjModel stationObjModel : barcodeStations) {
                Integer stationId = stationObjModel == null ? null : stationObjModel.getStationId();
                if (stationId == null) {
                    continue;
                }
                if (!stationMap.containsKey(stationId)) {
                    continue;
                }
                if (!handleErrorStationBack(basDevp, stationThread, stationObjModel, stationMap.get(stationId))) {
                    continue;
                }
                StationProtocol stationProtocol = stationMap.get(stationId);
                if (stationProtocol == null) {
                    continue;
                }
                if (!stationProtocol.isAutoing()) {
                    continue;
                }
                if (!stationProtocol.isLoading()) {
                    continue;
                }
                if (!stationProtocol.isInEnable()) {
                    continue;
                }
                if (stationProtocol.getTaskNo() == 0) {
                    continue;
                }
                if (Cools.isEmpty(stationProtocol.getBarcode())) {
                    continue;
                }
                if (stationProtocol.getError() > 0) {
                    continue;
                }
                if (stationProtocol.isInBarcodeError()) {
                if (stationId == null || !stationMap.containsKey(stationId)) {
                    continue;
                }
@@ -154,81 +95,6 @@
                        () -> storeInTaskGenerationService.generate(this, basDevp, stationObjModel));
            }
        }
    }
    private boolean handleErrorStationBack(BasDevp basDevp,
                                           StationThread stationThread,
                                           StationObjModel stationObjModel,
                                           StationProtocol stationProtocol) {
        if (stationProtocol == null) {
            return false;
        }
        if (!stationProtocol.isAutoing()) {
            return false;
        }
        if (!stationProtocol.isLoading()) {
            return false;
        }
        if (stationProtocol.getError() <= 0) {
            return true;//站点无故障
        }
        if (!stationProtocol.isInBarcodeError()) {
            return true;//站点无异常
        }
        WrkLastno stationBackTaskRange = wrkLastnoService.getById(WrkIoType.STATION_BACK.id);
        Integer currentTaskNo = stationProtocol.getTaskNo();
        if (currentTaskNo != null
                && currentTaskNo > 0
                && stationBackTaskRange != null
                && stationBackTaskRange.getsNo() != null
                && stationBackTaskRange.geteNo() != null
                && currentTaskNo >= stationBackTaskRange.getsNo()
                && currentTaskNo <= stationBackTaskRange.geteNo()) {
            News.info("条码站已处于退回工作号范围,跳过重复生成退回命令。stationId={},taskNo={},range=[{}, {}]",
                    stationProtocol.getStationId(),
                    currentTaskNo,
                    stationBackTaskRange.getsNo(),
                    stationBackTaskRange.geteNo());
            return false;
        }
        StationObjModel backStation = stationObjModel.getBackStation();
        if (backStation == null || backStation.getStationId() == null) {
            News.warn("条码站退回失败,退回站未配置。deviceNo={},stationId={}",
                    basDevp == null ? null : basDevp.getDevpNo(),
                    stationProtocol.getStationId());
            return false;
        }
        // 当前站点已经挂着退回目标时,不再重复生成新的退回工作号。
        if (stationProtocol.getTaskNo() != null
                && stationProtocol.getTaskNo() > 0
                && backStation.getStationId().equals(stationProtocol.getTargetStaNo())) {
            return false;
        }
        Object lock = redisUtil.get(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getStationId());
        if (lock != null) {
            return false;
        }
        StationCommand command = stationThread.getCommand(StationCommandType.MOVE,
                commonService.getWorkNo(WrkIoType.STATION_BACK.id),
                stationObjModel.getStationId(),
                backStation.getStationId(), 0);
        if (command == null) {
            News.taskInfo(stationProtocol.getTaskNo(), "{}工作,获取输送线命令失败", stationProtocol.getTaskNo());
            return false;
        }
        stationCommandDispatcher.dispatch(basDevp.getDevpNo(), command, "gsl-process", "station-back");
        News.info("{}扫码站异常,已退回至{},条码站状态:{}", stationProtocol.getTaskNo(), backStation.getStationId(), JSON.toJSONString(stationProtocol));
        redisUtil.set(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getStationId(), "lock", 60 * 60);
        return false;
    }
}