From 0e9686edc067b0779562bfa2452d49daf4cb7b18 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 10 八月 2023 14:59:33 +0800
Subject: [PATCH] 指令

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java        |   17 
 src/main/webapp/views/commandManage/commandManage.html             |   94 ++++++
 src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java            |    2 
 src/main/java/com/zy/core/cache/MessageQueue.java                  |    1 
 src/main/java/com/zy/core/model/command/CrnCommand.java            |    3 
 src/main/java/com/zy/asrs/controller/CommandInfoController.java    |   55 ++++
 src/main/java/com/zy/asrs/utils/CommandUtils.java                  |   85 +++---
 /dev/null                                                          |   23 -
 src/main/java/com/zy/core/model/protocol/StaProtocol.java          |    3 
 src/main/java/com/zy/core/thread/SiemensCrnThread.java             |   23 +
 src/main/webapp/views/taskWrk/taskWrk.html                         |    6 
 src/main/java/com/zy/asrs/entity/CommandInfo.java                  |   46 ++-
 src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java |    5 
 src/main/java/com/zy/asrs/controller/TaskWrkController.java        |   21 +
 src/main/java/com/zy/core/model/command/CommandPackage.java        |   23 +
 src/main/java/com/zy/asrs/service/CommandInfoService.java          |    2 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java            |   14 
 src/main/webapp/views/taskWrk/commandManage.html                   |  329 +++++++++++++++++++++++++
 src/main/resources/mapper/CommandInfoMapper.xml                    |    8 
 19 files changed, 638 insertions(+), 122 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/CommandInfoController.java b/src/main/java/com/zy/asrs/controller/CommandInfoController.java
index 5bd8726..b949f51 100644
--- a/src/main/java/com/zy/asrs/controller/CommandInfoController.java
+++ b/src/main/java/com/zy/asrs/controller/CommandInfoController.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -13,6 +14,12 @@
 import com.core.common.Cools;
 import com.core.common.R;
 import com.zy.common.web.BaseController;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.CommandPackage;
+import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.protocol.StaProtocol;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -40,7 +47,6 @@
         EntityWrapper<CommandInfo> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
-        wrapper.in("command_status", "1,2");
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(commandInfoService.selectPage(new Page<>(curr, limit), wrapper));
     }
@@ -55,7 +61,6 @@
         EntityWrapper<CommandInfo> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
-        wrapper.in("command_status", "3");
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(commandInfoService.selectPage(new Page<>(curr, limit), wrapper));
     }
@@ -136,4 +141,50 @@
         return R.ok();
     }
 
