| | |
| | | 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 |
| | |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R callAgvCarry(CallAgvParams params) { |
| | | if (params.getType().equals(OrderType.ORDER_OUT.type)) { |
| | | //缓存区出库 |
| | | } else if (params.getType().equals(OrderType.ORDER_IN.type)) { |
| | | //缓存区入库 |
| | | } else { |
| | | |
| | | 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(); |
| | | } |
| | | |
| | | @Override |
| | | public R callback(CallAgvParams params) { |
| | | //TODO 1. 搬运完成,修改 |
| | | return null; |
| | | /** |
| | | * 获取自定义请求头 |
| | | * |
| | | * @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; |
| | | } |
| | | |
| | | } |