| src/main/java/com/zy/core/plugin/FakeProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/plugin/GslProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/plugin/NormalProcess.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/store/StoreInTaskPolicy.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/core/plugin/FakeProcess.java
@@ -191,10 +191,23 @@ 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) { if (stationId == null || !stationMap.containsKey(stationId)) { continue; } if (!canRequestStoreIn(stationMap.get(stationId))) { continue; } storeInTaskGenerationService.submitGenerateStoreTask( @@ -438,15 +451,6 @@ } @Override public boolean matchCandidate(StoreInTaskContext context) { StationProtocol stationProtocol = context.getStationProtocol(); return stationProtocol.isAutoing() && stationProtocol.isLoading() && stationProtocol.getTaskNo() > 0 && !Cools.isEmpty(stationProtocol.getBarcode()); } @Override public void onRequestPermitGranted(StoreInTaskContext context) { redisUtil.set(getGenerateLockKey(context), "lock", 3); } @@ -463,6 +467,14 @@ stationCommandDispatcher.dispatch(context.getBasDevp().getDevpNo(), command, "fake-process", "write-info"); } private boolean canRequestStoreIn(StationProtocol stationProtocol) { return stationProtocol != null && stationProtocol.isAutoing() && stationProtocol.isLoading() && stationProtocol.getTaskNo() > 0 && !Cools.isEmpty(stationProtocol.getBarcode()); } // 计算所有站点停留时间 public void calcAllStationStayTime() { List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<>()); src/main/java/com/zy/core/plugin/GslProcess.java
@@ -86,38 +86,6 @@ } @Override public boolean matchCandidate(StoreInTaskContext context) { return canRequestStoreIn(context.getStationProtocol()); } @Override public boolean beforeApply(StoreInTaskContext context) { StationProtocol stationProtocol = context.getStationProtocol(); if (stationProtocol.getError() <= 0) { return true; } Object lock = redisUtil.get(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getStationId()); if (lock != null) { return false; } StationObjModel backStation = context.getStationObjModel().getBackStation(); 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, "gsl-process", "station-back"); News.taskInfo(stationProtocol.getTaskNo(), "{}扫码异常,已退回至{}", backStation.getStationId()); redisUtil.set(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getStationId(), "lock", 10); return true; } @Override public InTaskApplyRequest buildApplyRequest(StoreInTaskContext context) { InTaskApplyRequest request = StoreInTaskPolicy.super.buildApplyRequest(context); request.getExtraParams().put("weight", context.getStationProtocol().getWeight()); @@ -192,6 +160,9 @@ if (!stationMap.containsKey(stationId)) { continue; } if (!handleErrorStationBack(basDevp, stationThread, stationObjModel, stationMap.get(stationId))) { continue; } if (!canRequestStoreIn(stationMap.get(stationId))) { continue; } @@ -203,6 +174,7 @@ private boolean canRequestStoreIn(StationProtocol stationProtocol) { return stationProtocol != null && stationProtocol.getError() <= 0 && stationProtocol.isAutoing() && stationProtocol.isLoading() && stationProtocol.isInEnable() @@ -210,4 +182,32 @@ && !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.getStationId()); 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, "gsl-process", "station-back"); News.taskInfo(stationProtocol.getTaskNo(), "{}扫码异常,已退回至{}", backStation.getStationId()); redisUtil.set(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getStationId(), "lock", 10); return true; } } src/main/java/com/zy/core/plugin/NormalProcess.java
@@ -1,16 +1,11 @@ package com.zy.core.plugin; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.core.common.Cools; import com.zy.asrs.domain.param.CreateInTaskParam; import com.zy.asrs.utils.Utils; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkMastService; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; import com.zy.common.utils.RedisUtil; import com.zy.core.News; @@ -24,18 +19,15 @@ 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.StoreInTaskContext; import com.zy.core.plugin.store.StoreInTaskGenerationService; import com.zy.core.plugin.store.StoreInTaskPolicy; import com.zy.core.thread.StationThread; import com.zy.core.utils.CrnOperateProcessUtils; import com.zy.core.utils.StationOperateProcessUtils; import com.zy.core.utils.WmsOperateUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -52,11 +44,7 @@ @Autowired private BasDevpService basDevpService; @Autowired private WrkMastService wrkMastService; @Autowired private RedisUtil redisUtil; @Autowired private WmsOperateUtils wmsOperateUtils; @Autowired private StoreInTaskGenerationService storeInTaskGenerationService; @Autowired @@ -89,17 +77,38 @@ * 入库站,根据条码扫描生成入库工作档 */ public synchronized void generateStoreWrkFile() { storeInTaskGenerationService.generate(this); submitGenerateStoreTasks(); } @Override public boolean matchCandidate(StoreInTaskContext context) { StationProtocol stationProtocol = context.getStationProtocol(); return stationProtocol.isAutoing() && stationProtocol.isLoading() && stationProtocol.isInEnable() && stationProtocol.getTaskNo() > 0 && !Cools.isEmpty(stationProtocol.getBarcode()); 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 || !stationMap.containsKey(stationId)) { continue; } StationProtocol stationProtocol = stationMap.get(stationId); if (!canSubmitGenerateStoreTask(basDevp, stationThread, stationObjModel, stationProtocol)) { continue; } storeInTaskGenerationService.submitGenerateStoreTask(this, basDevp, stationObjModel, 0L, () -> storeInTaskGenerationService.generate(this, basDevp, stationObjModel)); } } } //检测入库站是否有任务生成,并启动入库 @@ -148,4 +157,21 @@ } } private boolean canSubmitGenerateStoreTask(BasDevp basDevp, StationThread stationThread, StationObjModel stationObjModel, StationProtocol stationProtocol) { 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()); } } src/main/java/com/zy/core/plugin/XiaosongProcess.java
@@ -1,16 +1,11 @@ package com.zy.core.plugin; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.core.common.Cools; import com.zy.asrs.domain.param.CreateInTaskParam; import com.zy.asrs.utils.Utils; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkMastService; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; import com.zy.common.utils.RedisUtil; import com.zy.core.News; @@ -24,19 +19,16 @@ 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.StoreInTaskContext; import com.zy.core.plugin.store.StoreInTaskGenerationService; import com.zy.core.plugin.store.StoreInTaskPolicy; import com.zy.core.thread.StationThread; import com.zy.core.utils.CrnOperateProcessUtils; import com.zy.core.utils.DualCrnOperateProcessUtils; import com.zy.core.utils.StationOperateProcessUtils; import com.zy.core.utils.WmsOperateUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -53,11 +45,7 @@ @Autowired private BasDevpService basDevpService; @Autowired private WrkMastService wrkMastService; @Autowired private RedisUtil redisUtil; @Autowired private WmsOperateUtils wmsOperateUtils; @Autowired private DualCrnOperateProcessUtils dualCrnOperateProcessUtils; @Autowired @@ -99,43 +87,38 @@ * 入库站,根据条码扫描生成入库工作档 */ public synchronized void generateStoreWrkFile() { storeInTaskGenerationService.generate(this); submitGenerateStoreTasks(); } @Override public boolean matchCandidate(StoreInTaskContext context) { StationProtocol stationProtocol = context.getStationProtocol(); return stationProtocol.isAutoing() && stationProtocol.isLoading() && stationProtocol.isInEnable() && stationProtocol.getTaskNo() > 0 && !Cools.isEmpty(stationProtocol.getBarcode()); } 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; } @Override public boolean beforeApply(StoreInTaskContext context) { StationProtocol stationProtocol = context.getStationProtocol(); if (stationProtocol.getError() <= 0) { return true; } Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap(); if (stationMap == null || stationMap.isEmpty()) { continue; } Object lock = redisUtil.get(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getTaskNo()); if (lock != null) { return false; List<StationObjModel> barcodeStations = getBarcodeStations(basDevp); for (StationObjModel stationObjModel : barcodeStations) { Integer stationId = stationObjModel == null ? null : stationObjModel.getStationId(); if (stationId == null || !stationMap.containsKey(stationId)) { continue; } StationProtocol stationProtocol = stationMap.get(stationId); if (!canSubmitGenerateStoreTask(basDevp, stationThread, stationObjModel, stationProtocol)) { continue; } storeInTaskGenerationService.submitGenerateStoreTask(this, basDevp, stationObjModel, 0L, () -> storeInTaskGenerationService.generate(this, basDevp, stationObjModel)); } } StationObjModel backStation = context.getStationObjModel().getBackStation(); 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, "xiaosong-process", "station-back"); News.taskInfo(stationProtocol.getTaskNo(), "{}扫码异常,已退回至{}", backStation.getStationId()); redisUtil.set(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationProtocol.getTaskNo(), "lock", 10); return true; } //检测入库站是否有任务生成,并启动入库 @@ -183,4 +166,51 @@ } } 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 true; } } src/main/java/com/zy/core/plugin/store/StoreInTaskGenerationService.java
@@ -7,7 +7,6 @@ import com.zy.asrs.domain.param.CreateInTaskParam; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkMastService; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; @@ -27,16 +26,12 @@ import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class StoreInTaskGenerationService { private static final int APPLY_IN_TASK_TIMEOUT_SECONDS = 5; @Autowired private BasDevpService basDevpService; @Autowired private WrkMastService wrkMastService; @Autowired private StationOperateProcessUtils stationOperateProcessUtils; @@ -53,32 +48,6 @@ * 保留当前按站点 lane 并发的能力,同时用一个简单计数避免并发生成把站点任务数顶穿上限。 */ private int inFlightGenerateCount = 0; public void generate(StoreInTaskPolicy policy) { try { if (!policy.isEnabled()) { return; } HashMap<String, String> systemConfigMap = getSystemConfigMap(); if (systemConfigMap == null) { return; } if (!hasAvailableStationTaskCapacity(systemConfigMap)) { return; } List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<>()); for (BasDevp basDevp : basDevps) { List<StationObjModel> barcodeStations = policy.getBarcodeStations(basDevp); for (StationObjModel stationObjModel : barcodeStations) { generateByStation(policy, basDevp, stationObjModel, systemConfigMap); } } } catch (Exception e) { News.error("生成入库任务异常,policy={}", policy.getPolicyName(), e); } } public void generate(StoreInTaskPolicy policy, BasDevp basDevp, StationObjModel stationObjModel) { try { @@ -129,12 +98,6 @@ HashMap<String, String> systemConfigMap) { StoreInTaskContext context = buildContext(basDevp, stationObjModel); if (context == null) { return; } if (!policy.matchCandidate(context)) { return; } if (!policy.beforeApply(context)) { return; } src/main/java/com/zy/core/plugin/store/StoreInTaskPolicy.java
@@ -25,12 +25,6 @@ return basDevp.getBarcodeStationList$(); } boolean matchCandidate(StoreInTaskContext context); default boolean beforeApply(StoreInTaskContext context) { return true; } default void onRequestPermitGranted(StoreInTaskContext context) { }