From 6278a504fb7d4f3dfb1f6d5d2890304ab784d139 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期一, 09 六月 2025 17:08:47 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/controller/RgvController.java | 295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 295 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
new file mode 100644
index 0000000..9203d31
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -0,0 +1,295 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.ManagerAuth;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.domain.enums.RgvStatusType;
+import com.zy.asrs.domain.param.RgvOperatorParam;
+import com.zy.asrs.domain.vo.RgvMsgTableVo;
+import com.zy.asrs.domain.vo.RgvStateTableVo;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvErr;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.BasRgvErrMapper;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.RgvModeType;
+import com.zy.core.enums.RgvTaskModeType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.RgvSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.RgvCommand;
+import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.RgvThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * RGV鎺ュ彛
+ * Created by vincent on 2020-06-01
+ */
+@Slf4j
+@RestController
+@RequestMapping("/rgv")
+public class RgvController {
+
+ @Autowired
+ private SlaveProperties slaveProperties;
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private BasRgvErrMapper basRgvErrMapper;
+ @Autowired
+ private BasRgvService basRgvService;
+
+ @PostMapping("/table/rgv/state")
+ @ManagerAuth(memo = "RGV淇℃伅琛�")
+ 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鏈夌墿
+
+ vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
+ if (rgvProtocol.getAlarm() > 0) {
+ BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm());
+ vo.setAlarm(rgvErr==null?"鏈煡寮傚父":rgvErr.getErrName());
+ }
+ }
+ return R.ok().add(list);
+ }
+
+ @PostMapping("/table/rgv/msg")
+ @ManagerAuth(memo = "RGV鏁版嵁琛�")
+ public R rgvMsgTable(){
+ List<RgvMsgTableVo> list = new ArrayList<>();
+ List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+ for (BasRgv basRgv : rgvs) {
+ // 琛ㄦ牸琛�
+ RgvMsgTableVo vo = new RgvMsgTableVo();
+ 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.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)
+ }
+ return R.ok().add(list);
+ }
+
+ @PostMapping("/output/site")
+ @ManagerAuth(memo = "RGV鎶ユ枃鏃ュ織杈撳嚭")
+ public R rgvOutput(){
+ StringBuilder str = new StringBuilder();
+ String s;
+ int i = 0;
+ while((s = OutputQueue.RGV.poll()) != null && i <=10) {
+ str.append("\n").append(s);
+ i++;
+ }
+ return R.ok().add(str.toString());
+ }
+
+ /****************************************************************/
+ /************************** 鎵嬪姩鎿嶄綔 ******************************/
+ /****************************************************************/
+
+ @ManagerAuth(memo = "鍙栨斁璐�")
+ @PostMapping("/operator/put")
+ public R rgvFetchPut(RgvOperatorParam param){
+ RgvCommand command = new RgvCommand();
+ command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+ command.setAckFinish1((short) 0); // 浠诲姟瀹屾垚纭浣�
+ command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+ command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+ command.setSourceStaNo1(param.getSourceStaNo()); // 婧愮珯
+ command.setDestinationStaNo1(param.getStaNo()); // 鐩爣绔�
+ command.setCommand((short) 0);
+
+ return rgvControl(command)? R.ok(): R.error();
+ }
+
+ @ManagerAuth(memo = "鍙栬揣")
+ @PostMapping("/operator/take")
+ 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.getSourceStaNo()); // 婧愮珯
+ command.setDestinationStaNo1(param.getStaNo()); // 鐩爣绔�
+ command.setCommand((short) 0);
+
+ return rgvControl(command)? R.ok(): R.error();
+ }
+
+ @ManagerAuth(memo = "鏀捐揣")
+ @PostMapping("/operator/stockMove")
+ 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.getSourceStaNo()); // 婧愮珯
+ command.setDestinationStaNo1(param.getStaNo()); // 鐩爣绔�
+ command.setCommand((short) 0);
+
+ return rgvControl(command)? R.ok(): R.error();
+ }
+
+
+
+ @ManagerAuth(memo = "浠诲姟瀹屾垚")
+ @PostMapping("/operator/taskComplete")
+ public R rgvTaskComplete(RgvOperatorParam param){
+ RgvCommand command = new RgvCommand();
+ command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+ command.setAckFinish1((short) 1); // 浠诲姟瀹屾垚纭浣�
+ command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+ command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+ command.setSourceStaNo1((short) 0); // 婧愮珯
+ command.setDestinationStaNo1((short) 0); // 鐩爣绔�
+ command.setCommand((short) 0);
+
+ return rgvControl(command)? R.ok(): R.error();
+ }
+
+ @ManagerAuth(memo = "娓呴櫎鍛戒护")
+ @PostMapping("/operator/clearCommand")
+ public R rgvClearCommand(RgvOperatorParam param){
+ if (param.getRgvNo() == null) {
+ throw new CoolException("璇烽�夋嫨RGV鍙�");
+ }
+ 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.setCommand((short) 0);
+
+ return rgvControl(command)? R.ok(): R.error();
+ }
+
+ @ManagerAuth(memo = "鎵嬪姩澶嶄綅")
+ @PostMapping("/operator/handleReset")
+ public R handleReset(RgvOperatorParam param) throws Exception {
+ if (param.getRgvNo() == null) {
+ throw new CoolException("璇烽�夋嫨RGV");
+ }
+ // 鑾峰彇RGV缂撳瓨
+ for (RgvSlave rgv : slaveProperties.getRgv()) {
+ // 鑾峰彇RGV淇℃伅
+ if (param.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涓嶅湪绾�");
+ }
+ RgvCommand Command = new RgvCommand();
+ Command.setRgvNo(rgv.getId()); // RGV缂栧彿
+ Command.setTaskMode1(RgvTaskModeType.NONE);
+ Command.setAckFinish1((short) 0); // 浠诲姟瀹屾垚纭浣�
+ Command.setCommand((short) 0); // 浠诲姟瀹屾垚纭浣�
+ // 寤舵椂鍙戦��
+ Thread.sleep(1000L);
+ if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) {
+ return R.ok();
+ } else {
+ throw new CoolException("鍛戒护涓嬪彂澶辫触");
+ }
+
+ }
+ }
+ return R.error();
+ }
+
+ private boolean rgvControl(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(4, command))) {
+ return true;
+ } else {
+ throw new CoolException("鍛戒护涓嬪彂澶辫触");
+ }
+ }
+ }
+ return false;
+ }
+
+}
\ No newline at end of file
--
Gitblit v1.9.1