From 8b71bde8d68d5d2bb11fa51a297990cd1474e9c6 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 29 十一月 2023 14:58:09 +0800
Subject: [PATCH] #指令更新

---
 src/main/java/com/zy/asrs/task/TaskLogScheduler.java               |   13 +
 src/main/java/com/zy/asrs/controller/SiteController.java           |    3 
 src/main/java/com/zy/core/thread/LedThread.java                    |    3 
 src/main/webapp/views/commandManage/commandManage.html             |    4 
 src/main/java/com/zy/core/model/protocol/CrnProtocol.java          |    3 
 src/main/java/com/zy/asrs/utils/CommandUtils.java                  |   32 +
 src/main/java/com/zy/core/enums/CommandStatusType.java             |   45 +++
 src/main/webapp/views/taskWrk/taskWrk.html                         |    2 
 src/main/java/com/zy/asrs/utils/Utils.java                         |   22 +
 src/main/java/com/zy/core/MainProcess.java                         |    2 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java            |   55 +++-
 src/main/resources/mapper/CommandInfoMapper.xml                    |    6 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java        |  239 +++++++++++++------
 src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java            |    2 
 src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java     |   69 +++++
 src/main/java/com/zy/asrs/controller/CrnController.java            |   19 
 src/main/resources/mapper/TaskWrkMapper.xml                        |    7 
 src/main/java/com/zy/asrs/controller/CommandInfoController.java    |    5 
 src/main/java/com/zy/core/thread/SiemensCrnThread.java             |   41 ++-
 src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java                |    2 
 src/main/java/com/zy/asrs/entity/CommandInfo.java                  |    9 
 src/main/java/com/zy/core/enums/CommandType.java                   |   43 +++
 src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java |   16 +
 src/main/java/com/zy/asrs/service/CommandInfoService.java          |    4 
 src/main/webapp/views/taskWrk/commandManage.html                   |   44 +-
 25 files changed, 534 insertions(+), 156 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/CommandInfoController.java b/src/main/java/com/zy/asrs/controller/CommandInfoController.java
index b949f51..52b6afb 100644
--- a/src/main/java/com/zy/asrs/controller/CommandInfoController.java
+++ b/src/main/java/com/zy/asrs/controller/CommandInfoController.java
@@ -15,6 +15,7 @@
 import com.core.common.R;
 import com.zy.common.web.BaseController;
 import com.zy.core.cache.MessageQueue;
+import com.zy.core.enums.CommandStatusType;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CommandPackage;
@@ -149,7 +150,7 @@
             return R.error("鎸囦护涓嶅瓨鍦�");
         }
 
-        commandInfo.setCommandStatus(2);//鎵ц鐘舵��
+        commandInfo.setCommandStatus(CommandStatusType.EXECUTE.id);//鎵ц鐘舵��
         commandInfo.setExecuteTime(new Date());
         if (commandInfoService.updateById(commandInfo)) {
             //灏嗘寚浠よ繘琛屾姇閫�
@@ -181,7 +182,7 @@
             return R.error("鎸囦护涓嶅瓨鍦�");
         }
 
-        commandInfo.setCommandStatus(3);//瀹屾垚鐘舵��
+        commandInfo.setCommandStatus(CommandStatusType.COMPLETE.id);//瀹屾垚鐘舵��
         commandInfo.setCompleteTime(new Date());
         commandInfoService.updateById(commandInfo);
         return R.ok();
diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index e7b9991..fe5a746 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -1,10 +1,7 @@
 package com.zy.asrs.controller;
 
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.plugins.Page;
 import com.core.annotations.ManagerAuth;
 import com.core.common.Cools;
 import com.core.common.R;
@@ -22,8 +19,8 @@
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.service.impl.MainServiceImpl;
+import com.zy.asrs.utils.CommandUtils;
 import com.zy.asrs.utils.VersionUtils;
-import com.zy.common.utils.HttpHandler;
 import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
@@ -575,7 +572,7 @@
                 crnCommand.setCommand((short) 0);  // 浠诲姟瀹屾垚纭浣�
                 // 寤舵椂鍙戦��
                 Thread.sleep(1000L);
-                if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
+                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand), false)) {
                     return R.ok();
                 } else {
                     throw new CoolException("鍛戒护涓嬪彂澶辫触");
@@ -685,7 +682,7 @@
                 }
                 // 绌洪棽鍒ゆ柇
 //                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
-                if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(4, command))) {
+                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(4, command), false)) {
                     return true;
                 } else {
                     throw new CoolException("鍛戒护涓嬪彂澶辫触");
@@ -719,11 +716,11 @@
                 }
                 // 绌洪棽鍒ゆ柇
 //                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
-                    if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
-                        return true;
-                    } else {
-                        throw new CoolException("鍛戒护涓嬪彂澶辫触");
-                    }
+                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(2, command), false)) {
+                    return true;
+                } else {
+                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
+                }
 //                } else {
 //                    throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ┖闂茬姸鎬�");
 //                }
diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java
index d3fd0ff..9cc5b94 100644
--- a/src/main/java/com/zy/asrs/controller/SiteController.java
+++ b/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -8,6 +8,7 @@
 import com.zy.asrs.domain.vo.SiteTableVo;
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.utils.CommandUtils;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.cache.SlaveConnection;
@@ -236,7 +237,7 @@
                         basDevp.setOutEnable(outEnable ? "Y" : "N");
                     }
                     basDevpService.updateById(basDevp);
-                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol), false);
                     if (result) {
                         return R.ok();
                     } else {
diff --git a/src/main/java/com/zy/asrs/entity/CommandInfo.java b/src/main/java/com/zy/asrs/entity/CommandInfo.java
index 94ca935..e49b7bc 100644
--- a/src/main/java/com/zy/asrs/entity/CommandInfo.java
+++ b/src/main/java/com/zy/asrs/entity/CommandInfo.java
@@ -5,6 +5,8 @@
 import com.baomidou.mybatisplus.annotations.TableField;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+
+import com.zy.core.enums.CommandType;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -181,5 +183,12 @@
         }
     }
 
+    public String getCommandType$() {
+        if (Cools.isEmpty(this.commandType)) {
+            return "";
+        }
+        return CommandType.get(this.commandType).desc;
+    }
+
 
 }
diff --git a/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java b/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java
index b26a4bf..3b0dad5 100644
--- a/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java
@@ -17,4 +17,6 @@
 
     List<CommandInfo> selectByTaskNo(String taskNo);
 
+    List<CommandInfo> selectCompleteManualCommand();//鏌ヨ宸插畬鎴愮殑鎵嬪姩鍛戒护
+
 }
diff --git a/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java b/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
index 17b4e46..4341661 100644
--- a/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
@@ -38,4 +38,6 @@
 
     int saveToHistory(String taskNo);//灏嗕换鍔¤浆鍘嗗彶鏃ュ織
 
+    List<TaskWrk> selectWorkingTask();//鑾峰彇宸ヤ綔涓殑浠诲姟
+
 }
diff --git a/src/main/java/com/zy/asrs/service/CommandInfoService.java b/src/main/java/com/zy/asrs/service/CommandInfoService.java
index 181ca55..eaed3cb 100644
--- a/src/main/java/com/zy/asrs/service/CommandInfoService.java
+++ b/src/main/java/com/zy/asrs/service/CommandInfoService.java
@@ -15,4 +15,8 @@
 
     int saveToHistory(String taskNo);//灏嗘寚浠よ浆鏃ュ織
 
+    boolean saveToHistory(Integer id);//灏嗘寚浠よ浆鏃ュ織
+
+    List<CommandInfo> selectCompleteManualCommand();//鏌ヨ宸插畬鎴愮殑鎵嬪姩鍛戒护
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java
index ab8300c..15f2a53 100644
--- a/src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java
@@ -49,4 +49,20 @@
         }
         return count;
     }
+
+    @Override
+    public boolean saveToHistory(Integer id) {
+        CommandInfo commandInfo = this.baseMapper.selectById(id);
+        String jsonString = JSON.toJSONString(commandInfo);
+        CommandInfoLog commandInfoLog = JSON.parseObject(jsonString, CommandInfoLog.class);
+        commandInfoLog.setId(null);
+        boolean result1 = commandInfoLogService.insert(commandInfoLog);
+        Integer result2 = this.baseMapper.deleteById(id);
+        return result1 && result2 > 0;
+    }
+
+    @Override
+    public List<CommandInfo> selectCompleteManualCommand() {
+        return this.baseMapper.selectCompleteManualCommand();
+    }
 }
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 5c03577..6aed8dc 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
+import com.zy.asrs.domain.enums.TaskStatusType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
 import com.zy.asrs.mapper.*;
@@ -74,6 +75,8 @@
     private ConfigService configService;
     @Autowired
     private StaDescMapper staDescMapper;
+    @Autowired
+    private CommandInfoService commandInfoService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -203,31 +206,21 @@
                                     && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
-                                // 涓嬪彂绔欑偣淇℃伅
-                                staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
-                                String targetPoint = taskWrk.getTargetPoint();
-                                int i = Integer.parseInt(targetPoint);
-                                staProtocol.setStaNo((short)i);
-                                if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
-                                    continue;
+                                //鍙栧嚭杈撻�佺嚎鍛戒护
+                                List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskWrk.getTaskNo());
+                                if (commandInfos.isEmpty()) {
+                                    continue;//鍛戒护绌�
+                                }
+                                Integer commandStep = taskWrk.getCommandStep();
+                                CommandInfo commandInfo = commandInfos.get(commandStep);
+                                StaProtocol staProtocol1 = JSON.parseObject(commandInfo.getCommand(), StaProtocol.class);
+                                if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol1))) {
+                                    log.error("杈撻�佺嚎鍛戒护涓嬫柟澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", taskWrk.getWrkNo());
+                                    continue;//鍛戒护涓嬪彂澶辫触
                                 }
 
