|
@@ -184,13 +184,20 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
// 查找工件所属产线
|
|
|
// 根据工序判断需要做什么任务
|
|
|
Storge currStore = null;
|
|
|
+ BBom bom = bBomMapper.selectOne(Wraps.<BBom>lbQ().eq(BBom::getId,task.getBomId()));
|
|
|
BomProcedure bomProcedure = bomProcedureMapper.selectOne(Wraps.<BomProcedure>lbQ().eq(BomProcedure::getId,task.getProcedureId()));
|
|
|
// 人工序只有上下料
|
|
|
if("上料".equals(bomProcedure.getType())){
|
|
|
// 判断当前任务所属产品,找出相应的子盘夹具
|
|
|
- BomProcedureTray bomProcedureTray = bomProcedureTrayMapper.selectOne(Wraps.<BomProcedureTray>lbQ().eq(BomProcedureTray::getProcedureId,task.getProcedureId()));
|
|
|
+ BomProcedureTray bomProcedureTray = bomProcedureTrayMapper.selectOne(Wraps.<BomProcedureTray>lbQ().eq(BomProcedureTray::getProcedureId,task.getProcedureId()).eq(BomProcedureTray::getBizType,"1"));
|
|
|
+
|
|
|
+ List<Productionresource> productionresources = productionresourceBizMapper.selectList(Wraps.<Productionresource>lbQ().like(Productionresource::getName,"立库"));
|
|
|
+ List<Long> productionresourceIds = productionresources.stream().map(t->t.getId()).collect(Collectors.toList());
|
|
|
+ List<ProductionresourcePosition> startProductionresourcePositions = productionresourcePositionMapper.selectList(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, productionresourceIds));
|
|
|
+ List<Long> startProductionresourcePositionIds = startProductionresourcePositions.stream().map(t->t.getStorgeId()).collect(Collectors.toList());
|
|
|
+
|
|
|
// 判断夹具是否有可用的,查询330个库位信息中是否还有夹具
|
|
|
- List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getGoodsId,bomProcedureTray.getTrayId()).orderByAsc(StockInfo::getStorgeId));
|
|
|
+ List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getGoodsId,bom.getTrayId()).in(StockInfo::getStorgeId,startProductionresourcePositionIds).orderByAsc(StockInfo::getStorgeId));
|
|
|
if(stockInfos.size() <= 0){
|
|
|
map.put("result", false);
|
|
|
map.put("msg", DictionaryKey.NodeException.RUNNING_FALSE);
|
|
@@ -199,65 +206,79 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
// 按照顺序将托盘移动到上下料站
|
|
|
// 获取抓取托盘起点及放设备重点
|
|
|
StockInfo metetailStockInfo = stockInfos.get(0);
|
|
|
- ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, metetailStockInfo.getStorgeId()));
|
|
|
- currStore = storgeMapper.selectById(startProductionresourcePosition.getStorgeId());
|
|
|
+ currStore = storgeMapper.selectById(metetailStockInfo.getStorgeId());
|
|
|
}else{
|
|
|
currStore = workpieceService.getWorkPieceStock(taskNode.getId(), false);
|
|
|
- }
|
|
|
-
|
|
|
- // 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是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"));
|
|
|
-
|
|
|
- Productionresource productionresource = productionresourceBizMapper.selectById(beforTaskNode.getResourceId());
|
|
|
- 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);
|
|
|
-
|
|
|
- // 遍历开始接驳位判断是否有可用的接驳位
|
|
|
- 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")){
|
|
|
- break;
|
|
|
+ // 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是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;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- 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.contains("5") && !meterails.contains("2") && agvEndStationStorge.getStatus().equals("1")){
|
|
|
- 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());
|
|
|
+ // 有托板但是没有托盘认为可放
|
|
|
+ if(meterails.contains("5") && !meterails.contains("2") && agvEndStationStorge.getStatus().equals("1")){
|
|
|
+ endAgvStation = agvStation;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- if (null != agvStartStationStorge && null != agvEndStationStorge){
|
|
|
- storgeService.lockStorge(agvStartStationStorge, nextTaskNode.getId());
|
|
|
- storgeService.lockStorge(agvEndStationStorge, lastOperationTaskNode.getId());
|
|
|
- }else{
|
|
|
|
|
|
+ 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);
|
|
|
+ map.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");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|