|
@@ -126,6 +126,8 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
private ZZone zZone;
|
|
|
|
|
|
private Long bomZzoneId;
|
|
|
+
|
|
|
+ private ZZone bomzZone;
|
|
|
// Plc url
|
|
|
private String url;
|
|
|
// Plc port
|
|
@@ -160,6 +162,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
zoneName = zZone.getName();
|
|
|
BBom bom = bBomMapper.selectById(task.getBomId());
|
|
|
bomZzoneId = bom.getZoneId();
|
|
|
+ bomzZone = zoneService.getById(bomZzoneId);
|
|
|
|
|
|
// 判断该节点使用那条线的plc
|
|
|
plcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
|
|
@@ -200,7 +203,9 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
|
|
|
List<StockInfo> flikustockInfos = null;//获取初始立库库存
|
|
|
|
|
|
- Storge currStore = null;
|
|
|
+ //当需要锁定agv开始、结束的接驳位库位
|
|
|
+ Storge agvStartStationStorge = null;
|
|
|
+ Storge agvEndStationStorge = null;
|
|
|
// 人工序只有上下料
|
|
|
if(taskNode.getCompleteBatchSort()==1){
|
|
|
// BBom bom = bBomMapper.selectOne(Wraps.<BBom>lbQ().eq(BBom::getId,task.getBomId()));
|
|
@@ -222,85 +227,59 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
// 获取抓取托盘起点及放设备重点
|
|
|
// StockInfo metetailStockInfo = flikustockInfos.get(0);
|
|
|
// currStore = storgeMapper.selectById(metetailStockInfo.getStorgeId());
|
|
|
- }else{
|
|
|
- // 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是agv动作时锁定锁定agv接驳位
|
|
|
- TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
|
|
|
- TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
|
|
|
- TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
|
|
|
-
|
|
|
- beforTaskNode.setAutoNode(resourceAutoCodeMapper.selectById(beforTaskNode.getAutoNode().getId()));
|
|
|
- //前序是设备序并且最后一个节点是agv搬运,锁定agv相关库位信息
|
|
|
- if(beforTaskNode.getTaskId().equals(taskNode.getTaskId()) && "1".equals(beforTaskNode.getAutoNode().getCategory()) && null == lastOperationTaskNode.getResourceId()){
|
|
|
- currStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
|
|
|
- ProductionresourcePosition startProductionresourcePosition = null;
|
|
|
- ProductionresourcePosition endProductionresourcePosition = null;
|
|
|
- Storge agvStartStationStorge = null;
|
|
|
- Storge agvEndStationStorge = null;
|
|
|
- // 判断agv接驳位是可用
|
|
|
- ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,taskNode.getResourceId()));
|
|
|
- Map queryParams = new HashMap();
|
|
|
- queryParams.put("zoneId",zZoneProductionresource.getZoneId());
|
|
|
- queryParams.put("resourceName","接驳");
|
|
|
- List<Productionresource> agvStartStationsResources = productionresourceBizMapper.selectResouces(queryParams);
|
|
|
- Productionresource startAgvStation = null;
|
|
|
- Productionresource endAgvStation = null;
|
|
|
- // 遍历开始接驳位判断是否有可用的接驳位
|
|
|
- for(Productionresource agvStation : agvStartStationsResources){
|
|
|
- startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
|
|
|
- List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId,startProductionresourcePosition.getStorgeId()));
|
|
|
- List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
|
|
|
- agvStartStationStorge = storgeService.getById(startProductionresourcePosition.getStorgeId());
|
|
|
- // 有托板但是没有托盘认为可放
|
|
|
- if(meterails.contains("5") && !meterails.contains("2") && agvStartStationStorge.getStatus().equals("1") && "1".equals(agvStartStationStorge.getLockStatus())){
|
|
|
- startAgvStation = agvStation;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- queryParams.clear();
|
|
|
- queryParams.put("zoneId",bomZzoneId);
|
|
|
- queryParams.put("resourceName","接驳");
|
|
|
- List<Productionresource> agvEndStationsResources = productionresourceBizMapper.selectResouces(queryParams);
|
|
|
-
|
|
|
- // 遍历开始接驳位判断是否有可用的接驳位
|
|
|
- for(Productionresource agvStation : agvEndStationsResources){
|
|
|
- endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
|
|
|
- List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId,endProductionresourcePosition.getStorgeId()));
|
|
|
- List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
|
|
|
- agvEndStationStorge = storgeService.getById(endProductionresourcePosition.getStorgeId());
|
|
|
+// }else{
|
|
|
+// // 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是agv动作时锁定锁定agv接驳位
|
|
|
+// TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
|
|
|
+// TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
|
|
|
+// TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
|
|
|
+//
|
|
|
+// beforTaskNode.setAutoNode(resourceAutoCodeMapper.selectById(beforTaskNode.getAutoNode().getId()));
|
|
|
+// //前序是设备序并且最后一个节点是agv搬运,锁定agv相关库位信息
|
|
|
+// if(beforTaskNode.getTaskId().equals(taskNode.getTaskId()) && "1".equals(beforTaskNode.getAutoNode().getCategory()) && null == lastOperationTaskNode.getResourceId()){
|
|
|
+// ProductionresourcePosition startProductionresourcePosition = null;
|
|
|
+// ProductionresourcePosition endProductionresourcePosition = null;
|
|
|
+// // 判断agv接驳位是可用
|
|
|
+// ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,taskNode.getResourceId()));
|
|
|
+// Map queryParams = new HashMap();
|
|
|
+// queryParams.put("zoneId",zZoneProductionresource.getZoneId());
|
|
|
+// queryParams.put("resourceName","接驳");
|
|
|
+// List<Productionresource> agvStartStationsResources = productionresourceBizMapper.selectResouces(queryParams);
|
|
|
+// Productionresource startAgvStation = null;
|
|
|
+// Productionresource endAgvStation = null;
|
|
|
+// // 遍历开始接驳位判断是否有可用的接驳位
|
|
|
+// for(Productionresource agvStation : agvStartStationsResources){
|
|
|
+// startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
|
|
|
+// List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId,startProductionresourcePosition.getStorgeId()));
|
|
|
+// List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
|
|
|
+// agvStartStationStorge = storgeService.getById(startProductionresourcePosition.getStorgeId());
|
|
|
// // 有托板但是没有托盘认为可放
|
|
|
// if(meterails.contains("5") && !meterails.contains("2") && agvEndStationStorge.getStatus().equals("1")){
|
|
|
// endAgvStation = agvStation;
|
|
|
// break;
|
|
|
// }
|
|
|
-
|
|
|
- // 终点接驳位任何东西都不能有
|
|
|
- if(meterails.size() == 0 && "1".equals(agvEndStationStorge.getLockStatus())){
|
|
|
- endAgvStation = agvStation;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (null != agvStartStationStorge && null != agvEndStationStorge){
|
|
|
-// storgeService.lockStorge(agvStartStationStorge, nextTaskNode.getId());
|
|
|
-// storgeService.lockStorge(agvEndStationStorge, lastOperationTaskNode.getId());
|
|
|
- // 将agv相关的节点的目标节点地址更新进tasknode表
|
|
|
- nextTaskNode.setTargetResourceId(startAgvStation.getId());
|
|
|
- lastOperationTaskNode.setTargetResourceId(endAgvStation.getId());
|
|
|
- taskNodeService.updateById(nextTaskNode);
|
|
|
- taskNodeService.updateById(lastOperationTaskNode);
|
|
|
- dataMap.put("bizType","agv");
|
|
|
- }else{
|
|
|
-// // 获取机器人操作线边库
|
|
|
-// xbkArr = new String[]{DictionaryKey.YJ_ZONE_XBK.get(zoneName)};
|
|
|
-// xbkList = productionresourcePositionService.getFreeProductionresourcePositionByNos(xbkArr);
|
|
|
-// if(CollectionUtil.isNotEmpty(xbkList)){
|
|
|
-// ProductionresourcePosition position = xbkList.get(0);
|
|
|
-// // TODO 应该需要合并到getTargetStorge 方法中
|
|
|
-//// targetStorge = storgeService.getById(position.getStorgeId());
|
|
|
-// map.put("bizType","xbk");
|
|
|
-// }
|
|
|
- }
|
|
|
- }
|
|
|
+// }
|
|
|
+//
|
|
|
+// if (null != agvStartStationStorge && null != agvEndStationStorge){
|
|
|
+//// storgeService.lockStorge(agvStartStationStorge, nextTaskNode.getId());
|
|
|
+//// storgeService.lockStorge(agvEndStationStorge, lastOperationTaskNode.getId());
|
|
|
+// // 将agv相关的节点的目标节点地址更新进tasknode表
|
|
|
+// nextTaskNode.setTargetResourceId(startAgvStation.getId());
|
|
|
+// lastOperationTaskNode.setTargetResourceId(endAgvStation.getId());
|
|
|
+// taskNodeService.updateById(nextTaskNode);
|
|
|
+// taskNodeService.updateById(lastOperationTaskNode);
|
|
|
+// dataMap.put("bizType","agv");
|
|
|
+// }else{
|
|
|
+//// // 获取机器人操作线边库
|
|
|
+//// xbkArr = new String[]{DictionaryKey.YJ_ZONE_XBK.get(zoneName)};
|
|
|
+//// xbkList = productionresourcePositionService.getFreeProductionresourcePositionByNos(xbkArr);
|
|
|
+//// if(CollectionUtil.isNotEmpty(xbkList)){
|
|
|
+//// ProductionresourcePosition position = xbkList.get(0);
|
|
|
+//// // TODO 应该需要合并到getTargetStorge 方法中
|
|
|
+////// targetStorge = storgeService.getById(position.getStorgeId());
|
|
|
+//// map.put("bizType","xbk");
|
|
|
+//// }
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
//目标地址判断
|
|
@@ -320,26 +299,26 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
case "柔性线机器人":
|
|
|
//操作柔性线边库 具有取、移动、放三种指令
|
|
|
//取放加工设备 设备存在缓存位
|
|
|
- dataMap = this.commandHandle(dataMap,flikustockInfos,functionName);
|
|
|
+ dataMap = this.commandHandle(dataMap,flikustockInfos,agvStartStationStorge,functionName);
|
|
|
dataMap.put("deviceUrl", ZK_ip_rxx);
|
|
|
break;
|
|
|
case "智能单元机器人":
|
|
|
//操作智能单元线边库 具有取、移动、放三种指令
|
|
|
//取放加工设备 无缓存位处理
|
|
|
- dataMap = this.commandHandle(dataMap , flikustockInfos,functionName);
|
|
|
+ dataMap = this.commandHandle(dataMap , flikustockInfos,agvStartStationStorge,functionName);
|
|
|
dataMap.put("deviceUrl", ZK_ip_zndy);
|
|
|
break;
|
|
|
case "舱体类加工单元":
|
|
|
//操作舱体线边库 具有取、移动、放三种指令
|
|
|
//取放加工设备
|
|
|
- dataMap = this.commandHandle(dataMap,flikustockInfos, functionName);
|
|
|
+ dataMap = this.commandHandle(dataMap,flikustockInfos,agvStartStationStorge, functionName);
|
|
|
break;
|
|
|
case "智能生产保障系统":
|
|
|
- dataMap = this.commandHandle(dataMap,flikustockInfos, functionName);
|
|
|
+ dataMap = this.commandHandle(dataMap,flikustockInfos, agvStartStationStorge,functionName);
|
|
|
dataMap.put("deviceUrl", ZK_ip_rxx);
|
|
|
break;
|
|
|
case "框体类加工单元":
|
|
|
- dataMap = this.commandHandle(dataMap,flikustockInfos, functionName);
|
|
|
+ dataMap = this.commandHandle(dataMap,flikustockInfos,agvStartStationStorge, functionName);
|
|
|
dataMap.put("deviceUrl", ZK_ip_rxx);
|
|
|
break;
|
|
|
}
|
|
@@ -368,7 +347,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
}
|
|
|
|
|
|
//机器人功能操作
|
|
|
- private Map<String, Object> commandHandle(Map<String, Object> dataMap, List<StockInfo>flikustockInfos, String functionName){
|
|
|
+ private Map<String, Object> commandHandle(Map<String, Object> dataMap, List<StockInfo>flikustockInfos, Storge agvStartStationStorge,String functionName){
|
|
|
TaskNode taskNode = (TaskNode) dataMap.get("taskNode");
|
|
|
TTask task = (TTask) dataMap.get("task");
|
|
|
int count = Integer.parseInt(dataMap.get(taskNode.getId().toString() + "count") == null ? "0" : dataMap.get(taskNode.getId().toString() + "count").toString());
|
|
@@ -479,6 +458,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
//目标地址和类型
|
|
|
Storge targetStorge = returnMap.get("store")==null?null:(Storge)returnMap.get("store");
|
|
|
String targetxbk = returnMap.get("targetxbk")==null?null:(String)returnMap.get("targetxbk");
|
|
|
+ Storge agvEndStationStorge = returnMap.get("agvEndStationStorge")==null?null:(Storge)returnMap.get("agvEndStationStorge");
|
|
|
|
|
|
dataMap.put("method", "GetServoStacker");
|
|
|
ProductionresourcePosition po = logical(robotList,targetStorge,flikustockInfos,taskNode);
|
|
@@ -618,38 +598,48 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
public Map getTargetStorge(TaskNode taskNode){
|
|
|
Map returnMap = new HashMap();
|
|
|
Storge targetStorge = null;
|
|
|
+ Storge agvEndStationStorge = null;
|
|
|
Long resourceId = taskNode.getTargetResourceId();
|
|
|
String xbkFlag = "";
|
|
|
|
|
|
- //
|
|
|
-// if(taskNode.getCompleteBatchSort()==1){
|
|
|
-// if(CollectionUtil.isNotEmpty(flikustockInfos)){
|
|
|
-// targetStorge = storgeMapper.selectById(flikustockInfos.get(0).getStorgeId());
|
|
|
-// returnMap.put("store",targetStorge);
|
|
|
-// returnMap.put("targetxbk","0");
|
|
|
-// return returnMap;
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- //目标设备
|
|
|
- if(resourceId!=null){
|
|
|
- targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
|
|
|
- if(CollectionUtil.isNotEmpty(targetList)){
|
|
|
- targetStorge = storgeService.getById(targetList.get(0).getStorgeId());
|
|
|
- returnMap.put("store",targetStorge);
|
|
|
- returnMap.put("targetxbk","0");
|
|
|
- }else{//需要放到线边库
|
|
|
- xbkFlag = "1";
|
|
|
- }
|
|
|
- }else{//放到接驳位
|
|
|
+ if("1".equals(taskNode.getFindAgvFlag())){//需要提前锁定下个接驳位
|
|
|
+ //获取接驳位。
|
|
|
Map map = storgeService.getPlateStorgeByNo(zZone);
|
|
|
targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
|
|
|
- if(targetStorge!=null){
|
|
|
+ String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
|
|
|
+ //对面产线接驳位不为空
|
|
|
+ String[] jbwArr = new String[]{DictionaryKey.YJ_ZONE_JBW.get(bomzZone.getName())};
|
|
|
+ List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
|
|
|
+
|
|
|
+ if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
|
|
|
+ ProductionresourcePosition position = jbwBList.get(0);
|
|
|
+ agvEndStationStorge =storgeService.getById(position.getStorgeId());
|
|
|
+
|
|
|
returnMap.put("store",targetStorge);
|
|
|
returnMap.put("targetxbk","0");
|
|
|
+
|
|
|
+ //更新到targetresourceid
|
|
|
+ TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
|
|
|
+ TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
|
|
|
+ nextTaskNode.setTargetResourceId(Long.parseLong(targetResourceId));
|
|
|
+ lastOperationTaskNode.setTargetResourceId(position.getResourceId());
|
|
|
+ taskNodeService.updateById(nextTaskNode);
|
|
|
+ taskNodeService.updateById(lastOperationTaskNode);
|
|
|
}else{//需要放到线边库
|
|
|
xbkFlag = "1";
|
|
|
}
|
|
|
+ }else {
|
|
|
+ //目标设备
|
|
|
+ if(resourceId!=null){
|
|
|
+ targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
|
|
|
+ if(CollectionUtil.isNotEmpty(targetList)){
|
|
|
+ targetStorge = storgeService.getById(targetList.get(0).getStorgeId());
|
|
|
+ returnMap.put("store",targetStorge);
|
|
|
+ returnMap.put("targetxbk","0");
|
|
|
+ }else{//需要放到线边库
|
|
|
+ xbkFlag = "1";
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if("1".equals(xbkFlag)){//最终放到线边库中
|
|
@@ -663,6 +653,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
returnMap.put("targetxbk","1");
|
|
|
}
|
|
|
}
|
|
|
+ returnMap.put("agvEndStationStorge",agvEndStationStorge);
|
|
|
return returnMap;
|
|
|
}
|
|
|
|