From 69a038efa3f87afa1eaf465cfb05d7d226fc206e Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期三, 22 十一月 2023 19:21:58 +0800
Subject: [PATCH] #堆垛机出入库

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java      |  157 +++++++++++++++++--------------
 src/main/java/com/zy/core/enums/CrnStatusType.java          |   18 ++-
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   17 +-
 src/main/java/com/zy/asrs/controller/CrnController.java     |   38 +++++++
 src/main/webapp/views/deviceOperate/crnOperate.html         |   12 ++
 5 files changed, 154 insertions(+), 88 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index 3690e3c..d6d2be9 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -598,6 +598,44 @@
 
         return crnControl2(command)?R.ok():R.error();
     }
+    @ManagerAuth(memo = "鍒囨崲鍗婃墜鍔ㄦā寮�")
+    @PostMapping("/crn/operator/semiAutomatic")
+    public R crnsemiAutomatic(CrnOperatorParam param){
+        short[] array = new short[9];
+        CrnCommand command = new CrnCommand();
+        command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+        command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+//        command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//        command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
+//        command.setSourcePosX(param.getSourceRow());     // 婧愬簱浣嶆帓
+//        command.setSourcePosY(param.getSourceBay());     // 婧愬簱浣嶅垪
+//        command.setSourcePosZ(param.getSourceLev());     // 婧愬簱浣嶅眰
+//        command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
+//        command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
+//        command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
+        command.setAuto((short)2);
+
+        return crnControl2(command)?R.ok():R.error();
+    }
+    @ManagerAuth(memo = "鍒囨崲鎵嬪姩妯″紡")
+    @PostMapping("/crn/operator/hand")
+    public R crnHand(CrnOperatorParam param){
+        short[] array = new short[9];
+        CrnCommand command = new CrnCommand();
+        command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+        command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+//        command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//        command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
+//        command.setSourcePosX(param.getSourceRow());     // 婧愬簱浣嶆帓
+//        command.setSourcePosY(param.getSourceBay());     // 婧愬簱浣嶅垪
+//        command.setSourcePosZ(param.getSourceLev());     // 婧愬簱浣嶅眰
+//        command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
+//        command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
+//        command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
+        command.setAuto((short)3);
+
+        return crnControl2(command)?R.ok():R.error();
+    }
     private boolean crnControl2(CrnCommand command){
         if (command.getCrnNo() == null) {
             throw new CoolException("璇烽�夋嫨鍫嗗灈鏈�");
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 1905621..a32a627 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -343,12 +343,13 @@
                     crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                     crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                     crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
+                    crnCommand.setSourcePosX(Utils.getBayShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶆帓
+                    crnCommand.setSourcePosY(Utils.getLevShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅垪
+                    crnCommand.setSourcePosZ(Utils.getRowShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅眰
+                    crnCommand.setDestinationPosX(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosY(crnStn.getLev().shortValue());     // 鐩爣搴撲綅鍒�
+                    crnCommand.setDestinationPosZ(crnStn.getRow().shortValue());     // 鐩爣搴撲綅灞�
+                    crnCommand.setCommand((short)1);
                     if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                         log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
@@ -438,7 +439,7 @@
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
             if (crnProtocol == null) { continue; }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
-            if (crnProtocol.getTaskFinish() == 1 && crnProtocol.getTaskNo() != 0) {
+            if (crnProtocol.getTaskFinish() == 0 && crnProtocol.statusType == CrnStatusType.HANDLING_COMPLETED && crnProtocol.getTaskNo() != 0) {
                 // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                 TaskWrk taskWrk = taskWrkMapper.selectCrnNoWorking(crn.getId(),crnProtocol.getTaskNo().intValue());
                 if (taskWrk == null) {
@@ -446,7 +447,7 @@
                     continue;
                 }
                 // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                if (taskWrk.getWrkSts() == 3 || (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 3)) {
+                if (taskWrk.getWrkSts() == 3 || (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 2)) {
                     taskWrk.setWrkSts(4);
                 } else {
                     continue;
diff --git a/src/main/java/com/zy/core/enums/CrnStatusType.java b/src/main/java/com/zy/core/enums/CrnStatusType.java
index ccb723e..d3f7f94 100644
--- a/src/main/java/com/zy/core/enums/CrnStatusType.java
+++ b/src/main/java/com/zy/core/enums/CrnStatusType.java
@@ -19,14 +19,16 @@
 //    ;
 
     IDLE(0, "绌洪棽锛屾棤浠诲姟"),
-    NONE_MOVING(1, "鏃犺揣琛岃蛋"),
-    FETCHING(2, "妫�鏌ヤ换鍔℃暟鎹�"),
-    MOVING(3, "瀹氫綅鍒板彇璐т綅"),
-    //PUTTING(4, "鏀捐揣"),
-    PUT_COMPLETE(7, "鍙栬揣瀹屾垚"),
-    MOVE_THE_SHIPPING_LOCATION(8, "绉诲姩鍒版斁璐т綅缃�"),
-    PUTTING(9, "鏀捐揣涓�"),
-    HANDLING_COMPLETED(10, "鎼繍瀹屾垚"),
+    NONE_MOVING(1, "鍙栬揣瀹氫綅"),
+    FETCHING(2, "鍙栬揣涓�"),
+    MOVING(3, "鍙栬揣瀹屾垚锛屾斁璐у畾浣嶄腑"),
+    PUTTING(4, "鏀捐揣涓�"),
+    HOMING(5, "鍥炲師鐐�"),
+    ANTI_ORIGIN(6, "鍙嶅師鐐�"),
+    PUT_COMPLETE(7, "搴撲綅绉昏浇"),
+//    MOVE_THE_SHIPPING_LOCATION(8, "绉诲姩鍒版斁璐т綅缃�"),
+//    PUTTING(9, "鏀捐揣涓�"),
+    HANDLING_COMPLETED(10, "鎼繍瀹屾垚绛夊緟WCS纭"),
     EMPTY_AVOIDANCE(11, "绌鸿浇閬胯"),
     SOS(99, "鎶ヨ"),
     OTHER(100, "鍏朵粬"),
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 52bf8d0..e63f0ce 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -274,80 +274,80 @@
             if (err15[5]) { crnProtocol.setAlarm4(72); }
             if (err15[6]) { crnProtocol.setAlarm4(73); }
 
-            boolean[] bool1 = siemensNet.getByteTransform().TransBool(result.Content, 60, 1);    // 62
-            crnProtocol.setConnStatus(bool1[0]);
-            crnProtocol.setCorrection(bool1[3]);
-            crnProtocol.setTuError(bool1[4]);
-            crnProtocol.setNoneError(bool1[5]);
-            crnProtocol.setStockError(bool1[6]);
-            crnProtocol.setJobInvalid(bool1[7]);
-            boolean[] bool2 = siemensNet.getByteTransform().TransBool(result.Content, 61, 1);    // 63
-            crnProtocol.setIdle(bool2[0]);
-            crnProtocol.setControl(bool2[1]);
-            crnProtocol.setStopQuasi(bool2[2]);
-            crnProtocol.setRunning(bool2[3]);
-            crnProtocol.setFault(bool2[4]);
-            crnProtocol.setForkHome(bool2[5]);
-            crnProtocol.setForkSingleLeft(bool2[6]);
-            crnProtocol.setForkSingleRight(bool2[7]);
-            boolean[] bool3 = siemensNet.getByteTransform().TransBool(result.Content, 62, 1);    // 64
-            crnProtocol.setForkDoubleLeft(bool3[0]);
-            crnProtocol.setForkDoubleRight(bool3[1]);
-            crnProtocol.setSingleHigh(bool3[2]);
-            crnProtocol.setSingleLow(bool3[3]);
-            crnProtocol.setDoubleHigh(bool3[4]);
-            crnProtocol.setDoubleLow(bool3[5]);
-            crnProtocol.setPlatformHigh(bool3[6]);
-            crnProtocol.setPlatformLow(bool3[7]);
-            boolean[] bool4 = siemensNet.getByteTransform().TransBool(result.Content, 64, 1);    // 66
-            crnProtocol.setLoaded((short) (bool4[4]?1:0));  // 鏈夌墿
+//            boolean[] bool1 = siemensNet.getByteTransform().TransBool(result.Content, 60, 1);    // 62
+//            crnProtocol.setConnStatus(bool1[0]);
+//            crnProtocol.setCorrection(bool1[3]);
+//            crnProtocol.setTuError(bool1[4]);
+//            crnProtocol.setNoneError(bool1[5]);
+//            crnProtocol.setStockError(bool1[6]);
+//            crnProtocol.setJobInvalid(bool1[7]);
+//            boolean[] bool2 = siemensNet.getByteTransform().TransBool(result.Content, 61, 1);    // 63
+//            crnProtocol.setIdle(bool2[0]);
+//            crnProtocol.setControl(bool2[1]);
+//            crnProtocol.setStopQuasi(bool2[2]);
+//            crnProtocol.setRunning(bool2[3]);
+//            crnProtocol.setFault(bool2[4]);
+//            crnProtocol.setForkHome(bool2[5]);
+//            crnProtocol.setForkSingleLeft(bool2[6]);
+//            crnProtocol.setForkSingleRight(bool2[7]);
+//            boolean[] bool3 = siemensNet.getByteTransform().TransBool(result.Content, 62, 1);    // 64
+//            crnProtocol.setForkDoubleLeft(bool3[0]);
+//            crnProtocol.setForkDoubleRight(bool3[1]);
+//            crnProtocol.setSingleHigh(bool3[2]);
+//            crnProtocol.setSingleLow(bool3[3]);
+//            crnProtocol.setDoubleHigh(bool3[4]);
+//            crnProtocol.setDoubleLow(bool3[5]);
+//            crnProtocol.setPlatformHigh(bool3[6]);
+//            crnProtocol.setPlatformLow(bool3[7]);
+//            boolean[] bool4 = siemensNet.getByteTransform().TransBool(result.Content, 64, 1);    // 66
+//            crnProtocol.setLoaded((short) (bool4[4]?1:0));  // 鏈夌墿
 
             // 閫熷害
-            crnProtocol.setXSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 22));    // 24
-            crnProtocol.setYSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 24));    // 26
-            crnProtocol.setZSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 26));    // 28
-            // 绱閲岀▼銆佹椂闀�
-            crnProtocol.setXDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 88));    // 90
-            crnProtocol.setYDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 92));    // 94
-            crnProtocol.setXDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 96));    // 98
-            crnProtocol.setYDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 100));    // 102
+//            crnProtocol.setXSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 22));    // 24
+//            crnProtocol.setYSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 24));    // 26
+//            crnProtocol.setZSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 26));    // 28
+//            // 绱閲岀▼銆佹椂闀�
+//            crnProtocol.setXDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 88));    // 90
+//            crnProtocol.setYDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 92));    // 94
+//            crnProtocol.setXDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 96));    // 98
+//            crnProtocol.setYDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 100));    // 102
 
