|
@@ -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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.github.zuihou.authority.entity.auth.RoleOrg;
|
|
|
import com.github.zuihou.authority.entity.common.DictionaryItem;
|
|
|
import com.github.zuihou.authority.entity.core.Org;
|
|
@@ -19,6 +20,7 @@ import com.github.zuihou.business.edgeLibrary.entity.Storge;
|
|
|
import com.github.zuihou.business.edgeLibrary.service.StorgeService;
|
|
|
import com.github.zuihou.business.externalApi.service.AgvHikOrderInfoService;
|
|
|
import com.github.zuihou.business.externalApi.service.ExternalApiService;
|
|
|
+import com.github.zuihou.business.mq.TaskWorkNode;
|
|
|
import com.github.zuihou.business.operationManagementCenter.dao.PlanMapper;
|
|
|
import com.github.zuihou.business.operationManagementCenter.dao.PlanProductMapper;
|
|
|
import com.github.zuihou.business.operationManagementCenter.dao.TTaskMapper;
|
|
@@ -51,7 +53,10 @@ import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
|
|
|
import com.github.zuihou.database.mybatis.conditions.query.QueryWrap;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.compress.utils.Lists;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.HttpEntity;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
@@ -164,7 +169,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
|
|
|
private List<ProductionresourcePosition> jbwList;
|
|
|
|
|
|
-
|
|
|
+ private static Logger logger = LoggerFactory.getLogger(RobotNodeServiceImpl.class);
|
|
|
|
|
|
private Long zoneId;
|
|
|
|
|
@@ -559,7 +564,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
ProductionresourcePosition po = logical(robotList,flikustockInfos,taskNode);
|
|
|
log.info("节点{}检查机器人资源条件返回{}",taskNode.getId(),po);
|
|
|
if (po!=null) {
|
|
|
- List<TTask> highLevelTaskNode = new ArrayList<>();
|
|
|
+ /* List<TTask> highLevelTaskNode = new ArrayList<>();
|
|
|
if(taskNode.getCompleteBatchSort() == 1){
|
|
|
List<TaskNode> sameMachineTaskNodes = taskNodeService.list(Wraps.<TaskNode>lbQ().eq(TaskNode::getExeStatus,"2").ne(TaskNode::getId,taskNode.getId()).eq(TaskNode::getResourceId,taskNode.getResourceId()));
|
|
|
if(sameMachineTaskNodes.size() > 0){
|
|
@@ -567,46 +572,59 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
//highLevelTaskNode = tTaskMapper.selectList(Wraps.<TTask>lbQ().lt(TTask::getExpectStartTime,task.getExpectStartTime()).in(TTask::getId,taskIds));
|
|
|
}
|
|
|
}
|
|
|
- log.info("节点{}查找是否有高于自己优先级的任务集合{}",taskNode.getId(), highLevelTaskNode.size());
|
|
|
- if(highLevelTaskNode.size() > 0){
|
|
|
+ log.info("节点{}查找是否有高于自己优先级的任务集合{}",taskNode.getId(), highLevelTaskNode.size()); */
|
|
|
+ //三坐标完成取
|
|
|
+ TaskNode beforeTaskNode = taskNodeService.getNextNTaskNode(taskNode, -1);
|
|
|
+ boolean isSzbFetch = beforeTaskNode != null && ("3".equals(beforeTaskNode.getNodeType()) || "5".equals(beforeTaskNode.getNodeType()));
|
|
|
+ if (isSzbFetch) {
|
|
|
+ String resultData = msgUtil.getCcsData("/api/GetMiddleWorkIdThreeCoordinates", new JSONObject(), taskNode);
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(resultData);
|
|
|
+ if (null != jsonObject && jsonObject.containsKey("result") && StringUtils.isNotEmpty(jsonObject.getString("result")) && jsonObject.getString("result").trim().equals(taskNode.getCompleteBatchNo())) {
|
|
|
+ boolean bool = storgeService.szbStockHandle(true, taskNode);
|
|
|
+ if(!bool){
|
|
|
+ dataMap.put("result", false);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ dataMap.put("result", false);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- dataMap.put("result", false);
|
|
|
- }else{
|
|
|
- Map returnMap = null;
|
|
|
+ if(!dataMap.containsKey("result")) {
|
|
|
//String bizType = dataMap.get("bizType")==null?"":dataMap.get("bizType").toString();
|
|
|
//if("4".equals(taskNode.getNodeType()) && !StringUtils.contains(taskNode.getNodeName(), "翻面")){
|
|
|
// returnMap = getFanmianTargetStorge(taskNode,dataMap);
|
|
|
//}else {
|
|
|
- returnMap = getTargetStorge(nextTaskNode,taskNode.getFindAgvFlag(),bomProcedure.getType());
|
|
|
+ Map returnMap = getTargetStorge(nextTaskNode, taskNode.getFindAgvFlag(), bomProcedure.getType());
|
|
|
//}
|
|
|
|
|
|
//目标地址和类型
|
|
|
- Storge targetStorge = returnMap.get("store")==null?null:(Storge)returnMap.get("store");
|
|
|
- String targetxbk = returnMap.get("targetxbk")==null?null:(String)returnMap.get("targetxbk");
|
|
|
- log.info("节点{}检查目标库位是否满足返回{}",taskNode.getId(),targetStorge.getPointId());
|
|
|
+ Storge targetStorge = returnMap.get("store") == null ? null : (Storge) returnMap.get("store");
|
|
|
+ String targetxbk = returnMap.get("targetxbk") == null ? null : (String) returnMap.get("targetxbk");
|
|
|
+ log.info("节点{}检查目标库位是否满足返回{}", taskNode.getId(), targetStorge.getPointId());
|
|
|
|
|
|
// 立库取子盘到人工上下料站资源不可用时不能进入线边库
|
|
|
- if(taskNode.getCompleteBatchSort()==1 && "1".equals(targetxbk)){
|
|
|
+ if (taskNode.getCompleteBatchSort() == 1 && "1".equals(targetxbk)) {
|
|
|
dataMap.put("result", false);
|
|
|
- }else{
|
|
|
- if(null != targetStorge){
|
|
|
+ } else {
|
|
|
+ if (null != targetStorge) {
|
|
|
+ //判断当前节点是否三坐标取操作
|
|
|
+ Map locationMap = new HashMap();
|
|
|
jqrStorge = storgeService.getById(robotList.get(0).getStorgeId());
|
|
|
|
|
|
dataMap.put("fromStorge", startStore);
|
|
|
|
|
|
- Map locationMap = new HashMap();
|
|
|
- locationMap.put("location",startStore.getPointId());
|
|
|
+ locationMap.put("location", startStore.getPointId());
|
|
|
dataMap.put("data", locationMap);
|
|
|
// TODO 有问题,需要区分是否是第一步上料
|
|
|
//出入库类型
|
|
|
- if(taskNode.getCompleteBatchSort()==1){//TODO 条件后续再丰富
|
|
|
+ if (taskNode.getCompleteBatchSort() == 1) {//TODO 条件后续再丰富
|
|
|
dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_TRAY_CRK);
|
|
|
- }else if(returnMap.containsKey(DemoLineConstant.DEMOLINE_STOCK_TYPE)){
|
|
|
+ } else if (returnMap.containsKey(DemoLineConstant.DEMOLINE_STOCK_TYPE)) {
|
|
|
dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, returnMap.get(DemoLineConstant.DEMOLINE_STOCK_TYPE));
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
|
|
|
}
|
|
|
- if(returnMap.containsKey("isReload")){
|
|
|
+ if (returnMap.containsKey("isReload")) {
|
|
|
dataMap.put("isReload", returnMap.get("isReload").toString());
|
|
|
}
|
|
|
|
|
@@ -633,12 +651,12 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + nextTaskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
|
|
|
|
|
|
dataMap.put("result", true);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
dataMap.put("result", false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }else{
|
|
|
+ }else {
|
|
|
dataMap.put("result", false);
|
|
|
}
|
|
|
}
|
|
@@ -675,18 +693,19 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
log.info("节点{}当前机器人所在位子{}",taskNode.getId(),jrqHcwPartPoint);
|
|
|
|
|
|
for(Storge jqrHcwStorge : jrqHcwStorges){
|
|
|
- long jqrHcwStorgeTaskNodeId = jqrHcwStorge.getCampId();
|
|
|
+ Long jqrHcwStorgeTaskNodeId = jqrHcwStorge.getCampId();
|
|
|
+ if(null==jqrHcwStorgeTaskNodeId) break;
|
|
|
TaskNode jqrHcwStorgeTaskNode = taskNodeService.getById(jqrHcwStorgeTaskNodeId);
|
|
|
//当前节点零件和缓存位上的零件不相同
|
|
|
if(!jqrHcwStorgeTaskNode.getCompleteBatchNo().equals(taskNode.getCompleteBatchNo())){
|
|
|
//缓存位目标设备的点位
|
|
|
ProductionresourcePosition jqrHcwStorgeTaskNodeResource = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,jqrHcwStorgeTaskNode.getTargetResourceId()));
|
|
|
- log.info("jqrHcwStorgeTaskNode.getCompleteBatchNo()={}",jqrHcwStorgeTaskNode.getCompleteBatchNo());
|
|
|
- log.info("taskNode.getCompleteBatchNo()={}",taskNode.getCompleteBatchNo());
|
|
|
+ log.warn("jqrHcwStorgeTaskNode.getCompleteBatchNo()={}",jqrHcwStorgeTaskNode.getCompleteBatchNo());
|
|
|
+ log.warn("taskNode.getCompleteBatchNo()={}",taskNode.getCompleteBatchNo());
|
|
|
|
|
|
// 查询缓存位工件目标地址是否是机器人当前位子
|
|
|
- log.info("jqrHcwStorgeTaskNodeResource.getPointId()={}",jqrHcwStorgeTaskNodeResource.getPointId());
|
|
|
- log.info("jrqHcwPartPoint={}",jrqHcwPartPoint);
|
|
|
+ log.warn("jqrHcwStorgeTaskNodeResource.getPointId()={}",jqrHcwStorgeTaskNodeResource.getPointId());
|
|
|
+ log.warn("jrqHcwPartPoint={}",jrqHcwPartPoint);
|
|
|
if(jqrHcwStorgeTaskNodeResource.getPointId().equals(jrqHcwPartPoint)){
|
|
|
hasJqrhcwPartFlag = true;
|
|
|
msgUtil.redis_set(DemoLineConstant.JQR_HCW_PART_PRIOTY_EXEC_FLAG + jqrHcwStorgeTaskNodeId,"1");
|
|
@@ -711,7 +730,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
// 机器人移动到redis记录实时位子
|
|
|
msgUtil.redis_set(taskNode.getResourceId()+"postion",targetStorge.getPointId());
|
|
|
}else{
|
|
|
- log.info("节点{}并发抢占框体机器人移动条件不满足", taskNode.getId());
|
|
|
+ log.warn("节点{}并发抢占框体机器人移动条件不满足", taskNode.getId());
|
|
|
dataMap.put("result", false);
|
|
|
}
|
|
|
}
|
|
@@ -777,7 +796,6 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
if ("1".equals(procedure.getThreeDimensionalConf()) || "1".equals(procedure.getThreeDimensionalDeviationConf())) {
|
|
|
// 质量检测
|
|
|
// dataMap.put("method", "SendThreeCoordinates");
|
|
|
- dataMap.put("method", "SendServoStacker");
|
|
|
locationMap.put("workId", taskNode.getCompleteBatchNo());
|
|
|
locationMap.put("procedureNo", task.getProcedureNo());
|
|
|
if("1".equals(procedure.getThreeDimensionalConf())){
|
|
@@ -785,17 +803,23 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
}else if("1".equals(procedure.getThreeDimensionalDeviationConf())){
|
|
|
locationMap.put("workProgramName", procedure.getThreeDimensionalDeviationPrograme());
|
|
|
}
|
|
|
- locationMap.put("stationId", DictionaryKey.ZEISS_LOCATION.entrySet().stream().collect(Collectors.toMap(entity-> entity.getValue(),entity-> entity.getKey())).get(targetStorge.getPointId()));
|
|
|
- } else {
|
|
|
- dataMap.put("method", "SendServoStacker");
|
|
|
+ //三坐标放虚拟点位处理
|
|
|
+ boolean bool = storgeService.szbStockHandle(false, taskNode);
|
|
|
+ //三坐标条件不满足
|
|
|
+ if(!bool && (targetStorge.getPointId().equals("373") || targetStorge.getPointId().equals("372"))){
|
|
|
+ log.warn("三坐标节点{}放操作执行条件不满足", taskNode.getId());
|
|
|
+ dataMap.put("result", false);
|
|
|
+ return dataMap;
|
|
|
+ }
|
|
|
+ locationMap.put("stationId", "M");
|
|
|
}
|
|
|
+ dataMap.put("method", "SendServoStacker");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
dataMap.put("toStorge", targetStorge);
|
|
|
dataMap.put("fromStorge", currentStore);
|
|
|
|
|
|
-
|
|
|
locationMap.put("location",targetStorge.getPointId());
|
|
|
dataMap.put("data", locationMap);
|
|
|
|
|
@@ -1121,6 +1145,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
if("1".equals(procedure.getThreeDimensionalConf()) || "1".equals(procedure.getThreeDimensionalDeviationConf())){
|
|
|
// 质量检测
|
|
|
// 查询三坐标滑台是否可用,通过接口查询
|
|
|
+ /*
|
|
|
//组装接口参数
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
|
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
|
|
@@ -1138,13 +1163,14 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
String requestUrl = instructionUrl + "/api/" + "QueryThreeCoordinatesFreePos";
|
|
|
// TODO 先写死测试
|
|
|
String canPutInfo = restTemplate.postForObject(requestUrl, formEntity, String.class);
|
|
|
- /*String canPutInfo ="{\"result\":\"L\"}";*/
|
|
|
+ String canPutInfo ="{\"result\":\"L\"}";
|
|
|
JSONObject canPutInfoObject = JSONObject.parseObject(canPutInfo);
|
|
|
- if("false".equals(canPutInfoObject.getString("result"))){
|
|
|
+ */
|
|
|
+ boolean bool = storgeService.szbStockHandle(false, taskNode);
|
|
|
+ if(!bool){
|
|
|
targetList = null;
|
|
|
}else{
|
|
|
- String putLocation = canPutInfoObject.getString("result");
|
|
|
- String putPoint = DictionaryKey.ZEISS_LOCATION.get(putLocation);
|
|
|
+ String putPoint = DictionaryKey.ZEISS_LOCATION.get("M");
|
|
|
targetList = productionresourcePositionService.list(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, taskNode.getTargetResourceId()).eq(ProductionresourcePosition::getPointId,putPoint));
|
|
|
}
|
|
|
}else{
|