|
@@ -35,8 +35,10 @@ import com.github.zuihou.business.productionResourceCenter.entity.Productionreso
|
|
|
import com.github.zuihou.business.productionResourceCenter.entity.ZZone;
|
|
|
import com.github.zuihou.business.productionResourceCenter.entity.ZZoneProductionresource;
|
|
|
import com.github.zuihou.business.productionResourceCenter.service.ProductionresourcePositionService;
|
|
|
+import com.github.zuihou.business.util.DynamicRabbitMq;
|
|
|
import com.github.zuihou.business.util.ManualTaskOperatorUtil;
|
|
|
import com.github.zuihou.business.util.MsgUtil;
|
|
|
+import com.github.zuihou.common.constant.BizConstant;
|
|
|
import com.github.zuihou.common.constant.DictionaryKey;
|
|
|
import com.github.zuihou.common.util.StringUtil;
|
|
|
import com.github.zuihou.context.BaseContextHandler;
|
|
@@ -116,6 +118,8 @@ public class WorkpieceServiceImpl extends SuperServiceImpl<WorkpieceMapper, TWor
|
|
|
private BomProcedureTrayMapper bomProcedureTrayMapper;
|
|
|
@Autowired
|
|
|
private BBomMapper bBomMapper;
|
|
|
+ @Autowired
|
|
|
+ private DynamicRabbitMq dynamicRabbitMq;
|
|
|
|
|
|
private static ArrayList<String> robotTaskNodes = new ArrayList<>();
|
|
|
static {
|
|
@@ -654,102 +658,113 @@ public class WorkpieceServiceImpl extends SuperServiceImpl<WorkpieceMapper, TWor
|
|
|
TTask tTask = tTaskMapper.selectById(taskId);
|
|
|
// 工序节点子任务
|
|
|
List<TaskNode> taskNodes = taskNodeService.list(Wraps.<TaskNode>lbQ().eq(TaskNode::getCompleteBatchNo,tTask.getCompleteBatchNo()).eq(TaskNode::getExeStatus,"1").orderByAsc(TaskNode:: getPrority));
|
|
|
- // 工件信息
|
|
|
- TWorkpiece workpiece = baseMapper.selectOne(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
-
|
|
|
- // 查找工件所属产线
|
|
|
- BBom bom = bBomMapper.selectById(workpiece.getBomId());
|
|
|
- ZZone zZone = zZoneMapper.selectById(bom.getZoneId());
|
|
|
- // 根据工序判断需要做什么任务
|
|
|
- BomProcedure bomProcedure = bomProcedureMapper.selectOne(Wraps.<BomProcedure>lbQ().eq(BomProcedure::getBomId,workpiece.getBomId()).eq(BomProcedure::getId,tTask.getProcedureId()));
|
|
|
- // 人工序只有上下料
|
|
|
- if("上料".equals(bomProcedure.getType())){
|
|
|
- // 判断当前任务所属产品,找出相应的子盘夹具
|
|
|
- BomProcedureTray bomProcedureTray = bomProcedureTrayMapper.selectOne(Wraps.<BomProcedureTray>lbQ().eq(BomProcedureTray::getProcedureId,tTask.getProcedureId()));
|
|
|
- // 判断夹具是否有可用的,查询330个库位信息中是否还有夹具
|
|
|
- List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getGoodsId,bomProcedureTray.getTrayId()).orderByAsc(StockInfo::getStorgeId));
|
|
|
- if(stockInfos.size() <= 0){
|
|
|
- return R.fail("托盘数量不足");
|
|
|
- }
|
|
|
- // 按照顺序将托盘移动到上下料站
|
|
|
- // 获取抓取托盘起点及放设备重点
|
|
|
- StockInfo metetailStockInfo = stockInfos.get(0);
|
|
|
- ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, metetailStockInfo.getStorgeId()));
|
|
|
- String startPointid = startProductionresourcePosition.getPointId();
|
|
|
- ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
|
|
|
- String endPointid = endProductionresourcePosition.getPointId();
|
|
|
- return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
-
|
|
|
- }else if("下料".equals(bomProcedure.getType())){
|
|
|
- // 按照顺序将托盘移动到上下料站
|
|
|
- // 获取抓取托盘起点及放设备重点
|
|
|
- List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
- ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
|
|
|
- String startPointid = startProductionresourcePosition.getPointId();
|
|
|
- ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
|
|
|
- String endPointid = endProductionresourcePosition.getPointId();
|
|
|
- return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
-
|
|
|
- }else if("翻面".equals(bomProcedure.getType())){
|
|
|
- // 按照顺序将托盘移动到上下料站
|
|
|
- // 获取抓取托盘起点及放设备重点
|
|
|
- List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
- ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
|
|
|
- String startPointid = startProductionresourcePosition.getPointId();
|
|
|
- ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
|
|
|
- String endPointid = endProductionresourcePosition.getPointId();
|
|
|
- return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
-
|
|
|
- }else{
|
|
|
- // 按照顺序将托盘移动到上下料站
|
|
|
- // 根据动作节点拆分
|
|
|
-
|
|
|
- // 判断当前第一个指令是的设备是机器人还是加工设备,如果是机器人指定起点和重点,如果是设备不需要传入起点和重点
|
|
|
- Productionresource firstNodeResource = productionresourceBizMapper.selectById(taskNodes.get(0).getResourceId());
|
|
|
- // TODO 先用名称判断
|
|
|
- if(firstNodeResource.getName().contains("伺服舵机") || firstNodeResource.getName().contains("机器人")){
|
|
|
- // 机器人需要有起点和终点
|
|
|
- }else{
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
- ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
|
|
|
- String startPointid = startProductionresourcePosition.getPointId();
|
|
|
-
|
|
|
- TaskNode lastActionTaskNode = getNextActionTaskNode(taskNodes,0);
|
|
|
- TaskNode currentTaskNode = taskNodes.get(0);
|
|
|
- ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,currentTaskNode.getResourceId()));
|
|
|
-// ZZone zzone = zZoneMapper.selectOne(Wraps.<ZZone>lbQ().eq(ZZone::getId,zZoneProductionresource.getZoneId()));
|
|
|
- ProductionresourcePosition endProductionresourcePosition = null;
|
|
|
- if(null == lastActionTaskNode.getResourceId()){
|
|
|
- // agv动作,动态查询agv接驳位
|
|
|
- // 查询当前设备所在产线的接驳位
|
|
|
- Map queryParams = new HashMap();
|
|
|
- queryParams.put("zoneId",zZoneProductionresource.getZoneId());
|
|
|
- queryParams.put("resourceName","接驳");
|
|
|
- List<Productionresource> productionresources = productionresourceBizMapper.selectResouces(queryParams);
|
|
|
-
|
|
|
- // 遍历接驳位判断是否有可用的接驳位
|
|
|
- for(Productionresource productionresource : productionresources){
|
|
|
- endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, productionresource.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());
|
|
|
- // 有托板但是没有托盘认为可放
|
|
|
- if(meterails.contains("5") && meterails.contains("2")){
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(null == endProductionresourcePosition){
|
|
|
- return R.fail("不具备搬运条件,AGV接驳位不可用");
|
|
|
- }
|
|
|
- // 满足条件的agv接驳位
|
|
|
- String endPointid = endProductionresourcePosition.getPointId();
|
|
|
-
|
|
|
- // 在回调中分段处理
|
|
|
- return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
- }
|
|
|
+// // 工件信息
|
|
|
+// TWorkpiece workpiece = baseMapper.selectOne(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
+//
|
|
|
+// // 查找工件所属产线
|
|
|
+// BBom bom = bBomMapper.selectById(workpiece.getBomId());
|
|
|
+// ZZone zZone = zZoneMapper.selectById(bom.getZoneId());
|
|
|
+// // 根据工序判断需要做什么任务
|
|
|
+// BomProcedure bomProcedure = bomProcedureMapper.selectOne(Wraps.<BomProcedure>lbQ().eq(BomProcedure::getBomId,workpiece.getBomId()).eq(BomProcedure::getId,tTask.getProcedureId()));
|
|
|
+// // 人工序只有上下料
|
|
|
+// if("上料".equals(bomProcedure.getType())){
|
|
|
+// // 判断当前任务所属产品,找出相应的子盘夹具
|
|
|
+// BomProcedureTray bomProcedureTray = bomProcedureTrayMapper.selectOne(Wraps.<BomProcedureTray>lbQ().eq(BomProcedureTray::getProcedureId,tTask.getProcedureId()));
|
|
|
+// // 判断夹具是否有可用的,查询330个库位信息中是否还有夹具
|
|
|
+// List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getGoodsId,bomProcedureTray.getTrayId()).orderByAsc(StockInfo::getStorgeId));
|
|
|
+// if(stockInfos.size() <= 0){
|
|
|
+// return R.fail("托盘数量不足");
|
|
|
+// }
|
|
|
+// // 按照顺序将托盘移动到上下料站
|
|
|
+// // 获取抓取托盘起点及放设备重点
|
|
|
+// StockInfo metetailStockInfo = stockInfos.get(0);
|
|
|
+// ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, metetailStockInfo.getStorgeId()));
|
|
|
+// String startPointid = startProductionresourcePosition.getPointId();
|
|
|
+// ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
|
|
|
+// String endPointid = endProductionresourcePosition.getPointId();
|
|
|
+// return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
+//
|
|
|
+// }else if("下料".equals(bomProcedure.getType())){
|
|
|
+// // 按照顺序将托盘移动到上下料站
|
|
|
+// // 获取抓取托盘起点及放设备重点
|
|
|
+// List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
+// ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
|
|
|
+// String startPointid = startProductionresourcePosition.getPointId();
|
|
|
+// ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
|
|
|
+// String endPointid = endProductionresourcePosition.getPointId();
|
|
|
+// return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
+//
|
|
|
+// }else if("翻面".equals(bomProcedure.getType())){
|
|
|
+// // 按照顺序将托盘移动到上下料站
|
|
|
+// // 获取抓取托盘起点及放设备重点
|
|
|
+// List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
+// ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
|
|
|
+// String startPointid = startProductionresourcePosition.getPointId();
|
|
|
+// ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
|
|
|
+// String endPointid = endProductionresourcePosition.getPointId();
|
|
|
+// return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
+//
|
|
|
+// }else{
|
|
|
+// // 按照顺序将托盘移动到上下料站
|
|
|
+// // 根据动作节点拆分
|
|
|
+//
|
|
|
+// // 判断当前第一个指令是的设备是机器人还是加工设备,如果是机器人指定起点和重点,如果是设备不需要传入起点和重点
|
|
|
+// Productionresource firstNodeResource = productionresourceBizMapper.selectById(taskNodes.get(0).getResourceId());
|
|
|
+// // TODO 先用名称判断
|
|
|
+// if(firstNodeResource.getName().contains("伺服舵机") || firstNodeResource.getName().contains("机器人")){
|
|
|
+// // 机器人需要有起点和终点
|
|
|
+// }else{
|
|
|
+//
|
|
|
+// }
|
|
|
+//
|
|
|
+// List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
|
|
|
+// ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
|
|
|
+// String startPointid = startProductionresourcePosition.getPointId();
|
|
|
+//
|
|
|
+// TaskNode lastActionTaskNode = getNextActionTaskNode(taskNodes,0);
|
|
|
+// TaskNode currentTaskNode = taskNodes.get(0);
|
|
|
+// ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,currentTaskNode.getResourceId()));
|
|
|
+//// ZZone zzone = zZoneMapper.selectOne(Wraps.<ZZone>lbQ().eq(ZZone::getId,zZoneProductionresource.getZoneId()));
|
|
|
+// ProductionresourcePosition endProductionresourcePosition = null;
|
|
|
+// if(null == lastActionTaskNode.getResourceId()){
|
|
|
+// // agv动作,动态查询agv接驳位
|
|
|
+// // 查询当前设备所在产线的接驳位
|
|
|
+// Map queryParams = new HashMap();
|
|
|
+// queryParams.put("zoneId",zZoneProductionresource.getZoneId());
|
|
|
+// queryParams.put("resourceName","接驳");
|
|
|
+// List<Productionresource> productionresources = productionresourceBizMapper.selectResouces(queryParams);
|
|
|
+//
|
|
|
+// // 遍历接驳位判断是否有可用的接驳位
|
|
|
+// for(Productionresource productionresource : productionresources){
|
|
|
+// endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, productionresource.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());
|
|
|
+// // 有托板但是没有托盘认为可放
|
|
|
+// if(meterails.contains("5") && meterails.contains("2")){
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(null == endProductionresourcePosition){
|
|
|
+// return R.fail("不具备搬运条件,AGV接驳位不可用");
|
|
|
+// }
|
|
|
+// // 满足条件的agv接驳位
|
|
|
+// String endPointid = endProductionresourcePosition.getPointId();
|
|
|
+//
|
|
|
+// // 在回调中分段处理
|
|
|
+// return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
|
|
|
+// }
|
|
|
+ // 直接复用当前节点代码
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ TaskNode taskNode = taskNodes.get(0);
|
|
|
+ jsonObject.put("taskNodeId",taskNode.getId().toString());
|
|
|
+ jsonObject.put("bizType", BizConstant.MQ_TASK_NODE_TYPE_COMMON);
|
|
|
+ // 手动模式
|
|
|
+ jsonObject.put("handMode", "1");
|
|
|
+ log.info("推送mq队列{}消息{}",taskNode.getResourceId().toString(),jsonObject.toString());
|
|
|
+ dynamicRabbitMq.sendMsg(taskNode.getResourceId().toString(),jsonObject.toString());
|
|
|
+
|
|
|
+ return R.success();
|
|
|
}
|
|
|
|
|
|
/**
|