package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkDetlService; import com.zy.asrs.service.WrkMastService; import com.zy.common.constant.MesConstant; import com.zy.common.constant.OpenApiAddressConstant; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; 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 冠鸿龙南定时任务具体实现 * @createDate 2024/7/10 9:28 */ @Slf4j @Service public class GhlnHandler { @Resource private WrkMastService wrkMastService; @Resource private BasDevpService basDevpService; @Resource private WrkDetlService wrkDetlService; @Autowired private ApiLogService apiLogService; /** * 出库到达出库目标站时,调用AGV开放出库接口 */ public void sendOutboundTaskToAGV() { // 获取agv出库站点信息,并判断站点状态 BasDevp basDevp = basDevpService.selectOne(new EntityWrapper().eq("dev_no", 305)); if (basDevp != null && basDevp.getWrkNo() != 0 && basDevp.getOutEnable().equals("Y")) { // 判断是出库任务 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper().eq("wrk_no", basDevp.getWrkNo()) .eq("plt_type",0)); List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", basDevp.getWrkNo())); if (wrkMast != null && wrkMast.getIoType() == 101 && !wrkDetls.isEmpty()) { // 推送出库信息给agv sendTaskToAgv(wrkMast,wrkDetls); } } } private void pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo) { } /** * 调用AGV出库接口 * @param wrkMast 工作主档 * @param wrkDetls 工作档明细 */ private void sendTaskToAgv(WrkMast wrkMast, List wrkDetls) { // 调用结果 boolean success = false; // 构造请求头 Map headers = new HashMap<>(); headers.put("Content-Type","application/json;charset=UTF-8"); WrkDetl wrkDetl = wrkDetls.get(0); // 构造请求体 JSONObject jsonObject = new JSONObject(); jsonObject.put("TaskNo", wrkMast.getWrkNo()); // 任务号 jsonObject.put("Address", ""); // 出库口 jsonObject.put("Model", wrkDetl.getModel()); // 型号 jsonObject.put("Batch", wrkDetl.getBatch()); // 批次 jsonObject.put("Dimension", wrkDetl.getSpecs()); // 规格 jsonObject.put("Weight", wrkDetl.getWeight()); // 重量 jsonObject.put("ProductionDate", wrkDetl.getManuDate()); // 生产日期 String body = jsonObject.toJSONString(); String response = ""; try { response = new HttpHandler.Builder() .setUri(OpenApiAddressConstant.OUT_TO_AGV_IP) .setPath(OpenApiAddressConstant.OUT_TO_AGV_URL) .setHeaders(headers) .setJson(body) .build() .doPost(); if (!Cools.isEmpty(response)) { JSONObject jsonObject1 = JSONObject.parseObject(response); if ((Integer) jsonObject1.get("Code") == 200){ success = true; } } else { log.error("出库请求agv接口异常接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response); } } catch (Exception e) { log.error("出库请求agv接口异常:{}", e.getMessage()); } finally { if (success) { wrkMast.setPltType(1); // 是否成功给agv出库接口下发过命令,避免重复请求 wrkMastService.updateById(wrkMast); } try { // 保存接口日志 apiLogService.save( "出库请求agv", MesConstant.URL + MesConstant.PAKIN_URL, null, "127.0.0.1", jsonObject.toJSONString(), response, success ); } catch (Exception e) { log.error("保存出库请求agv接口日志异常", e); } } } }