From 9e540bc4c5659835f29c0791d5bd21f1558ce115 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期六, 19 十月 2024 13:57:31 +0800
Subject: [PATCH] 出库到底出库口呼叫agv接货

---
 src/main/java/com/zy/asrs/task/handler/AgvHandler.java   |  138 ++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/task/AgvScheduler.java         |   41 ++++++++++
 src/main/java/com/zy/asrs/entity/WrkMast.java            |    2 
 src/main/java/com/zy/common/constant/AgvApiConstant.java |   14 +++
 4 files changed, 194 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 83298e9..949cfd6 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -204,7 +204,7 @@
     @TableField("exp_time")
     private Double expTime;
 
-    @ApiModelProperty(value= "")
+    @ApiModelProperty(value= "鍑哄簱鍛煎彨agv鎺ヨ揣锛�0榛樿锛�1鍛煎彨鎴愬姛")
     @TableField("ref_wrkno")
     private Double refWrkno;
 
diff --git a/src/main/java/com/zy/asrs/task/AgvScheduler.java b/src/main/java/com/zy/asrs/task/AgvScheduler.java
new file mode 100644
index 0000000..68cea4c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/AgvScheduler.java
@@ -0,0 +1,41 @@
+package com.zy.asrs.task;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.task.handler.AgvHandler;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author pang.jiabao
+ * @description AGV鐩稿叧瀹氭椂浠诲姟
+ * @createDate 2024/10/19 9:30
+ */
+@Component
+public class AgvScheduler {
+
+    @Resource
+    private BasDevpService basDevpService;
+
+    @Resource
+    private AgvHandler agvHandller;
+
+    // 鍑哄簱鍛煎彨agv鎺ヨ揣
+    // 223鎴�123鏈夊嚭搴撶殑浠诲姟鍒欏懠鍙玜gv鎺ヨ揣
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void outboundCallAgvScheduler() {
+
+        // 鑾峰彇涓や釜绔欑偣鏈夌墿锛屾湁宸ヤ綔鍙�
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().in("dev_no", 223, 123).eq("loading", "Y").ne("wrk_no", 0));
+
+        for (BasDevp basDevp : basDevps) {
+            agvHandller.outboundCallAgvHandller(basDevp.getWrkNo());
+        }
+
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
new file mode 100644
index 0000000..15564a2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -0,0 +1,138 @@
+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;
+        }
+
+        // 宸茬粡鍛煎彨杩嘺gv鎺ヨ揣鍒欒烦杩� 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("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鎺ヨ揣鎺ュ彛寮傚父鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", AgvApiConstant.AGV_IP_PORT + AgvApiConstant.OUTBOUND_CALL_AGV_PATH, body, response);
+                }
+            } else {
+                log.error("鍑哄簱鍛煎彨agv鎺ヨ揣鎺ュ彛寮傚父鎺ュ彛寮傚父锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", 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);
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/common/constant/AgvApiConstant.java b/src/main/java/com/zy/common/constant/AgvApiConstant.java
new file mode 100644
index 0000000..7efddd6
--- /dev/null
+++ b/src/main/java/com/zy/common/constant/AgvApiConstant.java
@@ -0,0 +1,14 @@
+package com.zy.common.constant;
+
+/**
+ * @author pang.jiabao
+ * @description AGV鐩稿叧瀵规帴鍦板潃
+ * @createDate 2024/10/19 10:27
+ */
+public class AgvApiConstant {
+
+    public static final String AGV_IP_PORT = "http://192.168.99.130:80";
+
+    public static final String OUTBOUND_CALL_AGV_PATH = "/wms/api/addOutBoundType";
+
+}

--
Gitblit v1.9.1