package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.OrderService; import com.zy.asrs.service.WrkDetlService; import com.zy.asrs.service.WrkMastService; import com.zy.common.constant.AgvApiConstant; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author pang.jiabao * @description AGV相关定时任务处理 * @createDate 2024/10/19 10:05 */ @Slf4j @Service public class AgvHandler { @Resource private WrkMastService wrkMastService; @Resource private WrkDetlService wrkDetlService; @Resource private ApiLogService apiLogService; @Resource private OrderService orderService; /** * 出库呼叫agv接货 */ public void outboundCallAgvHandller(Integer wrkNo) { WrkMast wrkMast = wrkMastService.selectById(wrkNo); if (wrkMast == null) { log.error("出库呼叫agv接货,{}工作号没有找到工作档", wrkNo); return; } // 已经呼叫过agv接货则跳过 WrkMast表中ref_wrkno变量用做标识 0未呼叫,1呼叫成功 if (wrkMast.getIoType() != 101 && wrkMast.getIoType() != 103 || wrkMast.getRefWrkno() == 1) { return; } // 工作明细 List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkNo)); // 调用结果 boolean success = false; // 构造请求头 Map headers = new HashMap<>(); headers.put("Content-Type", "application/json;charset=UTF-8"); // 构造请求体 JSONObject jsonObject = new JSONObject(); jsonObject.put("trayCode", wrkMast.getBarcode()); // 托盘条码 jsonObject.put("startLocation",wrkMast.getStaNo()); // 提升机号 jsonObject.put("endLocation",wrkMast.getInvWh()); // 地码/终点货位 jsonObject.put("taskId", wrkMast.getWrkNo()); // 任务id // 保存一个订单明细的单据编号 String orderNo = ""; JSONArray jsonArray = new JSONArray(); for (WrkDetl wrkDetl : wrkDetls) { JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("num", wrkDetl.getAnfme()); // 数量 jsonObject1.put("itemId", wrkDetl.getMatnr()); // 物料ID jsonObject1.put("itemCode", wrkDetl.getModel()); // 物料Code orderNo = wrkDetl.getOrderNo(); jsonArray.add(jsonObject1); } jsonObject.put("basicList", jsonArray); // 物料列表 Order order = orderService.selectOne(new EntityWrapper().eq("order_no", orderNo)); if (order != null) { jsonObject.put("erpCode", orderNo); // 工单号 jsonObject.put("outBoundtype", order.getDocType$()); // 入出库单据类型 } String body = jsonObject.toString(); String response = ""; try { response = new HttpHandler.Builder() .setUri(AgvApiConstant.AGV_IP_PORT) .setPath(AgvApiConstant.OUTBOUND_CALL_AGV_PATH) .setHeaders(headers) .setJson(body) .build() .doPost(); if (!Cools.isEmpty(response)) { JSONObject jsonObject1 = JSONObject.parseObject(response); if ((Integer) jsonObject1.get("code") == 200) { success = true; wrkMast.setRefWrkno(1.0); wrkMastService.updateById(wrkMast); } else { log.error("出库呼叫agv接货接口异常接口失败!!!url:{};request:{};response:{}", AgvApiConstant.AGV_IP_PORT + AgvApiConstant.OUTBOUND_CALL_AGV_PATH, body, response); } } else { log.error("出库呼叫agv接货接口异常接口异常!!!url:{};request:{};response:{}", AgvApiConstant.AGV_IP_PORT + AgvApiConstant.OUTBOUND_CALL_AGV_PATH, body, response); } } catch (Exception e) { log.error("出库呼叫agv接货接口异常:{}", e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "出库呼叫agv接货", AgvApiConstant.AGV_IP_PORT + AgvApiConstant.OUTBOUND_CALL_AGV_PATH, null, "127.0.0.1", jsonObject.toJSONString(), response, success ); } catch (Exception e) { log.error("出库呼叫agv接货接口日志异常", e); } } } }