|
@@ -189,15 +189,6 @@ public class TaskWorkNode {
|
|
|
|
|
|
public void updateTaskStatusJob(String data, String consumerQueue) throws InterruptedException {
|
|
|
|
|
|
- /*//判断是否存在换手抓操作
|
|
|
- Object changeHandOp = msgUtil.redis_get("CHANGE_HAND_OP"); //换手抓标识
|
|
|
- if(!Objects.isNull(changeHandOp) && "2".equals(changeHandOp.toString())){
|
|
|
- logger.info("当前机器人正在换手抓,不执行MQ方法体");
|
|
|
- Thread.sleep(3000); //等待三秒
|
|
|
- throw new InterruptedException("设备资源不通过,消息重新进入队尾");
|
|
|
- }
|
|
|
-*/
|
|
|
-
|
|
|
Date startTime = new Date(); //记录开始时间
|
|
|
String returnData = "";
|
|
|
boolean specialCallBackMyselfFlag = false;
|
|
@@ -216,439 +207,391 @@ public class TaskWorkNode {
|
|
|
//业务类型-1、是普通的节点类型,2-是线边库轮询 6-刀具节点类型的节点类型
|
|
|
String bizType = jsonObject.getString("bizType");
|
|
|
|
|
|
- if("6".equals(bizType)){
|
|
|
-
|
|
|
- String takePhotoFlag = jsonObject.getString("takePhotoFlag");
|
|
|
-
|
|
|
- //当前节点为刀具任务
|
|
|
- ToolTaskExecute toolTaskExecute = toolTaskExecuteService.getOne(new QueryWrap<ToolTaskExecute>().lambda().eq(ToolTaskExecute::getToolTaskNodeId,taskNodeId));
|
|
|
-
|
|
|
- if(toolTaskExecute == null){
|
|
|
- return;
|
|
|
- }
|
|
|
+ taskNode = taskNodeService.getById(taskNodeId);
|
|
|
|
|
|
- if(toolTaskExecute.getIsSend() !=null && toolTaskExecute.getIsSend() == 1){
|
|
|
- logger.warn("刀具节点{}已下发,重复丢弃",toolTaskExecute.getId());
|
|
|
- return;
|
|
|
- }
|
|
|
+ if(null == taskNode){
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- ToolNodeOperationService toolNodeOperationService = MsgUtil.getBean(ToolRobotNodeServiceImpl.class);
|
|
|
- if (jsonObject.containsKey(toolTaskExecute.getId() + "count")) {
|
|
|
- conMap.put(toolTaskExecute.getId() + "count", jsonObject.getString(toolTaskExecute.getId() + "count"));
|
|
|
- }
|
|
|
- toolNodeOperationService.checkCondition(toolTaskExecute,conMap);
|
|
|
- }else{
|
|
|
-
|
|
|
- //判断是否存在刀具优先执行标识
|
|
|
- Object toolPriorityExecute = msgUtil.redis_get("TOOL_PRIORITY_EXECUTE");//刀具优先执行标识
|
|
|
- if(!Objects.isNull(toolPriorityExecute) && "2".equals(toolPriorityExecute.toString())){
|
|
|
- logger.info("存在刀具优先执行标识");
|
|
|
- throw new InterruptedException("存在刀具优先执行标识,消息重新进入队尾");
|
|
|
+ // add by yejian on 20220726 使用完成后释放redis资源
|
|
|
+ if(taskNode.getCompleteBatchSort() != 1){
|
|
|
+ TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode, -1);
|
|
|
+ // 下一工序
|
|
|
+ if(!beforTaskNode.getTaskId().equals(taskNode.getTaskId())){
|
|
|
+ List<TaskNode> operationTaskNodes = taskNodeService.list(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId, beforTaskNode.getTaskId()));
|
|
|
+ List<Long> operationTaskNodeIds = operationTaskNodes.stream().map(operationTaskNode -> operationTaskNode.getId()).collect(Collectors.toList());
|
|
|
+ for(Long operationTaskNodeId : operationTaskNodeIds){
|
|
|
+ // 清除redis里面的内容
|
|
|
+ //msgUtil.redis_del(YunjianConstant.YUNJIAN_CALLBACK_PARAM + "_" + operationTaskNodeId);
|
|
|
+ msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + operationTaskNodeId);
|
|
|
+ msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + operationTaskNodeId);
|
|
|
+ msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + operationTaskNodeId);
|
|
|
+ msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + operationTaskNodeId);
|
|
|
+ msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + operationTaskNodeId);
|
|
|
+ msgUtil.redis_del(CacheKey.TASK_CURRENT_NODE + "_" + + operationTaskNodeId);
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- taskNode = taskNodeService.getById(taskNodeId);
|
|
|
+ tTask = taskMapper.selectById(taskNode.getTaskId());
|
|
|
+ //初始化业务日志
|
|
|
+ log = getBusinessLog(tTask, taskNode);
|
|
|
+
|
|
|
+ try {
|
|
|
+ lockFlag = lock.tryLock();
|
|
|
+ lockCondition = checkFlowCondition(tTask);
|
|
|
+ if(lockFlag){
|
|
|
+ logger.info("节点{}获取到了执行锁",taskNode.getId());
|
|
|
+ TaskNode hisTask = taskNodeMapper.selectById(taskNodeId);
|
|
|
+ if("3".equals(hisTask.getExeResult())){
|
|
|
+ logger.warn("节点{}已经执行完成,重复推送丢弃",taskNodeId);
|
|
|
+ log.setExeStatus("3").setExeResult("0").setExeResult("0").setManual("0").setFeedback("节点已经执行完成,重复推送丢弃");
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- if(null == taskNode){
|
|
|
- return;
|
|
|
- }
|
|
|
- /*if ("04".equals(taskNode.getInterfaceType())&&!"3".equals(bizType)) {
|
|
|
- //直接跳过
|
|
|
- }else{
|
|
|
- boolean changeFlag = this.checkRobotHand(DictionaryKey.HAND_PONIT.get("TRAY_HAND")); //更换机器人手抓标识
|
|
|
- if(changeFlag){
|
|
|
- //需要更新机器人手抓
|
|
|
- msgUtil.redis_set("CHANGE_HAND_OP","2");
|
|
|
- try{
|
|
|
- this.changeRobotHand(taskNode.getTaskId(),taskNode.getId(),DictionaryKey.HAND_PONIT.get("TRAY_HAND"),DictionaryKey.CARRY_TYPE.get("TRAY_HAND"));
|
|
|
- }catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
- }finally {
|
|
|
- //当前任务回到队尾
|
|
|
- throw new InterruptedException("需要更换托盘手抓,当前消息重新进入队尾");
|
|
|
+ String handMode = jsonObject.getString("handMode");
|
|
|
+ //多产品搬运类型
|
|
|
+ String carryType = jsonObject.getString("carryType");
|
|
|
+
|
|
|
+ String queueName = "device.queue."+ BizConstant.MQ_GLOBAL_EXCEPTION;
|
|
|
+
|
|
|
+ if (consumerQueue.equals(queueName)) {
|
|
|
+ StringBuilder buffer = new StringBuilder();
|
|
|
+ //处理产线存储
|
|
|
+ String lineName = jsonObject.getString("Line");
|
|
|
+ ZZone line = zoneService.getOne(new LbqWrapper<ZZone>().like(ZZone::getAbbreviate, lineName.substring(0, lineName.length()-1)));
|
|
|
+ buffer.append(lineName).append("-设备(").append(jsonObject.getString("Name")+")").append(jsonObject.getString("Status"));
|
|
|
+ log.setExeResult("0").setManual("1").setFeedback("全局异常:"+ buffer.toString()).setStartTime(new Date()).setExecuteTime(new Date()).setZoneId(line.getId());
|
|
|
+
|
|
|
+ LbqWrapper<AAutoNodeLog> lbqWrapper = new LbqWrapper<AAutoNodeLog>();
|
|
|
+ lbqWrapper.eq(AAutoNodeLog::getZoneId, line.getId()).eq(AAutoNodeLog::getExeResult, log.getExeResult()).eq(AAutoNodeLog::getManual, log.getManual()).eq(AAutoNodeLog::getStatus, 0).eq(AAutoNodeLog::getFeedback, log.getFeedback());
|
|
|
+ //判断全局异常是否已存在
|
|
|
+ AAutoNodeLog exist = autoNodeLogService.getOne(lbqWrapper);
|
|
|
+ if(null == exist){
|
|
|
+ autoNodeLogService.save(log);
|
|
|
+ }else{
|
|
|
+ //更新执行时间
|
|
|
+ exist.setExecuteTime(new Date());
|
|
|
+ autoNodeLogService.updateAllById(exist);
|
|
|
}
|
|
|
+ //throw new RuntimeException("全局通知异常");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ logger.info("=======================" + taskNodeId);
|
|
|
|
|
|
+ //
|
|
|
+ if (taskNode == null || taskNode.getTaskId() == null) {
|
|
|
+ //模拟处理数据
|
|
|
+ log.setExeResult("0").setManual("0").setFeedback("当前任务节点为空");
|
|
|
+ autoNodeLogService.save(log);
|
|
|
+ throw new RuntimeException("当前任务节点为空");
|
|
|
}
|
|
|
- }*/
|
|
|
-
|
|
|
- // add by yejian on 20220726 使用完成后释放redis资源
|
|
|
- if(taskNode.getCompleteBatchSort() != 1){
|
|
|
- TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode, -1);
|
|
|
- // 下一工序
|
|
|
- if(!beforTaskNode.getTaskId().equals(taskNode.getTaskId())){
|
|
|
- List<TaskNode> operationTaskNodes = taskNodeService.list(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId, beforTaskNode.getTaskId()));
|
|
|
- List<Long> operationTaskNodeIds = operationTaskNodes.stream().map(operationTaskNode -> operationTaskNode.getId()).collect(Collectors.toList());
|
|
|
- for(Long operationTaskNodeId : operationTaskNodeIds){
|
|
|
- // 清除redis里面的内容
|
|
|
- //msgUtil.redis_del(YunjianConstant.YUNJIAN_CALLBACK_PARAM + "_" + operationTaskNodeId);
|
|
|
- msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + operationTaskNodeId);
|
|
|
- msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + operationTaskNodeId);
|
|
|
- msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + operationTaskNodeId);
|
|
|
- msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + operationTaskNodeId);
|
|
|
- msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + operationTaskNodeId);
|
|
|
- msgUtil.redis_del(CacheKey.TASK_CURRENT_NODE + "_" + + operationTaskNodeId);
|
|
|
- }
|
|
|
+
|
|
|
+ if (tTask == null || tTask.getStatus() == "3") {
|
|
|
+ log.setTaskNodeId(taskNode.getId()).setExeResult("0").setManual("0").setFeedback("当前任务为空");
|
|
|
+ autoNodeLogService.save(log);
|
|
|
+ throw new RuntimeException("当前任务为空");
|
|
|
}
|
|
|
- }
|
|
|
+ // //获取配置序数据
|
|
|
+ //任务初始化判断
|
|
|
+ if ("1".equals(tTask.getStatus())) {
|
|
|
+ //下发的数据才更新状态
|
|
|
+ tTask.setStatus("2").setStartTime(new Date());
|
|
|
+ taskMapper.updateById(tTask);
|
|
|
+ planMapper.updateproduceStatusBegin();
|
|
|
+ orderMapper.updateproduceStatusBegin();
|
|
|
+
|
|
|
+ msgUtil.redis_set(CacheKey.PRESOURCE_CURRENT_TASK + "_" + tTask.getResourceId(), tTask.getId());
|
|
|
+ msgUtil.redis_set(CacheKey.PRESOURCE_CURRENT_TASK_OBJECT + "_" + tTask.getResourceId(), tTask);
|
|
|
+ }
|
|
|
+ //获取配置节点
|
|
|
+ // String autoProgramUrl = getInterfaceUrl(taskNode);
|
|
|
|
|
|
- tTask = taskMapper.selectById(taskNode.getTaskId());
|
|
|
- //初始化业务日志
|
|
|
- log = getBusinessLog(tTask, taskNode);
|
|
|
-
|
|
|
- try {
|
|
|
- lockFlag = lock.tryLock();
|
|
|
- lockCondition = checkFlowCondition(tTask);
|
|
|
- if(lockFlag){
|
|
|
- logger.info("节点{}获取到了执行锁",taskNode.getId());
|
|
|
- TaskNode hisTask = taskNodeMapper.selectById(taskNodeId);
|
|
|
- if("3".equals(hisTask.getExeResult())){
|
|
|
- logger.warn("节点{}已经执行完成,重复推送丢弃",taskNodeId);
|
|
|
- log.setExeStatus("3").setExeResult("0").setExeResult("0").setManual("0").setFeedback("节点已经执行完成,重复推送丢弃");
|
|
|
- return;
|
|
|
- }
|
|
|
+ //填充配置节点内容
|
|
|
+ ResourceAutoCode resourceAutoCode = resourceAutoCodeService.getById(taskNode.getAutoNode().getId());
|
|
|
+ taskNode.setAutoNode(resourceAutoCode);
|
|
|
|
|
|
- String handMode = jsonObject.getString("handMode");
|
|
|
- //多产品搬运类型
|
|
|
- String carryType = jsonObject.getString("carryType");
|
|
|
-
|
|
|
- String queueName = "device.queue."+ BizConstant.MQ_GLOBAL_EXCEPTION;
|
|
|
-
|
|
|
- if (consumerQueue.equals(queueName)) {
|
|
|
- StringBuilder buffer = new StringBuilder();
|
|
|
- //处理产线存储
|
|
|
- String lineName = jsonObject.getString("Line");
|
|
|
- ZZone line = zoneService.getOne(new LbqWrapper<ZZone>().like(ZZone::getAbbreviate, lineName.substring(0, lineName.length()-1)));
|
|
|
- buffer.append(lineName).append("-设备(").append(jsonObject.getString("Name")+")").append(jsonObject.getString("Status"));
|
|
|
- log.setExeResult("0").setManual("1").setFeedback("全局异常:"+ buffer.toString()).setStartTime(new Date()).setExecuteTime(new Date()).setZoneId(line.getId());
|
|
|
-
|
|
|
- LbqWrapper<AAutoNodeLog> lbqWrapper = new LbqWrapper<AAutoNodeLog>();
|
|
|
- lbqWrapper.eq(AAutoNodeLog::getZoneId, line.getId()).eq(AAutoNodeLog::getExeResult, log.getExeResult()).eq(AAutoNodeLog::getManual, log.getManual()).eq(AAutoNodeLog::getStatus, 0).eq(AAutoNodeLog::getFeedback, log.getFeedback());
|
|
|
- //判断全局异常是否已存在
|
|
|
- AAutoNodeLog exist = autoNodeLogService.getOne(lbqWrapper);
|
|
|
- if(null == exist){
|
|
|
- autoNodeLogService.save(log);
|
|
|
- }else{
|
|
|
- //更新执行时间
|
|
|
- exist.setExecuteTime(new Date());
|
|
|
- autoNodeLogService.updateAllById(exist);
|
|
|
- }
|
|
|
- //throw new RuntimeException("全局通知异常");
|
|
|
- return;
|
|
|
- }
|
|
|
- logger.info("=======================" + taskNodeId);
|
|
|
+ isFinal = resourceAutoCode.isFinal() ? true : false;
|
|
|
+ msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE + "_" + taskNode.getResourceId(), resourceAutoCode);
|
|
|
|
|
|
- //
|
|
|
- if (taskNode == null || taskNode.getTaskId() == null) {
|
|
|
- //模拟处理数据
|
|
|
- log.setExeResult("0").setManual("0").setFeedback("当前任务节点为空");
|
|
|
- autoNodeLogService.save(log);
|
|
|
- throw new RuntimeException("当前任务节点为空");
|
|
|
- }
|
|
|
+ //更新节点任务
|
|
|
+ if("1".equals(taskNode.getExeStatus())){
|
|
|
+ taskNode.setExeStatus("2").setStartTime(new Date());
|
|
|
+ taskNodeMapper.updateAllById(taskNode);
|
|
|
+ }
|
|
|
|
|
|
- if (tTask == null || tTask.getStatus() == "3") {
|
|
|
- log.setTaskNodeId(taskNode.getId()).setExeResult("0").setManual("0").setFeedback("当前任务为空");
|
|
|
- autoNodeLogService.save(log);
|
|
|
- throw new RuntimeException("当前任务为空");
|
|
|
+ if ("04".equals(taskNode.getInterfaceType())&&!"3".equals(bizType)) {
|
|
|
+ //人工上下料或质检
|
|
|
+ //不用调接口,直接返回成功
|
|
|
+ conMap.put("result",true);
|
|
|
+ msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_STATUS + "_" + taskNode.getId(), "0");
|
|
|
+ } else {
|
|
|
+ Map queryMap = Maps.newHashMap();
|
|
|
+ queryMap.put("bizType", bizType);
|
|
|
+ if("3".equals(bizType)){
|
|
|
+ String functionName = jsonObject.getString("functionName");
|
|
|
+ queryMap.put("functionName",functionName);
|
|
|
}
|
|
|
- // //获取配置序数据
|
|
|
- //任务初始化判断
|
|
|
- if ("1".equals(tTask.getStatus())) {
|
|
|
- //下发的数据才更新状态
|
|
|
- tTask.setStatus("2").setStartTime(new Date());
|
|
|
- taskMapper.updateById(tTask);
|
|
|
- planMapper.updateproduceStatusBegin();
|
|
|
- orderMapper.updateproduceStatusBegin();
|
|
|
-
|
|
|
- msgUtil.redis_set(CacheKey.PRESOURCE_CURRENT_TASK + "_" + tTask.getResourceId(), tTask.getId());
|
|
|
- msgUtil.redis_set(CacheKey.PRESOURCE_CURRENT_TASK_OBJECT + "_" + tTask.getResourceId(), tTask);
|
|
|
+ queryMap.put("carryType", carryType);
|
|
|
+ queryMap.put("handMode", handMode);
|
|
|
+ if (jsonObject.containsKey(taskNode.getId() + "count")) {
|
|
|
+ queryMap.put(taskNode.getId() + "count", jsonObject.getString(taskNode.getId() + "count"));
|
|
|
}
|
|
|
- //获取配置节点
|
|
|
- // String autoProgramUrl = getInterfaceUrl(taskNode);
|
|
|
|
|
|
- //填充配置节点内容
|
|
|
- ResourceAutoCode resourceAutoCode = resourceAutoCodeService.getById(taskNode.getAutoNode().getId());
|
|
|
- taskNode.setAutoNode(resourceAutoCode);
|
|
|
+ //把产线放进去,避免多次查询节点业务参数
|
|
|
+ ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId, taskNode.getResourceId()));
|
|
|
+ ZZone zZone = zoneService.getById(zoneProductionresource.getZoneId());
|
|
|
+ queryMap.put("zone", zZone);
|
|
|
|
|
|
- isFinal = resourceAutoCode.isFinal() ? true : false;
|
|
|
- msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE + "_" + taskNode.getResourceId(), resourceAutoCode);
|
|
|
|
|
|
- //更新节点任务
|
|
|
- if("1".equals(taskNode.getExeStatus())){
|
|
|
- taskNode.setExeStatus("2").setStartTime(new Date());
|
|
|
- taskNodeMapper.updateAllById(taskNode);
|
|
|
- }
|
|
|
-
|
|
|
- if ("04".equals(taskNode.getInterfaceType())&&!"3".equals(bizType)) {
|
|
|
- //人工上下料或质检
|
|
|
- //不用调接口,直接返回成功
|
|
|
- conMap.put("result",true);
|
|
|
- msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_STATUS + "_" + taskNode.getId(), "0");
|
|
|
- } else {
|
|
|
- Map queryMap = Maps.newHashMap();
|
|
|
- queryMap.put("bizType", bizType);
|
|
|
- if("3".equals(bizType)){
|
|
|
- String functionName = jsonObject.getString("functionName");
|
|
|
- queryMap.put("functionName",functionName);
|
|
|
- }
|
|
|
- queryMap.put("carryType", carryType);
|
|
|
- queryMap.put("handMode", handMode);
|
|
|
- if (jsonObject.containsKey(taskNode.getId() + "count")) {
|
|
|
- queryMap.put(taskNode.getId() + "count", jsonObject.getString(taskNode.getId() + "count"));
|
|
|
- }
|
|
|
+ BBom bom = bBomMapper.selectById(tTask.getBomId());
|
|
|
+ ZZone bomzZone = zoneService.getById(bom.getId());
|
|
|
+ queryMap.put("bomzZone", bomzZone);
|
|
|
|
|
|
- //把产线放进去,避免多次查询节点业务参数
|
|
|
- ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId, taskNode.getResourceId()));
|
|
|
- ZZone zZone = zoneService.getById(zoneProductionresource.getZoneId());
|
|
|
- queryMap.put("zone", zZone);
|
|
|
+ //设置workpiece表当前执行的工序
|
|
|
+ List<TWorkpiece>list = workpieceMapper.selectList(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getCompleteBatchNo,taskNode.getCompleteBatchNo()));
|
|
|
+ if(CollectionUtil.isNotEmpty(list)){
|
|
|
+ TWorkpiece workpiece = list.get(0);
|
|
|
+ workpiece.setProcedureId(tTask.getProcedureId());
|
|
|
+ workpiece.setTaskNodeId(Long.parseLong(taskNodeId));
|
|
|
+ workpieceMapper.updateById(workpiece);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- BBom bom = bBomMapper.selectById(tTask.getBomId());
|
|
|
- ZZone bomzZone = zoneService.getById(bom.getId());
|
|
|
- queryMap.put("bomzZone", bomzZone);
|
|
|
|
|
|
- //设置workpiece表当前执行的工序
|
|
|
- List<TWorkpiece>list = workpieceMapper.selectList(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getCompleteBatchNo,taskNode.getCompleteBatchNo()));
|
|
|
- if(CollectionUtil.isNotEmpty(list)){
|
|
|
- TWorkpiece workpiece = list.get(0);
|
|
|
- workpiece.setProcedureId(tTask.getProcedureId());
|
|
|
- workpiece.setTaskNodeId(Long.parseLong(taskNodeId));
|
|
|
- workpieceMapper.updateById(workpiece);
|
|
|
- }
|
|
|
+ //运行条件验证
|
|
|
+ conMap = checkCon(taskNode, tTask, queryMap);
|
|
|
+ //conMap.put("result", true);
|
|
|
+ logger.warn("节点{}检查资源返回{}",taskNode.getId(), conMap);
|
|
|
+ msgUtil.redis_set_map(CacheKey.TASK_CURRENT_NODE_CONDITION + "_" + taskNode.getId(), conMap);
|
|
|
|
|
|
+ if((boolean)conMap.get("result")){
|
|
|
+ if ("03".equals(taskNode.getInterfaceType())) {
|
|
|
+ // 执行线边库操作
|
|
|
+ if("1".equals(conMap.get("targetxbk"))){
|
|
|
+ //组装接口参数
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
|
|
|
+ String jsonParam = getRequestParam(conMap);
|
|
|
+ //缓存执行当前节点传参
|
|
|
+ msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
+ HttpEntity<String> formEntity = new HttpEntity<String>(jsonParam, headers);
|
|
|
|
|
|
+ //动态调用接口和新增指令执行时间
|
|
|
+ log.setZoneId(zZone.getId()).setMethod(conMap.get("method").toString()).setExecuteTime(new Date());
|
|
|
+ String instructionUrl = conMap.get("instructionUrl") + "/api/" + conMap.get("method").toString();
|
|
|
+ logger.info("instructionUrl=" + instructionUrl);
|
|
|
+ logger.info("jsonParam=" + jsonParam);
|
|
|
+ returnData = restTemplate.postForObject(instructionUrl, formEntity, String.class);
|
|
|
|
|
|
- //运行条件验证
|
|
|
- conMap = checkCon(taskNode, tTask, queryMap);
|
|
|
- //conMap.put("result", true);
|
|
|
- logger.warn("节点{}检查资源返回{}",taskNode.getId(), conMap);
|
|
|
- msgUtil.redis_set_map(CacheKey.TASK_CURRENT_NODE_CONDITION + "_" + taskNode.getId(), conMap);
|
|
|
-
|
|
|
- if((boolean)conMap.get("result")){
|
|
|
- if ("03".equals(taskNode.getInterfaceType())) {
|
|
|
- // 执行线边库操作
|
|
|
- if("1".equals(conMap.get("targetxbk"))){
|
|
|
- //组装接口参数
|
|
|
- HttpHeaders headers = new HttpHeaders();
|
|
|
- headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
|
|
|
- String jsonParam = getRequestParam(conMap);
|
|
|
- //缓存执行当前节点传参
|
|
|
- msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
- HttpEntity<String> formEntity = new HttpEntity<String>(jsonParam, headers);
|
|
|
-
|
|
|
- //动态调用接口和新增指令执行时间
|
|
|
- log.setZoneId(zZone.getId()).setMethod(conMap.get("method").toString()).setExecuteTime(new Date());
|
|
|
- String instructionUrl = conMap.get("instructionUrl") + "/api/" + conMap.get("method").toString();
|
|
|
- logger.info("instructionUrl=" + instructionUrl);
|
|
|
- logger.info("jsonParam=" + jsonParam);
|
|
|
- returnData = restTemplate.postForObject(instructionUrl, formEntity, String.class);
|
|
|
-
|
|
|
- logger.info("returnData=", returnData);
|
|
|
+ logger.info("returnData=", returnData);
|
|
|
+ }else{
|
|
|
+ TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode, -1);
|
|
|
+ // agv搬运
|
|
|
+ Map agvData = new HashMap();
|
|
|
+ agvData.put("start", conMap.get("start"));
|
|
|
+ agvData.put("goal", conMap.get("goal"));
|
|
|
+ agvData.put("taskId", tTask.getId().toString());
|
|
|
+ agvData.put("taskNodeId", taskNode.getId().toString());
|
|
|
+ agvData.put("agvTaskType", "0");
|
|
|
+ String jsonParam = getRequestParam(conMap);
|
|
|
+ JSONObject agvParam = new JSONObject();
|
|
|
+ agvParam.putAll(agvData);
|
|
|
+ //缓存执行当前节点传参
|
|
|
+ msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), agvParam.toJSONString());
|
|
|
+ String zoneType = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.ZONE_TYPE).toString());
|
|
|
+ if(zoneType.equals(ParameterKey.ZONE_SFX)){
|
|
|
+ agvData.put("transferType","agv");
|
|
|
+ R addAgvTask = externalApiService.processTransferJob(agvData);
|
|
|
}else{
|
|
|
- TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode, -1);
|
|
|
- // agv搬运
|
|
|
- Map agvData = new HashMap();
|
|
|
- agvData.put("start", conMap.get("start"));
|
|
|
- agvData.put("goal", conMap.get("goal"));
|
|
|
- agvData.put("taskId", tTask.getId().toString());
|
|
|
- agvData.put("taskNodeId", taskNode.getId().toString());
|
|
|
- agvData.put("agvTaskType", "0");
|
|
|
- String jsonParam = getRequestParam(conMap);
|
|
|
- JSONObject agvParam = new JSONObject();
|
|
|
- agvParam.putAll(agvData);
|
|
|
- //缓存执行当前节点传参
|
|
|
- msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), agvParam.toJSONString());
|
|
|
- String zoneType = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.ZONE_TYPE).toString());
|
|
|
- if(zoneType.equals(ParameterKey.ZONE_SFX)){
|
|
|
- agvData.put("transferType","agv");
|
|
|
- R addAgvTask = externalApiService.processTransferJob(agvData);
|
|
|
- }else{
|
|
|
- R addHikTask = agvHikOrderInfoService.addHikTask(agvData);
|
|
|
- }
|
|
|
+ R addHikTask = agvHikOrderInfoService.addHikTask(agvData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (!"04".equals(taskNode.getInterfaceType())||"3".equals(bizType)) {
|
|
|
+ // 判断当前工序是三坐标或者前一工序是三坐标,分别将三坐标的放和三坐标下一工序的取不调用ccs接口
|
|
|
+ String method = conMap.get("method")==null?null:conMap.get("method").toString();
|
|
|
+ ResourceBusiness resourceBusiness = resourceBusinessService.getById(tTask.getResourceBusinessId());
|
|
|
+ TaskNode beforTaskNode = null;
|
|
|
+ TTask beforTask = null;
|
|
|
+ ResourceBusiness beforResourceBusiness = null;
|
|
|
+ if(taskNode.getCompleteBatchSort() != 1){
|
|
|
+ beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
|
|
|
+ beforTask = taskMapper.selectById(beforTaskNode.getTaskId());
|
|
|
+ beforResourceBusiness = resourceBusinessService.getById(beforTask.getResourceBusinessId());
|
|
|
}
|
|
|
- } else {
|
|
|
- if (!"04".equals(taskNode.getInterfaceType())||"3".equals(bizType)) {
|
|
|
- // 判断当前工序是三坐标或者前一工序是三坐标,分别将三坐标的放和三坐标下一工序的取不调用ccs接口
|
|
|
- String method = conMap.get("method")==null?null:conMap.get("method").toString();
|
|
|
- ResourceBusiness resourceBusiness = resourceBusinessService.getById(tTask.getResourceBusinessId());
|
|
|
- TaskNode beforTaskNode = null;
|
|
|
- TTask beforTask = null;
|
|
|
- ResourceBusiness beforResourceBusiness = null;
|
|
|
- if(taskNode.getCompleteBatchSort() != 1){
|
|
|
- beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
|
|
|
- beforTask = taskMapper.selectById(beforTaskNode.getTaskId());
|
|
|
- beforResourceBusiness = resourceBusinessService.getById(beforTask.getResourceBusinessId());
|
|
|
- }
|
|
|
|
|
|
- // begin add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
|
|
|
-
|
|
|
- logger.info("节点{}执行缓存位线边库逻辑无需再次取放标志{}",taskNode.getId(),conMap.get(YunjianConstant.YUNJIAN_HCW_XBKFLAG));
|
|
|
- if(conMap.containsKey(YunjianConstant.YUNJIAN_HCW_XBKFLAG)){
|
|
|
- // 将消息重新推入消息对列执行缓存为线边库逻辑,直接移动到设备位子从机器人缓存位拿
|
|
|
- logger.info("节点{}执行缓存位线边库逻辑无需再次取放",taskNode.getId());
|
|
|
- List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
- List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
|
|
|
- if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
- logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
|
|
|
- storgeService.unlockStorgeList(storgeList);
|
|
|
- }
|
|
|
- msgUtil.pushToNextMq(taskNode,3);
|
|
|
+ // begin add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
|
|
|
+
|
|
|
+ logger.info("节点{}执行缓存位线边库逻辑无需再次取放标志{}",taskNode.getId(),conMap.get(YunjianConstant.YUNJIAN_HCW_XBKFLAG));
|
|
|
+ if(conMap.containsKey(YunjianConstant.YUNJIAN_HCW_XBKFLAG)){
|
|
|
+ // 将消息重新推入消息对列执行缓存为线边库逻辑,直接移动到设备位子从机器人缓存位拿
|
|
|
+ logger.info("节点{}执行缓存位线边库逻辑无需再次取放",taskNode.getId());
|
|
|
+ List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
+ List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
+ logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
+ }
|
|
|
+ msgUtil.pushToNextMq(taskNode,3);
|
|
|
+ }else{
|
|
|
+ String jsonObjectE = conMap.containsKey("data") ? conMap.get("data").toString() : "";
|
|
|
+ if("打标业务".equals(resourceBusiness.getName()) && "SendServoStacker".equals(method)){
|
|
|
+ // 打标业务无需放
|
|
|
+ specialCallBackMyselfFlag = true;
|
|
|
+ String jsonParam = getRequestParam(conMap);
|
|
|
+ //缓存执行当前节点传参
|
|
|
+ msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
+ JSONObject ret = new JSONObject();
|
|
|
+ ret.put("result","true");
|
|
|
+ returnData = ret.toJSONString();
|
|
|
+ }else if(taskNode.getCompleteBatchSort()!=1 && "3".equals(beforTask.getStatus()) && resourceBusiness.getName().contains("下料业务") && "GetServoStacker".equals(method) && "打标业务".equals(beforResourceBusiness.getName())){
|
|
|
+ specialCallBackMyselfFlag = true;
|
|
|
+ String jsonParam = getRequestParam(conMap);
|
|
|
+ //缓存执行当前节点传参
|
|
|
+ msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
+ JSONObject ret = new JSONObject();
|
|
|
+ ret.put("result","true");
|
|
|
+ returnData = ret.toJSONString();
|
|
|
}else{
|
|
|
- String jsonObjectE = conMap.containsKey("data") ? conMap.get("data").toString() : "";
|
|
|
- if("打标业务".equals(resourceBusiness.getName()) && "SendServoStacker".equals(method)){
|
|
|
- // 打标业务无需放
|
|
|
- specialCallBackMyselfFlag = true;
|
|
|
- String jsonParam = getRequestParam(conMap);
|
|
|
- //缓存执行当前节点传参
|
|
|
- msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
- JSONObject ret = new JSONObject();
|
|
|
- ret.put("result","true");
|
|
|
- returnData = ret.toJSONString();
|
|
|
- }else if(taskNode.getCompleteBatchSort()!=1 && "3".equals(beforTask.getStatus()) && resourceBusiness.getName().contains("下料业务") && "GetServoStacker".equals(method) && "打标业务".equals(beforResourceBusiness.getName())){
|
|
|
- specialCallBackMyselfFlag = true;
|
|
|
- String jsonParam = getRequestParam(conMap);
|
|
|
- //缓存执行当前节点传参
|
|
|
- msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
- JSONObject ret = new JSONObject();
|
|
|
- ret.put("result","true");
|
|
|
- returnData = ret.toJSONString();
|
|
|
- }else{
|
|
|
- try {
|
|
|
- Thread.sleep(1000);
|
|
|
- } catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- //组装接口参数
|
|
|
- HttpHeaders headers = new HttpHeaders();
|
|
|
- headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
|
|
|
- String jsonParam = getRequestParam(conMap);
|
|
|
- //缓存执行当前节点传参
|
|
|
- msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
-
|
|
|
- //动态调用接口和新增指令执行时间
|
|
|
- log.setZoneId(zZone.getId()).setMethod(method).setExecuteTime(new Date());
|
|
|
- String instructionUrl = conMap.get("instructionUrl") + "/api/" + conMap.get("method").toString();
|
|
|
- //String instructionUrl = "127.0.0.1" + "/api/" + conMap.get("method").toString();
|
|
|
- logger.info("instructionUrl={}" ,instructionUrl);
|
|
|
- logger.info("[ECS指令发送]节点传参={}" ,jsonParam);
|
|
|
-
|
|
|
- Date endTime = new Date(); //记录结束时间
|
|
|
-
|
|
|
- logger.warn("任务下发总用时:{}秒", DateUtil.between(startTime,endTime, DateUnit.SECOND));
|
|
|
-
|
|
|
- //起点、终点缓存。
|
|
|
- Storge fstorge = conMap.get("fromStorge") == null ? null : (Storge) conMap.get("fromStorge");
|
|
|
- Storge tstorge = conMap.get("toStorge") == null ? null : (Storge) conMap.get("toStorge");
|
|
|
- if(fstorge !=null || tstorge !=null){
|
|
|
- log.setStartStorge(fstorge.getName());
|
|
|
- log.setEndStorge(tstorge.getName());
|
|
|
- }
|
|
|
- log.setRequestParam(jsonParam);
|
|
|
- log.setRequestUrl(instructionUrl);
|
|
|
- HttpEntity<String> formEntity = new HttpEntity<String>(jsonParam, headers);
|
|
|
- returnData = restTemplate.postForObject(instructionUrl, formEntity, String.class);
|
|
|
- //returnData = "{\"result\": \"true\"}";
|
|
|
+ try {
|
|
|
+ Thread.sleep(1000);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ //组装接口参数
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
|
|
|
+ String jsonParam = getRequestParam(conMap);
|
|
|
+ //缓存执行当前节点传参
|
|
|
+ msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
|
|
|
+
|
|
|
+ //动态调用接口和新增指令执行时间
|
|
|
+ log.setZoneId(zZone.getId()).setMethod(method).setExecuteTime(new Date());
|
|
|
+ String instructionUrl = conMap.get("instructionUrl") + "/api/" + conMap.get("method").toString();
|
|
|
+ //String instructionUrl = "127.0.0.1" + "/api/" + conMap.get("method").toString();
|
|
|
+ logger.info("instructionUrl={}" ,instructionUrl);
|
|
|
+ logger.info("[ECS指令发送]节点传参={}" ,jsonParam);
|
|
|
+
|
|
|
+ Date endTime = new Date(); //记录结束时间
|
|
|
+
|
|
|
+ logger.warn("任务下发总用时:{}秒", DateUtil.between(startTime,endTime, DateUnit.SECOND));
|
|
|
+
|
|
|
+ //起点、终点缓存。
|
|
|
+ Storge fstorge = conMap.get("fromStorge") == null ? null : (Storge) conMap.get("fromStorge");
|
|
|
+ Storge tstorge = conMap.get("toStorge") == null ? null : (Storge) conMap.get("toStorge");
|
|
|
+ if(fstorge !=null || tstorge !=null){
|
|
|
+ log.setStartStorge(fstorge.getName());
|
|
|
+ log.setEndStorge(tstorge.getName());
|
|
|
+ }
|
|
|
+ log.setRequestParam(jsonParam);
|
|
|
+ log.setRequestUrl(instructionUrl);
|
|
|
+ HttpEntity<String> formEntity = new HttpEntity<String>(jsonParam, headers);
|
|
|
+ //returnData = restTemplate.postForObject(instructionUrl, formEntity, String.class);
|
|
|
+ returnData = "{\"result\": \"true\"}";
|
|
|
|
|
|
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }else{
|
|
|
- logger.warn("节点{}未获取到了执行锁",taskNode.getId());
|
|
|
- log.setManual("0").setFeedback("节点"+taskNode.getId()+"未获取到了执行锁");
|
|
|
- conMap.put("result",false);
|
|
|
}
|
|
|
- } catch (BizException e) {
|
|
|
- e.printStackTrace();
|
|
|
- conMap.put("result",false);
|
|
|
- JSONObject errJsonObject = new JSONObject();
|
|
|
- errJsonObject.put("code", "exception");
|
|
|
- errJsonObject.put("msg", e.getMessage());
|
|
|
- errJsonObject.put("result","false");
|
|
|
- returnData = errJsonObject.toJSONString();
|
|
|
- logger.warn("调用接口发生异常" + e.getMessage());
|
|
|
- log.setManual("0").setFeedback("调用接口发生异常" + e.getMessage());
|
|
|
- } catch (Exception e) {
|
|
|
+ }else{
|
|
|
+ logger.warn("节点{}未获取到了执行锁",taskNode.getId());
|
|
|
+ log.setManual("0").setFeedback("节点"+taskNode.getId()+"未获取到了执行锁");
|
|
|
conMap.put("result",false);
|
|
|
-
|
|
|
- // 释放占用资源并在autolog表中增加日志,方便指令重发
|
|
|
- JSONObject errJsonObject = new JSONObject();
|
|
|
- errJsonObject.put("code", "exception");
|
|
|
- errJsonObject.put("msg", e.getMessage());
|
|
|
- errJsonObject.put("result","false");
|
|
|
- returnData = errJsonObject.toJSONString();
|
|
|
-
|
|
|
- e.printStackTrace();
|
|
|
- logger.warn("节点{},逻辑出现异常:{}" ,taskNode.getId(), e.getStackTrace());
|
|
|
- log.setManual("0").setFeedback("节点"+taskNode.getId()+"逻辑出现异常");
|
|
|
- //插入执行日志
|
|
|
- autoNodeLogMapper.updateAllById(log);
|
|
|
- } finally {
|
|
|
- logger.warn("returnData={}",returnData);
|
|
|
- JSONObject retJson = JSONObject.parseObject(returnData);
|
|
|
- if (retJson != null) {
|
|
|
- String code = retJson.getString("result").trim();
|
|
|
- String concurrency = retJson.containsKey("concurrency")? retJson.getString("concurrency").trim() : "false";
|
|
|
- if (code.equals("true")) {
|
|
|
- //回调处理
|
|
|
- log.setExeStatus("3").setEndTime(new Date()).setSendStatus("1");
|
|
|
- } else if (code.equals("false")) {
|
|
|
- //需要人工处理解决警报异常
|
|
|
- log.setManual("1").setFeedback(retJson.getString("msg"));
|
|
|
- // 释放之前占用的资源 并发延迟带来的异常不释放锁定资源
|
|
|
- if(concurrency.equals("false")) {
|
|
|
- // begin modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
|
|
|
- taskNodeService.freeLock(taskNode.getCompleteBatchNo());
|
|
|
- logger.warn("{}设备资源不通过释放节点", taskNode.getCompleteBatchNo());
|
|
|
- }
|
|
|
- conMap.put("result", false);
|
|
|
- } else if (code.equals("exception")) {
|
|
|
- //执行异常处理(无须人工处理和警报提示)
|
|
|
- log.setManual("0").setFeedback(retJson.getString("msg"));
|
|
|
- }
|
|
|
- }else{
|
|
|
- // 非人工序
|
|
|
- logger.info("节点{}名称{}类型{}",taskNode.getId(),taskNode.getNodeName(),taskNode.getInterfaceType());
|
|
|
- if (!"04".equals(taskNode.getInterfaceType())) {
|
|
|
- if((boolean)conMap.get("result")){
|
|
|
- log.setManual("0").setFeedback("节点"+taskNode.getId()+"操作响应超时");
|
|
|
- }else{
|
|
|
- //设备不在线默认存储为空
|
|
|
- log.setManual("0").setFeedback(null);
|
|
|
- }
|
|
|
+ }
|
|
|
+ } catch (BizException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ conMap.put("result",false);
|
|
|
+ JSONObject errJsonObject = new JSONObject();
|
|
|
+ errJsonObject.put("code", "exception");
|
|
|
+ errJsonObject.put("msg", e.getMessage());
|
|
|
+ errJsonObject.put("result","false");
|
|
|
+ returnData = errJsonObject.toJSONString();
|
|
|
+ logger.warn("调用接口发生异常" + e.getMessage());
|
|
|
+ log.setManual("0").setFeedback("调用接口发生异常" + e.getMessage());
|
|
|
+ } catch (Exception e) {
|
|
|
+ conMap.put("result",false);
|
|
|
+
|
|
|
+ // 释放占用资源并在autolog表中增加日志,方便指令重发
|
|
|
+ JSONObject errJsonObject = new JSONObject();
|
|
|
+ errJsonObject.put("code", "exception");
|
|
|
+ errJsonObject.put("msg", e.getMessage());
|
|
|
+ errJsonObject.put("result","false");
|
|
|
+ returnData = errJsonObject.toJSONString();
|
|
|
+
|
|
|
+ e.printStackTrace();
|
|
|
+ logger.warn("节点{},逻辑出现异常:{}" ,taskNode.getId(), e.getStackTrace());
|
|
|
+ log.setManual("0").setFeedback("节点"+taskNode.getId()+"逻辑出现异常");
|
|
|
+ //插入执行日志
|
|
|
+ autoNodeLogMapper.updateAllById(log);
|
|
|
+ } finally {
|
|
|
+ logger.warn("returnData={}",returnData);
|
|
|
+ JSONObject retJson = JSONObject.parseObject(returnData);
|
|
|
+ if (retJson != null) {
|
|
|
+ String code = retJson.getString("result").trim();
|
|
|
+ String concurrency = retJson.containsKey("concurrency")? retJson.getString("concurrency").trim() : "false";
|
|
|
+ if (code.equals("true")) {
|
|
|
+ //回调处理
|
|
|
+ log.setExeStatus("3").setEndTime(new Date()).setSendStatus("1");
|
|
|
+ } else if (code.equals("false")) {
|
|
|
+ //需要人工处理解决警报异常
|
|
|
+ log.setManual("1").setFeedback(retJson.getString("msg"));
|
|
|
+ // 释放之前占用的资源 并发延迟带来的异常不释放锁定资源
|
|
|
+ if(concurrency.equals("false")) {
|
|
|
+ // begin modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
|
|
|
+ taskNodeService.freeLock(taskNode.getCompleteBatchNo());
|
|
|
+ logger.warn("{}设备资源不通过释放节点", taskNode.getCompleteBatchNo());
|
|
|
}
|
|
|
+ conMap.put("result", false);
|
|
|
+ } else if (code.equals("exception")) {
|
|
|
+ //执行异常处理(无须人工处理和警报提示)
|
|
|
+ log.setManual("0").setFeedback(retJson.getString("msg"));
|
|
|
}
|
|
|
- if (log.getId() == null) {
|
|
|
- autoNodeLogService.save(log);
|
|
|
- } else {
|
|
|
- log.setExecuteTime(new Date());
|
|
|
- autoNodeLogService.updateAllById(log);
|
|
|
- }
|
|
|
- logger.info("specialCallBackMyselfFlag={}",specialCallBackMyselfFlag);
|
|
|
- if(specialCallBackMyselfFlag){
|
|
|
- // 打标机或恒轮上传程序特殊处理
|
|
|
- JSONObject callBackData = new JSONObject();
|
|
|
- callBackData.put("code","1");
|
|
|
- callBackData.put("msg","操作成功");
|
|
|
- callBackData.put("taskId",taskNode.getTaskId());
|
|
|
- callBackData.put("taskNodeId",taskNode.getId());
|
|
|
- String taskNodeCallbackUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.TASKNODECALLBACKURL).toString());
|
|
|
- //组装接口参数
|
|
|
- HttpHeaders headers = new HttpHeaders();
|
|
|
- headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
|
|
|
- HttpEntity<String> formEntity = new HttpEntity<String>(callBackData.toJSONString(), headers);
|
|
|
- restTemplate.postForObject(taskNodeCallbackUrl, formEntity, String.class);
|
|
|
- }
|
|
|
- if(lockFlag){
|
|
|
- lock.unlock();
|
|
|
- logger.info("节点{}名称{}释放锁",taskNode.getId(),taskNode.getNodeName());
|
|
|
- }
|
|
|
- if(!(boolean)conMap.get("result")){
|
|
|
- throw new InterruptedException("设备资源不通过,消息重新进入队尾");
|
|
|
+ }else{
|
|
|
+ // 非人工序
|
|
|
+ logger.info("节点{}名称{}类型{}",taskNode.getId(),taskNode.getNodeName(),taskNode.getInterfaceType());
|
|
|
+ if (!"04".equals(taskNode.getInterfaceType())) {
|
|
|
+ if((boolean)conMap.get("result")){
|
|
|
+ log.setManual("0").setFeedback("节点"+taskNode.getId()+"操作响应超时");
|
|
|
+ }else{
|
|
|
+ //设备不在线默认存储为空
|
|
|
+ log.setManual("0").setFeedback(null);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ if (log.getId() == null) {
|
|
|
+ autoNodeLogService.save(log);
|
|
|
+ } else {
|
|
|
+ log.setExecuteTime(new Date());
|
|
|
+ autoNodeLogService.updateAllById(log);
|
|
|
+ }
|
|
|
+ logger.info("specialCallBackMyselfFlag={}",specialCallBackMyselfFlag);
|
|
|
+ if(specialCallBackMyselfFlag){
|
|
|
+ // 打标机或恒轮上传程序特殊处理
|
|
|
+ JSONObject callBackData = new JSONObject();
|
|
|
+ callBackData.put("code","1");
|
|
|
+ callBackData.put("msg","操作成功");
|
|
|
+ callBackData.put("taskId",taskNode.getTaskId());
|
|
|
+ callBackData.put("taskNodeId",taskNode.getId());
|
|
|
+ String taskNodeCallbackUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.TASKNODECALLBACKURL).toString());
|
|
|
+ //组装接口参数
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
|
|
|
+ HttpEntity<String> formEntity = new HttpEntity<String>(callBackData.toJSONString(), headers);
|
|
|
+ restTemplate.postForObject(taskNodeCallbackUrl, formEntity, String.class);
|
|
|
+ }
|
|
|
+ if(lockFlag){
|
|
|
+ lock.unlock();
|
|
|
+ logger.info("节点{}名称{}释放锁",taskNode.getId(),taskNode.getNodeName());
|
|
|
+ }
|
|
|
+ if(!(boolean)conMap.get("result")){
|
|
|
+ throw new InterruptedException("设备资源不通过,消息重新进入队尾");
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public boolean checkRobotHand(String handType){
|
|
@@ -1139,8 +1082,8 @@ public class TaskWorkNode {
|
|
|
locationMap.put("destLocation",targetStorge.getPointId()); //机器人缓存位
|
|
|
locationMap.put("taskType",DictionaryKey.TASK_TYPE.get("CARRY"));
|
|
|
locationMap.put("mode","256");
|
|
|
- String trayCategoryType = this.getTrayCategoryType(taskNode.getId());
|
|
|
- locationMap.put("carryType",trayCategoryType);
|
|
|
+ //String trayCategoryType = this.getTrayCategoryType(taskNode.getId());
|
|
|
+ locationMap.put("carryType","1");
|
|
|
|
|
|
dataMap.put("data", locationMap);
|
|
|
dataMap.put("method", "RobotAction");
|
|
@@ -1674,7 +1617,7 @@ public class TaskWorkNode {
|
|
|
return CollectionUtil.isNotEmpty(robotList) && jqrMap.containsKey(DemoLineConstant.DEMOLINE_RJQR_ZS);
|
|
|
}else{
|
|
|
Map<String, List<ProductionresourcePosition>> jqrMap = robotList.stream().collect(groupingBy(ProductionresourcePosition::getPointId));
|
|
|
- return CollectionUtil.isNotEmpty(robotList) && robotList.size() > 1 && jqrMap.containsKey(DemoLineConstant.DEMOLINE_RJQR_ZS);
|
|
|
+ return CollectionUtil.isNotEmpty(robotList);
|
|
|
}
|
|
|
}
|
|
|
return true;
|