|
@@ -4,6 +4,7 @@ package com.github.zuihou.business.productionResourceCenter.service.impl;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.github.zuihou.authority.entity.auth.RoleOrg;
|
|
|
import com.github.zuihou.authority.entity.core.Org;
|
|
|
import com.github.zuihou.base.R;
|
|
|
import com.github.zuihou.business.DemoLine.DemoCacheKey;
|
|
@@ -443,6 +444,10 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
dataMap.put("data", locationMap);
|
|
|
dataMap.put("method", "MoveRobotPosition");
|
|
|
dataMap.put("result", true);
|
|
|
+
|
|
|
+ // 机器人移动到redis记录实时位子
|
|
|
+ msgUtil.redis_set(taskNode.getResourceId()+"postion",startStore.getPointId());
|
|
|
+
|
|
|
}else{
|
|
|
dataMap.put("result", false);
|
|
|
}
|
|
@@ -582,18 +587,60 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
String targetHcwXbk =(String)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + taskNode.getId());
|
|
|
log.info("节点{}放逻辑判断{}",taskNode.getId(),targetHcwXbk);
|
|
|
if("1".equals(targetHcwXbk)){
|
|
|
+ // 释放锁定机器人资源
|
|
|
+ List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
log.info("节点{}执行暂存缓存为线边库逻辑",taskNode.getId());
|
|
|
dataMap.put(YunjianConstant.YUNJIAN_XBKFLAG, targetHcwXbk);
|
|
|
dataMap.put(YunjianConstant.YUNJIAN_HCW_XBKFLAG, targetHcwXbk);
|
|
|
+ dataMap.put("result", true);
|
|
|
}else{
|
|
|
dataMap.put(YunjianConstant.YUNJIAN_ROBORT_CACHE_FLAG, "1");
|
|
|
if(count==0) {
|
|
|
- Map locationMap = new HashMap();
|
|
|
- locationMap.put("location",targetStorge.getPointId());
|
|
|
- dataMap.put("data", locationMap);
|
|
|
|
|
|
+ // begin add by yejian on 20220921 for 机器人缓存位上面有料时先判断当前机器人移动所在位子是否和机器人缓存台上面的暂存物料的目标地址一致,
|
|
|
+ // 如果一致,先将缓存台物料放到目标地址,实现逻辑通过redis加机器人所在位子和跳过机器人是否可用逻辑,直接让缓存位上面的任务先执行beta
|
|
|
+ // 查询机器人缓存位上面是否存在物料并且目标地址是否当前机器所在位子
|
|
|
+ List<ProductionresourcePosition> jrqHcwWorkpieceInfos = productionresourcePositionService.getFullProductionresourcePositionByIds(deviceArr);
|
|
|
+ List<Long> jrqHcwStorgeIds = jrqHcwWorkpieceInfos.stream().mapToLong(ProductionresourcePosition::getStorgeId).boxed().collect(Collectors.toList());
|
|
|
+ List<Storge> jrqHcwStorges = storgeMapper.selectList(Wraps.<Storge>lbQ().in(Storge::getId,jrqHcwStorgeIds));
|
|
|
+ log.info("节点{}当前缓存位数工件信息{}",taskNode.getId(),jrqHcwStorges.toString());
|
|
|
+ boolean hasJqrhcwPartFlag = false;
|
|
|
+ String jrqHcwPartPoint = msgUtil.redis_get(deviceArr[0] + "postion") == null ? "": String.valueOf(msgUtil.redis_get(deviceArr[0] + "postion"));
|
|
|
+ log.info("节点{}当前机器人所在位子{}",taskNode.getId(),jrqHcwPartPoint);
|
|
|
+ for(Storge jqrHcwStorge : jrqHcwStorges){
|
|
|
+ long jqrHcwStorgeTaskNodeId = jqrHcwStorge.getCampId();
|
|
|
+ TaskNode jqrHcwStorgeTaskNode = taskNodeService.getById(jqrHcwStorgeTaskNodeId);
|
|
|
+ ProductionresourcePosition jqrHcwStorgeTaskNodeResource = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,jqrHcwStorgeTaskNode.getTargetResourceId()));
|
|
|
+ log.info("jqrHcwStorgeTaskNode.getCompleteBatchNo()={}",jqrHcwStorgeTaskNode.getCompleteBatchNo());
|
|
|
+ log.info("taskNode.getCompleteBatchNo()={}",taskNode.getCompleteBatchNo());
|
|
|
+ if(!jqrHcwStorgeTaskNode.getCompleteBatchNo().equals(taskNode.getCompleteBatchNo())){
|
|
|
+ // 查询缓存位工件目标地址是否是机器人当前位子
|
|
|
+ log.info("jqrHcwStorgeTaskNodeResource.getPointId()={}",jqrHcwStorgeTaskNodeResource.getPointId());
|
|
|
+ log.info("jrqHcwPartPoint={}",jrqHcwPartPoint);
|
|
|
+ if(jqrHcwStorgeTaskNodeResource.getPointId().equals(jrqHcwPartPoint)){
|
|
|
+ hasJqrhcwPartFlag = true;
|
|
|
+ msgUtil.redis_set(DemoLineConstant.JQR_HCW_PART_PRIOTY_EXEC_FLAG + jqrHcwStorgeTaskNodeId,"1");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("节点{}是否存在当前缓存位上工件先放到目标设备标志{}",taskNode.getId(),hasJqrhcwPartFlag);
|
|
|
+ if(hasJqrhcwPartFlag){
|
|
|
+ dataMap.put("result", false);
|
|
|
+ }else{
|
|
|
+ Map locationMap = new HashMap();
|
|
|
+ locationMap.put("location",targetStorge.getPointId());
|
|
|
+ dataMap.put("data", locationMap);
|
|
|
+
|
|
|
+ dataMap.put("method", "MoveRobotPosition");
|
|
|
+ dataMap.put("result", true);
|
|
|
|
|
|
- dataMap.put("method", "MoveRobotPosition");
|
|
|
+ // 机器人移动到redis记录实时位子
|
|
|
+ msgUtil.redis_set(taskNode.getResourceId()+"postion",targetStorge.getPointId());
|
|
|
+ }
|
|
|
+ //end add by yejian on 20220921 for 机器人缓存位上面有料时先判断当前机器人移动所在位子是否和机器人缓存台上面的暂存物料的目标地址一致,
|
|
|
+ // 如果一致,先将缓存台物料放到目标地址
|
|
|
}else if(count == 1){//从缓存位拿出来
|
|
|
dataMap.put("method", "GetFlexibleWire");
|
|
|
Storge hcwStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + taskNode.getId());
|
|
@@ -607,6 +654,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
dataMap.put("toStorge", handStorge);
|
|
|
//出入库类型
|
|
|
dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
|
|
|
+ dataMap.put("result", true);
|
|
|
}else if(count == 2){
|
|
|
dataMap.put("method", "SendFlexibleWire");
|
|
|
//出入库类型
|
|
@@ -626,6 +674,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
//把计数去掉,从线边库开始重新计数
|
|
|
dataMap.remove(taskNode.getId().toString()+"count");
|
|
|
}
|
|
|
+ dataMap.put("result", true);
|
|
|
}
|
|
|
}
|
|
|
// end add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
|
|
@@ -657,8 +706,9 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
//把计数去掉,从线边库开始重新计数
|
|
|
dataMap.remove(taskNode.getId().toString()+"count");
|
|
|
}
|
|
|
+ dataMap.put("result", true);
|
|
|
}
|
|
|
- dataMap.put("result", true);
|
|
|
+
|
|
|
}
|
|
|
dataMap.put("instructionUrl", instructionUrl);
|
|
|
return dataMap;
|