From f57741a11f0cce1f7ac0f2c8ab0627c046cb855b Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 14 四月 2023 11:11:53 +0800
Subject: [PATCH] 穿梭车到达提升机口前,优先调度提升机优化

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  208 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 191 insertions(+), 17 deletions(-)

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 aad864d..3b92522 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -68,6 +68,10 @@
     @Autowired
     private BasSteErrLogService basSteErrLogService;
     @Autowired
+    private BasShuttleErrLogService basShuttleErrLogService;
+    @Autowired
+    private BasShuttleErrService basShuttleErrService;
+    @Autowired
     private BasCrnErrorMapper basCrnErrorMapper;
     @Autowired
     private BasSteService basSteService;
@@ -793,6 +797,20 @@
                                 //鍚屼竴灞傜洿鎺ュ彇璐ф棤闇�缁忚繃鎻愬崌鏈�
                                 //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠�
                                 List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, locNo);
+                                if (wrkMast.getWrkSts() == 8) {
+                                    //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
+                                    BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭�
+                                    ShuttleCommand moveCommand = new ShuttleCommand();
+                                    moveCommand.setCommandWord((short) 1);
+                                    moveCommand.setStartCodeNum(Short.parseShort(basDevp.getQrCodeValue()));//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
+                                    moveCommand.setDistCodeNum(commands.get(0).getStartCodeNum());//鎻愬崌鏈哄彛浜岀淮鐮�
+                                    moveCommand.setStartToDistDistance(1300);
+                                    moveCommand.setMiddleToDistDistance(0);
+                                    moveCommand.setRunDirection(commands.get(0).getRunDirection());
+                                    moveCommand.setRunSpeed((short) 1000);
+                                    moveCommand.setCommandEnd((short) 1);
+                                    commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
+                                }
                                 assignCommand.setCommands(commands);
                                 //鍒嗛厤鐩爣搴撲綅
                                 shuttleProtocol.setLocNo(wrkMast.getLocNo());
@@ -847,14 +865,22 @@
 
             ShuttleCommand command = new ShuttleCommand();
             command.setCommandWord((short) 1);
-            command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY()));
-            command.setMiddleCodeNum((short) 0);
-            command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY()));
+
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
+            command.setStartCodeNum(startCodeNum);
+
+            command.setMiddleCodeNum((short) 1);
+
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
+            command.setDistCodeNum(distCodeNum);
+
             command.setStartToDistDistance(allDistance);
-            command.setMiddleToDistDistance(1000);
+            command.setMiddleToDistDistance(0);
             command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id);
             command.setPalletLift((short) 1);
-            command.setForceMoveDistance(1000);
+            command.setForceMoveDistance(0);
             command.setChargeSwitch((short) 2);
             command.setIOControl((short) 0);
             command.setRunSpeed((short) 1000);
@@ -886,14 +912,22 @@
 
             ShuttleCommand command = new ShuttleCommand();
             command.setCommandWord((short) 1);
-            command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY()));
-            command.setMiddleCodeNum((short) 0);
-            command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY()));
+
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
+            command.setStartCodeNum(startCodeNum);
+
+            command.setMiddleCodeNum((short) 1);
+
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
+            command.setDistCodeNum(distCodeNum);
+
             command.setStartToDistDistance(allDistance);
-            command.setMiddleToDistDistance(1000);
+            command.setMiddleToDistDistance(0);
             command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id);
             command.setPalletLift((short) 1);
-            command.setForceMoveDistance(1000);
+            command.setForceMoveDistance(0);
             command.setChargeSwitch((short) 2);
             command.setIOControl((short) 0);
             command.setRunSpeed((short) 1000);
@@ -926,14 +960,22 @@
 
             command = new ShuttleCommand();
             command.setCommandWord((short) 1);
-            command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY()));
-            command.setMiddleCodeNum((short) 0);
-            command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY()));
+
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
+            command.setStartCodeNum(startCodeNum);
+
+            command.setMiddleCodeNum((short) 1);
+
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
+            command.setDistCodeNum(distCodeNum);
+
             command.setStartToDistDistance(allDistance);
-            command.setMiddleToDistDistance(1000);
+            command.setMiddleToDistDistance(0);
             command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id);
             command.setPalletLift((short) 1);
-            command.setForceMoveDistance(1000);
+            command.setForceMoveDistance(0);
             command.setChargeSwitch((short) 2);
             command.setIOControl((short) 0);
             command.setRunSpeed((short) 1000);