-                                // 鏇存柊宸ヤ綔妗g姸鎬佷负14
-                                taskWrk.setWrkSts(14);
-                                if (taskWrkMapper.updateById(taskWrk) != 0) {
-                                    // 澶嶄綅鍫嗗灈鏈�
-                                    crnThread.setResetFlag(true);
-
-                                    //鏇存柊搴撲綅鐘舵��
-                                    LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
-                                    locMast.setLocSts("O");//O.绌哄簱浣�
-                                    locMast.setBarcode("");//鎵樼洏鐮�
-                                    locMast.setModiTime(new Date());
-                                    locMast.setModiUser(9999L);
-                                    locMastService.updateById(locMast);
-                                } else {
-                                    log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", taskWrk.getWrkNo());
-                                }
+                                // 澶嶄綅鍫嗗灈鏈�
+                                crnThread.setResetFlag(true);
 
                             }
                         }
@@ -328,20 +321,16 @@
                     continue;
                 }
 
-                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                CrnCommand crnCommand = new CrnCommand();
-                crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
-                crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
-                crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鍒�
-                crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅灞�
-                crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鎺�
-                crnCommand.setCommand((short)1);
-                if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
+                //鍙栧嚭鍛戒护
+                List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskWrk.getTaskNo());
+                Integer commandStep = taskWrk.getCommandStep();
+                if (commandInfos.isEmpty()) {
+                    continue;//鍛戒护绌�
+                }
+                CommandInfo commandInfo = commandInfos.get(commandStep);
+                CrnCommand crnCommand = JSON.parseObject(commandInfo.getCommand(), CrnCommand.class);//鍙栧嚭鍛戒护鎶ユ枃
+
+                if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                     log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                 } else {
                     // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
@@ -352,6 +341,31 @@
                         log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", taskWrk.getWrkNo());
                     }
                 }
+
+//                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+//                CrnCommand crnCommand = new CrnCommand();
+//                crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+//                crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+//                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+//                crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+//                crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+//                crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+//                crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鍒�
+//                crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅灞�
+//                crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鎺�
+//                crnCommand.setCommand((short)1);
+//                if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
+//                    log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
+//                } else {
+//                    // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
+//                    Date now = new Date();
+//                    taskWrk.setWrkSts(3);
+//                    taskWrk.setModiTime(now);
+//                    if (taskWrkMapper.updateById(taskWrk) == 0) {
+//                        log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", taskWrk.getWrkNo());
+//                    }
+//                }
             }
 
             return;
@@ -447,20 +461,16 @@
                             }
                         }
 
-                        // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
-                        CrnCommand crnCommand = new CrnCommand();
-                        crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                        crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                        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))) {
+                        //鍙栧嚭鍛戒护
+                        List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskWrk.getTaskNo());
+                        Integer commandStep = taskWrk.getCommandStep();
+                        if (commandInfos.isEmpty()) {
+                            continue;//鍛戒护绌�
+                        }
+                        CommandInfo commandInfo = commandInfos.get(commandStep);
+                        CrnCommand crnCommand = JSON.parseObject(commandInfo.getCommand(), CrnCommand.class);//鍙栧嚭鍛戒护鎶ユ枃
+
+                        if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                             log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                         } else {
                             // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
@@ -550,37 +560,68 @@
             if (crnProtocol == null) { continue; }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.getTaskFinish() == 0 && crnProtocol.statusType == CrnStatusType.HANDLING_COMPLETED && crnProtocol.getTaskNo() != 0) {
-                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                TaskWrk taskWrk = taskWrkMapper.selectCrnNoWorking(crn.getId(),crnProtocol.getTaskNo().intValue());
-                if (Cools.isEmpty(taskWrk)) {
-                    log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+
+                //鑾峰彇鎸囦护ID
+                Integer commandId = crnProtocol.getCommandId();
+                CommandInfo commandInfo = commandInfoService.selectById(commandId);
+                if (commandInfo == null) {
+                    //鎸囦护涓嶅瓨鍦�
                     continue;
                 }
-                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                if ((taskWrk.getWrkSts() == 3 && taskWrk.getIoType() == 1) || (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 3)) {
-                    taskWrk.setWrkSts(4);
-                } else {
-                    continue;
-                }
-                Date now = new Date();
-                taskWrk.setModiTime(now);
-                Integer integerTaskWrk = taskWrkMapper.updateById(taskWrk);
-                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                if (integerTaskWrk > 0) {
+
+                commandInfo.setCommandStatus(CommandStatusType.COMPLETE.id);//鎸囦护瀹屾垚
+                commandInfo.setCompleteTime(new Date());//鎸囦护瀹屾垚鏃堕棿
+                if (commandInfoService.updateById(commandInfo)) {//淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
                     // 鍫嗗灈鏈哄浣�
                     crnThread.setResetFlag(true);
-
-                    //鏇存柊搴撲綅鐘舵��
-                    LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
-                    locMast.setLocSts("F");//F.鍦ㄥ簱
-                    locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
-                    locMast.setModiTime(now);
-                    locMast.setModiUser(9999L);
-                    locMastService.updateById(locMast);
                 }
             }
         }
     }
