From b4c6f129662be7fb14f71235817a24e15f824449 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期五, 19 十二月 2025 16:25:38 +0800
Subject: [PATCH] AGV呼叫,回传功能优化

---
 src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java |  164 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 158 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java b/src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java
index 636f52f..fceaab9 100644
--- a/src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java
@@ -1,13 +1,48 @@
 package com.zy.api.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.R;
+import com.core.exception.CoolException;
 import com.zy.api.entity.CallAgvParams;
 import com.zy.api.enums.OrderType;
 import com.zy.api.service.AgvScheduleService;
+import com.zy.asrs.entity.LocCache;
+import com.zy.asrs.entity.Task;
+import com.zy.asrs.entity.result.ForwardAGVTaskDTO;
+import com.zy.asrs.entity.result.HIKApiDTO;
+import com.zy.asrs.entity.result.HIKResultDTO;
+import com.zy.asrs.enums.LocStsType;
+import com.zy.asrs.enums.TaskIOType;
+import com.zy.asrs.enums.TaskStatusType;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.service.LocCacheService;
+import com.zy.asrs.service.TaskService;
+import com.zy.asrs.service.impl.LocCacheServiceImpl;
+import com.zy.common.constant.HIKApiConstant;
+import com.zy.common.utils.HttpHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
+
+@Slf4j
 @Service
 public class AgvScheduleServiceImpl implements AgvScheduleService {
+
+    @Autowired
+    private ApiLogService apiLogService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private LocCacheService locCacheService;
 
     /**
      * @author Ryan
@@ -16,14 +51,131 @@
      * @version 1.0
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public R callAgvCarry(CallAgvParams params) {
-        if (params.getType().equals(OrderType.ORDER_OUT.type)) {
-            //缂撳瓨鍖哄嚭搴�
-        } else if (params.getType().equals(OrderType.ORDER_IN.type)) {
-            //缂撳瓨鍖哄叆搴�
-        } else {
-
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
+        if (Objects.isNull(params.getWrkNo())) {
+            return R.error("浠诲姟鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+
+        Task task = taskService.selectOne(new EntityWrapper<Task>().eq("wrk_no", params.getWrkNo()));
+        if (Objects.isNull(task)) {
+            return R.error("浠诲姟淇℃伅涓嶅瓨鍦紒锛�");
+        }
+
+        if (Arrays.asList(TaskIOType.ALL_IN.type, TaskIOType.PICK_IN.type, TaskIOType.MERGE_IN.type)
+                .contains(task.getIoType())) {
+            // 鍏ュ簱
+            task.setWrkSts(TaskStatusType.AGV_TASK_ISSUED_IN.type);
+        } else if (Arrays.asList(TaskIOType.ALL_OUT.type, TaskIOType.PICK_OUT.type, TaskIOType.MERGE_OUT.type)
+                .contains(task.getIoType())) {
+            // 鍑哄簱
+            task.setWrkSts(TaskStatusType.AGV_TASK_ISSUED_OUT.type);
+        }
+
+        if (!taskService.updateById(task)) {
+            throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐ワ紒锛�");
+        }
+
         return R.ok();
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R callback(CallAgvParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getWrkNo())) {
+            return R.error("浠诲姟鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        Task task = taskService.selectOne(new EntityWrapper<Task>().eq("wrk_no", params.getWrkNo()));
+        if (Objects.isNull(task)) {
+            return R.error("浠诲姟淇℃伅涓嶅瓨鍦紒锛�");
+        }
+
+//        if (!Arrays.asList(TaskStatusType.AGV_TASK_ISSUED_IN.type, TaskStatusType.AGV_TASK_ISSUED_OUT.type).contains(task.getIoType())) {
+//            return R.error("");
+//        }
+//
+        if (Arrays.asList(TaskIOType.ALL_IN.type, TaskIOType.PICK_IN.type, TaskIOType.MERGE_IN.type)
+                .contains(task.getIoType())) {
+            // 鍏ュ簱
+            if (params.getStatus().equals("RUNNING")) {
+                task.setWrkSts(TaskStatusType.AGV_TASK_RUNNING_IN.type);
+            } else if (params.getStatus().equals("FINISHED")){
+                task.setWrkSts(TaskStatusType.AGV_TASK_FINISHED_IN.type);
+
+            }
+        } else if (Arrays.asList(TaskIOType.ALL_OUT.type, TaskIOType.PICK_OUT.type, TaskIOType.MERGE_OUT.type)
+                .contains(task.getIoType())) {
+            // 鍑哄簱
+            if (params.getStatus().equals("RUNNING")) {
+                task.setWrkSts(TaskStatusType.AGV_TASK_RUNNING_OUT.type);
+            } else if (params.getStatus().equals("FINISHED")){
+                task.setWrkSts(TaskStatusType.AGV_TASK_FINISHED_OUT.type);
+            }
+        }
+
+        if (!taskService.updateById(task)) {
+            throw new CoolException("鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+        }
+
+        return R.ok("鎵ц瀹屾垚 锛侊紒");
+    }
+
+    public HIKResultDTO sendAgvTask(HIKApiDTO haiKangApiDTO, String path) {
+        HIKResultDTO result = new HIKResultDTO();
+        ForwardAGVTaskDTO forwardAGVTaskParam = new ForwardAGVTaskDTO();
+        forwardAGVTaskParam.setReqCode(UUID.randomUUID().toString().replace("-", ""));
+        forwardAGVTaskParam.setClientCode("IWMS");
+        forwardAGVTaskParam.setTaskTyp(haiKangApiDTO.getTaskType());
+        forwardAGVTaskParam.setCtnrTyp(haiKangApiDTO.getCtnrType());
+        forwardAGVTaskParam.setPriority(haiKangApiDTO.getPriority());
+        List<ForwardAGVTaskDTO.PositionCodePaths> positionCodePathsList = new ArrayList<>();
+        positionCodePathsList
+                .add(new ForwardAGVTaskDTO.PositionCodePaths(haiKangApiDTO.getOrg(), haiKangApiDTO.getOrgType()));
+        positionCodePathsList
+                .add(new ForwardAGVTaskDTO.PositionCodePaths(haiKangApiDTO.getTar(), haiKangApiDTO.getTarType()));
+        forwardAGVTaskParam.setPositionCodePath(positionCodePathsList);
+        String body = JSON.toJSONString(forwardAGVTaskParam);
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(HIKApiConstant.AGV_IP)
+                    .setPath(path)
+                    .setJson(body)
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(0)) {
+                result.setSuccess(true);
+            } else {
+                result.setMessage(jsonObject.getString("message"));
+                log.error("鍙戦�乤gv浠诲姟澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", HIKApiConstant.AGV_IP + path, body, response);
+            }
+            // {"code":"1","data":"","interrupt":false,"message":"閲嶅鎻愪氦","msgErrCode":"0x3a80D012","reqCode":"fa92b49481a44627ae4d80c1400f28f6"}
+        } catch (Exception e) {
+            result.setMessage(e.getMessage());
+            log.error("鍙戦�乤gv浠诲姟寮傚父", e);
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "鍙戦�乤gv浠诲姟",
+                        HIKApiConstant.AGV_IP + path,
+                        null,
+                        "127.0.0.1",
+                        body,
+                        response,
+                        result.isSuccess());
+            } catch (Exception e) {
+                log.error("", e);
+            }
+        }
+        return result;
+    }
+
 }

--
Gitblit v1.9.1