-            // 澧炲己
-            if (crnProtocol.getForkHome()) {
-                crnProtocol.setForkPos(CrnForkPosType.HOME);
-            }
-            if (crnProtocol.getForkSingleLeft()) {
-                crnProtocol.setForkPos(CrnForkPosType.LEFT);
-            }
-            if (crnProtocol.getForkSingleRight()) {
-                crnProtocol.setForkPos(CrnForkPosType.RIGHT);
-            }
-            if (crnProtocol.getForkDoubleLeft()) {
-                crnProtocol.setForkPos(CrnForkPosType._LEFT);
-            }
-            if (crnProtocol.getForkDoubleRight()) {
-                crnProtocol.setForkPos(CrnForkPosType._RIGHT);
-            }
-            if (crnProtocol.getSingleHigh()) {
-                crnProtocol.setLiftPos(CrnLiftPosType.UP);
-            }
-            if (crnProtocol.getSingleLow()) {
-                crnProtocol.setLiftPos(CrnLiftPosType.DOWN);
-            }
-            if (crnProtocol.getDoubleHigh()) {
-                crnProtocol.setLiftPos(CrnLiftPosType._UP);
-            }
-            if (crnProtocol.getDoubleLow()) {
-                crnProtocol.setLiftPos(CrnLiftPosType._DOWN);
-            }
-            if (crnProtocol.getIdle()) {
-                crnProtocol.setStatus(CrnStatusType.IDLE);
-            }
+//            // 澧炲己
+//            if (crnProtocol.getForkHome()) {
+//                crnProtocol.setForkPos(CrnForkPosType.HOME);
+//            }
+//            if (crnProtocol.getForkSingleLeft()) {
+//                crnProtocol.setForkPos(CrnForkPosType.LEFT);
+//            }
+//            if (crnProtocol.getForkSingleRight()) {
+//                crnProtocol.setForkPos(CrnForkPosType.RIGHT);
+//            }
+//            if (crnProtocol.getForkDoubleLeft()) {
+//                crnProtocol.setForkPos(CrnForkPosType._LEFT);
+//            }
+//            if (crnProtocol.getForkDoubleRight()) {
+//                crnProtocol.setForkPos(CrnForkPosType._RIGHT);
+//            }
+//            if (crnProtocol.getSingleHigh()) {
+//                crnProtocol.setLiftPos(CrnLiftPosType.UP);
+//            }
+//            if (crnProtocol.getSingleLow()) {
+//                crnProtocol.setLiftPos(CrnLiftPosType.DOWN);
+//            }
+//            if (crnProtocol.getDoubleHigh()) {
+//                crnProtocol.setLiftPos(CrnLiftPosType._UP);
+//            }
+//            if (crnProtocol.getDoubleLow()) {
+//                crnProtocol.setLiftPos(CrnLiftPosType._DOWN);
+//            }
+//            if (crnProtocol.getIdle()) {
+//                crnProtocol.setStatus(CrnStatusType.IDLE);
+//            }
 
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
 
             // 澶嶄綅淇″彿