+
+//    /**
+//     * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
+//     */
+//    @Async
+//    public void storeFinished() {
+//        for (CrnSlave crn : slaveProperties.getCrn()) {
+//            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+//            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+//            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+//            if (crnProtocol == null) { continue; }
+//            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+//            if (crnProtocol.getTaskFinish() == 0 && crnProtocol.statusType == CrnStatusType.HANDLING_COMPLETED && crnProtocol.getTaskNo() != 0) {
+//                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+//                TaskWrk taskWrk = taskWrkMapper.selectCrnNoWorking(crn.getId(),crnProtocol.getTaskNo().intValue());
+//                if (Cools.isEmpty(taskWrk)) {
+//                    log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+//                    continue;
+//                }
+//                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+//                if ((taskWrk.getWrkSts() == 3 && taskWrk.getIoType() == 1) || (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 3)) {
+//                    taskWrk.setWrkSts(4);
+//                } else {
+//                    continue;
+//                }
+//                Date now = new Date();
+//                taskWrk.setModiTime(now);
+//                Integer integerTaskWrk = taskWrkMapper.updateById(taskWrk);
+//                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+//                if (integerTaskWrk > 0) {
+//                    // 鍫嗗灈鏈哄浣�
+//                    crnThread.setResetFlag(true);
+//
+//                    //鏇存柊搴撲綅鐘舵��
+//                    LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
+//                    locMast.setLocSts("F");//F.鍦ㄥ簱
+//                    locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
+//                    locMast.setModiTime(now);
+//                    locMast.setModiUser(9999L);
+//                    locMastService.updateById(locMast);
+//                }
+//            }
+//        }
+//    }
 
     /**
      * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
@@ -721,5 +762,55 @@
         }
     }
 
+    //鑷姩瀹屾垚浠诲姟
+    public synchronized void autoCompleteTask() {
+        List<TaskWrk> taskWrks = taskWrkMapper.selectWorkingTask();
+        for (TaskWrk taskWrk : taskWrks) {
+            //鑾峰彇鍛戒护闆嗗悎
+            List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskWrk.getTaskNo());
+            if ((taskWrk.getCommandStep() + 1) != commandInfos.size()) {
+                continue;//褰撳墠姝ュ簭娌℃湁鍒拌揪鏈�鍚庝竴鏉″懡浠�
+            }
+
+            //鍒ゆ柇鏈鍛戒护鏄惁鎵ц瀹屾垚
+            CommandInfo commandInfo = commandInfos.get(commandInfos.size() - 1);
+            if (commandInfo.getCommandStatus() != CommandStatusType.COMPLETE.id) {
+                continue;//鎸囦护鏈畬鎴�
+            }
+
+            Date now = new Date();
+            //鎸囦护宸插畬鎴愶紝鏇存柊浠诲姟
+            if (taskWrk.getIoType() == 1) {
+                //鍏ュ簱浠诲姟
+                taskWrk.setWrkSts(4);//3.鍚婅溅鍏ュ簱涓� => 4.鍏ュ簱瀹屾垚
+                taskWrk.setStatus(TaskStatusType.COMPLETE.id);
+                taskWrk.setModiTime(now);
+                taskWrkService.updateById(taskWrk);
+
+                //鏇存柊搴撲綅鐘舵��
+                LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
+                locMast.setLocSts("F");//F.鍦ㄥ簱
+                locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
+                locMast.setModiTime(now);
+                locMast.setModiUser(9999L);
+                locMastService.updateById(locMast);
+            } else if (taskWrk.getIoType() == 2) {
+                //鍑哄簱浠诲姟
+                taskWrk.setWrkSts(14);//12.鍚婅溅鍑哄簱涓� => 14.鍑哄簱瀹屾垚
+                taskWrk.setStatus(TaskStatusType.COMPLETE.id);
+                taskWrk.setModiTime(now);
+                taskWrkService.updateById(taskWrk);
+
+                //鏇存柊搴撲綅鐘舵��
+                LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
+                locMast.setLocSts("O");//O.绌哄簱浣�
+                locMast.setBarcode("");//鎵樼洏鐮�
+                locMast.setModiTime(now);
+                locMast.setModiUser(9999L);
+                locMastService.updateById(locMast);
+            }
+        }
+    }
+
 
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
index 5534011..2393ee9 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.core.exception.CoolException;
 import com.zy.asrs.domain.enums.TaskStatusType;
 import com.zy.asrs.domain.enums.WorkNoType;
@@ -9,7 +10,18 @@
 import com.zy.asrs.service.StaDescService;
 import com.zy.asrs.service.TaskWrkService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.utils.CommandUtils;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.service.CommonService;
+import com.zy.core.DevpThread;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.CrnTaskModeType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.CrnSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.protocol.StaProtocol;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -17,6 +29,7 @@
 import java.util.Date;
 import java.util.List;
 
+@Slf4j
 @Service("taskWrkService")
 public class TaskWrkServiceImpl extends ServiceImpl<TaskWrkMapper, TaskWrk> implements TaskWrkService {
 
@@ -75,7 +88,7 @@
         //鍏ュ簱浠诲姟娲惧彂
         StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getStartPoint()));
         if (staDesc == null) {
-            return;//涓嶅瓨鍦ㄨ矾寰�
+            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
         }
         int workNo = commonService.getWorkNo(WorkNoType.PAKIN.type);//鑾峰彇鍏ュ簱宸ヤ綔鍙�
         taskWrk.setWrkNo(workNo);//宸ヤ綔鍙�
@@ -86,6 +99,28 @@
         taskWrk.setModiTime(new Date());
         taskWrk.setModiUser(userId);
         updateById(taskWrk);
+
+        CrnSlave.CrnStn crnStn = Utils.getCrnStnByStaNo(staDesc.getCrnStn(), true);
+        if (crnStn == null) {
+            throw new CoolException("鍫嗗灈鏈哄叆搴撶珯涓嶅瓨鍦�");
+        }
+        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+        CrnCommand crnCommand = new CrnCommand();
+        crnCommand.setCrnNo(staDesc.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+        crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+        crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+        crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+        crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+        crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鍒�
+        crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅灞�
+        crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鎺�
+        crnCommand.setCommand((short)1);
+        if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
+            log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
+            throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
+        }
     }
 
     @Override
@@ -104,6 +139,38 @@
         taskWrk.setModiTime(new Date());
         taskWrk.setModiUser(userId);
         updateById(taskWrk);
+
+        CrnSlave.CrnStn crnStn = Utils.getCrnStnByStaNo(staDesc.getCrnStn(), false);
+        if (crnStn == null) {
+            throw new CoolException("鍫嗗灈鏈哄嚭搴撶珯涓嶅瓨鍦�");
+        }
+        //鐢熸垚鍫嗗灈鏈哄嚭搴撳懡浠�
+        CrnCommand crnCommand = new CrnCommand();
+        crnCommand.setCrnNo(taskWrk.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+        crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+        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));
+            throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
+        }
+
+        //鐢熸垚杈撻�佺嚎鍛戒护
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+        StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone();
+        staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
+        staProtocol.setStaNo((short) Integer.parseInt(taskWrk.getTargetPoint()));
+        if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+            log.error("杈撻�佺嚎鍛戒护鐢熸垚澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
+            throw new CoolException("杈撻�佺嚎鍛戒护鐢熸垚澶辫触");
+        }
     }
 
     @Override
diff --git a/src/main/java/com/zy/asrs/task/TaskLogScheduler.java b/src/main/java/com/zy/asrs/task/TaskLogScheduler.java
index 129be0a..d467c61 100644
--- a/src/main/java/com/zy/asrs/task/TaskLogScheduler.java
+++ b/src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -14,6 +14,8 @@
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * 瀹氭椂灏嗕换鍔�(瀹屾垚銆佸彇娑�)杞垚鏃ュ織
  */
