From 583b31d46bb8abbee7410d29ca229120ee589cba Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 05 一月 2026 10:10:08 +0800
Subject: [PATCH] # version merge
---
version/db/new.sql | 93 +++++
zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolPojoType.java | 2
zy-acs-gateway/src/main/java/com/zy/acs/gateway/handler/AgvPackageServerHandler.java | 7
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/ActionTypeType.java | 1
zy-acs-flow/public/map/asr/ASRLoadedHalfBattery.svg | 48 ++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java | 1
zy-acs-common/src/main/java/com/zy/acs/common/enums/error/AgvErrorType.java | 38 ++
zy-acs-flow/src/page/code/CodeList.jsx | 33 +
zy-acs-flow/public/map/asr/ASREmptyNoBattery.svg | 47 ++
zy-acs-flow/public/model/asr/fork.fbx | 0
zy-acs-flow/public/model/asr/loader.fbx | 0
zy-acs-flow/public/map/asr/ASREmptyHalfBattery.svg | 43 ++
zy-acs-flow/public/model/asr/body.fbx | 0
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvModel.java | 88 +---
zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvActionCmdType.java | 2
zy-acs-flow/src/page/code/CodeEdit.jsx | 10
zy-acs-flow/public/map/asr/ASRLoadedFullBattery.svg | 47 ++
zy-acs-flow/src/page/agvModel/AgvModelList.jsx | 2
zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java | 8
zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/UndockingChargeAction.java | 33 +
zy-acs-flow/src/page/agvModel/AgvModelPanel.jsx | 51 +-
zy-acs-flow/src/map/insight/agv/AgvMain.jsx | 15
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Code.java | 40 --
zy-acs-flow/src/i18n/zh.js | 12
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/CodeSpinType.java | 25 +
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvModelController.java | 10
zy-acs-flow/src/page/agvModel/AgvModelEdit.jsx | 50 ++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 48 ++
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java | 2
zy-acs-flow/src/i18n/en.js | 12
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java | 6
zy-acs-flow/src/page/agvModel/AgvModelCreate.jsx | 34 +
zy-acs-gateway/src/main/java/com/zy/acs/gateway/listen/MessageListener.java | 2
zy-acs-flow/src/map/tool.js | 33 +
zy-acs-flow/src/page/code/CodeCreate.jsx | 19
zy-acs-flow/src/map/insight/agv/AgvThree.js | 22 +
zy-acs-flow/public/map/asr/ASREmptyFullBattery.svg | 42 ++
zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolType.java | 4
zy-acs-flow/public/map/asr/ASRLoadedNoBattery.svg | 52 +++
43 files changed, 829 insertions(+), 167 deletions(-)
diff --git a/version/db/new.sql b/version/db/new.sql
new file mode 100644
index 0000000..73411a2
--- /dev/null
+++ b/version/db/new.sql
@@ -0,0 +1,93 @@
+code - spin
+
+alter table man_agv_model
+ add need_undocking int(1) default 0 null comment '鏂紑鍏呯數{1:鏄�,0:鍚' after mqtt_topic;
+
+alter table man_agv_model
+ add backup_action int(1) default 0 null comment '鑳岀瘬鍔ㄤ綔{1:鏄�,0:鍚' after need_undocking;
+
+man_segment: start_time, end_time,
+
+alter table man_segment
+ add roller_waiting int(1) default 0 null comment '婊氱瓛绾跨瓑寰�' after end_time;
+man_segment_log
+
+alter table man_sta
+ add capacity int null comment '妲戒綅鏁�' after angle;
+alter table man_sta
+ add occ_cnt int null comment '鍗犵敤鏁�' after capacity;
+alter table man_sta
+ add rsv_in_cnt int null comment '棰勭害鏀捐揣閲�' after occ_cnt;
+alter table man_sta
+ add rsv_out_cnt int null comment '棰勭害鍙栬揣閲�' after rsv_in_cnt;
+
+
+
+-- auto-generated definition
+create table man_sta_reserve_log
+(
+ id bigint not null comment 'ID',
+ uuid varchar(255) null comment '鏍囪瘑',
+ sta_id bigint not null comment '绔欑偣[man_sta]',
+ task_id bigint not null comment '浠诲姟[man_task]',
+ segment_id bigint null comment '浣滀笟[man_segment]',
+ agv_id bigint not null comment 'AGV[man_agv]',
+ name varchar(255) null comment '鍚嶇О(*)',
+ type varchar(255) not null comment '棰勭害绫诲瀷',
+ qty int not null comment '棰勭害鏁伴噺',
+ state varchar(255) not null comment '棰勭害鐘舵��',
+ reason varchar(255) null comment '鍘熷洜',
+ expire_time timestamp null comment '杩囨湡鏃堕棿',
+ waiting_at timestamp null comment '寮�濮嬬瓑寰呮椂闂�',
+ confirmed_at timestamp null comment '纭瀹屾垚鏃堕棿',
+ cancelled_at timestamp null comment '鍙栨秷鏃堕棿',
+ uniq_key varchar(255) null comment '骞傜瓑閿�',
+ status int(1) default 1 not null comment '鐘舵�亄1:姝e父,0:鍐荤粨}',
+ deleted int(1) default 0 not null comment '鏄惁鍒犻櫎{1:鏄�,0:鍚',
+ tenant_id int null comment '绉熸埛[sys_tenant]',
+ create_by bigint null comment '娣诲姞浜哄憳[sys_user]',
+ create_time timestamp default CURRENT_TIMESTAMP not null comment '娣诲姞鏃堕棿',
+ update_by bigint null comment '淇敼浜哄憳[sys_user]',
+ update_time timestamp default CURRENT_TIMESTAMP null comment '淇敼鏃堕棿',
+ memo varchar(255) null comment '澶囨敞'
+)
+ charset = utf8;
+
+
+
+-- auto-generated definition
+create table man_sta_reserve_log
+(
+ id bigint not null comment 'ID',
+ uuid varchar(255) null comment '鏍囪瘑',
+ sta_id bigint not null comment '绔欑偣[man_sta]',
+ task_id bigint not null comment '浠诲姟[man_task]',
+ segment_id bigint null comment '浣滀笟[man_segment]',
+ agv_id bigint not null comment 'AGV[man_agv]',
+ name varchar(255) null comment '鍚嶇О(*)',
+ type varchar(255) not null comment '棰勭害绫诲瀷',
+ qty int not null comment '棰勭害鏁伴噺',
+ state varchar(255) not null comment '棰勭害鐘舵��',
+ reason varchar(255) null comment '鍘熷洜',
+ expire_time timestamp null comment '杩囨湡鏃堕棿',
+ waiting_at timestamp null comment '寮�濮嬬瓑寰呮椂闂�',
+ confirmed_at timestamp null comment '纭瀹屾垚鏃堕棿',
+ cancelled_at timestamp null comment '鍙栨秷鏃堕棿',
+ uniq_key varchar(255) null comment '骞傜瓑閿�',
+ status int(1) default 1 not null comment '鐘舵�亄1:姝e父,0:鍐荤粨}',
+ deleted int(1) default 0 not null comment '鏄惁鍒犻櫎{1:鏄�,0:鍚',
+ tenant_id int null comment '绉熸埛[sys_tenant]',
+ create_by bigint null comment '娣诲姞浜哄憳[sys_user]',
+ create_time timestamp default CURRENT_TIMESTAMP not null comment '娣诲姞鏃堕棿',
+ update_by bigint null comment '淇敼浜哄憳[sys_user]',
+ update_time timestamp default CURRENT_TIMESTAMP null comment '淇敼鏃堕棿',
+ memo varchar(255) null comment '澶囨敞'
+)
+ charset = utf8;
+
+-- menu
+194,menu.staReserve,55,menu.equipment,55,menu.equipment,/manager/staReserve,staReserve,null,null,0,null,AccessTime,101,null,1,1,0,null,null,2025-12-26 10:56:42,2,null
+195,Query StaReserve,194,null,null,null,null,null,null,null,1,manager:staReserve:list,null,0,null,1,1,0,null,null,null,null,null
+196,Create StaReserve,194,null,null,null,null,null,null,null,1,manager:staReserve:save,null,1,null,1,1,0,null,null,null,null,null
+197,Update StaReserve,194,null,null,null,null,null,null,null,1,manager:staReserve:update,null,2,null,1,1,0,null,null,null,null,null
+ 198,Delete StaReserve,194,null,null,null,null,null,null,null,1,manager:staReserve:remove,null,3,null,1,1,0,null,null,null,null,null
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/UndockingChargeAction.java b/zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/UndockingChargeAction.java
new file mode 100644
index 0000000..50f27c4
--- /dev/null
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/UndockingChargeAction.java
@@ -0,0 +1,33 @@
+package com.zy.acs.common.domain.protocol.action;
+
+import com.zy.acs.common.domain.protocol.IActionBody;
+import com.zy.acs.common.utils.Utils;
+import com.zy.acs.framework.common.RadixTools;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鏂紑鍏呯數妗�
+ * Created by vincent on 2023/3/23
+ */
+@Data
+public class UndockingChargeAction implements IActionBody, Serializable {
+
+ private static final long serialVersionUID = -4740059102909409953L;
+
+ private short temp;
+
+ @Override
+ public byte[] writeToBytes() {
+ return Utils.reverse(RadixTools.shortToByte(this.temp));
+ }
+
+ @Override
+ public void readFromBytes(byte[] messageBodyBytes) {
+
+ }
+
+
+
+}
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvActionCmdType.java b/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvActionCmdType.java
index cc0e71e..fe29a7e 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvActionCmdType.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvActionCmdType.java
@@ -21,6 +21,8 @@
DOCKING_CHARGE(0x30, "瀵规帴鍏呯數妗�", DockingChargeAction.class),
+ UNDOCKING_CHARGE(0x31, "鏂紑鍏呯數妗�", UndockingChargeAction.class),
+
READY_TAKE_FROM_AGV_SITE(0x75, "鍑嗗浠嶢GV鏆傚瓨璐т綅鍙栬揣", ReadyTakeFromAgvSite.class),
READY_RELEASE_FROM_AGV_SITE(0x76, "鍑嗗浠嶢GV鏆傚瓨璐т綅鏀捐揣", ReadyReleaseToAgvSite.class),
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/enums/error/AgvErrorType.java b/zy-acs-common/src/main/java/com/zy/acs/common/enums/error/AgvErrorType.java
index 6f4fbb3..6d78fe2 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/enums/error/AgvErrorType.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/enums/error/AgvErrorType.java
@@ -67,6 +67,42 @@
ERROR_0x9001("9001", "鍏呯數瀵规帴浼犳劅鍣ㄥ紓甯�"),
ERROR_0x9002("9002", "鍏呯數瀵规帴瓒呮椂"),
ERROR_0x9003("9003", "瀵规帴鍚庨暱鏃堕棿鏈厖鐢�"),
+
+ ERROR_0xA000("A000", "灏忚溅鑴辫建"),
+ ERROR_0xA001("A001", "璇荤爜瑙掑害鍋忓樊杩囧ぇ"),
+ ERROR_0xA002("A002", "閲岀▼璁℃暟鎹孩鍑�"),
+ ERROR_0xA003("A003", "IMU鏁版嵁寮傚父"),
+ ERROR_0xA004("A004", "婵�鍏夎繎璺濈鎬ュ仠"),
+ ERROR_0xA005("A005", "椹卞姩鍣ㄦ姤璀�"),
+ ERROR_0xA008("A008", "杞�0椹卞姩鍣ㄦ姤璀�"),
+ ERROR_0xA009("A009", "杞�1椹卞姩鍣ㄦ姤璀�"),
+ ERROR_0xA00A("A00A", "鎬ュ仠淇″彿瑙﹀彂"),
+ ERROR_0xA00B("A00B", "璐у弶浼犳劅鍣ㄦ娴嬪紓甯�"),
+ ERROR_0xA00C("A00C", "鏀拺鏈埌浣�"),
+ ERROR_0xA00D("A00D", "鏉剧怀妫�娴�"),
+
+ ERROR_0xA028("A028", "宸﹀彇璐ц揣鏋舵棤璐�"),
+ ERROR_0xA029("A029", "宸﹀彇璐ц溅鍐呮湁璐�"),
+ ERROR_0xA02A("A02A", "宸︽斁璐ц揣鏋舵湁璐�"),
+ ERROR_0xA02B("A02B", "宸︽斁璐ц溅鍐呮棤璐�"),
+
+ ERROR_0xA02C("A02C", "鍙冲彇璐ц揣鏋舵棤璐�"),
+ ERROR_0xA02D("A02D", "鍙冲彇璐ц溅鍐呮湁璐�"),
+ ERROR_0xA02E("A02E", "鍙虫斁璐ц揣鏋舵湁璐�"),
+ ERROR_0xA02F("A02F", "鍙虫斁璐ц溅鍐呮棤璐�"),
+
+ ERROR_0xA030("A030", "杞粨妫�娴嬪墠寮傚父"),
+ ERROR_0xA031("A031", "杞粨妫�娴嬪悗寮傚父"),
+ ERROR_0xA032("A032", "杞粨妫�娴嬪乏寮傚父"),
+ ERROR_0xA033("A033", "杞粨妫�娴嬪彸寮傚父"),
+ ERROR_0xA034("A034", "杞粨妫�娴嬩笂寮傚父"),
+
+ ERROR_0xA03C("A03C", "浠庣珯1鏈氨缁�"),
+ ERROR_0xA03D("A03D", "浠庣珯2鏈氨缁�"),
+ ERROR_0xA03E("A03E", "浠庣珯3鏈氨缁�"),
+ ERROR_0xA03F("A03F", "浠庣珯4鏈氨缁�"),
+ ERROR_0xA040("A040", "浠庣珯5鏈氨缁�"),
+ ERROR_0xA041("A041", "浠庣珯6鏈氨缁�");
;
public String sign;
@@ -82,7 +118,7 @@
return null;
}
for (AgvErrorType type : AgvErrorType.values()) {
- if (sign.equals(type.sign)) {
+ if (sign.equalsIgnoreCase(type.sign)) {
return type;
}
}
diff --git a/zy-acs-flow/public/map/asr/ASREmptyFullBattery.svg b/zy-acs-flow/public/map/asr/ASREmptyFullBattery.svg
new file mode 100644
index 0000000..4dd6d63
--- /dev/null
+++ b/zy-acs-flow/public/map/asr/ASREmptyFullBattery.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍦栧堡_1" data-name="鍦栧堡 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56.81 131.26">
+ <defs>
+ <style>
+ .cls-1, .cls-2 {
+ fill: #fff;
+ }
+
+ .cls-1, .cls-3 {
+ stroke: #fff;
+ stroke-miterlimit: 10;
+ }
+
+ .cls-4 {
+ fill: #4c4c4c;
+ }
+
+ .cls-5 {
+ fill: #4ec5d6;
+ }
+
+ .cls-3 {
+ fill: none;
+ stroke-width: 2.5px;
+ }
+
+ .cls-6 {
+ fill: #19a2ba;
+ }
+ </style>
+ </defs>
+ <path class="cls-4" d="M50.38,131.27H6.37c-3.45,0-6.25-2.81-6.25-6.28V6.97C.12,2.24,7.87.1,12.57.1h31.35c4.7,0,12.71,2.14,12.71,6.87v118.02c0,3.47-2.8,6.28-6.25,6.28Z"/>
+ <path class="cls-6" d="M1.81,85.56h53.12c.38,0,.68.31.68.68v38.88c0,2.55-2.07,4.61-4.61,4.61H5.74c-2.55,0-4.61-2.07-4.61-4.61v-38.88c0-.38.31-.68.68-.68Z"/>
+ <path class="cls-6" d="M56.72,13.56H.02v-6.79C.02,2.43,7.84.12,12.23.12h32.29c4.38,0,12.2,2.31,12.2,6.65v6.79Z"/>
+ <rect class="cls-6" x="1.54" y="81.7" width="53.67" height="3.7"/>
+ <rect class="cls-3" x="4.28" y="16.13" width="48.19" height="48.19" rx="1.63" ry="1.63"/>
+ <rect class="cls-5" x="2.75" y="66.84" width="51.24" height="28.73" rx="2.56" ry="2.56"/>
+ <g>
+ <rect class="cls-1" x="8.75" y="101.98" width="35.03" height="20.77" rx="2.32" ry="2.32"/>
+ <polygon class="cls-2" points="47.99 115.78 45.26 117.27 45.26 108.09 47.99 109.59 47.99 115.78"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/asr/ASREmptyHalfBattery.svg b/zy-acs-flow/public/map/asr/ASREmptyHalfBattery.svg
new file mode 100644
index 0000000..75dd7fa
--- /dev/null
+++ b/zy-acs-flow/public/map/asr/ASREmptyHalfBattery.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍦栧堡_1" data-name="鍦栧堡 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56.93 131.17">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #fff;
+ }
+
+ .cls-2, .cls-3 {
+ fill: none;
+ stroke: #fff;
+ stroke-miterlimit: 10;
+ }
+
+ .cls-4 {
+ fill: #4c4c4c;
+ }
+
+ .cls-5 {
+ fill: #4ec5d6;
+ }
+
+ .cls-3 {
+ stroke-width: 2.5px;
+ }
+
+ .cls-6 {
+ fill: #19a2ba;
+ }
+ </style>
+ </defs>
+ <path class="cls-4" d="M50.49,131.2H6.48c-3.45,0-6.25-2.81-6.25-6.28V6.9C.23,2.17,7.98.03,12.68.03h31.35c4.7,0,12.71,2.14,12.71,6.87v118.02c0,3.47-2.8,6.28-6.25,6.28Z"/>
+ <path class="cls-6" d="M1.92,85.49h53.12c.38,0,.68.31.68.68v38.88c0,2.55-2.07,4.61-4.61,4.61H5.85c-2.55,0-4.61-2.07-4.61-4.61v-38.88c0-.38.31-.68.68-.68Z"/>
+ <path class="cls-6" d="M56.83,13.49H.14v-6.79C.14,2.36,7.95.05,12.34.05h32.29c4.38,0,12.2,2.31,12.2,6.65v6.79Z"/>
+ <rect class="cls-6" x="1.65" y="81.62" width="53.67" height="3.7"/>
+ <rect class="cls-3" x="4.39" y="16.05" width="48.19" height="48.19" rx="1.63" ry="1.63"/>
+ <rect class="cls-5" x="2.87" y="66.77" width="51.24" height="28.73" rx="2.56" ry="2.56"/>
+ <g>
+ <rect class="cls-2" x="8.86" y="101.91" width="35.03" height="20.77" rx="2.32" ry="2.32"/>
+ <path class="cls-1" d="M11.18,101.91h18.05v20.77H11.18c-1.28,0-2.32-1.04-2.32-2.32v-16.13c0-1.28,1.04-2.32,2.32-2.32Z"/>
+ <polygon class="cls-1" points="48.11 115.39 45.38 116.89 45.38 107.71 48.11 109.2 48.11 115.39"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/asr/ASREmptyNoBattery.svg b/zy-acs-flow/public/map/asr/ASREmptyNoBattery.svg
new file mode 100644
index 0000000..3ca6ce1
--- /dev/null
+++ b/zy-acs-flow/public/map/asr/ASREmptyNoBattery.svg
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍦栧堡_1" data-name="鍦栧堡 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56.78 131.12">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #fff;
+ }
+
+ .cls-2, .cls-3 {
+ fill: none;
+ stroke: #fff;
+ stroke-miterlimit: 10;
+ }
+
+ .cls-4 {
+ fill: #4c4c4c;
+ }
+
+ .cls-5 {
+ fill: #4ec5d6;
+ }
+
+ .cls-3 {
+ stroke-width: 2.5px;
+ }
+
+ .cls-6 {
+ fill: #19a2ba;
+ }
+
+ .cls-7 {
+ fill: #ed2123;
+ }
+ </style>
+ </defs>
+ <path class="cls-4" d="M50.4,131.15H6.39c-3.45,0-6.25-2.81-6.25-6.28V6.85C.14,2.12,7.89-.02,12.59-.02h31.35c4.7,0,12.71,2.14,12.71,6.87v118.02c0,3.47-2.8,6.28-6.25,6.28Z"/>
+ <path class="cls-6" d="M1.83,85.45h53.12c.38,0,.68.31.68.68v38.88c0,2.55-2.07,4.61-4.61,4.61H5.76c-2.55,0-4.61-2.07-4.61-4.61v-38.88c0-.38.31-.68.68-.68Z"/>
+ <path class="cls-6" d="M56.74,13.44H.05v-6.79C.05,2.32,7.86,0,12.25,0h32.29c4.38,0,12.2,2.31,12.2,6.65v6.79Z"/>
+ <rect class="cls-6" x="1.56" y="81.58" width="53.67" height="3.7"/>
+ <rect class="cls-3" x="4.3" y="16.01" width="48.19" height="48.19" rx="1.63" ry="1.63"/>
+ <rect class="cls-5" x="2.78" y="66.72" width="51.24" height="28.73" rx="2.56" ry="2.56"/>
+ <g>
+ <rect class="cls-2" x="8.77" y="101.87" width="35.03" height="20.77" rx="2.32" ry="2.32"/>
+ <path class="cls-7" d="M11.04,102.37h.87v19.75h-.87c-.98,0-1.78-.8-1.78-1.78v-16.19c0-.98.8-1.78,1.78-1.78Z"/>
+ <polygon class="cls-1" points="48.01 115.35 45.28 116.84 45.28 107.66 48.01 109.16 48.01 115.35"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/asr/ASRLoadedFullBattery.svg b/zy-acs-flow/public/map/asr/ASRLoadedFullBattery.svg
new file mode 100644
index 0000000..3683b42
--- /dev/null
+++ b/zy-acs-flow/public/map/asr/ASRLoadedFullBattery.svg
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍦栧堡_1" data-name="鍦栧堡 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56.75 131.28">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #cc9d5a;
+ }
+
+ .cls-2, .cls-3 {
+ fill: #fff;
+ }
+
+ .cls-2, .cls-4 {
+ stroke: #fff;
+ stroke-miterlimit: 10;
+ }
+
+ .cls-5 {
+ fill: #4c4c4c;
+ }
+
+ .cls-6 {
+ fill: #4ec5d6;
+ }
+
+ .cls-4 {
+ fill: none;
+ stroke-width: 2.5px;
+ }
+
+ .cls-7 {
+ fill: #19a2ba;
+ }
+ </style>
+ </defs>
+ <path class="cls-5" d="M50.38,131.29H6.37c-3.45,0-6.25-2.81-6.25-6.28V6.99C.12,2.26,7.87.12,12.57.12h31.35c4.7,0,12.71,2.14,12.71,6.87v118.02c0,3.47-2.8,6.28-6.25,6.28Z"/>
+ <path class="cls-7" d="M1.81,85.58h53.12c.38,0,.68.31.68.68v38.88c0,2.55-2.07,4.61-4.61,4.61H5.74c-2.55,0-4.61-2.07-4.61-4.61v-38.88c0-.38.31-.68.68-.68Z"/>
+ <path class="cls-7" d="M56.72,13.58H.03v-6.79C.03,2.45,7.85.14,12.23.14h32.29c4.38,0,12.2,2.31,12.2,6.65v6.79Z"/>
+ <rect class="cls-7" x="1.54" y="81.72" width="53.67" height="3.7"/>
+ <rect class="cls-4" x="4.28" y="16.15" width="48.19" height="48.19" rx="1.63" ry="1.63"/>
+ <rect class="cls-6" x="2.76" y="66.86" width="51.24" height="28.73" rx="2.56" ry="2.56"/>
+ <g>
+ <rect class="cls-2" x="8.76" y="102" width="35.03" height="20.77" rx="2.32" ry="2.32"/>
+ <polygon class="cls-3" points="48 115.8 45.27 117.29 45.27 108.11 48 109.61 48 115.8"/>
+ </g>
+ <rect class="cls-1" x="7.12" y="19.22" width="42.52" height="42.52"/>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/asr/ASRLoadedHalfBattery.svg b/zy-acs-flow/public/map/asr/ASRLoadedHalfBattery.svg
new file mode 100644
index 0000000..a573e6e
--- /dev/null
+++ b/zy-acs-flow/public/map/asr/ASRLoadedHalfBattery.svg
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍦栧堡_1" data-name="鍦栧堡 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56.69 131.18">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #cc9d5a;
+ }
+
+ .cls-2 {
+ fill: #fff;
+ }
+
+ .cls-3, .cls-4 {
+ fill: none;
+ stroke: #fff;
+ stroke-miterlimit: 10;
+ }
+
+ .cls-5 {
+ fill: #4c4c4c;
+ }
+
+ .cls-6 {
+ fill: #4ec5d6;
+ }
+
+ .cls-4 {
+ stroke-width: 2.5px;
+ }
+
+ .cls-7 {
+ fill: #19a2ba;
+ }
+ </style>
+ </defs>
+ <path class="cls-5" d="M50.34,131.21H6.33c-3.45,0-6.25-2.81-6.25-6.28V6.91C.08,2.18,7.83.04,12.54.04h31.35c4.7,0,12.71,2.14,12.71,6.87v118.02c0,3.47-2.8,6.28-6.25,6.28Z"/>
+ <path class="cls-7" d="M1.78,85.51h53.12c.38,0,.68.31.68.68v38.88c0,2.55-2.07,4.61-4.61,4.61H5.71c-2.55,0-4.61-2.07-4.61-4.61v-38.88c0-.38.31-.68.68-.68Z"/>
+ <path class="cls-7" d="M56.68,13.5H0v-6.79C0,2.38,7.81.06,12.19.06h32.29c4.38,0,12.2,2.31,12.2,6.65v6.79Z"/>
+ <rect class="cls-7" x="1.5" y="81.64" width="53.67" height="3.7"/>
+ <rect class="cls-4" x="4.24" y="16.07" width="48.19" height="48.19" rx="1.63" ry="1.63"/>
+ <rect class="cls-6" x="2.72" y="66.78" width="51.24" height="28.73" rx="2.56" ry="2.56"/>
+ <g>
+ <rect class="cls-3" x="8.72" y="101.93" width="35.03" height="20.77" rx="2.32" ry="2.32"/>
+ <path class="cls-2" d="M11.04,101.93h18.05v20.77H11.04c-1.28,0-2.32-1.04-2.32-2.32v-16.13c0-1.28,1.04-2.32,2.32-2.32Z"/>
+ <polygon class="cls-2" points="47.96 115.41 45.23 116.9 45.23 107.72 47.96 109.21 47.96 115.41"/>
+ </g>
+ <rect class="cls-1" x="7.08" y="19.14" width="42.52" height="42.52"/>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/asr/ASRLoadedNoBattery.svg b/zy-acs-flow/public/map/asr/ASRLoadedNoBattery.svg
new file mode 100644
index 0000000..876db35
--- /dev/null
+++ b/zy-acs-flow/public/map/asr/ASRLoadedNoBattery.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍦栧堡_1" data-name="鍦栧堡 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56.71 131.19">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #cc9d5a;
+ }
+
+ .cls-2 {
+ fill: #fff;
+ }
+
+ .cls-3, .cls-4 {
+ fill: none;
+ stroke: #fff;
+ stroke-miterlimit: 10;
+ }
+
+ .cls-5 {
+ fill: #4c4c4c;
+ }
+
+ .cls-6 {
+ fill: #4ec5d6;
+ }
+
+ .cls-4 {
+ stroke-width: 2.5px;
+ }
+
+ .cls-7 {
+ fill: #19a2ba;
+ }
+
+ .cls-8 {
+ fill: #ed2123;
+ }
+ </style>
+ </defs>
+ <path class="cls-5" d="M50.35,131.2H6.34c-3.45,0-6.25-2.81-6.25-6.28V6.9C.09,2.17,7.84.03,12.54.03h31.35c4.7,0,12.71,2.14,12.71,6.87v118.02c0,3.47-2.8,6.28-6.25,6.28Z"/>
+ <path class="cls-7" d="M1.78,85.49h53.12c.38,0,.68.31.68.68v38.88c0,2.55-2.07,4.61-4.61,4.61H5.71c-2.55,0-4.61-2.07-4.61-4.61v-38.88c0-.38.31-.68.68-.68Z"/>
+ <path class="cls-7" d="M56.69,13.49H0v-6.79C0,2.36,7.82.05,12.2.05h32.29c4.38,0,12.2,2.31,12.2,6.65v6.79Z"/>
+ <rect class="cls-7" x="1.51" y="81.62" width="53.67" height="3.7"/>
+ <rect class="cls-4" x="4.25" y="16.05" width="48.19" height="48.19" rx="1.63" ry="1.63"/>
+ <rect class="cls-6" x="2.73" y="66.77" width="51.24" height="28.73" rx="2.56" ry="2.56"/>
+ <g>
+ <rect class="cls-3" x="8.73" y="101.91" width="35.03" height="20.77" rx="2.32" ry="2.32"/>
+ <path class="cls-8" d="M11,102.42h.87v19.75h-.87c-.98,0-1.78-.8-1.78-1.78v-16.19c0-.98.8-1.78,1.78-1.78Z"/>
+ <polygon class="cls-2" points="47.97 115.39 45.24 116.89 45.24 107.71 47.97 109.2 47.97 115.39"/>
+ </g>
+ <rect class="cls-1" x="7.09" y="19.12" width="42.52" height="42.52"/>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/model/asr/body.fbx b/zy-acs-flow/public/model/asr/body.fbx
new file mode 100644
index 0000000..5356a03
--- /dev/null
+++ b/zy-acs-flow/public/model/asr/body.fbx
Binary files differ
diff --git a/zy-acs-flow/public/model/asr/fork.fbx b/zy-acs-flow/public/model/asr/fork.fbx
new file mode 100644
index 0000000..a8cf2be
--- /dev/null
+++ b/zy-acs-flow/public/model/asr/fork.fbx
Binary files differ
diff --git a/zy-acs-flow/public/model/asr/loader.fbx b/zy-acs-flow/public/model/asr/loader.fbx
new file mode 100644
index 0000000..9393240
--- /dev/null
+++ b/zy-acs-flow/public/model/asr/loader.fbx
Binary files differ
diff --git a/zy-acs-flow/src/i18n/en.js b/zy-acs-flow/src/i18n/en.js
index 81ce4fd..d9eb20f 100644
--- a/zy-acs-flow/src/i18n/en.js
+++ b/zy-acs-flow/src/i18n/en.js
@@ -273,6 +273,7 @@
y: "y",
corner: "corner",
scale: "scale",
+ spin: "spin",
},
sta: {
uuid: "uuid",
@@ -364,6 +365,8 @@
allDirection: "all direction",
protocol: "protocol",
mqttTopic: "mqtt topic",
+ needUndocking: "need undocking",
+ backupAction: "backup action",
},
agv: {
uuid: "agv No.",
@@ -583,6 +586,15 @@
}
},
page: {
+ code: {
+ enums: {
+ spin: {
+ na: 'N/A',
+ cw: 'CW',
+ ccw: 'CCW',
+ },
+ },
+ },
loc: {
init: 'INITIALIZE',
start: {
diff --git a/zy-acs-flow/src/i18n/zh.js b/zy-acs-flow/src/i18n/zh.js
index a86346a..5a16492 100644
--- a/zy-acs-flow/src/i18n/zh.js
+++ b/zy-acs-flow/src/i18n/zh.js
@@ -273,6 +273,7 @@
y: "y",
corner: "鎷愯",
scale: "姣斾緥",
+ spin: "鏃嬭浆",
},
sta: {
uuid: "缂栧彿",
@@ -364,6 +365,8 @@
allDirection: "鍏ㄥ悜",
protocol: "鍗忚",
mqttTopic: "mqtt",
+ needUndocking: "鏂厖鍔ㄤ綔",
+ backupAction: "鑳岀瘬鍔ㄤ綔",
},
agv: {
uuid: "杞﹁締缂栧彿",
@@ -583,6 +586,15 @@
}
},
page: {
+ code: {
+ enums: {
+ spin: {
+ na: '鍏ㄥ悜',
+ cw: '椤烘椂閽�',
+ ccw: '閫嗘椂閽�',
+ },
+ },
+ },
loc: {
init: '鍒濆鍖�',
start: {
diff --git a/zy-acs-flow/src/map/insight/agv/AgvMain.jsx b/zy-acs-flow/src/map/insight/agv/AgvMain.jsx
index d15684b..0167d0a 100644
--- a/zy-acs-flow/src/map/insight/agv/AgvMain.jsx
+++ b/zy-acs-flow/src/map/insight/agv/AgvMain.jsx
@@ -63,8 +63,12 @@
loadModel('model/agv/body.fbx'),
loadModel('model/agv/loader.fbx'),
loadModel('model/agv/fork.fbx'),
+ // loadModel('model/asr/body.fbx'),
+ // loadModel('model/asr/loader.fbx'),
+ // loadModel('model/asr/fork.fbx'),
]).then(([bodyMesh, loaderMesh, forkMesh]) => {
const scaleVal = 1;
+ // const scaleVal = 0.48;
bodyMesh.scale.set(scaleVal, scaleVal, scaleVal);
loaderMesh.scale.set(scaleVal, scaleVal, scaleVal);
forkMesh.scale.set(scaleVal, scaleVal, scaleVal);
@@ -72,6 +76,9 @@
bodyMesh.position.set(55, 0, 0);;
loaderMesh.position.set(55, 150, 0);;
forkMesh.position.set(55, 165, 0);;
+ // bodyMesh.position.set(55, 0, 0);;
+ // loaderMesh.position.set(55, 150, 0);;
+ // forkMesh.position.set(55, 165, 0);;
const agvGroup = new THREE.Group();
agvGroup.add(bodyMesh);
@@ -177,13 +184,13 @@
<Grid item xs={12}>
<KeyValuePair label={translate('common.field.status')} value={info?.agvStatus} />
</Grid>
- <Grid item xs={12}>
- <KeyValuePair label={translate('table.field.agvDetail.vol')} value={info?.vol} />
- </Grid>
{/* <Grid item xs={12}>
- <KeyValuePair label={translate('table.field.agvDetail.soc')} value={info?.soc} />
+ <KeyValuePair label={translate('table.field.agvDetail.vol')} value={info?.vol} />
</Grid> */}
<Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.agvDetail.soc')} value={info?.soc} />
+ </Grid>
+ <Grid item xs={12}>
<KeyValuePair label={translate('table.field.agvDetail.agvAngle')} value={info?.direction} />
</Grid>
<Grid item xs={12}>
diff --git a/zy-acs-flow/src/map/insight/agv/AgvThree.js b/zy-acs-flow/src/map/insight/agv/AgvThree.js
index b4671bd..5f5aad9 100644
--- a/zy-acs-flow/src/map/insight/agv/AgvThree.js
+++ b/zy-acs-flow/src/map/insight/agv/AgvThree.js
@@ -121,6 +121,28 @@
this.scene.add(dirLight1);
}
+ // initLight = () => {
+ // const hemiLight = new THREE.HemisphereLight(0xffffff, 0xffffff, 8);
+ // hemiLight.color.setHSL(0.6, 1, 0.75);
+ // hemiLight.groundColor.setHSL(0.095, 1, 0.85);
+ // hemiLight.position.set(0, 1500, 0);
+ // this.scene.add(hemiLight);
+
+ // const dirLight = new THREE.DirectionalLight(0xffffff, 4);
+ // dirLight.color.setHSL(0.1, 1, 1.0);
+ // dirLight.position.set(-300, 300, 300);
+ // this.scene.add(dirLight);
+
+ // const dirLight1 = new THREE.DirectionalLight(0xffffff, 4);
+ // dirLight1.color.setHSL(0.1, 1, 1.0);
+ // dirLight1.position.set(300, 300, -300);
+ // dirLight1.position.multiplyScalar(30);
+ // this.scene.add(dirLight1);
+
+ // const ambient = new THREE.AmbientLight(0xffffff, 1.0);
+ // // this.scene.add(ambient);
+ // }
+
generateMesh = (fn) => {
const loader = new FBXLoader();
diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js
index ad5d6e9..3011ce6 100644
--- a/zy-acs-flow/src/map/tool.js
+++ b/zy-acs-flow/src/map/tool.js
@@ -29,6 +29,13 @@
import ctuLoadedNoBattery from '/map/agv/ctuLoadedNoBattery.svg';
import ctuLoadedHalfBattery from '/map/agv/ctuLoadedHalfBattery.svg';
import ctuLoadedFullBattery from '/map/agv/ctuLoadedFullBattery.svg';
+// asr
+import ASREmptyNoBattery from '/map/sca/ASREmptyNoBattery.svg';
+import ASREmptyHalfBattery from '/map/sca/ASREmptyHalfBattery.svg';
+import ASREmptyFullBattery from '/map/sca/ASREmptyFullBattery.svg';
+import ASRLoadedNoBattery from '/map/sca/ASRLoadedNoBattery.svg';
+import ASRLoadedHalfBattery from '/map/sca/ASRLoadedHalfBattery.svg';
+import ASRLoadedFullBattery from '/map/sca/ASRLoadedFullBattery.svg';
let app, mapContainer, themeMode;
let selectedSprite, effectOverlay, effectTicker;
@@ -114,6 +121,11 @@
sprite.width = 750;
sprite.height = 1300;
sprite.zIndex = DEVICE_Z_INDEX.AGV;
+
+ // // sprite.width = 750;
+ // // sprite.height = 1300;
+ // sprite.zIndex = DEVICE_Z_INDEX.AGV;
+ // sprite.scale.set(12, 10)
break
case DEVICE_TYPE.POINT:
sprite = new PIXI.Sprite(PIXI.Texture.from(point, { resourceOptions: { scale: 1 } }));
@@ -706,6 +718,25 @@
}
}
+// export const generateAgvSpriteTexture = (agvStatusMode) => {
+// switch (agvStatusMode) {
+// case AGV_STATUS_MODE.EMPTY_NO_BATTERY:
+// return ASREmptyNoBattery;
+// case AGV_STATUS_MODE.EMPTY_HALF_BATTERY:
+// return ASREmptyHalfBattery;
+// case AGV_STATUS_MODE.EMPTY_FULL_BATTERY:
+// return ASREmptyFullBattery;
+// case AGV_STATUS_MODE.LOADED_NO_BATTERY:
+// return ASRLoadedNoBattery;
+// case AGV_STATUS_MODE.LOADED_HALF_BATTERY:
+// return ASRLoadedHalfBattery;
+// case AGV_STATUS_MODE.LOADED_FULL_BATTERY:
+// return ASRLoadedFullBattery;
+// default:
+// return;
+// }
+// }
+
export function createAgvJobPanel(parentContainer, text) {
const panelScale = 4;
@@ -800,12 +831,14 @@
});
agvText.anchor.set(0.5, 0.5);
agvText.position.set(0, 8);
+ // agvText.position.set(0, 18);
agvText.scale.set(MAP_MIRROR ? -1 : 1, 1)
agvSprite.addChild(agvText);
agvSprite.updateTextRotation = () => {
if (agvText && agvSprite) {
agvText.rotation = -agvSprite.rotation - rotationParseNum(MAP_DEFAULT_ROTATION);
+ // agvText.rotation = -agvSprite.rotation - rotationParseNum(MAP_DEFAULT_ROTATION + 180);
}
};
agvSprite.updateTextRotation();
diff --git a/zy-acs-flow/src/page/agvModel/AgvModelCreate.jsx b/zy-acs-flow/src/page/agvModel/AgvModelCreate.jsx
index 365b716..0f275b2 100644
--- a/zy-acs-flow/src/page/agvModel/AgvModelCreate.jsx
+++ b/zy-acs-flow/src/page/agvModel/AgvModelCreate.jsx
@@ -108,19 +108,19 @@
validate={required()}
/>
</Grid>
- <Grid item xs={6} display="flex" gap={1}>
+ <Grid item xs={4} display="flex" gap={1}>
<NumberInput
label="table.field.agvModel.length"
source="length"
/>
</Grid>
- <Grid item xs={6} display="flex" gap={1}>
+ <Grid item xs={4} display="flex" gap={1}>
<NumberInput
label="table.field.agvModel.width"
source="width"
/>
</Grid>
- <Grid item xs={6} display="flex" gap={1}>
+ <Grid item xs={4} display="flex" gap={1}>
<NumberInput
label="table.field.agvModel.height"
source="height"
@@ -183,8 +183,8 @@
label="table.field.agvModel.allDirection"
source="allDirection"
choices={[
- { id: 0, name: '鍚�' },
- { id: 1, name: '鏄�' },
+ { id: 0, name: 'common.enums.false' },
+ { id: 1, name: 'common.enums.true' },
]}
validate={required()}
/>
@@ -196,12 +196,34 @@
parse={v => v}
/>
</Grid>
- <Grid item xs={6} display="flex" gap={1}>
+ {/* <Grid item xs={6} display="flex" gap={1}>
<TextInput
label="table.field.agvModel.mqttTopic"
source="mqttTopic"
parse={v => v}
/>
+ </Grid> */}
+ <Grid item xs={6} display="flex" gap={1}>
+ <SelectInput
+ label="table.field.agvModel.needUndocking"
+ source="needUndocking"
+ choices={[
+ { id: 0, name: 'common.enums.false' },
+ { id: 1, name: 'common.enums.true' },
+ ]}
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <SelectInput
+ label="table.field.agvModel.backupAction"
+ source="backupAction"
+ choices={[
+ { id: 0, name: 'common.enums.false' },
+ { id: 1, name: 'common.enums.true' },
+ ]}
+ validate={required()}
+ />
</Grid>
<Grid item xs={6} display="flex" gap={1}>
diff --git a/zy-acs-flow/src/page/agvModel/AgvModelEdit.jsx b/zy-acs-flow/src/page/agvModel/AgvModelEdit.jsx
index 7a33b6f..f2de69c 100644
--- a/zy-acs-flow/src/page/agvModel/AgvModelEdit.jsx
+++ b/zy-acs-flow/src/page/agvModel/AgvModelEdit.jsx
@@ -85,15 +85,9 @@
</Stack>
<Stack direction='row' gap={2}>
<NumberInput
- label="table.field.agvModel.backpack"
- source="backpack"
- />
- <NumberInput
label="table.field.agvModel.length"
source="length"
/>
- </Stack>
- <Stack direction='row' gap={2}>
<NumberInput
label="table.field.agvModel.width"
source="width"
@@ -111,6 +105,17 @@
<NumberInput
label="table.field.agvModel.diameter"
source="diameter"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.agvModel.password"
+ source="password"
+ parse={v => v}
+ />
+ <NumberInput
+ label="table.field.agvModel.backpack"
+ source="backpack"
/>
</Stack>
<Stack direction='row' gap={2}>
@@ -139,11 +144,15 @@
source="protocol"
parse={v => v}
/>
- <TextInput
+ {/* <TextInput
label="table.field.agvModel.mqttTopic"
source="mqttTopic"
parse={v => v}
- />
+ /> */}
+ </Stack>
+
+ <Stack direction='row' gap={2}>
+
</Stack>
</Grid>
<Grid item xs={12} md={4}>
@@ -154,14 +163,27 @@
label="table.field.agvModel.allDirection"
source="allDirection"
choices={[
- { id: 0, name: '鍚�' },
- { id: 1, name: '鏄�' },
+ { id: 0, name: 'common.enums.false' },
+ { id: 1, name: 'common.enums.true' },
]}
/>
- <TextInput
- label="table.field.agvModel.password"
- source="password"
- parse={v => v}
+ <SelectInput
+ label="table.field.agvModel.needUndocking"
+ source="needUndocking"
+ choices={[
+ { id: 0, name: 'common.enums.false' },
+ { id: 1, name: 'common.enums.true' },
+ ]}
+ validate={required()}
+ />
+ <SelectInput
+ label="table.field.agvModel.backupAction"
+ source="backupAction"
+ choices={[
+ { id: 0, name: 'common.enums.false' },
+ { id: 1, name: 'common.enums.true' },
+ ]}
+ validate={required()}
/>
<StatusSelectInput />
<Box mt="2em" />
diff --git a/zy-acs-flow/src/page/agvModel/AgvModelList.jsx b/zy-acs-flow/src/page/agvModel/AgvModelList.jsx
index e97c9a1..a2cf6fa 100644
--- a/zy-acs-flow/src/page/agvModel/AgvModelList.jsx
+++ b/zy-acs-flow/src/page/agvModel/AgvModelList.jsx
@@ -153,6 +153,8 @@
<BooleanField source="allDirectionBool" label="table.field.agvModel.allDirection" sortable={false} />
<TextField source="protocol" label="table.field.agvModel.protocol" />
<TextField source="mqttTopic" label="table.field.agvModel.mqttTopic" />
+ <BooleanField source="needUndockingBool" label="table.field.agvModel.needUndocking" sortable={false} />
+ <BooleanField source="backupActionBool" label="table.field.agvModel.backupAction" sortable={false} />
<ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
<TextField source="nickname" />
diff --git a/zy-acs-flow/src/page/agvModel/AgvModelPanel.jsx b/zy-acs-flow/src/page/agvModel/AgvModelPanel.jsx
index deecbc0..39f4e31 100644
--- a/zy-acs-flow/src/page/agvModel/AgvModelPanel.jsx
+++ b/zy-acs-flow/src/page/agvModel/AgvModelPanel.jsx
@@ -42,107 +42,118 @@
<Grid container spacing={2}>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.uuid"
+ title="table.field.agvModel.uuid"
property={record.uuid}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.type"
+ title="table.field.agvModel.type"
property={record.type}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.name"
+ title="table.field.agvModel.name"
property={record.name}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.length"
+ title="table.field.agvModel.length"
property={record.length}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.width"
+ title="table.field.agvModel.width"
property={record.width}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.height"
+ title="table.field.agvModel.height"
property={record.height}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.liftHeight"
+ title="table.field.agvModel.liftHeight"
property={record.liftHeight}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.diameter"
+ title="table.field.agvModel.diameter"
property={record.diameter}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.password"
+ title="table.field.agvModel.password"
property={record.password}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.backpack"
+ title="table.field.agvModel.backpack"
property={record.backpack}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.lowBattery"
+ title="table.field.agvModel.lowBattery"
property={record.lowBattery}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.quaBattery"
+ title="table.field.agvModel.quaBattery"
property={record.quaBattery}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.travelSpeed"
+ title="table.field.agvModel.travelSpeed"
property={record.travelSpeed}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.workDirection"
+ title="table.field.agvModel.workDirection"
property={record.workDirection}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.allDirection"
- property={record.allDirection$}
+ title="table.field.agvModel.allDirection"
+ property={record.allDirection ? translate('common.enums.true') : translate('common.enums.false')}
/>
</Grid>
<Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.protocol"
+ title="table.field.agvModel.protocol"
property={record.protocol}
/>
</Grid>
- <Grid item xs={6}>
+ {/* <Grid item xs={6}>
<PanelTypography
- title="table.field.agvModel.mqttTopic"
+ title="table.field.agvModel.mqttTopic"
property={record.mqttTopic}
/>
+ </Grid> */}
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.agvModel.needUndocking"
+ property={record.needUndockingBool ? translate('common.enums.true') : translate('common.enums.false')}
+ />
</Grid>
-
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.agvModel.backupAction"
+ property={record.backupAction ? translate('common.enums.true') : translate('common.enums.false')}
+ />
+ </Grid>
</Grid>
</CardContent>
</Card >
diff --git a/zy-acs-flow/src/page/code/CodeCreate.jsx b/zy-acs-flow/src/page/code/CodeCreate.jsx
index 0e72673..ce3d989 100644
--- a/zy-acs-flow/src/page/code/CodeCreate.jsx
+++ b/zy-acs-flow/src/page/code/CodeCreate.jsx
@@ -110,9 +110,10 @@
label="table.field.code.corner"
source="corner"
choices={[
- { id: 1, name: '鏄�' },
- { id: 0, name: '鍚�' },
+ { id: 0, name: 'common.enums.false' },
+ { id: 1, name: 'common.enums.true' },
]}
+ validate={required()}
/>
</Grid>
<Grid item xs={6} display="flex" gap={1}>
@@ -127,12 +128,24 @@
source="y"
/>
</Grid>
- <Grid item xs={6} display="flex" gap={1}>
+ {/* <Grid item xs={6} display="flex" gap={1}>
<TextInput
label="table.field.code.scale"
source="scale"
parse={v => v}
/>
+ </Grid> */}
+ <Grid item xs={6} display="flex" gap={1}>
+ <SelectInput
+ label="table.field.code.spin"
+ source="spin"
+ choices={[
+ { id: 0, name: 'page.code.enums.spin.na' },
+ { id: 1, name: 'page.code.enums.spin.cw' },
+ { id: 2, name: 'page.code.enums.spin.ccw' },
+ ]}
+ validate={required()}
+ />
</Grid>
<Grid item xs={6} display="flex" gap={1}>
diff --git a/zy-acs-flow/src/page/code/CodeEdit.jsx b/zy-acs-flow/src/page/code/CodeEdit.jsx
index 9741cd5..b48d076 100644
--- a/zy-acs-flow/src/page/code/CodeEdit.jsx
+++ b/zy-acs-flow/src/page/code/CodeEdit.jsx
@@ -99,6 +99,16 @@
/>
</Stack>
<Stack direction='row' gap={2}>
+ <SelectInput
+ label="table.field.code.spin"
+ source="spin"
+ choices={[
+ { id: 0, name: 'page.code.enums.spin.na' },
+ { id: 1, name: 'page.code.enums.spin.cw' },
+ { id: 2, name: 'page.code.enums.spin.ccw' },
+ ]}
+ validate={required()}
+ />
<TextInput
label="table.field.code.scale"
source="scale"
diff --git a/zy-acs-flow/src/page/code/CodeList.jsx b/zy-acs-flow/src/page/code/CodeList.jsx
index 6387fa8..5f6f6f7 100644
--- a/zy-acs-flow/src/page/code/CodeList.jsx
+++ b/zy-acs-flow/src/page/code/CodeList.jsx
@@ -30,6 +30,7 @@
ReferenceArrayInput,
AutocompleteInput,
DeleteButton,
+ FunctionField,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
@@ -76,9 +77,18 @@
{ id: '1', name: 'common.enums.true' },
{ id: '0', name: 'common.enums.false' },
]}
+ alwaysOn
/>,
- <TextInput source="scale" label="table.field.code.scale" />,
-
+ // <TextInput source="scale" label="table.field.code.scale" />,
+ <SelectInput source="spin" label="table.field.code.spin"
+ choices={[
+ { id: 0, name: 'page.code.enums.spin.na' },
+ { id: 1, name: 'page.code.enums.spin.cw' },
+ { id: 2, name: 'page.code.enums.spin.ccw' },
+ ]}
+ // alwaysOn
+ // emptyText={false}
+ />,
<TextInput label="common.field.memo" source="memo" />,
<SelectInput
label="common.field.status"
@@ -128,7 +138,7 @@
rowClick={(id, resource, record) => false}
expand={() => <CodePanel />}
expandSingle={true}
- omit={['id', 'createTime', 'createBy', 'memo']}
+ omit={['id', 'scale', 'createTime', 'createBy', 'memo']}
>
<NumberField source="id" />
<TextField source="uuid" label="table.field.code.uuid" />
@@ -137,7 +147,22 @@
<NumberField source="y" label="table.field.code.y" />
<BooleanField source="cornerBool" label="table.field.code.corner" sortable={false} />
<TextField source="scale" label="table.field.code.scale" />
-
+ <FunctionField
+ label="table.field.code.spin"
+ sortable={false}
+ render={(record) => {
+ switch (record.spin) {
+ case 0:
+ return translate('page.code.enums.spin.na');
+ case 1:
+ return translate('page.code.enums.spin.cw');
+ case 2:
+ return translate('page.code.enums.spin.ccw');
+ default:
+ return 'N/A';
+ }
+ }}
+ />
<ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
<TextField source="nickname" />
</ReferenceField>
diff --git a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolPojoType.java b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolPojoType.java
index 590f527..958f32a 100644
--- a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolPojoType.java
+++ b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolPojoType.java
@@ -22,6 +22,8 @@
PATH_ACK_COMMAND(ProtocolType.PATH_ACK_RESPONSE, AGV_B1_DOWN.class),
+ PICK_PLACE_ACK(ProtocolType.PICK_PLACE_ACK, AGV_06_DOWN.class),
+
;
diff --git a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolType.java b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolType.java
index 6a7ae92..a109932 100644
--- a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolType.java
+++ b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/constant/ProtocolType.java
@@ -10,6 +10,8 @@
PATH_COMMAND(0x01, "璺緞鏁版嵁鍖�", DirectionType.DOWN),
+ PICK_PLACE_ACK(0x06, "鍙栨斁璐у簲绛斿寘", DirectionType.DOWN),
+
ACTION_COMMAND(0x02, "鍔ㄤ綔鍛戒护鍖�", DirectionType.DOWN),
HEARTBEAT_COMMAND(0x03, "蹇冭烦鍖�", DirectionType.DOWN),
@@ -30,6 +32,8 @@
PATH_ACK(0x01, "璺緞搴旂瓟鍖�", DirectionType.UP),
+ PICK_PLACE_REQUEST(0x06, "鍙栨斁璐ц姹傚寘", DirectionType.UP),
+
COMMAND_ACK(0x02, "鍛戒护搴旂瓟鍖�", DirectionType.UP),
ACTION_COMPLETE(0x11, "鍔ㄤ綔瀹屾垚鍖�", DirectionType.UP),
diff --git a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/handler/AgvPackageServerHandler.java b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/handler/AgvPackageServerHandler.java
index 49ad300..21d6741 100644
--- a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/handler/AgvPackageServerHandler.java
+++ b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/handler/AgvPackageServerHandler.java
@@ -57,6 +57,13 @@
break label;
+ case PICK_PLACE_REQUEST: // 鍙栨斁璐ц姹傚寘
+
+ AGV_06_UP agv_06_up = (AGV_06_UP) pac.getBody().getMessageBody();
+ redis.push(RedisConstant.AGV_COMPLETE_FLAG, AgvProtocol.build(uniqueNo).setMessageBody(agv_06_up));
+
+ break label;
+
case COMMAND_ACK: // 鍛戒护鍖� ack
AGV_02_UP agv_02_up = (AGV_02_UP) pac.getBody().getMessageBody();
diff --git a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/listen/MessageListener.java b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/listen/MessageListener.java
index 31b0ad8..99904ef 100644
--- a/zy-acs-gateway/src/main/java/com/zy/acs/gateway/listen/MessageListener.java
+++ b/zy-acs-gateway/src/main/java/com/zy/acs/gateway/listen/MessageListener.java
@@ -48,7 +48,7 @@
}
// 闂撮殧
try {
- Thread.sleep(500);
+ Thread.sleep(300);
} catch (Exception ignore) {}
}
});
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
index b109ac2..afa5160 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
@@ -156,6 +156,7 @@
agvDetail.setStatus(AgvStatusType.IDLE.val);
agvDetail.setAgvAngle(workDirection);
agvDetail.setVol(5000);
+ agvDetail.setSoc(80);
agvDetailService.updateById(agvDetail);
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
index d5b5c73..4ee2c04 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
@@ -54,7 +54,7 @@
for (Agv agv : agvList) {
AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
- if (null == agvDetail || null == agvDetail.getVol() || null == agvDetail.getAgvStatus()) {
+ if (null == agvDetail || null == agvDetail.getSoc() || null == agvDetail.getAgvStatus()) {
continue;
}
if (agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
@@ -96,7 +96,7 @@
for (Agv agv : agvList) {
AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
- if (null == agvDetail || null == agvDetail.getVol() || null == agvDetail.getAgvStatus() || null == agvDetail.getRecentCode()) {
+ if (null == agvDetail || null == agvDetail.getSoc() || null == agvDetail.getAgvStatus() || null == agvDetail.getRecentCode()) {
continue;
}
// low battery status, that need to go to charge
@@ -105,7 +105,7 @@
// }
// is charging ?
if (agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
- if (agvDetail.getVol() < agvModel.getQuaBattery()) {
+ if (agvDetail.getSoc() < agvModel.getQuaBattery()) {
continue;
}
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
index c63c585..ed9cf97 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
@@ -134,13 +134,13 @@
// detail
String errorMSg = errorType != null ? errorType.getMsg() : agv_04_up.getHexFaultId();
detail.setError(errorMSg);
- detail.setErrorTime(new Date());
+ detail.setErrorTime(now);
}
// 鏁呴殰澶嶄綅
if (!Cools.isEmpty(detail.realError())) {
assert detail.getErrorTime() != null;
- if (DateUtils.diffToSeconds(detail.getErrorTime(), new Date()) > 20) {
+ if (DateUtils.diffToSeconds(detail.getErrorTime(), now) > 10) {
detail.setError(MapDataConstant.EMPTY_OF_ERROR);
}
}
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 9b3886e..e33f1f6 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
@@ -10,10 +10,7 @@
import com.zy.acs.common.domain.BaseResult;
import com.zy.acs.common.domain.protocol.*;
import com.zy.acs.common.domain.protocol.action.*;
-import com.zy.acs.common.enums.AgvBackpackType;
-import com.zy.acs.common.enums.AgvCompleteType;
-import com.zy.acs.common.enums.AgvDirectionType;
-import com.zy.acs.common.enums.AgvSpeedType;
+import com.zy.acs.common.enums.*;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.common.utils.Utils;
@@ -950,7 +947,7 @@
if (!lastCode.getCornerBool()) {
// 濡傛灉鏄綔涓氭柟鍚戯紝浣嗘槸灏忚溅鍦ㄥ贩閬撳唴鏂瑰悜閿欒锛屽垯鍋滄
if (reverse && !lastDirection.equals(nextDirection)) {
-// throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
+ throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
}
// 濡傛灉涓嶆槸浣滀笟鏂瑰悜锛屽垽鏂槸鍚︾浉鍙嶆柟鍚戯紝濡傛灉鍙嶆柟鍚戝垯鍊掗��琛岃蛋
if (nextDirection.equals((lastDirection + 180) % 360)) {
@@ -972,7 +969,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(nextDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -996,7 +993,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(nextDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1047,7 +1044,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(workDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1066,6 +1063,7 @@
AgvDirectionType agvDirectionType;
Double staWorkDirection;
AgvBackpackType backpackType = AgvBackpackType.query(segment.getBackpack());
+ // todo agvModel backpackAction ?
switch (Objects.requireNonNull(TaskPosDto.queryPosType(segment.getPosType()))) {
case ORI_LOC:
assert backpackType != null;
@@ -1169,7 +1167,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(oriStaWorkDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1231,7 +1229,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(destStaWorkDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1288,7 +1286,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(chargeDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1363,6 +1361,28 @@
}
+ // 濡傛灉鍏呯數涓紝鍒欏厛鏂紑鍏呯數
+ // todo agvModel backpackAction ?
+ if (agvModel.getNeedUndockingBool() && agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
+ String undockingCode = Cools.isEmpty(actionList) ? lastCode.getData() : actionList.get(0).getCode();
+ // undocking charge
+ actionList.add(0, new Action(
+ null, // 缂栧彿
+ null, // 鎬荤嚎
+ null, // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.UndockingCharge.desc, // 鍚嶇О
+ null, // 灞炴�у��
+ undockingCode, // 鍦伴潰鐮�
+ null, // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.UndockingCharge.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
+ }
+
// finish
actionList.add(new Action(
null, // 缂栧彿
@@ -1380,6 +1400,7 @@
now // 宸ヤ綔鏃堕棿
));
+ // todo asr need optimize sort ?
List<Action> newActionList = actionSorter.optimizeSort(actionList);
String groupId = String.valueOf(snowflakeIdWorker.nextId()).substring(3);
@@ -1574,6 +1595,11 @@
.setQrCode(action.getCode())
);
break;
+ case UndockingCharge:
+ agvAction.add(new AgvActionItem<>(UndockingChargeAction.class)
+ .setQrCode(action.getCode())
+ );
+ break;
default:
break;
}
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 5f4df21..9c975e1 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
@@ -13,6 +13,7 @@
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.enums.CodeSpinType;
import com.zy.acs.manager.manager.service.ActionService;
import com.zy.acs.manager.manager.service.CodeService;
import com.zy.acs.manager.system.service.ConfigService;
@@ -430,6 +431,13 @@
return turnMatrixNode == TurnNodeType.TURN.val;
}
+ public CodeSpinType spinDirection(Code code) {
+ if (Cools.isEmpty(code)) {
+ return CodeSpinType.NA;
+ }
+ return CodeSpinType.of(code.getSpin());
+ }
+
/**
* That vehicle is walking if the dynamic node count > 1
*/
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvModelController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvModelController.java
index 2380ef6..39099aa 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvModelController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvModelController.java
@@ -11,6 +11,7 @@
import com.zy.acs.manager.common.domain.PageParam;
import com.zy.acs.manager.common.utils.ExcelUtil;
import com.zy.acs.manager.manager.entity.AgvModel;
+import com.zy.acs.manager.manager.enums.StatusType;
import com.zy.acs.manager.manager.service.AgvModelService;
import com.zy.acs.manager.manager.service.impl.AgvModelServiceImpl;
import com.zy.acs.manager.system.controller.BaseController;
@@ -71,11 +72,14 @@
.eq(AgvModel::getType, agvModel.getType())) > 0) {
return R.error("this model type has already exist !");
}
- } agvModel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+ }
+ Date now = new Date();
+ agvModel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+ agvModel.setStatus(StatusType.ENABLE.val);
agvModel.setCreateBy(getLoginUserId());
- agvModel.setCreateTime(new Date());
+ agvModel.setCreateTime(now);
agvModel.setUpdateBy(getLoginUserId());
- agvModel.setUpdateTime(new Date());
+ agvModel.setUpdateTime(now);
if (!agvModelService.save(agvModel)) {
return R.error("Save Fail");
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvModel.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvModel.java
index f4f7e1f..df57d4f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvModel.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvModel.java
@@ -125,6 +125,18 @@
private String mqttTopic;
/**
+ * 鏂紑鍏呯數{1:鏄�,0:鍚
+ */
+ @ApiModelProperty(value= "鏂厖鍔ㄤ綔 1: 鏄� 0: 鍚� ")
+ private Integer needUndocking;
+
+ /**
+ * 鑳岀瘬鍔ㄤ綔 {1:鏄�,0:鍚
+ */
+ @ApiModelProperty(value= "鑳岀瘬鍔ㄤ綔 1: 鏄� 0: 鍚� ")
+ private Integer backupAction;
+
+ /**
* 鐘舵�� 1: 姝e父 0: 绂佺敤
*/
@ApiModelProperty(value= "鐘舵�� 1: 姝e父 0: 绂佺敤 ")
@@ -172,63 +184,29 @@
@ApiModelProperty(value= "澶囨敞")
private String memo;
- public AgvModel() {}
-
- public AgvModel(String uuid,String type,String name,Integer length,Integer width,Integer height,Integer liftHeight,Integer diameter,String password,Integer backpack,Integer lowBattery,Integer quaBattery,Integer travelSpeed,Double workDirection,Integer allDirection,String protocol,String mqttTopic,Integer status,Integer deleted,Long tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
- this.uuid = uuid;
- this.type = type;
- this.name = name;
- this.length = length;
- this.width = width;
- this.height = height;
- this.liftHeight = liftHeight;
- this.diameter = diameter;
- this.password = password;
- this.backpack = backpack;
- this.lowBattery = lowBattery;
- this.quaBattery = quaBattery;
- this.travelSpeed = travelSpeed;
- this.workDirection = workDirection;
- this.allDirection = allDirection;
- this.protocol = protocol;
- this.mqttTopic = mqttTopic;
- this.status = status;
- this.deleted = deleted;
- this.tenantId = tenantId;
- this.createBy = createBy;
- this.createTime = createTime;
- this.updateBy = updateBy;
- this.updateTime = updateTime;
- this.memo = memo;
+ public Boolean getNeedUndockingBool(){
+ if (null == this.needUndocking){ return null; }
+ switch (this.needUndocking){
+ case 1:
+ return true;
+ case 0:
+ return false;
+ default:
+ return null;
+ }
}
-// AgvModel agvModel = new AgvModel(
-// null, // 缂栧彿
-// null, // 绫诲瀷
-// null, // 鍚嶇О
-// null, // 闀垮害
-// null, // 瀹藉害
-// null, // 楂樺害
-// null, // 涓惧崌楂樺害
-// null, // 鏃嬭浆鐩村緞
-// null, // 璁惧瀵嗙爜
-// null, // 鑳岀瘬
-// null, // 鏈�浣庣數閲�
-// null, // 棰濆畾鐢甸噺
-// null, // 璧拌閫熷害
-// null, // 浣滀笟鏂瑰悜
-// null, // 鍏ㄥ悜
-// null, // 鍗忚
-// null, // mqtt涓婚
-// null, // 鐘舵�乕闈炵┖]
-// null, // 鏄惁鍒犻櫎[闈炵┖]
-// null, // 绉熸埛
-// null, // 娣诲姞浜哄憳
-// null, // 娣诲姞鏃堕棿[闈炵┖]
-// null, // 淇敼浜哄憳
-// null, // 淇敼鏃堕棿
-// null // 澶囨敞
-// );
+ public Boolean getBackupActionBool(){
+ if (null == this.backupAction){ return null; }
+ switch (this.backupAction){
+ case 1:
+ return true;
+ case 0:
+ return false;
+ default:
+ return null;
+ }
+ }
public Boolean getAllDirectionBool(){
if (null == this.allDirection){ return null; }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Code.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Code.java
index fbf7529..4f78fd2 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Code.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Code.java
@@ -59,6 +59,12 @@
private String scale;
/**
+ * 鏃嬭浆鏂瑰悜 0: N/A 1: 椤烘椂閽� 2: 閫嗘椂閽�
+ */
+ @ApiModelProperty(value= "鏃嬭浆鏂瑰悜 0: N/A 1: 椤烘椂閽� 2: 閫嗘椂閽� ")
+ private Integer spin;
+
+ /**
* 鐘舵�� 1: 姝e父 0: 鍐荤粨
*/
@ApiModelProperty(value= "鐘舵�� 1: 姝e父 0: 鍐荤粨 ")
@@ -105,40 +111,6 @@
*/
@ApiModelProperty(value= "澶囨敞")
private String memo;
-
- public Code() {}
-
- public Code(String uuid,String data,Double x,Double y,Integer corner,Integer status,Integer deleted,Long tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
- this.uuid = uuid;
- this.data = data;
- this.x = x;
- this.y = y;
- this.corner = corner;
- this.status = status;
- this.deleted = deleted;
- this.tenantId = tenantId;
- this.createBy = createBy;
- this.createTime = createTime;
- this.updateBy = updateBy;
- this.updateTime = updateTime;
- this.memo = memo;
- }
-
-// Code code = new Code(
-// null, // 缂栧彿
-// null, // 鏉$爜[闈炵┖]
-// null, // x鍧愭爣
-// null, // y鍧愭爣
-// null, // 杞[闈炵┖]
-// null, // 鐘舵�乕闈炵┖]
-// null, // 鏄惁鍒犻櫎[闈炵┖]
-// null, // 绉熸埛
-// null, // 娣诲姞浜哄憳
-// null, // 娣诲姞鏃堕棿[闈炵┖]
-// null, // 淇敼浜哄憳
-// null, // 淇敼鏃堕棿
-// null // 澶囨敞
-// );
public Boolean getCornerBool(){
if (null == this.corner){ return null; }
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 c6a318d..2d5d590 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
@@ -24,6 +24,7 @@
LoadPlatformLift("杞借揣鍙板崌闄�"), // 杞借揣鍙板崌闄�
FinishPath("鏁翠釜璺緞缁撴潫"), // 鏁翠釜璺緞缁撴潫
DockingCharge("瀵规帴鍏呯數妗�"), // 瀵规帴鍏呯數妗�
+ UndockingCharge("鏂紑鍏呯數妗�"), // 鏂紑鍏呯數妗�
;
ActionTypeType(String desc) {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/CodeSpinType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/CodeSpinType.java
new file mode 100644
index 0000000..aa7dfbc
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/CodeSpinType.java
@@ -0,0 +1,25 @@
+package com.zy.acs.manager.manager.enums;
+
+public enum CodeSpinType {
+
+ NA(0),
+ CW(1),
+ CCW(2),
+ ;
+
+ public int val;
+
+ CodeSpinType(int val) {
+ this.val = val;
+ }
+
+ public static CodeSpinType of(int val) {
+ for (CodeSpinType type : CodeSpinType.values()) {
+ if (type.val == val) {
+ return type;
+ }
+ }
+ return NA;
+ }
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java
index e432eec..c8de9a4 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java
@@ -73,9 +73,9 @@
agvModel = agvModelService.getByAgvId(agv.getId());
}
if (null == agv.getChargeLine()) {
- return agvDetail.getVol() < agvModel.getLowBattery();
+ return agvDetail.getSoc() < agvModel.getLowBattery();
} else {
- return agvDetail.getVol() < Math.max(agv.getChargeLine(), agvModel.getLowBattery());
+ return agvDetail.getSoc() < Math.max(agv.getChargeLine(), agvModel.getLowBattery());
}
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
index 72fe8ab..97ca4cd 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -206,7 +206,7 @@
log.warn("[{}]鍙稟gv鏈敹鍒扮姸鎬佸寘......", agvNo);
return false;
}
- if (agvDetail.getVol() == 0) {
+ if (null == agvDetail.getSoc() || agvDetail.getSoc() == 0) {
return false;
}
if (!agvDetail.getAgvStatus().equals(AgvStatusType.IDLE) && !agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
@@ -214,7 +214,7 @@
return false;
}
if (agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
- if (agvDetail.getVol() < agvModel.getQuaBattery()) {
+ if (agvDetail.getSoc() < agvModel.getQuaBattery()) {
return false;
}
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java
index aa83f0b..7044fea 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java
@@ -94,7 +94,7 @@
AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
if (agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
- if (agvDetail.getVol() < agvModel.getQuaBattery()) {
+ if (agvDetail.getSoc() < agvModel.getQuaBattery()) {
return false;
}
} else {
diff --git a/zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml
index 2e36048..c30d595 100644
--- a/zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml
+++ b/zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml
@@ -27,7 +27,7 @@
</sql>
<select id="selectMajorByAgvId" resultType="com.zy.acs.manager.manager.entity.AgvDetail">
- SELECT id, agv_id, pos, code, last_code, agv_angle, vol, backpack, status, deleted
+ SELECT id, agv_id, pos, code, last_code, agv_angle, vol, soc, backpack, status, deleted
FROM man_agv_detail
WHERE agv_id = #{agvId}
LIMIT 1
--
Gitblit v1.9.1