zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
@@ -24,6 +24,8 @@ @Component public class AutoRunScheduler { private static final AgvModelType DEFAULT_AGV_MODEL = AgvModelType.CTU_BOX_TRANSPORT_AGV; private final RedisSupport redis = RedisSupport.defaultRedisSupport; @Autowired @@ -52,10 +54,13 @@ // @Scheduled(cron = "0/1 * * * * ? ") private void execute() { if (!configService.getVal("TaskAssignMode", Boolean.class)) { return; } this.autoRun(); AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, DEFAULT_AGV_MODEL.toString())); if (null == agvModel) { return; } this.autoRun(agvModel); } private void autoRun() { private void autoRun(AgvModel agvModel) { int availableAgvCount = this.getAvailableAgvCount(); if (0 == availableAgvCount) { return; } @@ -64,18 +69,16 @@ String memo = "DEMO_STA_" + String.join("-", staPreNos); // 入库 this.runStaToLoc(memo); this.runStaToLoc(agvModel, memo); // 出库 this.runLocToSta(memo); this.runLocToSta(agvModel, memo); // 移库 this.runLocToLoc(memo); this.runLocToLoc(agvModel, memo); } // 入库 private void runStaToLoc(String memo) { AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); if (null == agvModel) { return; } private void runStaToLoc(AgvModel agvModel, String memo) { // STOCK STA List<Sta> stockList = staService.queryAvailableOutSta(1); @@ -131,9 +134,7 @@ } // 出库 private void runLocToSta(String memo) { AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); if (null == agvModel) { return; } private void runLocToSta(AgvModel agvModel, String memo) { // IDLE STA List<Sta> idleList = staService.queryAvailableInSta(1); @@ -189,7 +190,7 @@ } // 移库 private void runLocToLoc(String staTaskMemo) { private void runLocToLoc(AgvModel agvModel, String staTaskMemo) { String memo = "DEMO_LOC"; int availableAgvCount = this.getAvailableAgvCount(); @@ -199,9 +200,6 @@ .in(Bus::getBusSts, BusStsType.RECEIVE.val(), BusStsType.PROGRESS.val()) .in(Bus::getMemo, memo, staTaskMemo) )) { return; } AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); if (null == agvModel) { return; } int maxCapacity = agvModel.getBackpack(); zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AvoidWaveCalculator.java
@@ -14,7 +14,6 @@ import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.entity.AgvModel; import com.zy.acs.manager.manager.entity.Code; import com.zy.acs.manager.manager.enums.AgvModelType; import com.zy.acs.manager.manager.service.AgvDetailService; import com.zy.acs.manager.manager.service.AgvModelService; import com.zy.acs.manager.manager.service.AgvService; @@ -83,7 +82,7 @@ } public boolean calcWaveScope() { public boolean calcWaveScope(AgvModel agvModel) { Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV; boolean lockAcquired = false; @@ -96,7 +95,7 @@ } // return this.calcWaveScopeByPython(lev); return this.calcWaveScopeByJava(lev); return this.calcWaveScopeByJava(lev, agvModel); } catch (Exception e) { @@ -115,9 +114,12 @@ } } private boolean calcWaveScopeByPython(Integer lev) throws Exception { private boolean calcWaveScopeByPython(Integer lev, AgvModel agvModel) throws Exception { if (null == agvModel.getDiameter() || agvModel.getDiameter() <= 0) { log.warn("There is no diameter or diameter value was wrong..."); } // python AgvModel agvModel = agvModelService.selectByType(AgvModelType.CTU_BOX_TRANSPORT_AGV.toString()); // can be optimized Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(agvModel.getDiameter(), MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR); if (null == pythonFile) { @@ -170,9 +172,11 @@ return true; } private boolean calcWaveScopeByJava(Integer lev) throws Exception { private boolean calcWaveScopeByJava(Integer lev, AgvModel agvModel) throws Exception { if (null == agvModel.getDiameter() || agvModel.getDiameter() <= 0) { log.warn("There is no diameter or diameter value was wrong..."); } AgvModel agvModel = agvModelService.selectByType(AgvModelType.CTU_BOX_TRANSPORT_AGV.toString()); // can be optimized Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(agvModel.getDiameter(), MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR); // java zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -201,7 +201,7 @@ // ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {}); // * sync wave scope if (!avoidWaveCalculator.calcWaveScope()) { if (!avoidWaveCalculator.calcWaveScope(agvModelService.getByAgvId(agv.getId()))) { log.error("failed to calculate avoid wave matrix ..."); return; } @@ -672,7 +672,7 @@ // the wave of first node Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance( agvModelService.getById(jamAgv.getAgvModel()).getDiameter(), agvModelService.getByAgvId(jamAgv.getAgvModel()).getDiameter(), MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR ); List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance)