From d0b25091a0c2dbef45299e152078f858d6d4039e Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 28 一月 2026 15:07:36 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java |   98 ++++++++++++++++++++++++++----------------------
 1 files changed, 53 insertions(+), 45 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index 6dbea83..06c0cf1 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -4,10 +4,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.zy.acs.common.constant.RedisConstant;
-import com.zy.acs.common.domain.AgvAction;
-import com.zy.acs.common.domain.AgvActionItem;
-import com.zy.acs.common.domain.AgvProtocol;
-import com.zy.acs.common.domain.BaseResult;
+import com.zy.acs.common.domain.*;
 import com.zy.acs.common.domain.protocol.*;
 import com.zy.acs.common.domain.protocol.action.*;
 import com.zy.acs.common.enums.*;
@@ -252,23 +249,18 @@
                         , (task, agvNo, sta) -> {
                             Long agvId = agvService.getAgvId(agvNo);
 
-//                            List<Travel> travelList = travelService.list(new LambdaQueryWrapper<Travel>()
-//                                    .eq(Travel::getAgvId, agvId)
-//                                    .eq(Travel::getState, TravelStateType.RUNNING.toString())
-//                                    .orderByDesc(Travel::getCreateTime));
-//                            if (Cools.isEmpty(travelList)) {
-//                                throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel");
+                            Travel travel = travelService.findRunningTravel(agvId);
+                            if (null == travel) {
+                                throw new CoolException("[Agv:" + agvNo + "] allocate inbound failed: no roller waiting travel");
+                            }
+
+                            // curr segment
+                            Segment currSeg = segmentService.getCurrWaitingSeg(travel.getId(), agvId);
+//                            if (null == currSeg) {
+//                                currSeg = segmentService.getCurrRunningSeg(travel.getId(), agvId, null);
 //                            }
-//                            Travel travel = travelList.get(0);
-//
-//                            List<Segment> currSegments = segmentService.list(new LambdaQueryWrapper<Segment>()
-//                                    .eq(Segment::getAgvId, agvId)
-//                                    .eq(Segment::getTravelId, travel.getId())
-//                            );
-                            // load segment
-                            Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
                             if (null == currSeg) {
-                                throw new BusinessException("[Agv:" + agvNo + "] allocate inbound failed: no roller waiting segment");
+                                throw new CoolException("[Agv:" + agvNo + "] allocate inbound failed: no waiting segment");
                             }
 
                             // get backpack lev
@@ -364,7 +356,6 @@
 
                             // DEST-only sort
                             destPosList.sort((a, b) -> {
-
                                 // 涓昏酱
                                 double aFirst = a.getFirstWeight(sameGroupXy);
                                 double bFirst = b.getFirstWeight(sameGroupXy);
@@ -382,11 +373,10 @@
 
                             // get placeSeg serial
                             int placeSegSerial;
-                            // query placeSeg idx
                             int idx = -1;
                             for (int i = 0; i < destPosList.size(); i++) {
-                                if (Objects.equals(destPosList.get(i).getCodeId(), newDto.getCodeId())
-                                        && Objects.equals(destPosList.get(i).getTaskId(), newDto.getTaskId())) {
+                                if (Objects.equals(destPosList.get(i).getTaskId(), newDto.getTaskId())
+                                 && Objects.equals(destPosList.get(i).getCodeId(), newDto.getCodeId())) {
                                     idx = i;
                                     break;
                                 }
@@ -493,7 +483,7 @@
         try {
             // valid -----------------------------------------------
             Agv agv = agvService.getById(agvId);
-            if (!agvService.judgeEnable(agv.getId(), false)) {
+            if (!agvService.judgeEnable(agv.getId())) {
                 return;
             }
             if (!Cools.isEmpty(taskService.selectInSts(agvId, TaskStsType.ASSIGN, TaskStsType.PROGRESS))) {
@@ -902,6 +892,8 @@
             long actionPrepareSts = ActionStsType.PREPARE.val();
 //            JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class);
             int angleOffsetVal = configService.getVal("mapAngleOffsetVal", Integer.class);
+//            Double defaultShelfDepth = configService.getVal("defaultShelfDepth", Double.class);
+//            defaultShelfDepth = Optional.ofNullable(defaultShelfDepth).orElse((double) 0);
             String agvNo = agvService.getAgvNo(agvId);
 //            if (!agvService.judgeEnable(agvId)) {
 //                throw new CoolException("AGV[" + agvNo + "]褰撳墠涓嶅彲鐢�...");
@@ -1178,7 +1170,7 @@
                                 ActionTypeType.ReadyTakeFromShelvesLoc.desc,    // 鍚嶇О
                                 (double) agvDirectionType.val,    // 灞炴�у��
                                 lastCode.getData(),    // 鍦伴潰鐮�
-                                String.valueOf(oriLoc.getOffset()),   // 鍔ㄤ綔鍙傛暟
+                                JSON.toJSONString(new HeightDepthDto(oriLoc.getOffset())),   // 鍔ㄤ綔鍙傛暟
                                 ActionTypeType.ReadyTakeFromShelvesLoc.val(),    // 鍔ㄤ綔绫诲瀷
                                 actionPrepareSts,    // 鍔ㄤ綔杩涘害
                                 agvId,    // AGV
@@ -1241,7 +1233,7 @@
                                 ActionTypeType.ReadyReleaseToShelvesLoc.desc,    // 鍚嶇О
                                 (double) agvDirectionType.val,    // 灞炴�у��
                                 lastCode.getData(),    // 鍦伴潰鐮�
-                                String.valueOf(destLoc.getOffset()),   // 鍔ㄤ綔鍙傛暟
+                                JSON.toJSONString(new HeightDepthDto(destLoc.getOffset())),   // 鍔ㄤ綔鍙傛暟
                                 ActionTypeType.ReadyReleaseToShelvesLoc.val(),    // 鍔ㄤ綔绫诲瀷
                                 actionPrepareSts,    // 鍔ㄤ綔杩涘害
                                 agvId,    // AGV
@@ -1286,7 +1278,7 @@
                                 ActionTypeType.ReadyTakeFromConveyorSta.desc,    // 鍚嶇О
                                 staWorkDirection,    // 灞炴�у��
                                 lastCode.getData(),    // 鍦伴潰鐮�
-                                String.valueOf(oriSta.getOffset()),   // 鍔ㄤ綔鍙傛暟
+                                JSON.toJSONString(new HeightDepthDto(oriSta.getHeight(), Optional.ofNullable(oriSta.getDepth()).orElse((double) 0))),   // 鍔ㄤ綔鍙傛暟
                                 ActionTypeType.ReadyTakeFromConveyorSta.val(),    // 鍔ㄤ綔绫诲瀷
                                 actionPrepareSts,    // 鍔ㄤ綔杩涘害
                                 agvId,    // AGV
@@ -1369,7 +1361,7 @@
                                 ActionTypeType.ReadyReleaseToConveyorSta.desc,    // 鍚嶇О
                                 staWorkDirection,    // 灞炴�у��
                                 lastCode.getData(),    // 鍦伴潰鐮�
-                                String.valueOf(destSta.getOffset()),   // 鍔ㄤ綔鍙傛暟
+                                JSON.toJSONString(new HeightDepthDto(destSta.getHeight(), Optional.ofNullable(destSta.getDepth()).orElse((double) 0))),   // 鍔ㄤ綔鍙傛暟
                                 ActionTypeType.ReadyReleaseToConveyorSta.val(),    // 鍔ㄤ綔绫诲瀷
                                 actionPrepareSts,    // 鍔ㄤ綔杩涘害
                                 agvId,    // AGV
@@ -1642,14 +1634,22 @@
                         agvAction.add(new AgvActionItem<>(ReadyTakeFromShelvesLoc.class)
                                 .setVal(action.getVal().intValue())
                                 .setQrCode(action.getCode())
-                                .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
+                                .bodySync((body) -> {
+                                    HeightDepthDto heightDepthDto = JSON.parseObject(action.getParams(), HeightDepthDto.class);
+                                    body.setHeight(heightDepthDto.getHeight());
+                                    body.setDepth(heightDepthDto.getDepth());
+                                })
                         );
                         break;
                     case ReadyTakeFromConveyorSta:
                         agvAction.add(new AgvActionItem<>(ReadyTakeFromConveyorSta.class)
                                 .setVal(action.getVal().intValue())
                                 .setQrCode(action.getCode())
-                                .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
+                                .bodySync((body) -> {
+                                    HeightDepthDto heightDepthDto = JSON.parseObject(action.getParams(), HeightDepthDto.class);
+                                    body.setHeight(heightDepthDto.getHeight());
+                                    body.setDepth(heightDepthDto.getDepth());
+                                })
                         );
                         break;
                     case ReadyTakeFromAgvSite:
@@ -1663,21 +1663,22 @@
                         agvAction.add(new AgvActionItem<>(ReadyReleaseToShelvesLoc.class)
                                 .setVal(action.getVal().intValue())
                                 .setQrCode(action.getCode())
-                                .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
-                        );
-                        break;
-                    case LoadPlatformLift:
-                        agvAction.add(new AgvActionItem<>(LoadPlatformLift.class)
-                                .setVal(action.getVal().intValue())
-                                .setQrCode(action.getCode())
-                                .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
+                                .bodySync((body) -> {
+                                    HeightDepthDto heightDepthDto = JSON.parseObject(action.getParams(), HeightDepthDto.class);
+                                    body.setHeight(heightDepthDto.getHeight());
+                                    body.setDepth(heightDepthDto.getDepth());
+                                })
                         );
                         break;
                     case ReadyReleaseToConveyorSta:
                         agvAction.add(new AgvActionItem<>(ReadyReleaseToConveyorSta.class)
                                 .setVal(action.getVal().intValue())
                                 .setQrCode(action.getCode())
-                                .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
+                                .bodySync((body) -> {
+                                    HeightDepthDto heightDepthDto = JSON.parseObject(action.getParams(), HeightDepthDto.class);
+                                    body.setHeight(heightDepthDto.getHeight());
+                                    body.setDepth(heightDepthDto.getDepth());
+                                })
                         );
                         break;
                     case ReadyReleaseToAgvSite:
@@ -1685,6 +1686,13 @@
                                 .setVal(action.getVal().intValue())
                                 .setQrCode(action.getCode())
                                 .bodySync(body -> body.setDepth((short) Double.parseDouble(action.getParams())))
+                        );
+                        break;
+                    case LoadPlatformLift:
+                        agvAction.add(new AgvActionItem<>(LoadPlatformLift.class)
+                                .setVal(action.getVal().intValue())
+                                .setQrCode(action.getCode())
+                                .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
                         );
                         break;
                     case FinishPath:
@@ -1837,7 +1845,7 @@
                 Code code = codeService.getCacheByData(agv_06_up.getQrCode());
 
                 // query current segment
-                Segment currSeg = segmentService.getCurrRunningSeg(agv.getId(), code.getId());
+                Segment currSeg = segmentService.getCurrRunningSeg(null, agv.getId(), code.getId());
                 if (null == currSeg) {
                     log.error("failed to find curr segment [{}]", agv.getUuid());
                 } else {
@@ -1861,7 +1869,7 @@
                                 // load from sta
                                 sta = staService.getById(currTask.getOriSta());
                                 // reserve to be waiting
-                                if (!staReserveService.waitingStaReserve(sta, currTask, 1, StaReserveType.OUT)) {
+                                if (!staReserveService.waitingStaReserve(sta, currTask, currSeg, 1, StaReserveType.OUT)) {
                                     break;
                                 }
                                 // convey plc valid
@@ -1870,14 +1878,14 @@
                                     staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.OUT);
                                     break;
                                 }
-                                log.info("AGV[{}] load permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
+                                log.info("AGV [{}] load permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
                                 success = true;
                                 break;
                             case DEST_STA:
                                 // place to sta
                                 sta = staService.getById(currTask.getDestSta());
                                 // reserve to be waiting
-                                if (!staReserveService.waitingStaReserve(sta, currTask, 1, StaReserveType.IN)) {
+                                if (!staReserveService.waitingStaReserve(sta, currTask, currSeg, 1, StaReserveType.IN)) {
                                     break;
                                 }
                                 // convey plc valid
@@ -1886,11 +1894,11 @@
                                     staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.IN);
                                     break;
                                 }
-                                log.info("AGV[{}] unload permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
+                                log.info("AGV [{}] unload permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
                                 success = true;
                                 break;
                             default:
-                                log.error("agv[{}] has wrong posType [{}], segment [{}]", protocol.getAgvNo(), posType.toString(), currSeg.getId());
+                                log.error("AGV [{}] has wrong posType [{}], segment [{}]", protocol.getAgvNo(), posType.toString(), currSeg.getId());
                                 break;
                         }
                     }

--
Gitblit v1.9.1