-            if (crnProtocol.getTaskFinish() == 1) {
+            if (crnProtocol.getTaskFinish() == 0) {
                 if (resetFlag) {
                     CrnCommand crnCommand = new CrnCommand();
                     crnCommand.setAckFinish((short)1);
@@ -448,7 +448,7 @@
 //        }
 
         // 鏃ュ織璁板綍
-        try {
+//        try {
             if (command.getAckFinish() != 1) {
                 BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
                 BasCrnOpt basCrnOpt = new BasCrnOpt(
@@ -470,14 +470,29 @@
                 );
                 bean.insert(basCrnOpt);
             }
-        } catch (Exception ignore) {}
+//        } catch (Exception ignore) {}
 
         //鏇存柊鍛戒护鏃ュ織
         CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);
         CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
         CommandInfo commandInfo = commandInfoService.selectById(command.getCommandId());
-        CommandInfoLog commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class);
-        commandInfoLog.setId(null);
+        CommandInfoLog commandInfoLog = new CommandInfoLog();
+        if (commandInfo != null) {
+            commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class);
+            commandInfoLog.setId(null);
+        }else {
+            Date now = new Date();
+            commandInfoLog.setCommand(JSON.toJSONString(command));
+            commandInfoLog.setCommandStatus(3);
+            commandInfoLog.setStartTime(now);
+            commandInfoLog.setExecuteTime(now);
+            commandInfoLog.setCompleteTime(now);
+            commandInfoLog.setDevice(SlaveType.Devp.toString());
+            commandInfoLog.setWrkNo(9999);
+            commandInfoLog.setTaskNo("9999");
+            commandInfoLog.setCommandDesc("鎵嬪姩鍛戒护");
+        }
+
 
         if (result.IsSuccess) {
             log.warn("鍫嗗灈鏈哄懡浠や笅鍙慬id:{},鏃堕棿锛歿}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command));
diff --git a/src/main/webapp/views/deviceOperate/crnOperate.html b/src/main/webapp/views/deviceOperate/crnOperate.html
index 07a6de0..432afb9 100644
--- a/src/main/webapp/views/deviceOperate/crnOperate.html
+++ b/src/main/webapp/views/deviceOperate/crnOperate.html
@@ -80,7 +80,17 @@
 							<el-button @click="requestOperate('taskComplete')" type="primary">浠诲姟瀹屾垚</el-button>
 							<el-button @click="requestOperate('clearCommand')" type="primary">娓呴櫎鍛戒护</el-button>
 							<el-button @click="requestOperate('handleReset')" type="primary">澶嶄綅</el-button>
-							<el-button @click="requestOperate('auto')" type="primary">鑱旀満</el-button>
+							<br/>
+							<br/>
+							<el-button @click="requestOperate('auto')" type="warning">鑱旀満</el-button>
+							<el-button @click="requestOperate('semiAutomatic')" type="warning">鍗婅嚜鍔�</el-button>
+							<el-button @click="requestOperate('hand')" type="warning">鎵嬪姩</el-button>
+							<el-button @click="requestOperate('restoreOnlineWrk')" type="warning">鎭㈠鑱旀満浠诲姟</el-button>
+							<el-button @click="requestOperate('cancelOnlineWrk')" type="warning">鍙栨秷鑱旀満浠诲姟</el-button>
+							<el-button @click="requestOperate('finishWrk')" type="warning">鐢宠瀹屾垚浠诲姟</el-button>
+							<br/>
+							<br/>
+							<el-button @click="requestOperate('cancelWrk')" type="warning">鐢宠鍙栨秷浠诲姟</el-button>
 						</div>
 					</div>
 				</el-card>

--
Gitblit v1.9.1