| src/main/java/com/zy/core/plugin/GslProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/plugin/XiaosongProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/plugin/store/StoreInTaskGenerationService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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; } } src/main/java/com/zy/core/plugin/XiaosongProcess.java
@@ -1,20 +1,11 @@ package com.zy.core.plugin; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.service.BasDevpService; 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.StoreInTaskGenerationService; @@ -40,17 +31,11 @@ @Autowired private StationOperateProcessUtils stationOperateProcessUtils; @Autowired private CommonService commonService; @Autowired private BasDevpService basDevpService; @Autowired private RedisUtil redisUtil; @Autowired private DualCrnOperateProcessUtils dualCrnOperateProcessUtils; @Autowired private StoreInTaskGenerationService storeInTaskGenerationService; @Autowired private StationCommandDispatcher stationCommandDispatcher; @Override public void run() { @@ -106,62 +91,10 @@ continue; } StationProtocol stationProtocol = stationMap.get(stationId); if (!canSubmitGenerateStoreTask(basDevp, stationThread, stationObjModel, stationProtocol)) { continue; } storeInTaskGenerationService.submitGenerateStoreTask(this, basDevp, stationObjModel, 0L, () -> storeInTaskGenerationService.generate(this, basDevp, stationObjModel)); } } } private boolean canSubmitGenerateStoreTask(BasDevp basDevp, StationThread stationThread, StationObjModel stationObjModel, StationProtocol stationProtocol) { if (!handleErrorStationBack(basDevp, stationThread, stationObjModel, stationProtocol)) { return false; } return canRequestStoreIn(stationProtocol); } private boolean canRequestStoreIn(StationProtocol stationProtocol) { return stationProtocol != null && stationProtocol.getError() <= 0 && stationProtocol.isAutoing() && stationProtocol.isLoading() && stationProtocol.isInEnable() && stationProtocol.getTaskNo() > 0 && !Cools.isEmpty(stationProtocol.getBarcode()); } private boolean handleErrorStationBack(BasDevp basDevp, StationThread stationThread, StationObjModel stationObjModel, StationProtocol stationProtocol) { if (stationProtocol.getError() <= 0) { return true; } Object lock = redisUtil.get(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getTaskNo()); if (lock != null) { return false; } StationObjModel backStation = stationObjModel.getBackStation(); 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, "xiaosong-process", "station-back"); News.taskInfo(stationProtocol.getTaskNo(), "{}扫码异常,已退回至{}", backStation.getStationId()); redisUtil.set(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getTaskNo(), "lock", 10); return false; } } src/main/java/com/zy/core/plugin/store/StoreInTaskGenerationService.java
@@ -6,7 +6,9 @@ import com.core.common.Cools; import com.zy.asrs.domain.param.CreateInTaskParam; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkLastno; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkLastnoService; import com.zy.asrs.service.WrkMastService; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; @@ -52,6 +54,8 @@ private MainProcessTaskSubmitter mainProcessTaskSubmitter; @Autowired private StationCommandDispatcher stationCommandDispatcher; @Autowired private WrkLastnoService wrkLastnoService; /** * 保留当前按站点 lane 并发的能力,同时用一个简单计数避免并发生成把站点任务数顶穿上限。 @@ -61,6 +65,11 @@ public void generate(StoreInTaskPolicy policy, BasDevp basDevp, StationObjModel stationObjModel) { try { if (!policy.isEnabled()) { return; } StoreInTaskContext earlyContext = buildContext(basDevp, stationObjModel); if (earlyContext == null || !handleErrorStationBack(earlyContext)) { return; } @@ -179,6 +188,80 @@ } } private boolean handleErrorStationBack(StoreInTaskContext context) { StationProtocol stationProtocol = context.getStationProtocol(); 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 = context.getStationObjModel().getBackStation(); if (backStation == null || backStation.getStationId() == null) { News.warn("条码站退回失败,退回站未配置。deviceNo={},stationId={}", context.getBasDevp() == null ? null : context.getBasDevp().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 = context.getStationThread().getCommand(StationCommandType.MOVE, commonService.getWorkNo(WrkIoType.STATION_BACK.id), context.getStationObjModel().getStationId(), backStation.getStationId(), 0); if (command == null) { News.taskInfo(stationProtocol.getTaskNo(), "{}工作,获取输送线命令失败", stationProtocol.getTaskNo()); return false; } stationCommandDispatcher.dispatch(context.getBasDevp().getDevpNo(), command, "store-in-task", "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; } private StoreInTaskContext buildContext(BasDevp basDevp, StationObjModel stationObjModel) { if (basDevp == null || stationObjModel == null || stationObjModel.getStationId() == null) { return null;