package com.zy.api.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.R;
|
import com.core.exception.CoolException;
|
import com.zy.api.controller.params.AgvCallBackParam;
|
import com.zy.api.controller.params.AgvCarriesParam;
|
import com.zy.api.controller.params.AgvRequestParam;
|
import com.zy.api.entity.CallAgvParams;
|
import com.zy.api.enums.OrderType;
|
import com.zy.api.service.AgvScheduleService;
|
import com.zy.asrs.entity.LocCache;
|
import com.zy.asrs.entity.Task;
|
import com.zy.asrs.entity.result.ForwardAGVTaskDTO;
|
import com.zy.asrs.entity.result.HIKApiDTO;
|
import com.zy.asrs.entity.result.HIKResultDTO;
|
import com.zy.asrs.enums.LocStsType;
|
import com.zy.asrs.enums.TaskIOType;
|
import com.zy.asrs.enums.TaskStatusType;
|
import com.zy.asrs.service.ApiLogService;
|
import com.zy.asrs.service.LocCacheService;
|
import com.zy.asrs.service.TaskService;
|
import com.zy.asrs.service.impl.LocCacheServiceImpl;
|
import com.zy.common.constant.HIKApiConstant;
|
import com.zy.common.utils.HttpHandler;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.*;
|
|
@Slf4j
|
@Service
|
public class AgvScheduleServiceImpl implements AgvScheduleService {
|
|
@Autowired
|
private ApiLogService apiLogService;
|
@Autowired
|
private TaskService taskService;
|
@Autowired
|
private LocCacheService locCacheService;
|
|
/**
|
* @author Ryan
|
* @date 2025/11/3
|
* @description: 呼叫AGV搬运
|
* @version 1.0
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R callAgvCarry(CallAgvParams params) {
|
if (Objects.isNull(params)) {
|
return R.error("参数不能为空!!");
|
}
|
if (Objects.isNull(params.getWrkNo())) {
|
return R.error("任务号不能为空!!");
|
}
|
|
Task task = taskService.selectOne(new EntityWrapper<Task>().eq("wrk_no", params.getWrkNo()));
|
if (Objects.isNull(task)) {
|
return R.error("任务信息不存在!!");
|
}
|
|
if (Arrays.asList(TaskIOType.ALL_IN.type, TaskIOType.PICK_IN.type, TaskIOType.MERGE_IN.type)
|
.contains(task.getIoType())) {
|
// 入库
|
task.setWrkSts(TaskStatusType.AGV_TASK_ISSUED_IN.type);
|
} else if (Arrays.asList(TaskIOType.ALL_OUT.type, TaskIOType.PICK_OUT.type, TaskIOType.MERGE_OUT.type, TaskIOType.EMPTY_OUT.type)
|
.contains(task.getIoType())) {
|
// 出库
|
task.setWrkSts(TaskStatusType.AGV_TASK_ISSUED_OUT.type);
|
}
|
|
HIKResultDTO hikResultDTO = sendAgvTask(params, HIKApiConstant.TASK_SUBMIT);
|
|
if (hikResultDTO.isSuccess()) {
|
if (!taskService.updateById(task)) {
|
throw new CoolException("任务状态更新失败!!");
|
}
|
}
|
|
return R.ok();
|
}
|
|
/**
|
* 获取自定义请求头
|
*
|
* @return java.util.Map<java.lang.String, java.lang.Object>
|
* @author Ryan
|
* @date 2025/12/29 9:11
|
*/
|
private Map<String, Object> getHeaderParam() {
|
Map<String, Object> headerParam = new HashMap<>();
|
//设置请求连接的Token
|
headerParam.put("X-LR-REQUEST-ID", new Date().getTime() + "");
|
return headerParam;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R callback(AgvCallBackParam params) {
|
if (Objects.isNull(params)) {
|
return R.error("参数不能为空!!");
|
}
|
if (Objects.isNull(params.getRobotTaskCode())) {
|
return R.error("任务号不能为空!!");
|
}
|
Task task = taskService.selectOne(new EntityWrapper<Task>().eq("wrk_no", params.getRobotTaskCode()));
|
if (Objects.isNull(task)) {
|
return R.error("任务信息不存在!!");
|
}
|
|
if (Arrays.asList(TaskIOType.ALL_IN.type, TaskIOType.PICK_IN.type, TaskIOType.MERGE_IN.type)
|
.contains(task.getIoType())) {
|
// 入库
|
if (params.getExtra().getValues().getMethod().equals("start")) {
|
task.setWrkSts(TaskStatusType.AGV_TASK_RUNNING_IN.type);
|
} else if (params.getExtra().getValues().getMethod().equals("end")){
|
task.setWrkSts(TaskStatusType.AGV_TASK_FINISHED_IN.type);
|
}
|
} else if (Arrays.asList(TaskIOType.ALL_OUT.type, TaskIOType.PICK_OUT.type, TaskIOType.MERGE_OUT.type, TaskIOType.EMPTY_OUT.type)
|
.contains(task.getIoType())) {
|
// 出库p
|
if (params.getExtra().getValues().getMethod().equals("start")) {
|
task.setWrkSts(TaskStatusType.AGV_TASK_RUNNING_OUT.type);
|
} else if (params.getExtra().getValues().getMethod().equals("end")){
|
task.setWrkSts(TaskStatusType.AGV_TASK_FINISHED_OUT.type);
|
}
|
}
|
|
if (!taskService.updateById(task)) {
|
throw new CoolException("状态修改失败!!");
|
}
|
return R.ok("执行完成 !!");
|
}
|
|
public HIKResultDTO sendAgvTask(CallAgvParams param, String path) {
|
HIKResultDTO result = new HIKResultDTO();
|
AgvRequestParam requestParam = new AgvRequestParam();
|
requestParam.setTaskType(param.getTaskType());
|
List<AgvCarriesParam> agvCarriesParams = new ArrayList<>();
|
|
AgvCarriesParam carriesParam = new AgvCarriesParam();
|
carriesParam.setSeq(0);
|
carriesParam.setCode(param.getOrgSite());
|
|
agvCarriesParams.add(carriesParam);
|
|
AgvCarriesParam carriesParam2 = new AgvCarriesParam();
|
carriesParam2.setSeq(1);
|
carriesParam2.setCode(param.getTarSite());
|
|
agvCarriesParams.add(carriesParam2);
|
|
requestParam.setRobotTaskCode(param.getWrkNo());
|
requestParam.setTargetRoute(agvCarriesParams);
|
|
String body = JSON.toJSONString(requestParam);
|
String response = "";
|
try {
|
response = new HttpHandler.Builder()
|
.setUri(HIKApiConstant.AGV_IP)
|
.setPath(path)
|
.setHeaders(getHeaderParam())
|
.setJson(body)
|
.build()
|
.doPost();
|
JSONObject jsonObject = JSON.parseObject(response);
|
if (jsonObject.getString("code").equals("SUCCESS")) {
|
result.setSuccess(true);
|
} else {
|
result.setMessage(jsonObject.getString("message"));
|
log.error("发送agv任务失败!!!url:{};request:{};response:{}", HIKApiConstant.AGV_IP + path, body, response);
|
}
|
// {"code":"1","data":"","interrupt":false,"message":"重复提交","msgErrCode":"0x3a80D012","reqCode":"fa92b49481a44627ae4d80c1400f28f6"}
|
} catch (Exception e) {
|
result.setMessage(e.getMessage());
|
log.error("发送agv任务异常", e);
|
} finally {
|
try {
|
// 保存接口日志
|
apiLogService.save(
|
"发送agv任务",
|
HIKApiConstant.AGV_IP + path,
|
null,
|
"127.0.0.1",
|
body,
|
response,
|
result.isSuccess());
|
} catch (Exception e) {
|
log.error("", e);
|
}
|
}
|
return result;
|
}
|
|
}
|