From 02d21f6176ac8d54f7ba121bf42821a405be40f2 Mon Sep 17 00:00:00 2001
From: 1 <1>
Date: 星期四, 23 十月 2025 16:45:21 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/controller/RgvController.java | 226 +++++++++++++++++++++++++++++++++-----------------------
1 files changed, 134 insertions(+), 92 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
index 3be5b88..35ede00 100644
--- a/src/main/java/com/zy/asrs/controller/RgvController.java
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -22,6 +22,7 @@
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.RgvModeType;
import com.zy.core.enums.RgvTaskModeType;
+import com.zy.core.enums.RgvTaskStatusType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.RgvSlave;
import com.zy.core.model.Task;
@@ -35,8 +36,10 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
/**
* RGV鎺ュ彛
@@ -70,44 +73,73 @@
@PostMapping("/table/rgv/state")
@ManagerAuth(memo = "RGV淇℃伅琛�")
- public R rgvStateTable(){
+ public R rgvStateTable() {
List<RgvStateTableVo> list = new ArrayList<>();
List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+
for (BasRgv basRgv : rgvs) {
- // 琛ㄦ牸琛�
RgvStateTableVo vo = new RgvStateTableVo();
vo.setRgvNo(basRgv.getRgvNo()); // RGV鍙�
list.add(vo);
+
// 鑾峰彇RGV淇℃伅
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
- if (rgvThread == null) {
- continue;
- }
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- continue;
- }
- vo.setStatusType(rgvProtocol.modeType.desc); // 妯″紡鐘舵��
- vo.setStatus(rgvProtocol.getStatusType().desc); // 鐘舵��
- vo.setWorkNo1(rgvProtocol.getTaskNo1()); // 宸ヤ綅1浠诲姟鍙�
- vo.setStatus1(rgvProtocol.getStatusType1().desc); // 宸ヤ綅1鐘舵��
- vo.setLoading1(rgvProtocol.getLoaded1()==1?"鏈夌墿":"鏃犵墿"); // 宸ヤ綅1鏈夌墿
- vo.setRgvPos(rgvProtocol.getRgvPos());
- vo.setRgvPos1(rgvProtocol.getRgvPosI());
- vo.setWalkPos(rgvProtocol.getWalkPos()==1?"鍦ㄥ畾浣�":"涓嶅湪瀹氫綅");
- vo.setPakMk(rgvThread.isPakMk()?"鏃犻攣":"閿佸畾");
-// vo.setWorkNo2(rgvProtocol.getTaskNo2()); // 宸ヤ綅2浠诲姟鍙�
-// vo.setStatus2(rgvProtocol.getStatusType2().desc); // 宸ヤ綅2鐘舵��
-// vo.setLoading2(rgvProtocol.getLoaded2()==1?"鏈夌墿":"鏃犵墿"); // 宸ヤ綅2鏈夌墿
+ if (rgvThread == null) continue;
- vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
- if (rgvProtocol.getAlarm() > 0) {
- BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm());
- vo.setAlarm(rgvErr==null?"鏈煡寮傚父":rgvErr.getErrName());
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null) continue;
+
+ vo.setStatusType(rgvProtocol.modeType.desc); // 妯″紡鐘舵��
+ vo.setStatus(String.valueOf(rgvProtocol.getMode())); // 鐘舵��
+ vo.setWorkNo1(rgvProtocol.getTaskNo1()); // 宸ヤ綅1浠诲姟鍙�
+ vo.setStatus1(rgvProtocol.getStatusType1().desc); // 宸ヤ綅1鐘舵��
+ vo.setLoading1(rgvProtocol.getLoaded1() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅1鏈夌墿
+ vo.setRgvPos(rgvProtocol.getRgvPos());
+ vo.setRgvPos1(rgvProtocol.getRgvPosI2());
+ vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "鍦ㄥ畾浣�" : "涓嶅湪瀹氫綅");
+ vo.setPakMk(rgvThread.isPakMk() ? "鏃犻攣" : "閿佸畾");
+// vo.setPakIn(rgvThread.isPakIn() ? "鍙叆" : "涓嶅彲鍏�");
+// vo.setPakOut(rgvThread.isPakOut() ? "鍙嚭" : "涓嶅彲鍑�");
+// vo.setPakRgv(rgvThread.isPakRgv() ? "鏃犻攣" : "閿佸畾");
+ vo.setPaking(rgvThread.isPaking()? "鏃犻攣" : "閿佸畾");
+// vo.setPakAll(rgvThread.isPakAll() ? "鏃犻攣" : "閿佸畾");
+// vo.setPakToCrn(rgvThread.isPakToCrn() ? "鏃犻攣" : "閿佸畾");
+
+
+ vo.setWorkNo2(rgvProtocol.getTaskNo2()); // 宸ヤ綅2浠诲姟鍙�
+// vo.setStatus2(rgvProtocol.getStatusType2().desc); // 宸ヤ綅2鐘舵��
+ vo.setLoading2(rgvProtocol.getLoaded2() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅2鏈夌墿
+
+ // --- 閬嶅巻 errX 瀛楁鐢熸垚 warnCode 鍜� alarm ---
+ List<String> alarms = new ArrayList<>();
+ List<String> warnCodes = new ArrayList<>();
+ Field[] fields = rgvProtocol.getClass().getDeclaredFields();
+ for (Field field : fields) {
+ if (field.getName().startsWith("err") && field.getType().equals(Boolean.class)) {
+ field.setAccessible(true);
+ try {
+ Boolean value = (Boolean) field.get(rgvProtocol);
+ if (Boolean.TRUE.equals(value)) {
+ String numPart = field.getName().substring(3);
+ int errId = Integer.parseInt(numPart);
+ warnCodes.add(String.valueOf(errId));
+
+ BasRgvErr rgvErr = basRgvErrMapper.selectById(errId);
+ alarms.add(rgvErr == null ? "鏈煡寮傚父(" + errId + ")" : rgvErr.getErrName());
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
}
+
+ vo.setWarnCode(String.join(",", warnCodes));
+ vo.setAlarm(alarms.isEmpty() ? "" : String.join("锛�", alarms));
}
+
return R.ok().add(list);
}
+
@PostMapping("/table/rgv/msg")
@ManagerAuth(memo = "RGV鏁版嵁琛�")
@@ -129,22 +161,11 @@
continue;
}
- vo.setWorkNo(rgvProtocol.getTaskNo1()); // 浠诲姟鍙�
- if (rgvProtocol.getTaskNo1()>0) {
- WrkMast wrkMast = wrkMastService.selectById(rgvProtocol.getTaskNo1());
- if (wrkMast != null) {
- vo.setStatus(RgvStatusType.process(wrkMast.getIoType()).getDesc()); // 妯″紡鐘舵��
- vo.setSourceStaNo(wrkMast.getSourceStaNo$()); // 婧愮珯
- vo.setStaNo(wrkMast.getStaNo$()); // 鐩爣绔�
- vo.setSourceLocNo(wrkMast.getSourceLocNo()); // 婧愬簱浣�
- vo.setLocNo(wrkMast.getLocNo()); // 鐩爣搴撲綅
- }
- } else {
- vo.setStatus(rgvProtocol.modeType.equals(RgvModeType.AUTO)? rgvProtocol.modeType.desc: RgvModeType.HAND.desc); // 妯″紡鐘舵��
- }
- vo.setXspeed(rgvProtocol.getXSpeed()); // 璧拌閫熷害锛坢/min)
- vo.setXdistance(rgvProtocol.getXDistance()); // 璧拌璺濈(Km)
- vo.setXduration(rgvProtocol.getXDuration()); // 璧拌鏃堕暱(H)
+ vo.setWorkNo1(rgvProtocol.getTaskNo1()); // 宸ヤ綅1宸ヤ綔鍙�
+ vo.setWorkNo2(rgvProtocol.getTaskNo2()); //宸ヤ綅2 宸ヤ綔鍙�
+ vo.setStaNo(String.valueOf(rgvProtocol.getRgvPosDestination())); //灏忚溅鐩爣绔�
+ vo.setStatus(rgvProtocol.modeType.equals(RgvModeType.AUTO)? rgvProtocol.modeType.desc: RgvModeType.HAND.desc); // 妯″紡鐘舵��
+
}
return R.ok().add(list);
}
@@ -171,17 +192,17 @@
public R rgvFetchPut(RgvOperatorParam param){
RgvCommand command = new RgvCommand();
command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
- command.setAckFinish1((short) 0); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+ command.setAckFinish1(false); // 浠诲姟瀹屾垚纭浣�
+ command.setTaskNo(0); // 宸ヤ綔鍙�
command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
- command.setDestinationStaNo1(param.getStaNo1()); // 鐩爣绔�
-// command.setAckFinish2((short) 0); // 浠诲姟瀹屾垚纭浣�
-// command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
-// command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
-// command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+// command.setDestinationStaNo1(param.getStaNo1()); // 鐩爣绔�
+ command.setAckFinish2(false); // 浠诲姟瀹屾垚纭浣�
+ command.setTaskNo2(0); // 宸ヤ綔鍙�
+ command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+ command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
// command.setDestinationStaNo2(param.getStaNo2()); // 鐩爣绔�
- command.setCommand((short) 0);
+ command.setCommand(true);
return rgvControl(command)? R.ok(): R.error();
}
@@ -191,17 +212,18 @@
public R rgvFetch(RgvOperatorParam param){
RgvCommand command = new RgvCommand();
command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
- command.setAckFinish1((short) 0); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
- command.setTaskMode1(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栬揣
- command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
- command.setDestinationStaNo1(param.getStaNo1()); // 鐩爣绔�
- command.setAckFinish2((short) 0); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
- command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
- command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
- command.setDestinationStaNo2(param.getStaNo2()); // 鐩爣绔�
- command.setCommand((short) 0);
+ command.setWrkTaskPri(param.getWorkSta()); //鎵ц宸ヤ綅
+ command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 宸ヤ綔鍙�
+ command.setTaskStatus(RgvTaskStatusType.FETCH); // 浠诲姟妯″紡: 鍙栬揣
+ command.setTargetPosition(Integer.valueOf(param.getStaNo())); // 鐩爣绔�
+// command.setTaskMode2(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栨斁璐�
+// command.setAckFinish1(false); // 浠诲姟瀹屾垚纭浣�
+// command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+// command.setAckFinish2(false); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskNo2( 0); // 宸ヤ綔鍙�
+// command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+// command.setDestinationStaNo2(param.getStaNo2()); // 鐩爣绔�
+ command.setCommand(true);
return rgvControl(command)? R.ok(): R.error();
}
@@ -211,17 +233,18 @@
public R rgvPut(RgvOperatorParam param){
RgvCommand command = new RgvCommand();
command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
- command.setAckFinish1((short) 0); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
- command.setTaskMode1(RgvTaskModeType.PUT); // 浠诲姟妯″紡: 鏀捐揣
- command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
- command.setDestinationStaNo1(param.getStaNo1()); // 鐩爣绔�
- command.setAckFinish2((short) 0); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
- command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
- command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
- command.setDestinationStaNo2(param.getStaNo2()); // 鐩爣绔�
- command.setCommand((short) 0);
+ command.setWrkTaskPri(param.getWorkSta()); //鎵ц宸ヤ綅
+ command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 宸ヤ綔鍙�
+ command.setTaskStatus(RgvTaskStatusType.PUT); // 浠诲姟妯″紡: 鍙栬揣
+ command.setTargetPosition(Integer.valueOf(param.getStaNo())); // 鐩爣绔�
+// command.setAckFinish1(false); // 浠诲姟瀹屾垚纭浣�
+// command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+// command.setAckFinish2(false); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskNo2( 0); // 宸ヤ綔鍙�
+// command.setTaskMode2(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栨斁璐�
+// command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+// command.setDestinationStaNo2(param.getStaNo2()); // 鐩爣绔�
+ command.setCommand(true);
return rgvControl(command)? R.ok(): R.error();
}
@@ -233,17 +256,17 @@
public R rgvTaskComplete(RgvOperatorParam param){
RgvCommand command = new RgvCommand();
command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
- command.setAckFinish1((short) 1); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+ command.setAckFinish1(true); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskNo1(0); // 宸ヤ綔鍙�
command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
command.setSourceStaNo1((short) 0); // 婧愮珯
command.setDestinationStaNo1((short) 0); // 鐩爣绔�
- command.setAckFinish2((short) 1); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+ command.setAckFinish2(true); // 浠诲姟瀹屾垚纭浣�
+ command.setTaskNo2( 0); // 宸ヤ綔鍙�
command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
command.setSourceStaNo2((short) 0); // 婧愮珯
command.setDestinationStaNo2((short) 0); // 鐩爣绔�
- command.setCommand((short) 0);
+ command.setCommand(true);
return rgvControl(command)? R.ok(): R.error();
}
@@ -256,19 +279,12 @@
}
RgvCommand command = new RgvCommand();
command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
- command.setAckFinish1((short) 0); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
- command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
- command.setSourceStaNo1((short) 0); // 婧愮珯
- command.setDestinationStaNo1((short) 0); // 鐩爣绔�
- command.setAckFinish2((short) 0); // 浠诲姟瀹屾垚纭浣�
- command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
- command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
- command.setSourceStaNo2((short) 0); // 婧愮珯
- command.setDestinationStaNo2((short) 0); // 鐩爣绔�
- command.setCommand((short) 0);
+ command.setWrkTaskPri(0); //鎵ц宸ヤ綅
+ command.setTaskNo(Math.toIntExact(0)); // 宸ヤ綔鍙�
+ command.setTaskStatus((short)0); // 浠诲姟妯″紡: 鍙栬揣
+ command.setTargetPosition(0); // 鐩爣绔�
- return rgvControl(command)? R.ok(): R.error();
+ return rgvClear(command)? R.ok(): R.error();
}
@ManagerAuth(memo = "鎵嬪姩澶嶄綅")
@@ -292,9 +308,9 @@
RgvCommand Command = new RgvCommand();
Command.setRgvNo(rgv.getId()); // RGV缂栧彿
Command.setTaskMode1(RgvTaskModeType.NONE);
- Command.setAckFinish1((short) 0); // 浠诲姟瀹屾垚纭浣�
- Command.setAckFinish2((short) 0); // 浠诲姟瀹屾垚纭浣�
- Command.setCommand((short) 0); // 浠诲姟瀹屾垚纭浣�
+ Command.setAckFinish1(true); // 浠诲姟瀹屾垚纭浣�
+ Command.setAckFinish2(true); // 浠诲姟瀹屾垚纭浣�
+ Command.setCommand(true); // 浠诲姟瀹屾垚纭浣�
// 寤舵椂鍙戦��
Thread.sleep(1000L);
if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) {
@@ -323,7 +339,7 @@
if (rgvProtocol == null) {
throw new CoolException("RGV涓嶅湪绾�");
}
- if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, command))) {
+ if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(2, command))) {
return true;
} else {
throw new CoolException("鍛戒护涓嬪彂澶辫触");
@@ -333,4 +349,30 @@
return false;
}
+ private boolean rgvClear(RgvCommand command){
+ if (command.getRgvNo() == null) {
+ throw new CoolException("璇烽�夋嫨RGV");
+ }
+ for (RgvSlave rgv : slaveProperties.getRgv()) {
+ // 鑾峰彇RGV淇℃伅
+ if (command.getRgvNo().equals(rgv.getId())) {
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+ if (rgvThread == null) {
+ throw new CoolException("RGV涓嶅湪绾�");
+ }
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null) {
+ throw new CoolException("RGV涓嶅湪绾�");
+ }
+ if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(3, command))) {
+ return true;
+ } else {
+ throw new CoolException("鍛戒护涓嬪彂澶辫触");
+ }
+ }
+ }
+ return false;
+
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.1