|
@@ -8,6 +8,7 @@ import com.github.zuihou.business.DemoLine.DemoCacheKey;
|
|
|
import com.github.zuihou.business.DemoLine.DemoLineConstant;
|
|
|
import com.github.zuihou.business.DemoLine.YunjianConstant;
|
|
|
import com.github.zuihou.business.edgeLibrary.dao.StockInfoMapper;
|
|
|
+import com.github.zuihou.business.edgeLibrary.dao.StorgeMapper;
|
|
|
import com.github.zuihou.business.edgeLibrary.entity.StockInfo;
|
|
|
import com.github.zuihou.business.edgeLibrary.entity.Storge;
|
|
|
import com.github.zuihou.business.edgeLibrary.service.StorgeService;
|
|
@@ -29,10 +30,7 @@ import com.github.zuihou.business.productionReadyCenter.entity.*;
|
|
|
import com.github.zuihou.business.productionReadyCenter.service.AAutoNodeLogService;
|
|
|
import com.github.zuihou.business.productionReadyCenter.service.BomProcedureProductionresourceService;
|
|
|
import com.github.zuihou.business.productionReadyCenter.service.BomProcedureVersionService;
|
|
|
-import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourceBizMapper;
|
|
|
-import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourcePositionMapper;
|
|
|
-import com.github.zuihou.business.productionResourceCenter.dao.ZZoneMapper;
|
|
|
-import com.github.zuihou.business.productionResourceCenter.dao.ZZoneProductionresourceMapper;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.dao.*;
|
|
|
import com.github.zuihou.business.productionResourceCenter.entity.*;
|
|
|
import com.github.zuihou.business.productionResourceCenter.service.*;
|
|
|
import com.github.zuihou.business.productionResourceCenter.service.impl.AGVNodeServiceImpl;
|
|
@@ -73,6 +71,7 @@ import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.Executors;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import static java.util.stream.Collectors.groupingBy;
|
|
|
|
|
@@ -134,7 +133,14 @@ public class TaskWorkNode {
|
|
|
private ZZoneService zoneService;
|
|
|
@Autowired
|
|
|
private AgvHikOrderInfoService agvHikOrderInfoService;
|
|
|
-
|
|
|
+ @Autowired
|
|
|
+ private StockInfoMapper stockInfoMapper;
|
|
|
+ @Autowired
|
|
|
+ private ResourceAutoCodeMapper resourceAutoCodeMapper;
|
|
|
+ @Autowired
|
|
|
+ private ProductionresourcePositionMapper productionresourcePositionMapper;
|
|
|
+ @Autowired
|
|
|
+ private BBomMapper bBomMapper;
|
|
|
|
|
|
//总控端口
|
|
|
private final String ZK_port = "120";
|
|
@@ -490,6 +496,76 @@ public class TaskWorkNode {
|
|
|
Storge targetStorge = null;
|
|
|
|
|
|
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.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());
|
|
|
+ // 将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()))){//有缓存位的机器人
|
|
|
//执行到第几步
|
|
|
dataMap.put(taskNode.getId().toString() + "count", count);
|