自动化立体仓库 - WMS系统
#
zc
2024-10-28 d69e5421302ace9180c68f9ca968c1ba0d2115df
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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);
            }
        }
    }
 
}