| | |
| | | public void run() { |
| | | //检测入库站是否有任务生成,并启动入库 |
| | | checkInStationHasTask(); |
| | | //按站点拆分生成入库任务,避免单个站点阻塞整轮扫描 |
| | | submitGenerateStoreTasks(); |
| | | //请求生成入库任务,保留按站点 lane 串行提交 |
| | | generateStoreWrkFile(); |
| | | |
| | | //堆垛机与输送站点都按单个任务提交到各自串行通道,逐个执行 |
| | | submitCrnTask("crnIoExecute", DISPATCH_INTERVAL_MS, crnOperateUtils::crnIoExecute); |
| | | submitCrnTask("crnIoExecuteFinish", DISPATCH_INTERVAL_MS, crnOperateUtils::crnIoExecuteFinish); |
| | | submitStationTask("stationInExecute", DISPATCH_INTERVAL_MS, stationOperateProcessUtils::stationInExecute); |
| | | submitStationTask("crnStationOutExecute", DISPATCH_INTERVAL_MS, stationOperateProcessUtils::crnStationOutExecute); |
| | | submitStationTask("scanInboundStationArrival", DISPATCH_INTERVAL_MS, stationOperateProcessUtils::scanInboundStationArrival); |
| | | submitStationTask("checkStationOutOrder", MAINTENANCE_INTERVAL_MS, stationOperateProcessUtils::checkStationOutOrder); |
| | | submitStationTask("watchCircleStation", MAINTENANCE_INTERVAL_MS, stationOperateProcessUtils::watchCircleStation); |
| | | submitStationTask("checkStationRunBlock", MAINTENANCE_INTERVAL_MS, stationOperateProcessUtils::checkStationRunBlock); |
| | |
| | | |
| | | @Override |
| | | public boolean matchCandidate(StoreInTaskContext context) { |
| | | StationProtocol stationProtocol = context.getStationProtocol(); |
| | | return stationProtocol.isAutoing() |
| | | && stationProtocol.isLoading() |
| | | && stationProtocol.isInEnable() |
| | | && stationProtocol.getTaskNo() > 0 |
| | | && !Cools.isEmpty(stationProtocol.getBarcode()); |
| | | return canRequestStoreIn(context.getStationProtocol()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | submitProcessTask(STATION_TASK_LANE, taskName, minIntervalMs, task); |
| | | } |
| | | |
| | | private void generateStoreWrkFile() { |
| | | submitGenerateStoreTasks(); |
| | | } |
| | | |
| | | private void submitGenerateStoreTasks() { |
| | | List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<>()); |
| | | for (BasDevp basDevp : basDevps) { |
| | | StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo()); |
| | | if (stationThread == null) { |
| | | continue; |
| | | } |
| | | |
| | | Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap(); |
| | | if (stationMap == null || stationMap.isEmpty()) { |
| | | continue; |
| | | } |
| | | |
| | | 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 (!canRequestStoreIn(stationMap.get(stationId))) { |
| | | continue; |
| | | } |
| | | submitGenerateStoreTask(stationId, DISPATCH_INTERVAL_MS, |
| | | () -> storeInTaskGenerationService.generate(this, basDevp, stationObjModel)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private boolean canRequestStoreIn(StationProtocol stationProtocol) { |
| | | return stationProtocol != null |
| | | && stationProtocol.isAutoing() |
| | | && stationProtocol.isLoading() |
| | | && stationProtocol.isInEnable() |
| | | && stationProtocol.getTaskNo() > 0 |
| | | && !Cools.isEmpty(stationProtocol.getBarcode()); |
| | | } |
| | | |
| | | private void submitGenerateStoreTask(Integer stationId, long minIntervalMs, Runnable task) { |
| | | submitProcessTask(GENERATE_STORE_TASK_LANE_PREFIX + stationId, "generateStoreWrkFile", minIntervalMs, task); |
| | | } |