浏览代码

海康agv模拟回调成功及失败

yejian 3 年之前
父节点
当前提交
0946297dd1

+ 5 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/AgvHikOrderDetailInfoService.java

@@ -7,6 +7,7 @@ import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.Future;
 
 /**
  * <p>
@@ -35,5 +36,9 @@ public interface AgvHikOrderDetailInfoService extends SuperCacheService<AgvHikOr
      */
     AgvHikOrderDetailInfo updateAgvOrderDetailInfo(AgvHikOrderDetailInfo agvHikOrderDetailInfo);
 
+    /**
+     * 异步调用,有返回值
+     */
+    void asyncCallbackTask(String data);
 
 }

+ 46 - 3
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderDetailInfoServiceImpl.java

@@ -1,23 +1,31 @@
 package com.github.zuihou.business.externalApi.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.zuihou.base.service.SuperCacheServiceImpl;
 import com.github.zuihou.business.externalApi.dao.AgvHikOrderDetailInfoMapper;
-import com.github.zuihou.business.externalApi.dao.AgvOrderDetailInfoMapper;
 import com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo;
 import com.github.zuihou.business.externalApi.service.AgvHikOrderDetailInfoService;
-import com.github.zuihou.business.externalApi.service.AgvOrderDetailInfoService;
 import com.github.zuihou.common.constant.CacheKey;
+import com.github.zuihou.common.constant.ParameterKey;
 import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
 import com.github.zuihou.injection.annonation.InjectionResult;
 import com.github.zuihou.utils.BeanPlusUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
 