@@ -1052,6 +1094,19 @@
                         }
                     } else if (wrkMast.getWrkSts() == 25) {
                         List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo);
+                        //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
+                        BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭�
+                        ShuttleCommand moveCommand = new ShuttleCommand();
+                        moveCommand.setCommandWord((short) 1);//灏忚溅绉诲姩鎸囦护瀛�
+                        moveCommand.setStartCodeNum(Short.parseShort(basDevp.getQrCodeValue()));//鎻愬崌鏈轰簩缁寸爜
+                        moveCommand.setDistCodeNum(commands.get(0).getStartCodeNum());
+                        moveCommand.setStartToDistDistance(1300);
+                        moveCommand.setMiddleToDistDistance(0);
+                        moveCommand.setRunDirection(commands.get(0).getRunDirection());
+                        moveCommand.setRunSpeed((short) 1000);
+                        moveCommand.setCommandEnd((short) 1);
+                        commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
+
                         //鍒嗛厤鐩爣搴撲綅
                         shuttleProtocol.setLocNo(wrkMast.getSourceLocNo());
                         //鐩爣搴撲綅
@@ -2918,10 +2973,129 @@
      */
     public void recErr() {
         try {
+            this.recShuttleErr();
             this.recCrnErr();
             this.recSteErr();
         } catch (Exception e) {
             News.error("recErr fail", e);
+        }
+    }
+
+    /**
+     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
+     */
+    private void recShuttleErr() {
+        Date now = new Date();
+        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+            if (shuttleThread == null) {
+                continue;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+
+            if (shuttleProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo().intValue());
+                // 鏈夊紓甯�
+                if (latest == null) {
+                    if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
+                        WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo());
+                        if (wrkMast == null) {
+                            continue;
+                        }
+                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
+                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
+                                null,    // 缂栧彿
+                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
+                                null,    // plc
+                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                wrkMast.getStaNo(),    // 鐩爣绔�
+                                wrkMast.getSourceStaNo(),    // 婧愮珯
+                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                wrkMast.getBarcode(),    // 鏉$爜
+                                (int) shuttleProtocol.getStatusErrorCode(),    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "浠诲姟涓紓甯�"    // 澶囨敞
+                        );
+                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
+                        }
+                    }
+                } else {
+                    // 寮傚父淇
+                    if (shuttleProtocol.getStatusErrorCode() == null || shuttleProtocol.getStatusErrorCode() == 0) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basShuttleErrLogService.updateById(latest)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
+                        }
+                    }
+                }
+            }else {
+                //鏃犱换鍔�
+                BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId());
+                // 鏈夊紓甯�
+                if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
+                    // 璁板綍鏂板紓甯�
+                    if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) {
+                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
+                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
+                                null,    // 缂栧彿
+                                null,    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                null,    // 宸ヤ綔鐘舵��
+                                null,    // 鍏ュ嚭搴撶被鍨�
+                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
+                                null,    // plc
+                                null,    // 鐩爣搴撲綅
+                                null,    // 鐩爣绔�
+                                null,    // 婧愮珯
+                                null,    // 婧愬簱浣�
+                                null,    // 鏉$爜
+                                (int)shuttleProtocol.getStatusErrorCode(),    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "鏃犱换鍔″紓甯�"    // 澶囨敞
+                        );
+                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
+                        }
+                    }
+                    // 鏃犲紓甯�
+                } else {
+                    // 寮傚父淇
+                    if (latest != null && latest.getStatus() == 1) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basShuttleErrLogService.updateById(latest)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
+                        }
+                    }
+                }
+            }
         }
     }
 
@@ -3643,8 +3817,8 @@
 
         } else if (wrkCharge.getWrkSts() == 56) {
             //鍏呯數涓�
-            //鍒ゆ柇灏忚溅鏄惁鍏呮弧鐢甸噺
-            if (shuttleProtocol.getBatteryPower() == 1000) {
+            //鍒ゆ柇灏忚溅鏄惁鍏呮弧鐢甸噺锛屾弧鐢�1000鎴栫數鍘�54V浠ヤ笂
+            if (shuttleProtocol.getBatteryPower() >= 1000 || shuttleProtocol.getCurrentVoltage() >= 540) {
                 //鍏呮弧锛屾柇寮�鍏呯數
                 List<ShuttleCommand> commands = new ArrayList<>();
                 ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();

--
Gitblit v1.9.1