+    @PostMapping(value = "/commandInfo/executeCommand")
+    @ManagerAuth
+    public R executeCommand(@RequestParam("id") Integer id) {
+        CommandInfo commandInfo = commandInfoService.selectById(id);
+        if (commandInfo == null) {
+            return R.error("鎸囦护涓嶅瓨鍦�");
+        }
+
+        commandInfo.setCommandStatus(2);//鎵ц鐘舵��
+        commandInfo.setExecuteTime(new Date());
+        if (commandInfoService.updateById(commandInfo)) {
+            //灏嗘寚浠よ繘琛屾姇閫�
+            CommandPackage commandPackage = JSON.parseObject(commandInfo.getCommand(), CommandPackage.class);
+            SlaveType type = SlaveType.findInstance(commandInfo.getDevice());
+            if (type == null) {
+                return R.error("鏈煡璁惧");
+            }
+
+            switch (type) {
+                case Crn:
+                    CrnCommand crnCommand = JSON.parseObject(commandPackage.getCommand().toString(), CrnCommand.class);
+                    MessageQueue.offer(type, crnCommand.getCrnNo(), new Task(2, crnCommand));
+                    break;
+                case Devp:
+                    StaProtocol staProtocol = JSON.parseObject(commandPackage.getCommand().toString(), StaProtocol.class);
+                    MessageQueue.offer(type, staProtocol.getSiteId(), new Task(2, staProtocol));
+                    break;
+            }
+        }
+        return R.ok();
+    }
+
+    @PostMapping(value = "/commandInfo/completeCommand")
+    @ManagerAuth
+    public R completeCommand(@RequestParam("id") Integer id) {
+        CommandInfo commandInfo = commandInfoService.selectById(id);
+        if (commandInfo == null) {
+            return R.error("鎸囦护涓嶅瓨鍦�");
+        }
+
+        commandInfo.setCommandStatus(3);//瀹屾垚鐘舵��
+        commandInfo.setCompleteTime(new Date());
+        commandInfoService.updateById(commandInfo);
+        return R.ok();
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/controller/TaskWrkController.java b/src/main/java/com/zy/asrs/controller/TaskWrkController.java
index c9c8b73..0ca6cee 100644
--- a/src/main/java/com/zy/asrs/controller/TaskWrkController.java
+++ b/src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -24,10 +24,10 @@
     @Autowired
     private TaskWrkService taskWrkService;
 
-    @RequestMapping(value = "/taskWrk/{id}/auth")
+    @RequestMapping(value = "/taskWrk/{wrkNo}/auth")
     @ManagerAuth
-    public R get(@PathVariable("id") String id) {
-        return R.ok(taskWrkService.selectById(String.valueOf(id)));
+    public R get(@PathVariable("wrkNo") Integer wrkNo) {
+        return R.ok(taskWrkService.selectByWrkNo(wrkNo));
     }
 
     @RequestMapping(value = "/taskWrk/list/auth")
@@ -165,4 +165,19 @@
         return R.ok();
     }
 
+    @PostMapping(value = "/taskWrk/updateCommandStep")
+    @ManagerAuth(memo = "鏇存柊姝ュ簭")
+    public R updateCommandStep(@RequestParam Integer wrkNo, @RequestParam Integer commandStep) {
+        TaskWrk taskWrk = taskWrkService.selectByWrkNo(wrkNo);
+        if (taskWrk == null) {
+            return R.error();
+        }
+        Date now = new Date();
+        taskWrk.setCommandStep(commandStep);
+        taskWrk.setModiTime(now);//鎿嶄綔鏃堕棿
+        taskWrk.setModiUser(getUserId());//鎿嶄綔鍛�
+        taskWrkService.updateById(taskWrk);
+        return R.ok();
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/entity/CommandInfo.java b/src/main/java/com/zy/asrs/entity/CommandInfo.java
index 52f670c..94ca935 100644
--- a/src/main/java/com/zy/asrs/entity/CommandInfo.java
+++ b/src/main/java/com/zy/asrs/entity/CommandInfo.java
@@ -52,14 +52,6 @@
     private Date startTime;
 
     /**
-     * 缁撴潫鏃堕棿
-     */
-    @ApiModelProperty(value= "缁撴潫鏃堕棿")
-    @TableField("end_time")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    private Date endTime;
-
-    /**
      * 鎸囦护绫诲瀷
      */
     @ApiModelProperty(value= "鎸囦护绫诲瀷")
@@ -93,20 +85,37 @@
     @TableField("command")
     private String command;
 
+    /**
+     * 鎵ц鏃堕棿
+     */
+    @ApiModelProperty(value= "鎵ц鏃堕棿")
+    @TableField("execute_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date executeTime;
+
+    /**
+     * 瀹屾垚鏃堕棿
+     */
+    @ApiModelProperty(value= "瀹屾垚鏃堕棿")
+    @TableField("complete_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date completeTime;
+
     public CommandInfo() {}
 
-    public CommandInfo(Integer id, Integer wrkNo, String taskNo, Integer commandStatus, Date startTime, Date endTime, Integer commandType, String device, String deviceLog, String commandDesc, String command) {
+    public CommandInfo(Integer id, Integer wrkNo, String taskNo, Integer commandStatus, Date startTime, Integer commandType, String device, String deviceLog, String commandDesc, String command, Date executeTime, Date completeTime) {
         this.id = id;
         this.wrkNo = wrkNo;
         this.taskNo = taskNo;
         this.commandStatus = commandStatus;
         this.startTime = startTime;
-        this.endTime = endTime;
         this.commandType = commandType;
         this.device = device;
         this.deviceLog = deviceLog;
         this.commandDesc = commandDesc;
         this.command = command;
+        this.executeTime = executeTime;
+        this.completeTime = completeTime;
     }
 
     public String getStartTime$(){
@@ -116,11 +125,18 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.startTime);
     }
 
-    public String getEndTime$(){
-        if (Cools.isEmpty(this.endTime)){
+    public String getExecuteTime$(){
+        if (Cools.isEmpty(this.executeTime)){
             return "";
         }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.endTime);
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.executeTime);
+    }
+
+    public String getCompleteTime$(){
+        if (Cools.isEmpty(this.completeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.completeTime);
     }
 
     /**
@@ -132,8 +148,8 @@
         }
 
         Date endDate = new Date();
-        if (!Cools.isEmpty(this.endTime)) {
-            endDate = this.endTime;
+        if (!Cools.isEmpty(this.completeTime)) {
+            endDate = this.completeTime;
         }
 
         //鐢ㄦ潵鑾峰彇涓や釜鏃堕棿鐩稿樊鐨勬绉掓暟
diff --git a/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java b/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java
index f658218..4705017 100644
--- a/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/CommandInfoMapper.java
@@ -12,4 +12,6 @@
 public interface CommandInfoMapper extends BaseMapper<CommandInfo> {
 
     List<CommandInfo> selectByTaskNoAndWrkNo(String taskNo, Integer wrkNo);
+
+    List<CommandInfo> selectByWrkNo(Integer wrkNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/CommandInfoService.java b/src/main/java/com/zy/asrs/service/CommandInfoService.java
index ddd8947..e022238 100644
--- a/src/main/java/com/zy/asrs/service/CommandInfoService.java
+++ b/src/main/java/com/zy/asrs/service/CommandInfoService.java
@@ -9,4 +9,6 @@
 
     List<CommandInfo> selectByTaskNoAndWrkNo(String taskNo, Integer wrkNo);
 
+    List<CommandInfo> selectByWrkNo(Integer wrkNo);
+
 }
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 956c215..44dd2aa 100644
--- a/src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/CommandInfoServiceImpl.java
@@ -15,4 +15,9 @@
     public List<CommandInfo> selectByTaskNoAndWrkNo(String taskNo, Integer wrkNo) {
         return this.baseMapper.selectByTaskNoAndWrkNo(taskNo, wrkNo);
     }
+
+    @Override
+    public List<CommandInfo> selectByWrkNo(Integer wrkNo) {
+        return this.baseMapper.selectByWrkNo(wrkNo);
+    }
 }
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 d06617c..88a9da6 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -13,6 +13,7 @@
 import com.zy.asrs.mapper.WaitPakinMapper;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.CommandUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
 import com.zy.common.model.LocTypeDto;
@@ -186,7 +187,7 @@
                             staProtocol.setWorkNo(dto.getWorkNo().shortValue());
                             staProtocol.setStaNo(dto.getStaNo().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
-                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             if (!result) {
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
@@ -437,7 +438,7 @@
                     staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                     staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
-                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (!result) {
                         log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                     }
@@ -491,7 +492,7 @@
                         // 涓嬪彂绔欑偣淇℃伅
                         staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                         staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                        if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                             continue;
                         }
 
@@ -624,7 +625,7 @@
             crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
             crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
             crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-            if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
+            if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                 log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
                 // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
@@ -705,7 +706,7 @@
                     crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-                    if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
+                    if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                         log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
                         // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
@@ -892,7 +893,7 @@
         crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
         crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
         crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+        if (!CommandUtils.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
             log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
         } else {
             // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
@@ -1112,7 +1113,7 @@
                             staProtocol.setWorkNo(dto.getWorkNo().shortValue());
                             staProtocol.setStaNo(dto.getStaNo().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
-                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             if (!result) {
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
@@ -1263,7 +1264,7 @@
             }
             // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
             if (!commands.isEmpty()) {
-                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+                if (!CommandUtils.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
                     log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                     continue;
                 } else {
diff --git a/src/main/java/com/zy/asrs/utils/CommandUtils.java b/src/main/java/com/zy/asrs/utils/CommandUtils.java
index 6f450de..86f59fc 100644
--- a/src/main/java/com/zy/asrs/utils/CommandUtils.java
+++ b/src/main/java/com/zy/asrs/utils/CommandUtils.java
@@ -3,49 +3,42 @@
 import com.alibaba.fastjson.JSON;
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.CommandInfo;
-import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.entity.TaskWrk;
 import com.zy.asrs.service.CommandInfoService;
-import com.zy.asrs.service.WrkMastService;
-import com.zy.common.utils.RedisUtil;
+import com.zy.asrs.service.TaskWrkService;
+import com.zy.core.cache.MessageQueue;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
-import com.zy.core.model.command.RedisCommand;
+import com.zy.core.model.command.CommandPackage;
 import com.zy.core.model.protocol.StaProtocol;
 
-import java.util.ArrayList;
 import java.util.Date;
 
 public class CommandUtils {
 
-    public static void offer(SlaveType type, Integer id, Task task) {
+    public static boolean offer(SlaveType type, Integer id, Task task) {
         CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
         if (commandInfoService == null) {
-            return;
+            return false;
         }
-        WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class);
-        if (wrkMastService == null) {
-            return;
-        }
-        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
-        if (redisUtil == null) {
-            return;
+        TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
+        if (taskWrkService == null) {
+            return false;
         }
 
         CommandInfo commandInfo = null;
-        WrkMast wrkMast = null;
-        int wrkNo = 0;
-        String taskNo = null;
+        TaskWrk taskWrk = null;
+        int wrkNo = 0;//宸ヤ綔鍙�
+        String taskNo = null;//浠诲姟鍙�
 
         if (type == SlaveType.Crn) {
-            RedisCommand<CrnCommand> redisCommand = new RedisCommand();
-            ArrayList<CrnCommand> commands = new ArrayList<>();
-
+            CommandPackage<CrnCommand> commandPackage = new CommandPackage<>();
             CrnCommand command = (CrnCommand) task.getData();
             wrkNo = command.getTaskNo();
             if (wrkNo != 0) {
-                wrkMast = wrkMastService.selectById(wrkNo);
-                taskNo = wrkMast.getTaskNo();
+                taskWrk = taskWrkService.selectByWrkNo(wrkNo);
+                taskNo = taskWrk.getTaskNo();
             }
 
             commandInfo = new CommandInfo();
@@ -53,23 +46,27 @@
             commandInfo.setTaskNo(taskNo);
             commandInfo.setCommandStatus(1);
             commandInfo.setStartTime(new Date());
-            commandInfo.setDevice("crn");
-            commandInfo.setCommand(JSON.toJSONString(command));
-            commandInfoService.insert(commandInfo);
-            command.setCommandInfo(commandInfo);
+            commandInfo.setDevice(SlaveType.Crn.toString());
 
-            commands.add(command);
-            redisCommand.setWrkNo(wrkNo);
-            redisCommand.setCommands(commands);
+            commandPackage.setWrkNo(wrkNo);
+            commandPackage.setCommand(command);
+            commandPackage.setDevice("鍫嗗灈鏈�");
+
+            commandInfo.setCommand(JSON.toJSONString(commandPackage));
+            commandInfoService.insert(commandInfo);//鎻掑叆鎸囦护
+
+            //灏嗘寚浠よ繘琛屾姇閫�
+            if (!MessageQueue.offer(type, id, task)) {
+                return false;
+            }
+            return true;
         } else if (type == SlaveType.Devp) {
-            RedisCommand<StaProtocol> redisCommand = new RedisCommand();
-            ArrayList<StaProtocol> commands = new ArrayList<>();
-
+            CommandPackage<StaProtocol> commandPackage = new CommandPackage<>();
             StaProtocol staProtocol = (StaProtocol) task.getData();
             wrkNo = staProtocol.getWorkNo();
             if (wrkNo != 0) {
-                wrkMast = wrkMastService.selectById(wrkNo);
-                taskNo = wrkMast.getTaskNo();
+                taskWrk = taskWrkService.selectByWrkNo(wrkNo);
+                taskNo = taskWrk.getTaskNo();
             }
 
             commandInfo = new CommandInfo();
@@ -77,17 +74,23 @@
             commandInfo.setTaskNo(taskNo);
             commandInfo.setCommandStatus(1);
             commandInfo.setStartTime(new Date());
-            commandInfo.setDevice("devp");
-            commandInfo.setCommand(JSON.toJSONString(staProtocol));
-            commandInfoService.insert(commandInfo);
+            commandInfo.setDevice(SlaveType.Devp.toString());
 
-            staProtocol.setCommandInfo(commandInfo);
+            commandPackage.setWrkNo(wrkNo);
+            commandPackage.setCommand(staProtocol);
+            commandPackage.setDevice("杈撻�佺嚎");
 
-            commands.add(staProtocol);
-            redisCommand.setWrkNo(wrkNo);
-            redisCommand.setCommands(commands);
+            commandInfo.setCommand(JSON.toJSONString(commandPackage));
+            commandInfoService.insert(commandInfo);//鎻掑叆鎸囦护
+
+            //灏嗘寚浠よ繘琛屾姇閫�
+            if (!MessageQueue.offer(type, id, task)) {
+                return false;
+            }
+            return true;
         }
 
+        return false;
     }
 
 }
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index cf6e475..b98b430 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -62,7 +62,6 @@
      * 濡傛灉鍙戠幇闃熷垪宸叉弧鏃犳硶娣诲姞鐨勮瘽锛屼細鐩存帴杩斿洖false銆�
      */
     public static boolean offer(SlaveType type, Integer id, Task task) {
-        CommandUtils.offer(type, id, task);
         switch (type) {
             case Crn:
                 return CRN_EXCHANGE.get(id).offer(task);
diff --git a/src/main/java/com/zy/core/model/command/CommandPackage.java b/src/main/java/com/zy/core/model/command/CommandPackage.java
new file mode 100644
index 0000000..e447e9a
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/CommandPackage.java
@@ -0,0 +1,23 @@
+package com.zy.core.model.command;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鎸囦护鏁版嵁鍖�
+ */
+@Data
+public class CommandPackage<T> {
+
+    //宸ヤ綔鍙�
+    private Integer wrkNo;
+
+    //鎵ц璁惧
+    private String device;
+
+    //鎸囦护
+    private T command;
+
+}
diff --git a/src/main/java/com/zy/core/model/command/CrnCommand.java b/src/main/java/com/zy/core/model/command/CrnCommand.java
index ea0e950..6d4b4b0 100644
--- a/src/main/java/com/zy/core/model/command/CrnCommand.java
+++ b/src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -75,9 +75,6 @@
     // 浠诲姟纭 0锛氭湭纭 1锛氬凡纭
     private Short command = 0;
 
-    //鎸囦护淇℃伅
-    private CommandInfo commandInfo;
-
     public void setTaskMode(Short taskMode){
         this.taskMode = taskMode;
         this.taskModeType = CrnTaskModeType.get(taskModeType);
diff --git a/src/main/java/com/zy/core/model/command/RedisCommand.java b/src/main/java/com/zy/core/model/command/RedisCommand.java
deleted file mode 100644
index fb6c863..0000000
--- a/src/main/java/com/zy/core/model/command/RedisCommand.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.zy.core.model.command;
-
-import lombok.Data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Redis鎸囦护
- */
-@Data
-public class RedisCommand<T> {
-
-    //宸ヤ綔鍙�
-    private Integer wrkNo;
-
-    //鍛戒护鎵ц姝ュ簭
-    private Integer commandStep = 0;
-
-    //鍛戒护闆嗗悎
-    private List<T> commands = new ArrayList<>();
-
-}
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index c160660..6817b2b 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -56,9 +56,6 @@
     // 闅斿绔欑偣锛堝彴杞︿綅缃級
     private String nearbySta;
 
-    //鎸囦护淇℃伅
-    private CommandInfo commandInfo;
-
     public BasDevp toSqlModel(){
         BasDevp basDevp = new BasDevp();
         basDevp.setDevNo(siteId);
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 70751fa..a56ac2c 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -10,16 +10,15 @@
 import com.zy.asrs.entity.BasCrnOpt;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.entity.CommandInfo;
-import com.zy.asrs.service.BasCrnOptService;
-import com.zy.asrs.service.BasCrnpService;
-import com.zy.asrs.service.CommandInfoService;
-import com.zy.asrs.service.DeviceErrorService;
+import com.zy.asrs.entity.TaskWrk;
+import com.zy.asrs.service.*;
 import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.enums.*;
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.Task;
+import com.zy.core.model.command.CommandPackage;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.protocol.CrnProtocol;
 import lombok.Data;
@@ -27,6 +26,7 @@
 
 import java.text.MessageFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鍫嗗灈鏈虹嚎绋�
@@ -461,14 +461,17 @@
         } catch (Exception ignore) {}
 
         if (result.IsSuccess && result1.IsSuccess) {
-            //鏇存柊鎸囦护鐘舵��
-            CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
-            CommandInfo commandInfo = command.getCommandInfo();
-            commandInfo.setCommandStatus(2);
-            commandInfoService.updateById(commandInfo);
-
             log.warn("鍫嗗灈鏈哄懡浠や笅鍙慬id:{},鏃堕棿锛歿}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command));
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+
+            //鏇存柊浠诲姟姝ュ簭
+            TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
+            TaskWrk taskWrk = taskWrkService.selectByWrkNo(command.getTaskNo().intValue());
+            if (taskWrk != null) {
+                taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭
+                taskWrkService.updateById(taskWrk);
+            }
+
             return true;
         } else {
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 8a48221..b04861f 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -10,9 +10,11 @@
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.entity.CommandInfo;
+import com.zy.asrs.entity.TaskWrk;
 import com.zy.asrs.service.BasDevpService;
 import com.zy.asrs.service.CommandInfoService;
 import com.zy.asrs.service.DeviceErrorService;
+import com.zy.asrs.service.TaskWrkService;
 import com.zy.core.DevpThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
@@ -312,11 +314,13 @@
                 staProtocol.setPakMk(true);
             }
 
-            //鏇存柊鎸囦护鐘舵��
-            CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
-            CommandInfo commandInfo = staProtocol.getCommandInfo();
-            commandInfo.setCommandStatus(2);
-            commandInfoService.updateById(commandInfo);
+            //鏇存柊浠诲姟姝ュ簭
+            TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
+            TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo().intValue());
+            if (taskWrk != null) {
+                taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭
+                taskWrkService.updateById(taskWrk);
+            }
         }
 
     }
diff --git a/src/main/resources/mapper/CommandInfoMapper.xml b/src/main/resources/mapper/CommandInfoMapper.xml
index 84f6f52..ef5f79b 100644
--- a/src/main/resources/mapper/CommandInfoMapper.xml
+++ b/src/main/resources/mapper/CommandInfoMapper.xml
@@ -9,11 +9,12 @@
         <result column="task_no" property="taskNo" />
         <result column="command_status" property="commandStatus" />
         <result column="start_time" property="startTime" />
-        <result column="end_time" property="endTime" />
         <result column="command_type" property="commandType" />
         <result column="device" property="device" />
         <result column="device_log" property="deviceLog" />
         <result column="command_desc" property="commandDesc" />
+        <result column="execute_time" property="executeTime" />
+        <result column="complete_time" property="completeTime" />
 
     </resultMap>
 
@@ -23,4 +24,9 @@
         and task_no = #{taskNo}
     </select>
 
+    <select id="selectByWrkNo" resultMap="BaseResultMap">
+        select * from wcs_command_info
+        where wrk_no = #{wrkNo}
+    </select>
+
 </mapper>
diff --git a/src/main/webapp/views/commandManage/commandManage.html b/src/main/webapp/views/commandManage/commandManage.html
index b5d5949..fe8ee81 100644
--- a/src/main/webapp/views/commandManage/commandManage.html
+++ b/src/main/webapp/views/commandManage/commandManage.html
@@ -10,6 +10,11 @@
 		<script type="text/javascript" src="../../static/wcs/js/common.js"></script>
 		<script type="text/javascript" src="../../static/wcs/js/vue.min.js"></script>
 		<script type="text/javascript" src="../../static/wcs/js/element.js"></script>
+		<style>
+			.el-table .success-row {
+				background: #d5ffc0;
+			}
+		</style>
 	</head>
 
 	<body>
@@ -35,13 +40,15 @@
 							<el-button type="primary" @click="resetParam">閲嶇疆</el-button>
 						</el-form-item>
 					</el-form>
-					<el-table ref="singleTable" :data="tableData" style="width: 100%;">
+					<el-table ref="singleTable" :data="tableData" style="width: 100%;" :row-class-name="tableRowClassName">
 						<el-table-column label="鎿嶄綔" width="100">
 							<template slot-scope="scope">
 								<el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
 									<el-button icon="el-icon-more" size="mini" type="primary"></el-button>
 									<el-dropdown-menu slot="dropdown">
 										<el-dropdown-item command="showTask">鏌ョ湅浠诲姟</el-dropdown-item>
+										<el-dropdown-item command="executeCommand">鎵ц鎸囦护</el-dropdown-item>
+										<el-dropdown-item command="completeCommand">瀹屾垚鎸囦护</el-dropdown-item>
 									</el-dropdown-menu>
 								</el-dropdown>
 							</template>
@@ -66,9 +73,11 @@
 						</el-table-column>
 						<el-table-column show-overflow-tooltip property="startTime$" label="寮�濮嬫椂闂�">
 						</el-table-column>
-						<el-table-column show-overflow-tooltip property="endTime$" label="缁撴潫鏃堕棿">
+						<el-table-column show-overflow-tooltip property="executeTime$" label="鎵ц鏃堕棿">
 						</el-table-column>
-						<el-table-column show-overflow-tooltip property="command" label="鍛戒护鎶ユ枃">
+						<el-table-column show-overflow-tooltip property="completeTime$" label="瀹屾垚鏃堕棿">
+						</el-table-column>
+						<el-table-column show-overflow-tooltip property="command" label="鍛戒护鎶ユ枃" width="250">
 						</el-table-column>
 					</el-table>
 
@@ -98,7 +107,8 @@
 						task_no: null,
 						status: null,
 						wrk_no: null
-					}
+					},
+					commandStep: -1
 				},
 				created() {
 					this.init()
@@ -110,12 +120,14 @@
 					init() {
 						let taskNo = getQueryVariable('taskNo')
 						let wrkNo = getQueryVariable('wrkNo')
+						let commandStep = getQueryVariable('commandStep')
 						if (taskNo != false) {
 							this.tableSearchParam.task_no = taskNo
 						}
 						if (wrkNo != false) {
 							this.tableSearchParam.wrk_no = wrkNo
 						}
+						this.commandStep = parseInt(commandStep)
 
 						this.getTableData()
 					},
@@ -172,6 +184,14 @@
 								//鏌ョ湅浠诲姟
 								this.showTask(row)
 								break;
+							case "executeCommand":
+								//鎵ц鎸囦护
+								this.executeCommand(row)
+								break;
+							case "completeCommand":
+								//瀹屾垚鎸囦护
+								this.completeCommand(row)
+								break;
 						}
 					},
 					showTask(row) {
@@ -185,6 +205,72 @@
 							content: '../taskWrk/taskWrk.html?taskNo=' + row.taskNo + "&wrkNo=" + row.wrkNo,
 							success: function(layero, index) {}
 						});
+					},
+					tableRowClassName({row, rowIndex}) {
+						if (rowIndex === this.commandStep) {
+							return 'success-row';
+						}
+						return '';
+					},
+					executeCommand(row) {
+						//鎵ц鎸囦护
+						let that = this
+						$.ajax({
+							url: baseUrl + "/commandInfo/executeCommand",
+							headers: {
+								'token': localStorage.getItem('token')
+							},
+							data: {
+								id: row.id
+							},
+							method: 'POST',
+							success: function(res) {
+								if (res.code == 200) {
+									that.$message({
+										message: "鎵ц鎴愬姛",
+										type: 'success'
+									});
+									that.getTableData()
+								} else if (res.code === 403) {
+									top.location.href = baseUrl + "/";
+								} else {
+									that.$message({
+										message: res.msg,
+										type: 'error'
+									});
+								}
+							}
+						});
+					},
+					completeCommand(row) {
+						//瀹屾垚鎸囦护
+						let that = this
+						$.ajax({
+							url: baseUrl + "/commandInfo/completeCommand",
+							headers: {
+								'token': localStorage.getItem('token')
+							},
+							data: {
+								id: row.id
+							},
+							method: 'POST',
+							success: function(res) {
+								if (res.code == 200) {
+									that.$message({
+										message: "瀹屾垚鎴愬姛",
+										type: 'success'
+									});
+									that.getTableData()
+								} else if (res.code === 403) {
+									top.location.href = baseUrl + "/";
+								} else {
+									that.$message({
+										message: res.msg,
+										type: 'error'
+									});
+								}
+							}
+						});
 					}
 				}
 			})