@@ -55,4 +57,15 @@
         }
     }
 
+    //娓呯悊鎵嬪姩鍛戒护
+    @Scheduled(cron = "0/3 * * * * ? ")
+    public void ManualCommandClean() {
+        List<CommandInfo> commandInfos = commandInfoService.selectCompleteManualCommand();
+        for (CommandInfo commandInfo : commandInfos) {
+            //鎸囦护杞棩蹇�
+            commandInfoService.saveToHistory(commandInfo.getId());
+        }
+
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/utils/CommandUtils.java b/src/main/java/com/zy/asrs/utils/CommandUtils.java
index 38635d0..a18ce22 100644
--- a/src/main/java/com/zy/asrs/utils/CommandUtils.java
+++ b/src/main/java/com/zy/asrs/utils/CommandUtils.java
@@ -7,6 +7,8 @@
 import com.zy.asrs.service.CommandInfoService;
 import com.zy.asrs.service.TaskWrkService;
 import com.zy.core.cache.MessageQueue;
+import com.zy.core.enums.CommandStatusType;
+import com.zy.core.enums.CommandType;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
@@ -18,6 +20,10 @@
 public class CommandUtils {
 
     public static boolean offer(SlaveType type, Integer id, Task task) {
+        return offer(type, id, task, true);
+    }
+
+    public static boolean offer(SlaveType type, Integer id, Task task, Boolean auto) {
         CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
         if (commandInfoService == null) {
             return false;
@@ -36,7 +42,7 @@
             CommandPackage<CrnCommand> commandPackage = new CommandPackage<>();
             CrnCommand command = (CrnCommand) task.getData();
             wrkNo = command.getTaskNo();
-            if (wrkNo != 0) {
+            if (auto && wrkNo != 0) {
                 taskWrk = taskWrkService.selectByWrkNo(wrkNo);
                 taskNo = taskWrk.getTaskNo();
             }
@@ -44,9 +50,10 @@
             commandInfo = new CommandInfo();
             commandInfo.setWrkNo(wrkNo);
             commandInfo.setTaskNo(taskNo);
-            commandInfo.setCommandStatus(1);
+            commandInfo.setCommandStatus(CommandStatusType.CREATE.id);
             commandInfo.setStartTime(new Date());
             commandInfo.setDevice(SlaveType.Crn.toString());
+            commandInfo.setCommandType(auto? CommandType.AUTO.id : CommandType.MANUAL.id);
 
             commandInfoService.insert(commandInfo);//鎻掑叆鎸囦护
 
@@ -57,16 +64,18 @@
             commandInfo.setCommand(JSON.toJSONString(commandPackage));
             commandInfoService.updateById(commandInfo);
 
-            //灏嗘寚浠よ繘琛屾姇閫�
-            if (!MessageQueue.offer(type, id, task)) {
-                return false;
+            if (!auto) {
+                //灏嗘寚浠よ繘琛屾姇閫�
+                if (!MessageQueue.offer(type, id, task)) {
+                    return false;
+                }
             }
             return true;
         } else if (type == SlaveType.Devp) {
             CommandPackage<StaProtocol> commandPackage = new CommandPackage<>();
             StaProtocol staProtocol = (StaProtocol) task.getData();
             wrkNo = staProtocol.getWorkNo();
-            if (wrkNo != 0) {
+            if (auto && wrkNo != 0) {
                 taskWrk = taskWrkService.selectByWrkNo(wrkNo);
                 taskNo = taskWrk.getTaskNo();
             }
@@ -74,9 +83,10 @@
             commandInfo = new CommandInfo();
             commandInfo.setWrkNo(wrkNo);
             commandInfo.setTaskNo(taskNo);
-            commandInfo.setCommandStatus(1);
+            commandInfo.setCommandStatus(CommandStatusType.CREATE.id);
             commandInfo.setStartTime(new Date());
             commandInfo.setDevice(SlaveType.Devp.toString());
+            commandInfo.setCommandType(auto? CommandType.AUTO.id : CommandType.MANUAL.id);
 
             commandInfoService.insert(commandInfo);//鎻掑叆鎸囦护
 
@@ -87,9 +97,11 @@
             commandInfo.setCommand(JSON.toJSONString(commandPackage));//淇濆瓨鍛戒护鎶ユ枃
             commandInfoService.updateById(commandInfo);
 
-            //灏嗘寚浠よ繘琛屾姇閫�
-            if (!MessageQueue.offer(type, id, task)) {
-                return false;
+            if (!auto) {
+                //灏嗘寚浠よ繘琛屾姇閫�
+                if (!MessageQueue.offer(type, id, task)) {
+                    return false;
+                }
             }
             return true;
         }
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 4342fb5..cc56ed7 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -2,6 +2,8 @@
 
 import com.core.common.Arith;
 import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.core.model.CrnSlave;
 import com.zy.core.properties.SlaveProperties;
 
 import java.text.DecimalFormat;
@@ -275,6 +277,26 @@
 
     }
 
+    public static CrnSlave.CrnStn getCrnStnByStaNo(Integer staNo, Boolean pakIn) {
+        SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            List<CrnSlave.CrnStn> crnInStn = null;
+            if (pakIn) {
+                crnInStn = crn.getCrnInStn();
+            }else {
+                crnInStn = crn.getCrnOutStn();
+            }
+
+            for (CrnSlave.CrnStn crnStn : crnInStn) {
+                if (crnStn.getStaNo().equals(staNo)) {
+                    return crnStn;
+                }
+            }
+        }
+
+        return null;
+    }
+
     public static void main(String[] args) {
 //        SlaveProperties slaveProperties = new SlaveProperties();
 //        slaveProperties.setDoubleDeep(true);
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index b213ca1..8fdd89c 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -70,6 +70,8 @@
 
                     //鑷姩娲惧彂浠诲姟
                     mainService.autoDistribute();
+                    //鑷姩瀹屾垚浠诲姟
+                    mainService.autoCompleteTask();
 
                 } catch (Exception e) {
                     e.printStackTrace();
diff --git a/src/main/java/com/zy/core/enums/CommandStatusType.java b/src/main/java/com/zy/core/enums/CommandStatusType.java
new file mode 100644
index 0000000..ac0943a
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/CommandStatusType.java
@@ -0,0 +1,45 @@
+package com.zy.core.enums;
+
+/**
+ * 鎸囦护绫诲瀷鏋氫妇
+ */
+public enum CommandStatusType {
+
+    CREATE(1, "鎸囦护鍒涘缓"),   //鍒涘缓
+    EXECUTE(2, "鎸囦护鎵ц涓�"),   //鎵ц
+    COMPLETE(3, "鎸囦护瀹屾垚"),  //瀹屾垚
+    ;
+
+    public Integer id;
+    public String desc;
+
+    CommandStatusType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static CommandStatusType get(Integer id) {
+        if (null == id) {
+            return null;
+        }
+        for (CommandStatusType type : CommandStatusType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static CommandStatusType get(CommandStatusType type) {
+        if (null == type) {
+            return null;
+        }
+        for (CommandStatusType type1 : CommandStatusType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/enums/CommandType.java b/src/main/java/com/zy/core/enums/CommandType.java
new file mode 100644
index 0000000..7b40fbc
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/CommandType.java
@@ -0,0 +1,43 @@
+package com.zy.core.enums;
+
+public enum CommandType {
+
+
+    AUTO(1, "鑷姩鍛戒护"),   //鑷姩鍛戒护
+    MANUAL(2, "鎵嬪姩鍛戒护"),   //鎵嬪姩鍛戒护
+    ;
+
+    public Integer id;
+    public String desc;
+
+    CommandType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static CommandType get(Integer id) {
+        if (null == id) {
+            return null;
+        }
+        for (CommandType type : CommandType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static CommandType get(CommandType type) {
+        if (null == type) {
+            return null;
+        }
+        for (CommandType type1 : CommandType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
index 87c0781..77c0bd1 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -303,6 +303,9 @@
      */
     public Float yDuration = 0F;
 
+    //鎸囦护ID
+    private Integer commandId;
+
     public void setMode(Short mode) {
         this.mode = mode;
         this.modeType = CrnModeType.get(mode);
diff --git a/src/main/java/com/zy/core/thread/LedThread.java b/src/main/java/com/zy/core/thread/LedThread.java
index 569df3c..056c0e8 100644
--- a/src/main/java/com/zy/core/thread/LedThread.java
+++ b/src/main/java/com/zy/core/thread/LedThread.java
@@ -11,6 +11,7 @@
 import com.zy.core.Slave;
 import com.zy.core.ThreadHandler;
 import com.zy.core.cache.MessageQueue;
+import com.zy.core.enums.CommandStatusType;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.LedCommand;
@@ -120,7 +121,7 @@
             //鏇存柊鎸囦护鐘舵��
             CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
             CommandInfo commandInfo = command.getCommandInfo();
-            commandInfo.setCommandStatus(2);
+            commandInfo.setCommandStatus(CommandStatusType.COMPLETE.id);
             commandInfoService.updateById(commandInfo);
         }
 
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index f3d986c..caaad60 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -474,22 +474,24 @@
         CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);
         CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
         CommandInfo commandInfo = commandInfoService.selectById(command.getCommandId());
-        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("鎵嬪姩鍛戒护");
-        }
+        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) {
@@ -500,6 +502,13 @@
             commandInfoLog.setDeviceLog("鎸囦护涓嬪彂鎴愬姛");
             commandInfoLogService.insert(commandInfoLog);
 
+            //绾跨▼鏆傚瓨鎸囦护ID
+            crnProtocol.setCommandId(command.getCommandId());
+
+            //鏇存柊鎸囦护鐘舵��
+            commandInfo.setCommandStatus(CommandStatusType.EXECUTE.id);//鎵ц涓�
+            commandInfoService.updateById(commandInfo);
+
             //鏇存柊浠诲姟姝ュ簭
             TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
             TaskWrk taskWrk = taskWrkService.selectByWrkNo(command.getTaskNo().intValue());
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 7b417cf..6c52775 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -19,6 +19,7 @@
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.CommandStatusType;
 import com.zy.core.enums.IoModeType;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.DevpSlave;
@@ -423,22 +424,24 @@
         CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);
         CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
         CommandInfo commandInfo = commandInfoService.selectById(staProtocol.getCommandId());
-        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(staProtocol));
-            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("鎵嬪姩鍛戒护");
-        }
+        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(staProtocol));
+//            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("鎵嬪姩鍛戒护");
+//        }
 
         OperateResult writeResult;
         //浠诲姟涓嬪彂娆℃暟
@@ -461,12 +464,32 @@
                         //浠诲姟鍛戒护鍐欏叆鎴愬姛
                         writeFlag = true;
                         log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+                        //鏇存柊鎸囦护鐘舵��
+                        commandInfo.setCommandStatus(CommandStatusType.COMPLETE.id);//杈撻�佺嚎鐩存帴瀹屾垚鐘舵��
+                        commandInfoService.updateById(commandInfo);
+
+                        //鏇存柊鎸囦护鏃ュ織
+                        commandInfoLog.setDeviceLog("鎸囦护涓嬪彂鎴愬姛");
+                        commandInfoLogService.insert(commandInfoLog);
+
+                        //鏇存柊浠诲姟姝ュ簭
+                        TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
+                        TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo().intValue());
+                        if (taskWrk != null) {
+                            taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭
+                            taskWrkService.updateById(taskWrk);
+                        }
+
                         break;
                     } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
                         writeCount++;
                         OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
                                 slave.getId(), JSON.toJSON(staProtocol),writeCount));
                         log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                        //鏇存柊鎸囦护鏃ュ織
+                        commandInfoLog.setDeviceLog("鎸囦护涓嬪彂鎴愬姛");
+                        commandInfoLogService.insert(commandInfoLog);
                     }
                 } else {
                     writeCount++;
diff --git a/src/main/resources/mapper/CommandInfoMapper.xml b/src/main/resources/mapper/CommandInfoMapper.xml
index 230e6b8..e2158ff 100644
--- a/src/main/resources/mapper/CommandInfoMapper.xml
+++ b/src/main/resources/mapper/CommandInfoMapper.xml
@@ -34,4 +34,10 @@
         where task_no = #{taskNo}
     </select>
 
+    <select id="selectCompleteManualCommand" resultMap="BaseResultMap">
+        select * from wcs_command_info
+        where command_type = 2
+        and command_status = 3
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/TaskWrkMapper.xml b/src/main/resources/mapper/TaskWrkMapper.xml
index 103e228..bd0d313 100644
--- a/src/main/resources/mapper/TaskWrkMapper.xml
+++ b/src/main/resources/mapper/TaskWrkMapper.xml
@@ -126,4 +126,11 @@
         insert into wcs_task_wrk_log select * from wcs_task_wrk where task_no = #{taskNo} and (status=3 or status=4)
     </insert>
 
+    <select id="selectWorkingTask" resultMap="BaseResultMap">
+        select * from dbo.wcs_task_wrk
+        where (wrk_sts=3 and io_type = 1)
+        or (wrk_sts=12 and io_type = 2)
+        order by io_pri desc,create_time,wrk_no ASC
+    </select>
+
 </mapper>
diff --git a/src/main/webapp/views/commandManage/commandManage.html b/src/main/webapp/views/commandManage/commandManage.html
index c858206..539c90c 100644
--- a/src/main/webapp/views/commandManage/commandManage.html
+++ b/src/main/webapp/views/commandManage/commandManage.html
@@ -63,7 +63,7 @@
 						</el-table-column>
 						<el-table-column show-overflow-tooltip property="durationTime" label="鎸佺画鏃堕暱">
 						</el-table-column>
-						<el-table-column property="commandType" label="鎸囦护绫诲瀷">
+						<el-table-column property="commandType$" label="鎸囦护绫诲瀷">
 						</el-table-column>
 						<el-table-column property="device" label="璁惧">
 						</el-table-column>
@@ -196,7 +196,7 @@
 								break;
 							case "completeCommand":
 								//瀹屾垚鎸囦护
-								this.completeWrk(row)
+								this.completeCommand(row)
 								break;
 						}
 					},
diff --git a/src/main/webapp/views/taskWrk/commandManage.html b/src/main/webapp/views/taskWrk/commandManage.html
index e5cab77..ffa4f45 100644
--- a/src/main/webapp/views/taskWrk/commandManage.html
+++ b/src/main/webapp/views/taskWrk/commandManage.html
@@ -155,28 +155,30 @@
 							}
 						});
 
