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<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
|
// 保存一个订单明细的单据编号
|
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 ((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);
|
}
|
}
|
}
|
|
}
|