diff --git a/src/main/webapp/views/taskWrk/commandManage.html b/src/main/webapp/views/taskWrk/commandManage.html
new file mode 100644
index 0000000..e5cab77
--- /dev/null
+++ b/src/main/webapp/views/taskWrk/commandManage.html
@@ -0,0 +1,329 @@
+<!DOCTYPE html>
+<html lang="en">
+
+	<head>
+		<meta charset="UTF-8">
+		<title>鎸囦护绠$悊</title>
+		<link rel="stylesheet" href="../../static/wcs/css/element.css">
+		<script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script>
+		<script type="text/javascript" src="../../static/wms/layui/layui.js"></script>
+		<script type="text/javascript" src="../../static/wcs/js/common.js"></script>
+		<script type="text/javascript" src="../../static/wcs/js/vue.min.js"></script>
+		<script type="text/javascript" src="../../static/wcs/js/element.js"></script>
+		<style>
+			.el-table .success-row {
+				background: #d5ffc0;
+			}
+		</style>
+	</head>
+
+	<body>
+		<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
+			<div style="width: 100%;">
+				<el-card class="box-card">
+					<el-form :inline="true" :model="tableSearchParam" class="demo-form-inline">
+						<el-form-item label="浠诲姟鍙�">
+							<el-input v-model="tableSearchParam.task_no" placeholder="浠诲姟鍙�" readonly></el-input>
+						</el-form-item>
+						<el-form-item label="宸ヤ綔鍙�">
+							<el-input v-model="tableSearchParam.wrk_no" placeholder="宸ヤ綔鍙�" readonly></el-input>
+						</el-form-item>
+						<el-form-item label="鎸囦护姝ュ簭">
+							<el-input-number v-model="commandStep" placeholder="鎸囦护姝ュ簭" :min="0"></el-input-number>
+						</el-form-item>
+						<el-form-item>
+							<el-button type="primary" @click="updateCommandStep">鏇存柊姝ュ簭</el-button>
+						</el-form-item>
+					</el-form>
+					<el-table ref="singleTable" :data="tableData" style="width: 100%;" :row-class-name="tableRowClassName">
+						<el-table-column label="鎿嶄綔" width="100">
+							<template slot-scope="scope">
+								<el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
+									<el-button icon="el-icon-more" size="mini" type="primary"></el-button>
+									<el-dropdown-menu slot="dropdown">
+										<el-dropdown-item command="executeCommand">閲嶅彂鎸囦护</el-dropdown-item>
+										<el-dropdown-item command="completeCommand">瀹屾垚鎸囦护</el-dropdown-item>
+									</el-dropdown-menu>
+								</el-dropdown>
+							</template>
+						</el-table-column>
+						<el-table-column property="index" label="鎸囦护缂栧彿">
+							<template slot-scope="scope">
+								{{ scope.$index }}
+							</template>
+						</el-table-column>
+						<el-table-column property="wrkNo" label="宸ヤ綔鍙�">
+						</el-table-column>
+						<el-table-column property="taskNo" label="浠诲姟鍙�">
+						</el-table-column>
+						<el-table-column property="commandStatus$" label="鎸囦护鐘舵��">
+						</el-table-column>
+						<el-table-column show-overflow-tooltip property="durationTime" label="鎸佺画鏃堕暱">
+						</el-table-column>
+						<el-table-column property="commandType" label="鎸囦护绫诲瀷">
+						</el-table-column>
+						<el-table-column property="device" label="璁惧">
+						</el-table-column>
+						<el-table-column property="deviceLog" label="璁惧鎵ц淇℃伅">
+						</el-table-column>
+						<el-table-column property="commandDesc" label="鍛戒护鎻忚堪">
+						</el-table-column>
+						<el-table-column show-overflow-tooltip property="startTime$" label="寮�濮嬫椂闂�">
+						</el-table-column>
+						<el-table-column show-overflow-tooltip property="executeTime$" label="鎵ц鏃堕棿">
+						</el-table-column>
+						<el-table-column show-overflow-tooltip property="completeTime$" label="瀹屾垚鏃堕棿">
+						</el-table-column>
+						<el-table-column show-overflow-tooltip property="command" label="鍛戒护鎶ユ枃" width="250">
+						</el-table-column>
+					</el-table>
+
+					<div style="margin-top: 10px;">
+						<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+							:current-page="currentPage" :page-sizes="pageSizes" :page-size="pageSize"
+							layout="total, sizes, prev, pager, next, jumper" :total="pageTotal">
+						</el-pagination>
+					</div>
+				</el-card>
+			</div>
+		</div>
+		<script>
+			var $layui = layui.config({
+				base: baseUrl + "/static/wms/layui/lay/modules/"
+			}).use(['layer', 'form'], function() {})
+
+			var app = new Vue({
+				el: '#app',
+				data: {
+					tableData: [],
+					currentPage: 1,
+					pageSizes: [16, 30, 50, 100, 150, 200],
+					pageSize: 16,
+					pageTotal: 0,
+					tableSearchParam: {
+						task_no: null,
+						status: null,
+						wrk_no: null
+					},
+					commandStep: -1
+				},
+				created() {
+					this.init()
+				},
+				watch: {
+
+				},
+				methods: {
+					init() {
+						let taskNo = getQueryVariable('taskNo')
+						let wrkNo = getQueryVariable('wrkNo')
+						if (taskNo != false) {
+							this.tableSearchParam.task_no = taskNo
+						}
+						if (wrkNo != false) {
+							this.tableSearchParam.wrk_no = wrkNo
+						}
+
+						this.getTableData()
+					},
+					getTableData() {
+						let that = this;
+						let data = this.tableSearchParam
+						data.curr = this.currentPage
+						data.limit = this.pageSize
+						$.ajax({
+							url: baseUrl + "/commandInfo/list/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.tableData = res.data.records
+									that.pageTotal = res.data.total
+								} else if (res.code === 403) {
+									top.location.href = baseUrl + "/";
+								} else {
+									that.$message({
+										message: res.msg,
+										type: 'error'
+									});
+								}
+							}
+						});
+
+						$.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} 鏉);
+						this.pageSize = val
+						this.getTableData()
+					},
+					handleCurrentChange(val) {
+						console.log(`褰撳墠椤�: ${val}`);
+						this.currentPage = val
+						this.getTableData()
+					},
+					resetParam() {
+						this.tableSearchParam = {
+							task_no: null,
+							status: null,
+							wrk_no: null
+						}
+						this.getTableData()
+					},
+					handleCommand(command, row) {
+						switch (command) {
+							case "showTask":
+								//鏌ョ湅浠诲姟
+								this.showTask(row)
+								break;
+							case "executeCommand":
+								//鎵ц鎸囦护
+								this.executeCommand(row)
+								break;
+							case "completeCommand":
+								//瀹屾垚鎸囦护
+								this.completeCommand(row)
+								break;
+						}
+					},
+					showTask(row) {
+						//鏌ョ湅浠诲姟
+						$layui.layer.open({
+							type: 2,
+							title: '浠诲姟绠$悊',
+							maxmin: true,
+							area: [top.detailWidth, top.detailHeight],
+							shadeClose: true,
+							content: '../taskWrk/taskWrk.html?taskNo=' + row.taskNo + "&wrkNo=" + row.wrkNo,
+							success: function(layero, index) {}
+						});
+					},
+					tableRowClassName({row, rowIndex}) {
+						if (rowIndex === parseInt(this.commandStep)) {
+							return 'success-row';
+						}
+						return '';
+					},
+					executeCommand(row) {
+						//鎵ц鎸囦护
+						let that = this
+						$.ajax({
+							url: baseUrl + "/commandInfo/executeCommand",
+							headers: {
+								'token': localStorage.getItem('token')
+							},
+							data: {
+								id: row.id
+							},
+							method: 'POST',
+							success: function(res) {
+								if (res.code == 200) {
+									that.$message({
+										message: "鎵ц鎴愬姛",
+										type: 'success'
+									});
+									that.getTableData()
+								} else if (res.code === 403) {
+									top.location.href = baseUrl + "/";
+								} else {
+									that.$message({
+										message: res.msg,
+										type: 'error'
+									});
+								}
+							}
+						});
+					},
+					completeCommand(row) {
+						//瀹屾垚鎸囦护
+						let that = this
+						$.ajax({
+							url: baseUrl + "/commandInfo/completeCommand",
+							headers: {
+								'token': localStorage.getItem('token')
+							},
+							data: {
+								id: row.id
+							},
+							method: 'POST',
+							success: function(res) {
+								if (res.code == 200) {
+									that.$message({
+										message: "瀹屾垚鎴愬姛",
+										type: 'success'
+									});
+									that.getTableData()
+								} else if (res.code === 403) {
+									top.location.href = baseUrl + "/";
+								} else {
+									that.$message({
+										message: res.msg,
+										type: 'error'
+									});
+								}
+							}
+						});
+					},
+					updateCommandStep() {
+						//鏇存柊姝ュ簭
+						let that = this
+						$.ajax({
+							url: baseUrl + "/taskWrk/updateCommandStep",
+							headers: {
+								'token': localStorage.getItem('token')
+							},
+							data: {
+								wrkNo: this.tableSearchParam.wrk_no,
+								commandStep: this.commandStep
+							},
+							method: 'POST',
+							success: function(res) {
+								if (res.code == 200) {
+									that.$message({
+										message: "鏇存柊鎴愬姛",
+										type: 'success'
+									});
+									that.getTableData()
+								} else if (res.code === 403) {
+									top.location.href = baseUrl + "/";
+								} else {
+									that.$message({
+										message: res.msg,
+										type: 'error'
+									});
+								}
+							}
+						});
+					},
+				}
+			})
+		</script>
+	</body>
+
+</html>
diff --git a/src/main/webapp/views/taskWrk/taskWrk.html b/src/main/webapp/views/taskWrk/taskWrk.html
index 6f0e967..a88d2b0 100644
--- a/src/main/webapp/views/taskWrk/taskWrk.html
+++ b/src/main/webapp/views/taskWrk/taskWrk.html
@@ -171,7 +171,7 @@
 								break;
 							case "assign":
 								//娲惧彂浠诲姟
-								this.assginWrk(row)
+								this.assignWrk(row)
 								break;
 							case "complete":
 								//瀹岀粨浠诲姟
@@ -192,11 +192,11 @@
 							maxmin: true,
 							area: [top.detailWidth, top.detailHeight],
 							shadeClose: true,
-							content: '../commandManage/commandManage.html?taskNo=' + row.taskNo + "&wrkNo=" + wrkNo,
+							content: 'commandManage.html?taskNo=' + row.taskNo + "&wrkNo=" + wrkNo,
 							success: function(layero, index) {}
 						});
 					},
-					assginWrk(row){
+					assignWrk(row){
 						//娲惧彂浠诲姟
 						let that = this
 						$.ajax({

--
Gitblit v1.9.1