|
@@ -545,74 +545,8 @@ public class TaskWorkNode {
|
|
|
List<ProductionresourcePosition> robotList = null;
|
|
|
|
|
|
// 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是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;
|
|
|
- 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, endProductionresourcePosition.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")) {
|
|
|
- startAgvStation = agvStation;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- BBom bom = bBomMapper.selectById(task.getBomId());
|
|
|
- Long bomZzoneId = bom.getZoneId();
|
|
|
-
|
|
|
- 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());
|
|
|
- // 有托板但是没有托盘认为可放
|
|
|
- // 终点接驳位任何东西都不能有
|
|
|
- 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);
|
|
|
-
|
|
|
- TWorkpiece tWorkpiece = workpieceService.getOne(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getTaskNodeId,taskNode.getId()));
|
|
|
- tWorkpiece.setStorgeId(agvStartStationStorge.getId());
|
|
|
- workpieceService.updateById(tWorkpiece);
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
if(BizConstant.ROBOT_TYPE_CACHE.equals(zoneService.getRobotTypebyZone(zone.getName()))){//有缓存位的机器人
|
|
|
//执行到第几步
|
|
@@ -624,10 +558,16 @@ public class TaskWorkNode {
|
|
|
Map<String, List<ProductionresourcePosition>> jqrMap = robotList.stream().collect(groupingBy(ProductionresourcePosition::getPointId));
|
|
|
|
|
|
robotList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {taskNode.getResourceId().toString()});
|
|
|
- //目标地址和类型
|
|
|
- targetStorge = workpieceService.getWorkPieceTargetStock(taskNode.getId());
|
|
|
+// //目标地址和类型
|
|
|
+// targetStorge = workpieceService.getWorkPieceTargetStock(taskNode.getId());
|
|
|
|
|
|
- jqrStorge = storgeService.getById(robotList.get(0).getStorgeId());
|
|
|
+ TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
|
|
|
+ Map returnMap = getTargetStorge(nextTaskNode,taskNode.getFindAgvFlag(),zone);
|
|
|
+
|
|
|
+ targetStorge = returnMap.get("store")==null?null:(Storge)returnMap.get("store");
|
|
|
+ Storge agvEndStationStorge = returnMap.get("agvEndStationStorge")==null?null:(Storge)returnMap.get("agvEndStationStorge");
|
|
|
+
|
|
|
+// jqrStorge = storgeService.getById(robotList.get(0).getStorgeId());
|
|
|
|
|
|
Storge startStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
|
|
|
|
|
@@ -664,7 +604,7 @@ public class TaskWorkNode {
|
|
|
dataMap.put("result", po!=null);
|
|
|
} else if (count == 1) {
|
|
|
jqrStorge = (Storge) msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + taskNode.getId());
|
|
|
- dataMap.put("method", "GetServoStacker");
|
|
|
+ dataMap.put("method", "GetFlexibleWire");
|
|
|
Storge currentStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
|
|
|
dataMap.put("fromStorge", currentStore);
|
|
|
|
|
@@ -678,7 +618,7 @@ public class TaskWorkNode {
|
|
|
dataMap.put("result", true);
|
|
|
} else if (count == 2) {
|
|
|
Storge currentStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
|
|
|
- dataMap.put("method", "SendServoStacker");
|
|
|
+ dataMap.put("method", "SendFlexibleWire");
|
|
|
dataMap.put("fromStorge", currentStore);
|
|
|
//出入库类型
|
|
|
dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
|
|
@@ -698,7 +638,7 @@ public class TaskWorkNode {
|
|
|
|
|
|
dataMap.put("method", "MoveRobotPosition");
|
|
|
}else if(count == 4){//从缓存位拿出来
|
|
|
- dataMap.put("method", "GetServoStacker");
|
|
|
+ dataMap.put("method", "GetFlexibleWire");
|
|
|
Storge hcwStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + taskNode.getId());
|
|
|
|
|
|
Map locationMap = new HashMap();
|
|
@@ -711,7 +651,7 @@ public class TaskWorkNode {
|
|
|
//出入库类型
|
|
|
dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
|
|
|
}else if(count == 5){
|
|
|
- dataMap.put("method", "SendServoStacker");
|
|
|
+ dataMap.put("method", "SendFlexibleWire");
|
|
|
//出入库类型
|
|
|
dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
|
|
|
|
|
@@ -774,6 +714,50 @@ public class TaskWorkNode {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ public Map getTargetStorge(TaskNode taskNode,String findAgvFlag,ZZone zZone){
|
|
|
+ Map returnMap = new HashMap();
|
|
|
+ Storge targetStorge = null;
|
|
|
+ Storge agvEndStationStorge = null;
|
|
|
+ Long resourceId = taskNode.getTargetResourceId();
|
|
|
+
|
|
|
+ if("1".equals(findAgvFlag)){//需要提前锁定下个接驳位
|
|
|
+ //获取接驳位。
|
|
|
+ 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");
|
|
|
+ //对面产线接驳位不为空TODO
|
|
|
+ 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());
|
|
|
+
|
|
|
+ returnMap.put("store",targetStorge);
|
|
|
+
|
|
|
+ //更新到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"));
|
|
|
+ taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
|
|
|
+ lastOperationTaskNode.setTargetResourceId(position.getResourceId());
|
|
|
+ lastOperationTaskNode.setResourceId(taskNode.getTargetResourceId());
|
|
|
+ taskNodeService.updateById(taskNode);
|
|
|
+ taskNodeService.updateById(lastOperationTaskNode);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //目标设备
|
|
|
+ if(resourceId!=null){
|
|
|
+ List<ProductionresourcePosition> targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
|
|
|
+ if(CollectionUtil.isNotEmpty(targetList)){
|
|
|
+ targetStorge = storgeService.getById(targetList.get(0).getStorgeId());
|
|
|
+ returnMap.put("store",targetStorge);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ returnMap.put("agvEndStationStorge",agvEndStationStorge);
|
|
|
+ return returnMap;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 设备动态逻辑判断处理
|
|
|
*
|