|
@@ -516,39 +516,60 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
String xbkFlag = "";
|
|
|
|
|
|
if("1".equals(findAgvFlag)){//需要提前锁定下个接驳位
|
|
|
+ synchronized (DictionaryKey.CHECK_AGV_STATION){
|
|
|
+ // begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
|
|
|
+ // 先找到处理节点下一节点agv起点地址
|
|
|
+ List<Long> occupyAgvStations = (null == msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY) ? new ArrayList<>(): (List<Long>) msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY));
|
|
|
+
|
|
|
+ TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);;
|
|
|
+ //获取接驳位。agvEndStationStorge
|
|
|
+ Map map = storgeService.getPlateStorgeByNo(zZone,occupyAgvStations);
|
|
|
+ targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
|
|
|
+ String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
|
|
|
+ // 在向下找agv终点位子
|
|
|
+ // 下一个节点机器人所属产线
|
|
|
+ TaskNode afterLastAgvTaskNode = taskNodeService.getNextNTaskNode(lastAgvTaskNode,1);
|
|
|
+ ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,afterLastAgvTaskNode.getResourceId()));
|
|
|
+ //获取产线ID
|
|
|
+ zoneId = zoneProductionresource.getZoneId();
|
|
|
+ zZone = zoneService.getById(zoneId);
|
|
|
+ String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
|
|
|
+ List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
|
|
|
+ if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
|
|
|
+
|
|
|
+ ProductionresourcePosition position = null;
|
|
|
+ for(ProductionresourcePosition productionresourcePosition : jbwBList){
|
|
|
+ if(!occupyAgvStations.contains(productionresourcePosition.getResourceId())){
|
|
|
+ position = jbwBList.get(0);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(null!=position){
|
|
|
+ agvEndStationStorge =storgeService.getById(position.getStorgeId());
|
|
|
|
|
|
- // begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
|
|
|
- // 先找到处理节点下一节点agv起点地址
|
|
|
- TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);;
|
|
|
- //获取接驳位。
|
|
|
- Map map = storgeService.getPlateStorgeByNo(zZone);
|
|
|
- targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
|
|
|
- String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
|
|
|
- // 在向下找agv终点位子
|
|
|
- // 下一个节点机器人所属产线
|
|
|
- TaskNode afterLastAgvTaskNode = taskNodeService.getNextNTaskNode(lastAgvTaskNode,1);
|
|
|
- ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,afterLastAgvTaskNode.getResourceId()));
|
|
|
- //获取产线ID
|
|
|
- zoneId = zoneProductionresource.getZoneId();
|
|
|
- zZone = zoneService.getById(zoneId);
|
|
|
- String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
|
|
|
- List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
|
|
|
- if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
|
|
|
- ProductionresourcePosition position = jbwBList.get(0);
|
|
|
- agvEndStationStorge =storgeService.getById(position.getStorgeId());
|
|
|
+ //更新到targetresourceid
|
|
|
+// TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
|
|
|
+ taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
|
|
|
+ lastAgvTaskNode.setTargetResourceId(position.getResourceId());
|
|
|
+ lastAgvTaskNode.setResourceId(taskNode.getTargetResourceId());
|
|
|
+ taskNodeService.updateById(taskNode);
|
|
|
+ taskNodeService.updateById(lastAgvTaskNode);
|
|
|
+
|
|
|
+ if(!occupyAgvStations.contains(Long.valueOf(targetResourceId))){
|
|
|
+ occupyAgvStations.add(Long.valueOf(targetResourceId));
|
|
|
+ }
|
|
|
+ if(!occupyAgvStations.contains(position.getResourceId())){
|
|
|
+ occupyAgvStations.add(position.getResourceId());
|
|
|
+ }
|
|
|
+ msgUtil.redis_set(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY,occupyAgvStations);
|
|
|
+ }
|
|
|
|
|
|
- returnMap.put("store",targetStorge);
|
|
|
- returnMap.put("targetxbk","0");
|
|
|
+ returnMap.put("store",targetStorge);
|
|
|
+ returnMap.put("targetxbk","0");
|
|
|
|
|
|
- //更新到targetresourceid
|
|
|
-// TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
|
|
|
- taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
|
|
|
- lastAgvTaskNode.setTargetResourceId(position.getResourceId());
|
|
|
- lastAgvTaskNode.setResourceId(taskNode.getTargetResourceId());
|
|
|
- taskNodeService.updateById(taskNode);
|
|
|
- taskNodeService.updateById(lastAgvTaskNode);
|
|
|
- }else{//需要放到线边库
|
|
|
- xbkFlag = "1";
|
|
|
+ }else{//需要放到线边库
|
|
|
+ xbkFlag = "1";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// end modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
|
|
@@ -703,7 +724,6 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
|
|
|
/**
|
|
|
* 立库获取终点位置,取空库位的数据
|
|
|
- * @param task
|
|
|
* @return
|
|
|
*/
|
|
|
private long getLikuStockInList(){
|