From 6166c4551aa61019413713e8f2ce1aa626dec971 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 01 四月 2025 13:50:07 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java     |  158 ++++++++++++++++++++++++-------
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Sta.java           |   56 +----------
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/ActionTypeType.java |    4 
 version/db/jbly/20250401/dual.sql                                                 |   12 ++
 zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvDirectionType.java         |    1 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java      |   16 +++
 6 files changed, 159 insertions(+), 88 deletions(-)

diff --git a/version/db/jbly/20250401/dual.sql b/version/db/jbly/20250401/dual.sql
new file mode 100644
index 0000000..34a946c
--- /dev/null
+++ b/version/db/jbly/20250401/dual.sql
@@ -0,0 +1,12 @@
+INSERT INTO man_sta_sts (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (15, 'IDLE', '绌洪棽', 1, 0, 2, 41, '2023-06-09 02:11:08', 41, '2023-06-09 02:11:38', '');
+INSERT INTO man_sta_sts (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (16, 'STOCK', '鏈夎揣', 1, 0, 2, 41, '2023-06-09 02:11:20', 41, '2023-06-18 15:20:31', '');
+INSERT INTO man_sta_sts (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (17, 'PAKIN', '鏀捐揣棰勭害', 1, 0, null, 41, '2023-06-18 15:20:58', 41, '2023-06-18 15:20:58', '');
+INSERT INTO man_sta_sts (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (18, 'PAKOUT', '鍙栬揣棰勭害', 1, 0, null, 41, '2023-06-18 15:21:08', 41, '2023-06-18 15:21:08', '');
+INSERT INTO man_sta_sts (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (19, 'DISABLED', '绂佺敤', 1, 0, null, 41, '2023-06-18 15:21:29', 41, '2023-06-18 15:21:29', '');
+INSERT INTO man_sta_sts (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (20, 'OTHER', '鍏朵粬', 1, 0, null, 41, '2023-06-21 21:17:06', 41, '2023-06-21 21:17:06', '');
+
+alter table man_sta
+    add angle varchar(255) null comment '浣滀笟瑙掑害' after offset;
+
+INSERT INTO man_action_type (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (26, 'ReadyTakeFromConveyorSta', '鍑嗗浠庤緭閫佺嚎鍙栬揣', 1, 0, null, 41, '2023-06-09 19:41:10', 41, '2023-06-09 19:41:10', null);
+INSERT INTO man_action_type (id, uuid, name, status, deleted, tenant_id, create_by, create_time, update_by, update_time, memo) VALUES (27, 'ReadyReleaseToConveyorSta', '鍑嗗寰�杈撻�佺嚎鏀捐揣', 1, 0, null, 41, '2023-06-09 19:41:10', 41, '2023-06-09 19:41:10', null);
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvDirectionType.java b/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvDirectionType.java
index 26ea410..7454ec5 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvDirectionType.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvDirectionType.java
@@ -4,6 +4,7 @@
 
     LEFT(1),
     RIGHT(2),
+    FORWARD(0),
     ;
 
     public int val;
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 e49c524..99f715d 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
@@ -866,28 +866,11 @@
                         // 妫�楠屾柟鍚�
                         if (!lastDirection.equals(workDirection)) {
                             throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
-                            // turn
-//                            actionList.add(new Action(
-//                                    null,    // 缂栧彿
-//                                    task.getBusId(),    // 鎬荤嚎
-//                                    task.getId(),    // 浠诲姟
-//                                    null,    // 鍔ㄤ綔鍙�
-//                                    null,    // 浼樺厛绾�
-//                                    ActionTypeType.TurnCorner.desc,    // 鍚嶇О
-//                                    mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D,    // 灞炴�у��
-//                                    lastCode.getData(),    // 鍦伴潰鐮�
-//                                    String.valueOf(workDirection),   // 鍔ㄤ綔鍙傛暟
-//                                    ActionTypeType.TurnCorner.val(),    // 鍔ㄤ綔绫诲瀷
-//                                    actionPrepareSts,    // 鍔ㄤ綔杩涘害
-//                                    agvId,    // AGV
-//                                    now    // 宸ヤ綔鏃堕棿
-//                            ));
-//                            lastDirection = workDirection;
                         }
                         // 璐ф灦鍙栬揣
                         Loc oriLoc = locService.getById(task.getOriLoc());
                         // 璁$畻宸﹀彸鏂瑰悜
-                        agvDirectionType = mapService.calculateAgvWorkDirection(oriLoc, lastCode);
+                        agvDirectionType = mapService.calculateAgvWorkDirectionByShelf(oriLoc, lastCode);
                         actionList.add(new Action(
                                 null,    // 缂栧彿
                                 task.getBusId(),    // 鎬荤嚎
@@ -925,23 +908,6 @@
                         // 妫�楠屾柟鍚�
                         if (!lastDirection.equals(workDirection)) {
                             throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
-//                            // turn
-//                            actionList.add(new Action(
-//                                    null,    // 缂栧彿
-//                                    task.getBusId(),    // 鎬荤嚎
-//                                    task.getId(),    // 浠诲姟
-//                                    null,    // 鍔ㄤ綔鍙�
-//                                    null,    // 浼樺厛绾�
-//                                    ActionTypeType.TurnCorner.desc,    // 鍚嶇О
-//                                    mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D,    // 灞炴�у��
-//                                    lastCode.getData(),    // 鍦伴潰鐮�
-//                                    String.valueOf(workDirection),   // 鍔ㄤ綔鍙傛暟
-//                                    ActionTypeType.TurnCorner.val(),    // 鍔ㄤ綔绫诲瀷
-//                                    actionPrepareSts,    // 鍔ㄤ綔杩涘害
-//                                    agvId,    // AGV
-//                                    now    // 宸ヤ綔鏃堕棿
-//                            ));
-//                            lastDirection = workDirection;
                         }
                         // 鏆傚瓨鐐瑰彇璐ц揣
                         actionList.add(new Action(
@@ -963,7 +929,7 @@
                         // 璐ф灦鏀捐揣
                         Loc destLoc = locService.getById(task.getDestLoc());
                         // 璁$畻宸﹀彸鏂瑰悜
-                        agvDirectionType = mapService.calculateAgvWorkDirection(destLoc, lastCode);
+                        agvDirectionType = mapService.calculateAgvWorkDirectionByShelf(destLoc, lastCode);
                         actionList.add(new Action(
                                 null,    // 缂栧彿
                                 task.getBusId(),    // 鎬荤嚎
@@ -981,8 +947,128 @@
                         ));
                         break;
                     case ORI_STA:
+                        // 绔欑偣鍙栬揣
+                        Sta oriSta = staService.getById(task.getOriSta());
+                        Double oriStaWorkDirection = mapService.getStaAngle(oriSta, workDirection);
+                        // 妫�楠屾柟鍚�
+                        if (!lastDirection.equals(oriStaWorkDirection)) {
+                            if (!lastCode.getCornerBool()) {
+                                throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
+                            }
+                            // turn
+                            actionList.add(new Action(
+                                    null,    // 缂栧彿
+                                    task.getBusId(),    // 鎬荤嚎
+                                    task.getId(),    // 浠诲姟
+                                    null,    // 鍔ㄤ綔鍙�
+                                    null,    // 浼樺厛绾�
+                                    ActionTypeType.TurnCorner.desc,    // 鍚嶇О
+                                    mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D,    // 灞炴�у��
+                                    lastCode.getData(),    // 鍦伴潰鐮�
+                                    String.valueOf(oriStaWorkDirection),   // 鍔ㄤ綔鍙傛暟
+                                    ActionTypeType.TurnCorner.val(),    // 鍔ㄤ綔绫诲瀷
+                                    actionPrepareSts,    // 鍔ㄤ綔杩涘害
+                                    agvId,    // AGV
+                                    now    // 宸ヤ綔鏃堕棿
+                            ));
+                            lastDirection = oriStaWorkDirection;
+                        }
+                        // 璁$畻璐у弶宸ヤ綔鏂瑰悜
+                        agvDirectionType = mapService.calculateAgvWorkDirectionByStation(oriSta, lastCode);
+                        actionList.add(new Action(
+                                null,    // 缂栧彿
+                                task.getBusId(),    // 鎬荤嚎
+                                task.getId(),    // 浠诲姟
+                                null,    // 鍔ㄤ綔鍙�
+                                null,    // 浼樺厛绾�
+                                ActionTypeType.ReadyTakeFromShelvesLoc.desc,    // 鍚嶇О
+                                (double) agvDirectionType.val,    // 灞炴�у��
+                                lastCode.getData(),    // 鍦伴潰鐮�
+                                String.valueOf(oriSta.getOffset()),   // 鍔ㄤ綔鍙傛暟
+                                ActionTypeType.ReadyTakeFromShelvesLoc.val(),    // 鍔ㄤ綔绫诲瀷
+                                actionPrepareSts,    // 鍔ㄤ綔杩涘害
+                                agvId,    // AGV
+                                now    // 宸ヤ綔鏃堕棿
+                        ));
+                        // 鏆傚瓨鐐规斁璐�
+                        assert backpackType != null;
+                        actionList.add(new Action(
+                                null,    // 缂栧彿
+                                task.getBusId(),    // 鎬荤嚎
+                                task.getId(),    // 浠诲姟
+                                null,    // 鍔ㄤ綔鍙�
+                                null,    // 浼樺厛绾�
+                                ActionTypeType.ReadyReleaseToAgvSite.desc,    // 鍚嶇О
+                                (double) backpackType.lev,    // 灞炴�у��
+                                lastCode.getData(),    // 鍦伴潰鐮�
+                                String.valueOf(backpackType.height),   // 鍔ㄤ綔鍙傛暟
+                                ActionTypeType.ReadyReleaseToAgvSite.val(),    // 鍔ㄤ綔绫诲瀷
+                                actionPrepareSts,    // 鍔ㄤ綔杩涘害
+                                agvId,    // AGV
+                                now    // 宸ヤ綔鏃堕棿
+                        ));
                         break;
                     case DEST_STA:
+                        // 绔欑偣鏀捐揣
+                        Sta destSta = staService.getById(task.getDestSta());
+                        Double destStaWorkDirection = mapService.getStaAngle(destSta, workDirection);
+                        // 妫�楠屾柟鍚�
+                        if (!lastDirection.equals(destStaWorkDirection)) {
+                            if (!lastCode.getCornerBool()) {
+                                throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
+                            }
+                            // turn
+                            actionList.add(new Action(
+                                    null,    // 缂栧彿
+                                    task.getBusId(),    // 鎬荤嚎
+                                    task.getId(),    // 浠诲姟
+                                    null,    // 鍔ㄤ綔鍙�
+                                    null,    // 浼樺厛绾�
+                                    ActionTypeType.TurnCorner.desc,    // 鍚嶇О
+                                    mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D,    // 灞炴�у��
+                                    lastCode.getData(),    // 鍦伴潰鐮�
+                                    String.valueOf(destStaWorkDirection),   // 鍔ㄤ綔鍙傛暟
+                                    ActionTypeType.TurnCorner.val(),    // 鍔ㄤ綔绫诲瀷
+                                    actionPrepareSts,    // 鍔ㄤ綔杩涘害
+                                    agvId,    // AGV
+                                    now    // 宸ヤ綔鏃堕棿
+                            ));
+                            lastDirection = destStaWorkDirection;
+                        }
+                        // 鏆傚瓨鐐瑰彇璐�
+                        assert backpackType != null;
+                        actionList.add(new Action(
+                                null,    // 缂栧彿
+                                task.getBusId(),    // 鎬荤嚎
+                                task.getId(),    // 浠诲姟
+                                null,    // 鍔ㄤ綔鍙�
+                                null,    // 浼樺厛绾�
+                                ActionTypeType.ReadyTakeFromAgvSite.desc,    // 鍚嶇О
+                                (double) backpackType.lev,    // 灞炴�у��
+                                lastCode.getData(),    // 鍦伴潰鐮�
+                                String.valueOf(backpackType.height),   // 鍔ㄤ綔鍙傛暟
+                                ActionTypeType.ReadyTakeFromAgvSite.val(),    // 鍔ㄤ綔绫诲瀷
+                                actionPrepareSts,    // 鍔ㄤ綔杩涘害
+                                agvId,    // AGV
+                                now    // 宸ヤ綔鏃堕棿
+                        ));
+                        // 璁$畻璐у弶宸ヤ綔鏂瑰悜
+                        agvDirectionType = mapService.calculateAgvWorkDirectionByStation(destSta, lastCode);
+                        actionList.add(new Action(
+                                null,    // 缂栧彿
+                                task.getBusId(),    // 鎬荤嚎
+                                task.getId(),    // 浠诲姟
+                                null,    // 鍔ㄤ綔鍙�
+                                null,    // 浼樺厛绾�
+                                ActionTypeType.ReadyReleaseToShelvesLoc.desc,    // 鍚嶇О
+                                (double) agvDirectionType.val,    // 灞炴�у��
+                                lastCode.getData(),    // 鍦伴潰鐮�
+                                String.valueOf(destSta.getOffset()),   // 鍔ㄤ綔鍙傛暟
+                                ActionTypeType.ReadyReleaseToShelvesLoc.val(),    // 鍔ㄤ綔绫诲瀷
+                                actionPrepareSts,    // 鍔ㄤ綔杩涘害
+                                agvId,    // AGV
+                                now    // 宸ヤ綔鏃堕棿
+                        ));
                         break;
                     case TO_CHARGE:
                         // 妫�楠屾柟鍚�
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
index cb00614..1da3a4f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -12,6 +12,7 @@
 import com.zy.acs.manager.manager.entity.Code;
 import com.zy.acs.manager.manager.entity.Loc;
 import com.zy.acs.manager.manager.entity.Segment;
+import com.zy.acs.manager.manager.entity.Sta;
 import com.zy.acs.manager.manager.service.ActionService;
 import com.zy.acs.manager.manager.service.CodeService;
 import com.zy.acs.manager.system.service.ConfigService;
@@ -154,7 +155,7 @@
     }
 
     // 鍧愭爣璐ф灦闃堝�� todo:luxiaotao
-    public AgvDirectionType calculateAgvWorkDirection(Loc loc, Code code) {
+    public AgvDirectionType calculateAgvWorkDirectionByShelf(Loc loc, Code code) {
         Integer compDirect = loc.getCompDirect();
         AgvDirectionType agvDirectionType = null;
         if (compDirect == 0) {
@@ -166,6 +167,19 @@
         return agvDirectionType;
     }
 
+    public Double getStaAngle(Sta sta, Double workDirection) {
+        if (null == sta) {
+            return null;
+        }
+        if (Cools.isEmpty(sta.getAngle())) {
+            return workDirection;
+        }
+        return Double.parseDouble(sta.getAngle());
+    }
+
+    public AgvDirectionType calculateAgvWorkDirectionByStation(Sta sta, Code code) {
+        return AgvDirectionType.FORWARD;
+    }
 
     public double calculateDistance(double x1, double y1, double x2, double y2) {
         double deltaX = x2 - x1;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Sta.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Sta.java
index a2e42f6..5cdd1cc 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Sta.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Sta.java
@@ -71,6 +71,12 @@
     private Double offset;
 
     /**
+     * 浣滀笟瑙掑害
+     */
+    @ApiModelProperty(value= "浣滀笟瑙掑害")
+    private String angle;
+
+    /**
      * 鑷姩
      */
     @ApiModelProperty(value= "鑷姩")
@@ -153,56 +159,6 @@
      */
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
-
-    public Sta() {}
-
-    public Sta(String uuid,Long zoneId,String staNo,String name,Long staType,Long code,Double offset,String autoing,String loading,String inEnable,String outEnable,String zpallet,Long staSts,Integer status,Integer deleted,Long tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
-        this.uuid = uuid;
-        this.zoneId = zoneId;
-        this.staNo = staNo;
-        this.name = name;
-        this.staType = staType;
-        this.code = code;
-        this.offset = offset;
-        this.autoing = autoing;
-        this.loading = loading;
-        this.inEnable = inEnable;
-        this.outEnable = outEnable;
-        this.zpallet = zpallet;
-        this.staSts = staSts;
-        this.status = status;
-        this.deleted = deleted;
-        this.tenantId = tenantId;
-        this.createBy = createBy;
-        this.createTime = createTime;
-        this.updateBy = updateBy;
-        this.updateTime = updateTime;
-        this.memo = memo;
-    }
-
-//    Sta sta = new Sta(
-//            null,    // 缂栧彿
-//            null,    // 搴撳尯
-//            null,    // 绔欏彿
-//            null,    // 鍚嶇О
-//            null,    // 绔欑被鍨媅闈炵┖]
-//            null,    // 鏉$爜
-//            null,    // 鍋忕Щ閲�
-//            null,    // 鑷姩
-//            null,    // 鏈夌墿
-//            null,    // 鍙叆
-//            null,    // 鍙嚭
-//            null,    // 鎵樼洏鐮�
-//            null,    // 绔欑姸鎬�
-//            null,    // 鐘舵�乕闈炵┖]
-//            null,    // 鏄惁鍒犻櫎[闈炵┖]
-//            null,    // 绉熸埛
-//            null,    // 娣诲姞浜哄憳
-//            null,    // 娣诲姞鏃堕棿[闈炵┖]
-//            null,    // 淇敼浜哄憳
-//            null,    // 淇敼鏃堕棿
-//            null    // 澶囨敞
-//    );
 
     public String getZoneId$(){
         ZoneService service = SpringUtils.getBean(ZoneService.class);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/ActionTypeType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/ActionTypeType.java
index 94af12f..6aa6718 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/ActionTypeType.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/ActionTypeType.java
@@ -16,8 +16,10 @@
     StraightAheadUnturnable("宸烽亾鐩磋鍓嶈繘"), // 宸烽亾鐩磋鍓嶈繘
     StraightAheadTurnable("鐩磋鍓嶈繘"), // 	鐩磋鍓嶈繘
     ReadyTakeFromShelvesLoc("鍑嗗浠庤揣鏋跺彇璐�"), // 	鍑嗗浠庤揣鏋跺彇璐�
+    ReadyTakeFromConveyorSta("鍑嗗浠庤緭閫佺嚎鍙栬揣"), // 鍑嗗浠庤緭閫佺嚎鍙栬揣
     ReadyTakeFromAgvSite("鍑嗗浠嶢GV鏆傚瓨璐т綅鍙栬揣"), // 鍑嗗浠嶢GV鏆傚瓨璐т綅鍙栬揣
-    ReadyReleaseToShelvesLoc("鍑嗗浠庤揣鏋舵斁璐�"), // 	鍑嗗浠庤揣鏋舵斁璐�
+    ReadyReleaseToShelvesLoc("鍑嗗寰�璐ф灦鏀捐揣"), // 	鍑嗗浠庤揣鏋舵斁璐�
+    ReadyReleaseToConveyorSta("鍑嗗寰�杈撻�佺嚎鏀捐揣"), // 	鍑嗗寰�杈撻�佺嚎鏀捐揣
     ReadyReleaseToAgvSite("鍑嗗寰�AGV鏆傚瓨璐т綅鏀捐揣"), // 鍑嗗寰�AGV鏆傚瓨璐т綅鏀捐揣
     FinishPath("鏁翠釜璺緞缁撴潫"), // 	鏁翠釜璺緞缁撴潫
     DockingCharge("瀵规帴鍏呯數妗�"), // 	瀵规帴鍏呯數妗�

--
Gitblit v1.9.1