|
@@ -1,21 +1,45 @@
|
|
|
package com.github.zuihou.business.externalApi.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.github.zuihou.authority.service.common.ParameterService;
|
|
|
+import com.github.zuihou.base.R;
|
|
|
import com.github.zuihou.base.service.SuperCacheServiceImpl;
|
|
|
import com.github.zuihou.business.externalApi.dao.AgvHikOrderInfoMapper;
|
|
|
import com.github.zuihou.business.externalApi.dao.AgvOrderInfoMapper;
|
|
|
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo;
|
|
|
import com.github.zuihou.business.externalApi.entity.AgvHikOrderInfo;
|
|
|
+import com.github.zuihou.business.externalApi.entity.AgvOrderDetailInfo;
|
|
|
import com.github.zuihou.business.externalApi.entity.AgvOrderInfo;
|
|
|
+import com.github.zuihou.business.externalApi.service.AgvHikOrderDetailInfoService;
|
|
|
import com.github.zuihou.business.externalApi.service.AgvHikOrderInfoService;
|
|
|
import com.github.zuihou.business.externalApi.service.AgvOrderInfoService;
|
|
|
+import com.github.zuihou.common.constant.BizConstant;
|
|
|
import com.github.zuihou.common.constant.CacheKey;
|
|
|
+import com.github.zuihou.common.constant.ParameterKey;
|
|
|
+import com.github.zuihou.common.util.UniqueKeyGenerator;
|
|
|
+import com.github.zuihou.context.BaseContextHandler;
|
|
|
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.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.http.HttpEntity;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.client.RestTemplate;
|
|
|
+
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -30,6 +54,14 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
@Service
|
|
|
|
|
|
public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrderInfoMapper, AgvHikOrderInfo> implements AgvHikOrderInfoService {
|
|
|
+ @Autowired
|
|
|
+ private RedisTemplate<String,Object> redisTemplate;
|
|
|
+ @Autowired
|
|
|
+ private ParameterService parameterService;
|
|
|
+ @Autowired
|
|
|
+ private RestTemplate restTemplate;
|
|
|
+ @Autowired
|
|
|
+ private AgvHikOrderDetailInfoService agvHikOrderDetailInfoService;
|
|
|
|
|
|
@Override
|
|
|
protected String getRegion() {
|
|
@@ -58,4 +90,88 @@ public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrde
|
|
|
|
|
|
return agvHikOrderInfo;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R addHikTask(Map<String, String> data){
|
|
|
+ BaseContextHandler.setTenant(BizConstant.TENANT);
|
|
|
+ R ret = null;
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
+
|
|
|
+ String addAgvTaskUrl = "";
|
|
|
+ if(null==redisTemplate.opsForValue().get(ParameterKey.ADDTASK)){
|
|
|
+ addAgvTaskUrl = parameterService.getValue(ParameterKey.ADDTASK, null);
|
|
|
+ if(StringUtils.isEmpty(addAgvTaskUrl)){
|
|
|
+ ret = R.fail("agv任务创建地址未配置");
|
|
|
+ }else{
|
|
|
+ redisTemplate.opsForValue().set(ParameterKey.ADDTASK,addAgvTaskUrl);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ addAgvTaskUrl = (String)redisTemplate.opsForValue().get(ParameterKey.ADDTASK);
|
|
|
+ }
|
|
|
+ log.info("addAgvTaskUrl{}",addAgvTaskUrl);
|
|
|
+ String start = data.get("start");
|
|
|
+ String goal = data.get("goal");
|
|
|
+ String taskCode = UniqueKeyGenerator.getUniqueKeyStartWithTimestamp(64);
|
|
|
+ String reqTime = DateUtil.format(Calendar.getInstance().getTime(), DatePattern.NORM_DATETIME_MS_PATTERN);
|
|
|
+ String taskId = data.get("taskId");
|
|
|
+ String taskNodeId = data.get("taskNodeId");
|
|
|
+ // 组装创建AGV任务数据入库
|
|
|
+ AgvHikOrderInfo agvOrderInfo = new AgvHikOrderInfo();
|
|
|
+ agvOrderInfo.setStart(start);
|
|
|
+ agvOrderInfo.setStartAction("00");
|
|
|
+ agvOrderInfo.setGoal(goal);
|
|
|
+ agvOrderInfo.setGoalAction("00");
|
|
|
+ agvOrderInfo.setTaskId(taskId);
|
|
|
+ agvOrderInfo.setTaskNodeId(taskNodeId);
|
|
|
+ agvOrderInfo.setTaskCode(taskCode);
|
|
|
+ agvOrderInfo.setReqTime(reqTime);
|
|
|
+ baseMapper.insert(agvOrderInfo);
|
|
|
+
|
|
|
+ // 组装出入库申请详情数据入库,方便后续回调时数据记录及比对
|
|
|
+ String reqCode = UniqueKeyGenerator.getUniqueKeyStartWithTimestamp(32);
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ JSONArray positionCodePath = new JSONArray();
|
|
|
+ JSONObject begin = new JSONObject();
|
|
|
+ begin.put("positionCode",start);
|
|
|
+ begin.put("type","00");
|
|
|
+ JSONObject end = new JSONObject();
|
|
|
+ end.put("positionCode", goal);
|
|
|
+ end.put("type","00");
|
|
|
+ positionCodePath.add(0,begin);
|
|
|
+ positionCodePath.add(1,end);
|
|
|
+ jsonObject.put("reqCode",reqCode);
|
|
|
+ jsonObject.put("taskTyp","F01");
|
|
|
+ jsonObject.put("positionCodePath",positionCodePath.toJSONString());
|
|
|
+ jsonObject.put("taskCode",taskCode);
|
|
|
+ HttpEntity<String> addAgvTaskRequest = new HttpEntity<String>(jsonObject.toJSONString(), headers);
|
|
|
+
|
|
|
+ ResponseEntity<String> addAgvTaskEntity = restTemplate.postForEntity(addAgvTaskUrl, addAgvTaskRequest, String.class);
|
|
|
+
|
|
|
+ String retData = addAgvTaskEntity.getBody();
|
|
|
+
|
|
|
+ JSONObject returnData = JSONObject.parseObject(retData);
|
|
|
+
|
|
|
+ log.info("请求创建AGV运输任务返回{},请求参数{}",returnData,jsonObject.toString());
|
|
|
+
|
|
|
+ // 组装请求回调内容
|
|
|
+ AgvHikOrderDetailInfo agvOrderDetailInfo = new AgvHikOrderDetailInfo();
|
|
|
+ agvOrderDetailInfo.setReqCode(reqCode);
|
|
|
+ agvOrderDetailInfo.setTaskCode(taskCode);
|
|
|
+ agvOrderDetailInfo.setRequestTime(reqTime);
|
|
|
+
|
|
|
+ if("0".equals(returnData.getString("code"))){
|
|
|
+ // 解析返回的AGV任务号
|
|
|
+ String agvTaskId = String.valueOf(returnData.getJSONArray("data").get(0));
|
|
|
+ redisTemplate.opsForValue().set(agvTaskId,taskId+"-"+taskNodeId);
|
|
|
+ agvOrderInfo.setResponseCode(returnData.getString("code"));
|
|
|
+ agvOrderInfo.setResponseTime(DateUtil.format(Calendar.getInstance().getTime(), DatePattern.NORM_DATETIME_MS_PATTERN));
|
|
|
+ baseMapper.updateAllById(agvOrderInfo);
|
|
|
+ ret = R.success("AGV创建任务申请成功");
|
|
|
+ }else{
|
|
|
+ ret = R.fail(999999,"AGV创建任务申请失败");
|
|
|
+ }
|
|
|
+ agvHikOrderDetailInfoService.save(agvOrderDetailInfo);
|
|
|
+ return R.success();
|
|
|
+ }
|
|
|
}
|