| 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.core.common.R; | 
| 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 com.zy.system.entity.Config; | 
| import com.zy.system.service.ConfigService; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import javax.annotation.Resource; | 
| import java.math.BigDecimal; | 
| 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; | 
|   | 
|     @Autowired | 
|     private ConfigService configService; | 
|   | 
|     /** | 
|      * 出库呼叫agv接货 | 
|      */ | 
|     public void outboundCallAgvHandller(Integer wrkNo) { | 
|   | 
|         Config mesAuto = configService.selectConfigByCode("CLOSE_OUTBOUND"); | 
|         if (mesAuto != null && mesAuto.getValue().equals("0")) { | 
|             return ; | 
|         } | 
|   | 
|         WrkMast wrkMast = wrkMastService.selectById(wrkNo); | 
|         if (wrkMast == null) { | 
|             log.error("出库呼叫agv接货,{}工作号没有找到工作档", wrkNo); | 
|             return; | 
|         } | 
|         if (wrkMast.getInvWh() == null) { | 
|             log.error("出库站点为空,{}", wrkNo); | 
|             return; | 
|         } | 
|   | 
|         // 已经呼叫过agv接货则跳过 WrkMast表中ref_wrkno变量用做标识 0未呼叫,1呼叫成功 | 
|         if (wrkMast.getIoType() != 101 && wrkMast.getIoType() != 103 || wrkMast.getRefWrkno() == 1) { | 
|             return; | 
|         } | 
|   | 
|         // 工作明细 | 
|         List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); | 
|   | 
|         // 调用结果 | 
|         boolean success = false; | 
|   | 
|         // 构造请求头 | 
|         Map<String, Object> 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 | 
|         jsonObject.put("outBoundtype", "2.1.2.1原料/半成品出库"); | 
|         //jsonObject.put("erpCode", wrkDetls.get(0).getOrderNo()); | 
|         // 保存一个订单明细的单据编号 | 
|         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<Order>().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 (jsonObject1.get("code") != null && jsonObject1.get("code").equals("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); | 
|             } | 
|         } | 
|     } | 
| } |