-import java.util.List;
+import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.Future;
 
 /**
  * <p>
@@ -33,6 +41,9 @@ import java.util.Map;
 
 public class AgvHikOrderDetailInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrderDetailInfoMapper, AgvHikOrderDetailInfo> implements AgvHikOrderDetailInfoService {
 
+    @Resource
+    private RestTemplate restTemplate;
+
     @Override
     protected String getRegion() {
         return CacheKey.USER;
@@ -60,4 +71,36 @@ public class AgvHikOrderDetailInfoServiceImpl extends SuperCacheServiceImpl<AgvH
         return agvHikOrderDetailInfo;
     }
 
+    @Override
+    @Async
+    public void asyncCallbackTask(String data){
+        // sleep10秒
+        log.info("异步模拟agv回到参数data=",data);
+        try {
+            Thread.sleep(10000);
+            // 组装数据模拟agv任务完成返回
+            JSONObject jsonObject = JSONObject.parseObject(data);
+            String taskCode = jsonObject.getString("taskCode");
+            if(Long.valueOf(taskCode) % 10 == 1){
+                jsonObject.put("method","end");
+                jsonObject.put("code","999999");
+                jsonObject.put("msg","false");
+            }else{
+                jsonObject.put("method","end");
+                jsonObject.put("code","0");
+                jsonObject.put("msg","success");
+            }
+
+
+            // 组装参数发送至agv回调接口
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
+
+            HttpEntity<String> formEntity = new HttpEntity<String>(jsonObject.toJSONString(),headers);
+            String returnData = restTemplate.postForObject("http://localhost:8760/api/authority/agv/agvCallbackService/agvCallback",formEntity, String.class);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
 }

+ 12 - 6
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderInfoServiceImpl.java

@@ -112,7 +112,7 @@ public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrde
         log.info("addAgvTaskUrl{}",addAgvTaskUrl);
         String start = data.get("start");
         String goal = data.get("goal");
-        String taskCode = UniqueKeyGenerator.getUniqueKeyStartWithTimestamp(64);
+        String taskCode = UniqueKeyGenerator.getUniqueKeyStartWithTimestamp(17);
         String reqTime = DateUtil.format(Calendar.getInstance().getTime(), DatePattern.NORM_DATETIME_MS_PATTERN);
         String taskId = data.get("taskId");
         String taskNodeId = data.get("taskNodeId");
@@ -122,6 +122,7 @@ public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrde
         agvOrderInfo.setStartAction("00");
         agvOrderInfo.setGoal(goal);
         agvOrderInfo.setGoalAction("00");
+        agvOrderInfo.setTaskTyp("F01");
         agvOrderInfo.setTaskId(taskId);
         agvOrderInfo.setTaskNodeId(taskNodeId);
         agvOrderInfo.setTaskCode(taskCode);
@@ -145,12 +146,17 @@ public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrde
         jsonObject.put("positionCodePath",positionCodePath.toJSONString());
         jsonObject.put("taskCode",taskCode);
         HttpEntity<String> addAgvTaskRequest = new HttpEntity<String>(jsonObject.toJSONString(), headers);
+        agvHikOrderDetailInfoService.asyncCallbackTask(jsonObject.toJSONString());
+//        ResponseEntity<String> addAgvTaskEntity = restTemplate.postForEntity(addAgvTaskUrl, addAgvTaskRequest, String.class);
 
-        ResponseEntity<String> addAgvTaskEntity = restTemplate.postForEntity(addAgvTaskUrl, addAgvTaskRequest, String.class);
+//        String retData = addAgvTaskEntity.getBody();
 
-        String retData = addAgvTaskEntity.getBody();
-
-        JSONObject returnData = JSONObject.parseObject(retData);
+//        JSONObject returnData = JSONObject.parseObject(retData);
+        JSONObject returnData = new JSONObject();
+        returnData.put("code","0");
+        returnData.put("message","成功");
+        returnData.put("reqCode",reqCode);
+        returnData.put("data",taskCode);
 
         log.info("请求创建AGV运输任务返回{},请求参数{}",returnData,jsonObject.toString());
 
@@ -162,7 +168,7 @@ public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrde
 
         if("0".equals(returnData.getString("code"))){
             // 解析返回的AGV任务号
-            String agvTaskId = String.valueOf(returnData.getJSONArray("data").get(0));
+            String agvTaskId = String.valueOf(returnData.getString("data"));
             redisTemplate.opsForValue().set(agvTaskId,taskId+"-"+taskNodeId);
             agvOrderInfo.setResponseCode(returnData.getString("code"));
             agvOrderInfo.setResponseTime(DateUtil.format(Calendar.getInstance().getTime(), DatePattern.NORM_DATETIME_MS_PATTERN));

+ 2 - 2
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/HikAgvControl.java

@@ -85,7 +85,7 @@ public class HikAgvControl extends SuperController<AgvHikOrderInfoService, Long,
         }
 
         LbqWrapper<AgvHikOrderDetailInfo> wrapper = new LbqWrapper<>();
-        wrapper.eq(AgvHikOrderDetailInfo::getTaskCode, Integer.valueOf(taskCode));
+        wrapper.eq(AgvHikOrderDetailInfo::getTaskCode, taskCode);
         AgvHikOrderDetailInfo agvHikOrderDetailInfo = agvHikOrderDetailInfoService.getOne(wrapper);
         if(null != agvHikOrderDetailInfo){
             AgvHikOrderDetailInfo callbackInfo = JSONObject.parseObject(JSONObject.toJSONString(data),AgvHikOrderDetailInfo.class);
@@ -97,7 +97,7 @@ public class HikAgvControl extends SuperController<AgvHikOrderInfoService, Long,
         }
 
         LbqWrapper<AgvHikOrderInfo> agvHikOrderInfoWrapper = new LbqWrapper<AgvHikOrderInfo>();
-        agvHikOrderInfoWrapper.eq(AgvHikOrderInfo::getTaskCode, Integer.valueOf(taskCode));
+        agvHikOrderInfoWrapper.eq(AgvHikOrderInfo::getTaskCode, taskCode);
         AgvHikOrderInfo agvHikOrderInfo = agvHikOrderInfoService.getOne(agvHikOrderInfoWrapper);
 
         if("0".equals(code)){