-						$.ajax({
-							url: baseUrl + "/taskWrk/" + this.tableSearchParam.wrk_no + "/auth",
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: data,
-							dataType: 'json',
-							contentType: 'application/json;charset=UTF-8',
-							method: 'GET',
-							success: function(res) {
-								if (res.code == 200) {
-									that.commandStep = parseInt(res.data.commandStep)
-								} else if (res.code === 403) {
-									top.location.href = baseUrl + "/";
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
+						if (this.tableSearchParam.wrk_no != null) {
+							$.ajax({
+								url: baseUrl + "/taskWrk/" + this.tableSearchParam.wrk_no + "/auth",
+								headers: {
+									'token': localStorage.getItem('token')
+								},
+								data: data,
+								dataType: 'json',
+								contentType: 'application/json;charset=UTF-8',
+								method: 'GET',
+								success: function(res) {
+									if (res.code == 200) {
+										that.commandStep = parseInt(res.data.commandStep)
+									} else if (res.code === 403) {
+										top.location.href = baseUrl + "/";
+									} else {
+										that.$message({
+											message: res.msg,
+											type: 'error'
+										});
+									}
 								}
-							}
-						});
+							});
+						}
 					},
 					handleSizeChange(val) {
 						console.log(`姣忛〉 ${val} 鏉);
diff --git a/src/main/webapp/views/taskWrk/taskWrk.html b/src/main/webapp/views/taskWrk/taskWrk.html
index c6d5c52..3553bee 100644
--- a/src/main/webapp/views/taskWrk/taskWrk.html
+++ b/src/main/webapp/views/taskWrk/taskWrk.html
@@ -277,7 +277,7 @@
 						});
 					},
 					completeWrk(row){
-						//娲惧彂浠诲姟
+						//瀹屾垚浠诲姟
 						let that = this
 						$.ajax({
 							url: baseUrl + "/taskWrk/complete/auth",

--
Gitblit v1.9.1