From 4747e5dcb4066161b42a7a54cab542949ad5826c Mon Sep 17 00:00:00 2001 From: 1 <1> Date: 星期一, 29 九月 2025 13:36:00 +0800 Subject: [PATCH] #和得服务器 --- src/main/java/com/zy/asrs/controller/RgvController.java | 230 ++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 138 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 c727c89..380b8ca 100644 --- a/src/main/java/com/zy/asrs/controller/RgvController.java +++ b/src/main/java/com/zy/asrs/controller/RgvController.java @@ -5,6 +5,7 @@ import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.domain.enums.RgvStatusType; +import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.asrs.domain.param.RgvOperatorParam; import com.zy.asrs.domain.vo.RgvMsgTableVo; import com.zy.asrs.domain.vo.RgvStateTableVo; @@ -21,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; @@ -34,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鎺ュ彛 @@ -59,45 +63,75 @@ @Autowired private LocMastService locMastService; + @ManagerAuth(memo = "瑙i攣灏忚溅") + @PostMapping("/lock") + public R lock(CrnOperatorParam param){ + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, param.getRgvNo()); + rgvThread.setPakMk(true); + return R.ok(); + } + @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.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.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鏁版嵁琛�") @@ -119,22 +153,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); } @@ -161,17 +184,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(); } @@ -181,17 +204,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(); } @@ -201,37 +225,40 @@ 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(); } + + @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.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(); } @@ -244,19 +271,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 = "鎵嬪姩澶嶄綅") @@ -280,12 +300,12 @@ 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(2, Command))) { + if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) { return R.ok(); } else { throw new CoolException("鍛戒护涓嬪彂澶辫触"); @@ -311,7 +331,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("鍛戒护涓嬪彂澶辫触"); @@ -321,4 +341,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