|
|
|
|
@ -7,14 +7,19 @@ import com.alibaba.fastjson2.JSON; |
|
|
|
|
import com.alibaba.fastjson2.JSONObject; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.redisson.executor.TasksService; |
|
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
|
import org.springblade.desk.logistics.constant.AgvConstant; |
|
|
|
|
import org.springblade.desk.logistics.mapper.TaskExecuteRecordMapper; |
|
|
|
|
import org.springblade.desk.logistics.pojo.dto.AGVCallBackDto; |
|
|
|
|
import org.springblade.desk.logistics.pojo.entity.Location; |
|
|
|
|
import org.springblade.desk.logistics.pojo.entity.Task; |
|
|
|
|
import org.springblade.desk.logistics.pojo.entity.TaskExecuteRecord; |
|
|
|
|
import org.springblade.desk.logistics.pojo.vo.AgvSchedulingTaskVO; |
|
|
|
|
import org.springblade.desk.logistics.service.ILocationService; |
|
|
|
|
import org.springblade.desk.logistics.service.ITaskExecuteRecordService; |
|
|
|
|
import org.springblade.desk.logistics.service.ITaskService; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
@ -41,6 +46,12 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec |
|
|
|
|
@Autowired |
|
|
|
|
TaskExecuteRecordMapper taskExecuteRecordMapper; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
ITaskService taskService; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
ILocationService locationService; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* AGV小车任务状态回调接口 |
|
|
|
|
* <p> |
|
|
|
|
@ -112,8 +123,9 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec |
|
|
|
|
// 5. 任务结束状态:触发后续的东哥接口调用(待实现)
|
|
|
|
|
if (method.equals(TaskExecuteRecord.STATUS_END)) { |
|
|
|
|
log.info("任务单号{}已完成,准备调用东哥接口", agvCallBack.getTaskCode()); |
|
|
|
|
//todo: 调用东哥接口
|
|
|
|
|
// eastBrotherService.notifyTaskComplete(agvCallBack.getTaskCode());
|
|
|
|
|
|
|
|
|
|
//判断是否需要调用ctu接口
|
|
|
|
|
containerToEmpty(agvCallBack.getTaskCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 回调处理成功
|
|
|
|
|
@ -160,7 +172,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec |
|
|
|
|
// 接口地址
|
|
|
|
|
String url = "http://172.22.252.10:8181/rcms/services/rest/hikRpcService/genAgvSchedulingTask"; |
|
|
|
|
|
|
|
|
|
// 生成唯一标识(请求标识和任务标识使用相同值,便于追踪)
|
|
|
|
|
// 生成唯一标识
|
|
|
|
|
String reqCode = generateReqCode("AGVT"); |
|
|
|
|
String taskCode = reqCode; |
|
|
|
|
|
|
|
|
|
@ -247,6 +259,120 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec |
|
|
|
|
return insert > 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean containerToEmpty(String taskCode) { |
|
|
|
|
|
|
|
|
|
TaskExecuteRecord taskExecuteRecord = taskExecuteRecordMapper.selectByTaskCode(taskCode); |
|
|
|
|
if(null == taskExecuteRecord){ |
|
|
|
|
log.error("未根据taskCode查询到有效数据,请求参数:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Task task = taskService.getById(taskExecuteRecord.getTaskId()); |
|
|
|
|
if(null == task){ |
|
|
|
|
log.error("查询不到Task数据,请求参数:{}", taskExecuteRecord.getTaskId()); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
if(null == task.getLocationId()){ |
|
|
|
|
//证明不需要送到库位
|
|
|
|
|
//更新task状态 根据taskCode查询
|
|
|
|
|
task.setTaskStatus(Task.STATUS_STATION); |
|
|
|
|
boolean taskUpdate = taskService.updateById(task); |
|
|
|
|
if(!taskUpdate){ |
|
|
|
|
log.error("Task状态修改失败"); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Location location = locationService.getById(task.getLocationId()); |
|
|
|
|
|
|
|
|
|
boolean ctuSchedulingTask = genCtuSchedulingTask |
|
|
|
|
("CTu2", "1", task.getBoxBarcode(), taskExecuteRecord.getEndPos(), location.getLocationCode(), AgvConstant.EQUIPMENT_TYPE_CTU); |
|
|
|
|
|
|
|
|
|
if(!ctuSchedulingTask){ |
|
|
|
|
task.setTaskStatus(Task.STATUS_LOCATION); |
|
|
|
|
boolean taskUpdate = taskService.updateById(task); |
|
|
|
|
if(!taskUpdate){ |
|
|
|
|
log.error("Task状态修改失败"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean genCtuSchedulingTask(String taskTyp, String ctnrTyp, String ctnrCode, |
|
|
|
|
String startPos, String endPos, String type) { |
|
|
|
|
// 接口地址
|
|
|
|
|
String url = "http://172.22.252.10:8181/rcms/services/rest/hikRpcService/genAgvSchedulingTask"; |
|
|
|
|
|
|
|
|
|
// 生成唯一标识
|
|
|
|
|
String reqCode = generateReqCode("CTUT"); |
|
|
|
|
String taskCode = reqCode; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
// 构建请求参数
|
|
|
|
|
Map<String, Object> requestBody = new HashMap<>(); |
|
|
|
|
requestBody.put("reqCode", reqCode); |
|
|
|
|
requestBody.put("taskCode", taskCode); |
|
|
|
|
requestBody.put("taskTyp", taskTyp); |
|
|
|
|
requestBody.put("ctnrTyp", ctnrTyp); |
|
|
|
|
requestBody.put("ctnrCode", ctnrCode); |
|
|
|
|
|
|
|
|
|
// 构建位置路径列表
|
|
|
|
|
List<Map<String, String>> positionCodePath = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
// 起始位置
|
|
|
|
|
Map<String, String> startPosition = new HashMap<>(); |
|
|
|
|
startPosition.put("positionCode", startPos); |
|
|
|
|
startPosition.put("type", type); |
|
|
|
|
positionCodePath.add(startPosition); |
|
|
|
|
|
|
|
|
|
// 目标位置
|
|
|
|
|
Map<String, String> endPosition = new HashMap<>(); |
|
|
|
|
endPosition.put("positionCode", endPos); |
|
|
|
|
endPosition.put("type", type); |
|
|
|
|
positionCodePath.add(endPosition); |
|
|
|
|
|
|
|
|
|
requestBody.put("positionCodePath", positionCodePath); |
|
|
|
|
|
|
|
|
|
// 记录请求日志
|
|
|
|
|
log.info("调用CTU调度任务接口,请求参数:{}", JSON.toJSONString(requestBody)); |
|
|
|
|
|
|
|
|
|
// 发送POST请求
|
|
|
|
|
String responseStr = HttpUtil.post(url, JSON.toJSONString(requestBody)); |
|
|
|
|
|
|
|
|
|
// 记录响应日志
|
|
|
|
|
log.info("调用CTU调度任务接口,响应结果:{}", responseStr); |
|
|
|
|
|
|
|
|
|
if (!StringUtils.hasText(responseStr)) { |
|
|
|
|
log.error("调用CTU调度任务接口失败,响应为空"); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 解析响应
|
|
|
|
|
JSONObject response = JSON.parseObject(responseStr); |
|
|
|
|
String code = response.getString("code"); |
|
|
|
|
String message = response.getString("message"); |
|
|
|
|
|
|
|
|
|
// 判断是否调用成功(code为0表示成功)
|
|
|
|
|
if ("0".equals(code)) { |
|
|
|
|
log.info("CTU调度任务创建成功,任务类型:{},任务单号:{},容器编号:{},起始位置:{},目标位置:{}", |
|
|
|
|
taskTyp, taskCode, ctnrCode, startPos, endPos); |
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
// code不等于0,输出错误信息
|
|
|
|
|
log.error("CTU调度任务创建失败,错误码:{},错误信息:{},任务类型:{},容器编号:{},起始位置:{},目标位置:{}", |
|
|
|
|
code, message, taskTyp, ctnrCode, startPos, endPos); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("调用CTU调度任务接口异常,任务类型:{},容器编号:{},起始位置:{},目标位置:{}", |
|
|
|
|
taskTyp, ctnrCode, startPos, endPos, e); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 生成请求唯一标识 |
|
|
|
|
* @param prefix 前缀 |
|
|
|
|
|