From f19a306e2e5689e9cea7a3fe1c2c47b73f6fb57f Mon Sep 17 00:00:00 2001
From: liuxy <lxy1605052545@163.com>
Date: Fri, 21 Mar 2025 14:14:25 +0800
Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9Aacs/lms=E4=BC=98=E5=8C=96=E9=A1=B9?=
 =?UTF-8?q?=201.ACS=E6=96=B0=E5=A2=9E=E6=9F=A5=E8=AF=A2=E4=BB=BB=E5=8A=A1?=
 =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3=202.MES=E5=8F=96=E6=B6=88?=
 =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=8E=A5=E5=8F=A3=203.acs=E6=8E=A7=E5=88=B6?=
 =?UTF-8?q?=E9=92=A2=E5=B9=B3=E5=8F=B0=E4=BB=BB=E5=8A=A1=E5=8F=AA=E8=83=BD?=
 =?UTF-8?q?=E5=90=8C=E6=97=B6=E5=8F=AA=E6=9C=89=E4=B8=80=E4=B8=AA=E5=85=A5?=
 =?UTF-8?q?=E5=BA=93=E4=B8=80=E4=B8=AA=E5=87=BA=E5=BA=93=E7=9A=84=E4=BB=BB?=
 =?UTF-8?q?=E5=8A=A1=204.acs=E4=BB=BB=E5=8A=A1=E9=A1=B5=E9=9D=A2=E6=98=BE?=
 =?UTF-8?q?=E7=A4=BAmes=E7=82=B9=E4=BD=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../nl/acs/agv/server/XianGongAgvService.java |  13 ++
 .../server/impl/XianGongAgvServiceImpl.java   |   6 +
 .../nl/acs/ext/wms/data/ResultTaskMesDto.java |  50 ++++++
 .../acs/ext/wms/rest/WmsToAcsController.java  |  10 +-
 .../acs/ext/wms/service/WmsToAcsService.java  |  24 ++-
 .../wms/service/impl/WmsToAcsServiceImpl.java | 156 +++++++++++++-----
 .../org/nl/acs/task/service/TaskService.java  |  21 +++
 .../task/service/impl/TaskServiceImpl.java    |  37 +++++
 .../modules/quartz/task/AutoCreateInst.java   |  24 +++
 acs2/nladmin-ui/src/views/acs/task/index.vue  |   8 +-
 .../wms/ext/acs/service/WmsToAcsService.java  |   9 +
 .../acs/service/impl/WmsToAcsServiceImpl.java |   9 +-
 .../mes/service/impl/MesToWmsServiceImpl.java |   7 +-
 .../nl/wms/sch/task_manage/task/AcsUtil.java  |  40 +++++
 14 files changed, 357 insertions(+), 57 deletions(-)
 create mode 100644 acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/ResultTaskMesDto.java

diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java b/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java
index b41849e..e5595f0 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java
@@ -215,4 +215,17 @@ public interface XianGongAgvService {
      * }
      */
     public JSONObject doorStateList(JSONObject requestParam);
+
+    /**
+     * 终止仙工任务
+     * @param requestParam{
+     *                    releaseSite: 1
+     *                    taskRecordId: 任务id
+     * }
+     * @return JSONObject {
+     *     code: 200
+     *     msg: ""
+     * }
+     */
+    public <T> UnifiedResponse<T>  stopTask(JSONObject requestParam);
 }
diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java b/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java
index 872aac1..bfa99f8 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java
@@ -1094,6 +1094,12 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
         return result;
     }
 
+    @Override
+    public <T> UnifiedResponse<T>  stopTask(JSONObject requestParam) {
+        String path = "/stop-task";
+        return xgHttpUtil.sendPostRequest(path, requestParam);
+    }
+
     /**
      * 叉车运单动作块
      *
diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/ResultTaskMesDto.java b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/ResultTaskMesDto.java
new file mode 100644
index 0000000..6b384f1
--- /dev/null
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/ResultTaskMesDto.java
@@ -0,0 +1,50 @@
+package org.nl.acs.ext.wms.data;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @Author: lxy
+ * @Description: 返回mes任务
+ * @Date: 2024/9/24
+ */
+@Data
+@Builder
+public class ResultTaskMesDto {
+
+    /**
+     * 任务编码
+     */
+    String TaskCode;
+
+    /**
+     * 取料货位
+     */
+    String PickingLocation;
+
+    /**
+     * 放料货位
+     */
+    String PlacedLocation;
+
+    /**
+     * 任务状态
+     */
+    String TaskStatus;
+
+    /**
+     * 执行AVG名称
+     */
+    String ExecutingAGV;
+
+    /**
+     * 创建时间
+     */
+    String CreateTime;
+
+    /**
+     * 执行时间
+     */
+    String ExecuteTime;
+
+}
diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java
index b9f5e1f..ba55c41 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java
@@ -43,7 +43,8 @@ public class WmsToAcsController {
 
     @PostMapping("/cancelTask")
     @OthersToInterfaceLog("LMS->ACS")
-    public ResponseEntity<Object> cancelFromWms(@RequestBody String whereJson) throws Exception {
+    @SaIgnore
+    public ResponseEntity<Object> cancelFromWms(@RequestBody JSONObject whereJson) throws Exception {
         return new ResponseEntity<>(wmstoacsService.cancelFromWms(whereJson), HttpStatus.OK);
     }
 
@@ -65,6 +66,13 @@ public class WmsToAcsController {
         return new ResponseEntity<>(wmstoacsService.todayTask(req), HttpStatus.OK);
     }
 
+    @PostMapping ("/SearchTasks")
+    @Log("mes查询任务")
+    @SaIgnore
+    public ResponseEntity<JSONObject> SearchTasks() {
+        return new ResponseEntity<>(wmstoacsService.SearchTasks(), HttpStatus.OK);
+    }
+
     @PostMapping("/test")
     public ResponseEntity<Object> test() throws Exception {
         DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java
index 47157f9..4a47e0f 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java
@@ -4,8 +4,6 @@ package org.nl.acs.ext.wms.service;
 
 import com.alibaba.fastjson.JSONObject;
 
-import java.util.Map;
-
 public interface WmsToAcsService {
     /**
      * 创建任务
@@ -21,11 +19,31 @@ public interface WmsToAcsService {
      * @param jsonObject 条件
      * @return Map<String, Object>
      */
-    Map<String, Object> cancelFromWms(String jsonObject) throws Exception;
+    JSONObject cancelFromWms(JSONObject jsonObject) throws Exception;
 
     JSONObject agvInfo(JSONObject req);
 
     JSONObject rgvInfo(JSONObject req);
 
     JSONObject todayTask(JSONObject req);
+
+    /**
+     * mes查看任务
+     * @return JSONObject : {
+     *     ReturnStatus: 任务下发结果
+     *     MsgTime: 返回时间
+     *     TaskLists:任务列表 [
+     *         {
+     *             TaskCode:任务编码
+     *             PickingLocation:取料货位
+     *             PlacedLocation:放料货位
+     *             TaskStatus:任务状态
+     *             ExecutingAGV:执行AVG名称
+     *             CreateTime:创建时间
+     *             ExecuteTime:执行时间
+     *         }
+     *     ]
+     * }
+     */
+    JSONObject SearchTasks();
 }
diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java
index f49ad6f..f4b62f1 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java
@@ -1,5 +1,6 @@
 package org.nl.acs.ext.wms.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
@@ -9,8 +10,10 @@ import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.acs.agv.AgvUtil;
-import org.nl.acs.config.AcsConfig;
+import org.nl.acs.agv.server.XianGongAgvService;
 import org.nl.acs.device.service.DeviceService;
+import org.nl.acs.ext.UnifiedResponse;
+import org.nl.acs.ext.wms.data.ResultTaskMesDto;
 import org.nl.acs.ext.wms.data.wmsToAcsData.createTask.CreateTaskRequest;
 import org.nl.acs.ext.wms.data.wmsToAcsData.createTask.CreateTaskResponse;
 import org.nl.acs.ext.wms.service.WmsToAcsService;
@@ -24,18 +27,17 @@ import org.nl.acs.route.service.RouteLineService;
 import org.nl.acs.route.service.dto.RouteLineDto;
 import org.nl.acs.task.service.TaskService;
 import org.nl.acs.task.service.dto.TaskDto;
+import org.nl.modules.common.exception.BadRequestException;
+import org.nl.modules.common.utils.SecurityUtils;
 import org.nl.modules.lucene.service.LuceneExecuteLogService;
-import org.nl.modules.lucene.service.dto.LuceneLogDto;
-import org.nl.modules.quartz.task.DeviceStatusMonitor;
-import org.nl.modules.system.service.ParamService;
-import org.nl.modules.system.service.impl.ParamServiceImpl;
 import org.nl.modules.wql.WQL;
 import org.nl.modules.wql.core.bean.WQLObject;
-import org.nl.modules.wql.exception.WDKException;
 import org.nl.modules.wql.util.SpringContextHolder;
 import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
@@ -49,6 +51,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
     private final DeviceService DeviceService;
     private final RouteLineService RouteLineService;
     private final DeviceAppService deviceAppService;
+    @Autowired
+    private InstructionService instructionServiceTwo;
+    @Autowired
+    private XianGongAgvService agvService;
+    @Autowired
+    private XianGongAgvService xianGongAgvService;
 
     private String log_file_type = "log_file_type";
     private String log_type = "WMS下发ACS";
@@ -291,49 +299,50 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
 
 
     @Override
-    public Map<String, Object> cancelFromWms(String param) throws Exception {
+    @Transactional
+    public JSONObject cancelFromWms(JSONObject jsonWhere) throws Exception {
+        log.info("cancelFromWms - 请求参数 {}", jsonWhere.toString());
+        JSONObject result = new JSONObject();
+
+        InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class);
+        Instruction instDto = instructionService.findByTaskCode(jsonWhere.getString("TaskCode"));
+
         try {
-            MDC.put(log_file_type, log_type);
-            JSONArray tasks = JSONArray.parseArray(param);
-            ParamService acsConfigService = SpringContextHolder.getBean(ParamServiceImpl.class);
-            InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class);
-            log.debug(tasks.toString());
-            log.info("cancelFromWms - 请求参数 {}", tasks.toString());
-            for (int i = 0; i < tasks.size(); i++) {
-                JSONObject task = tasks.getJSONObject(i);
-                String task_uuid = task.getString("task_id");
-                String task_code = task.getString("task_code");
-                String vehicle_code = task.getString("vehicle_code");
-                String params = task.getString("params");
-
-                if (StrUtil.isEmpty(task_uuid)) {
-                    throw new WDKException("任务标识不能为空");
-                }
-                if (StrUtil.isEmpty(task_code)) {
-                    throw new WDKException("任务号不能为空");
-                }
-                String cancelTaskCheck = acsConfigService.findByCode(AcsConfig.CANCEL_TASK_CHECK).getValue();
-                if (StrUtil.equals(cancelTaskCheck, "1")) {
-                    TaskService.cancel(task_uuid);
-                } else if (StrUtil.equals(cancelTaskCheck, "0")) {
-                    Instruction inst = instructionService.findByTaskCode(task_code);
-                    if (inst == null) {
-                        TaskService.cancel(task_uuid);
-                    } else {
-                        throw new RuntimeException("指令正在执行中,操作失败!");
-                    }
-                }
+            if (ObjectUtil.isEmpty(instDto)) {
+                throw new BadRequestException("找不到对应任务号"+jsonWhere.getString("TaskCode"));
+            }
+            // 取消指令
+            String currentUsername = SecurityUtils.getCurrentUsername();
+            String now = DateUtil.now();
+            instDto.setUpdate_time(now);
+            instDto.setUpdate_by(currentUsername);
+            instDto.setInstruction_status("3");
+            instructionService.update(instDto);
+            // 取消任务
+            TaskDto taskDto = TaskService.findByCode(instDto.getTask_code());
+            taskDto.setUpdate_time(now);
+            taskDto.setUpdate_by(currentUsername);
+            taskDto.setTask_status("3");
+            TaskService.updateTwo(taskDto);
 
+            // 判断是否下发成功
+            if (instDto.getSend_status().equals("1")) {
+                // 调用XG接口通知删除
+                JSONObject json = new JSONObject();
+                json.put("releaseSite",1);
+                json.put("taskRecordId",instDto.getInstruction_code());
+                xianGongAgvService.stopTask(json);
             }
-            JSONObject resultJson = new JSONObject();
-            resultJson.put("status", HttpStatus.OK);
-            resultJson.put("message", "操作成功");
-            resultJson.put("data", new JSONObject());
-            log.info("cancelFromWms - 返回参数 {}", resultJson.toString());
-            return resultJson;
-        } finally {
-            MDC.remove(log_file_type);
+        } catch (Exception e) {
+            result.put("status", HttpStatus.BAD_REQUEST.value());
+            result.put("message", e.getMessage());
+            return result;
         }
+        result.put("status", HttpStatus.OK.value());
+        result.put("message", "操作成功");
+        log.info("cancelFromWms - 返回参数 {}", result.toString());
+        return result;
+
     }
 
     @Override
@@ -390,4 +399,61 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
         resp.put("data", data);
         return resp;
     }
+
+    @Override
+    public JSONObject SearchTasks() {
+        // 需返回mes集合
+        List<ResultTaskMesDto> mesDtoList = new ArrayList<>();
+        // 获取当前所有任务
+        List<TaskDto> taskList = TaskService.findReadyAllTask();
+        // 获取当前所有内存指令
+        List<Instruction> instructionList = instructionServiceTwo.findAllInstFromCache();
+        // 调用接口查看任务状态
+        for (Instruction dto : instructionList) {
+            String TaskStatus = "创建";
+            String ExecutingAGV = "";
+
+            // 等于就绪状态就不调用接口
+            if (dto.getSend_status().equals("1")) {
+                UnifiedResponse<JSONObject> resp = agvService.queryXZAgvInstStatusByCode(dto.getInstruction_code(), JSONObject.class);
+                // 状态
+                String state = resp.getData().getString("state");
+                if ("RUNNING".equals(state) || "TOBEDISPATCHED".equals(state) || "WAITING".equals(state)) {
+                    TaskStatus = "执行中";
+                }
+                // 车号
+                ExecutingAGV = resp.getData().getString("vehicle");
+            }
+
+            // 组织数据
+            TaskDto taskDto = taskList.stream()
+                    .filter(row -> row.getTask_code().equals(dto.getTask_code()))
+                    .findFirst().orElse(null);
+            if (ObjectUtil.isEmpty(taskDto)) {
+                continue;
+            }
+            // mes起点终点为空则不返回
+            if (ObjectUtil.isEmpty(taskDto.getStart_parent_code()) || ObjectUtil.isEmpty(taskDto.getNext_parent_code())) {
+                continue;
+            }
+
+            ResultTaskMesDto mesDto = ResultTaskMesDto.builder()
+                    .TaskCode(taskDto.getTask_code())
+                    .PickingLocation(taskDto.getStart_parent_code())
+                    .PlacedLocation(taskDto.getNext_parent_code())
+                    .TaskStatus(TaskStatus)
+                    .ExecutingAGV(ExecutingAGV)
+                    .CreateTime(taskDto.getCreate_time())
+                    .ExecuteTime(taskDto.getUpdate_time())
+                    .build();
+            mesDtoList.add(mesDto);
+        }
+        // 返回结果
+        JSONObject result = new JSONObject();
+        result.put("ReturnStatus", 0);
+        result.put("MsgTime", DateUtil.now());
+        result.put("TaskList", mesDtoList);
+        log.info("SearchTasks - 返回参数 {}", result.toString());
+        return result;
+    }
 }
diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java b/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java
index 69a6848..66c36ab 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java
@@ -100,6 +100,13 @@ public interface TaskService {
      */
     void update(TaskDto dto);
 
+    /**
+     * 编辑不回传lms
+     *
+     * @param dto /
+     */
+    void updateTwo(TaskDto dto);
+
     /**
      * 多选删除
      *
@@ -152,6 +159,20 @@ public interface TaskService {
      */
     List<TaskDto> findReadyTask();
 
+    /**
+     * 查询就绪和执行中状态下的任务
+     *
+     * @return
+     */
+    List<TaskDto> findReadyAllTask();
+
+    /**
+     * 查询执行中状态下的任务
+     *
+     * @return
+     */
+    List<TaskDto> findReadyExTask();
+
 
     /**
      * 根据任务编码查询缓存中的任务
diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
index 8d0ddb9..4895bbb 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
@@ -283,6 +283,25 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
         this.feedWmsInfo(dto);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateTwo(TaskDto dto) {
+        TaskDto entity = this.findById(dto.getTask_id());
+        if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!");
+
+        String currentUsername = SecurityUtils.getCurrentUsername();
+        String now = DateUtil.now();
+        dto.setUpdate_time(now);
+        dto.setUpdate_by(currentUsername);
+
+        WQLObject wo = WQLObject.getWQLObject("acs_task");
+        JSONObject json = (JSONObject) JSONObject.toJSON(dto);
+
+        wo.update(json);
+        //刷新缓存内容
+        this.refreshCache(dto);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteAll(String[] ids) throws Exception {
@@ -523,6 +542,24 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public List<TaskDto> findReadyAllTask() {
+        return this.tasks
+                .stream()
+                .filter(taskDto -> "0".equals(taskDto.getTask_status()) || "1".equals(taskDto.getTask_status()))
+                .sorted(Comparator.comparing(TaskDto::getPriority).reversed())
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<TaskDto> findReadyExTask() {
+        return this.tasks
+                .stream()
+                .filter(taskDto -> "1".equals(taskDto.getTask_status()))
+                .sorted(Comparator.comparing(TaskDto::getPriority).reversed())
+                .collect(Collectors.toList());
+    }
+
 
     @Override
     public TaskDto findByCodeFromCache(String task_code) {
diff --git a/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java b/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java
index edea31c..fa4f342 100644
--- a/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java
+++ b/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java
@@ -51,6 +51,30 @@ public class AutoCreateInst {
         List<TaskDto> list = taskserver.findReadyTask();
         for (int i = 0; i < list.size(); i++) {
             TaskDto acsTask = list.get(i);
+            // 起点或者是终点是钢平台货架的 只能同时支持一个入一个出
+            String startPoint = acsTask.getStart_device_code();
+            String nextPoint = acsTask.getNext_device_code();
+            if (startPoint.startsWith("L")) {
+                // 查询所有执行中的任务
+                List<TaskDto> readyExTask = taskserver.findReadyExTask();
+                // 判断执行中的任务有没有起点是钢平台的
+                boolean isStart = readyExTask.stream()
+                        .anyMatch(row -> row.getStart_device_code().startsWith("L"));
+                if (isStart) {
+                    continue;
+                }
+            }
+            if (nextPoint.startsWith("L")) {
+                // 查询所有执行中的任务
+                List<TaskDto> readyExTask = taskserver.findReadyExTask();
+                // 判断执行中的任务有没有终点是钢平台的
+                boolean isEnd = readyExTask.stream()
+                        .anyMatch(row -> row.getNext_device_code().startsWith("L"));
+                if (isEnd) {
+                    continue;
+                }
+            }
+
             // 获取任务对应的字段参数
             String taskid = acsTask.getTask_id();
             String taskcode = acsTask.getTask_code();
diff --git a/acs2/nladmin-ui/src/views/acs/task/index.vue b/acs2/nladmin-ui/src/views/acs/task/index.vue
index e6000c6..78ca0a7 100644
--- a/acs2/nladmin-ui/src/views/acs/task/index.vue
+++ b/acs2/nladmin-ui/src/views/acs/task/index.vue
@@ -290,10 +290,10 @@
           </template>
         </el-table-column>
         <el-table-column prop="priority" label="任务优先级" min-width="100" show-overflow-tooltip />
-        <el-table-column prop="start_point_code" label="起点" min-width="100" show-overflow-tooltip />
-        <el-table-column prop="next_point_code" label="终点" min-width="100" show-overflow-tooltip />
-<!--        <el-table-column prop="start_point_code2" label="起点2" min-width="100" show-overflow-tooltip />-->
-<!--        <el-table-column prop="next_point_code2" label="终点2" min-width="100" show-overflow-tooltip />-->
+        <el-table-column prop="start_point_code" label="AGV起点" min-width="100" show-overflow-tooltip />
+        <el-table-column prop="next_point_code" label="AGV终点" min-width="100" show-overflow-tooltip />
+        <el-table-column prop="start_parent_code" label="MES起点" min-width="100" show-overflow-tooltip />
+        <el-table-column prop="next_parent_code" label="MES终点" min-width="100" show-overflow-tooltip />
 <!--        <el-table-column prop="put_device_code" label="放货位" min-width="100" show-overflow-tooltip />-->
 
         <!--<el-table-column prop="compound_task" label="复合任务">
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java
index 3d158e5..dd85e84 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java
@@ -1,5 +1,6 @@
 package org.nl.wms.ext.acs.service;
 
+import com.alibaba.fastjson.JSONObject;
 import org.nl.wms.ext.acs.service.dto.ResultForAcs;
 import org.nl.wms.ext.acs.service.dto.to.acs.DeviceInfoDto;
 import org.nl.wms.ext.acs.service.dto.to.acs.PutActionRequest;
@@ -39,4 +40,12 @@ public interface WmsToAcsService {
      * @return
      */
     AcsResponse getDeviceStatusByCode(List<DeviceInfoDto> list);
+
+    /**
+     * 删除任务
+     *
+     * @param taskCode
+     * @return
+     */
+    JSONObject cancelTask(JSONObject taskCode);
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java
index 37aa6cd..0f6a377 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java
@@ -1,5 +1,6 @@
 package org.nl.wms.ext.acs.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.wms.ext.acs.service.WmsToAcsService;
 import org.nl.wms.ext.acs.service.dto.ResultForAcs;
@@ -9,7 +10,6 @@ import org.nl.wms.ext.acs.service.dto.to.acs.PutActionRequest;
 import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
 import org.nl.wms.ext.record.service.ISysInteractRecordService;
 import org.nl.wms.sch.task_manage.AcsTaskDto;
-import org.nl.wms.sch.task_manage.GeneralDefinition;
 import org.nl.wms.sch.task_manage.task.AcsUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -53,4 +53,11 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
 //        interactRecordService.saveRecord("获取设备信息", list, resultForAcs, GeneralDefinition.LMS_ACS);
         return resultForAcs;
     }
+
+    @Override
+    public JSONObject cancelTask(JSONObject taskCode) {
+        String api = "/api/wms/cancelTask";
+        JSONObject acsResponse = AcsUtil.cancelTask(api, taskCode);
+        return acsResponse;
+    }
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java
index 77b54c9..4db60ad 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java
@@ -211,10 +211,11 @@ public class MesToWmsServiceImpl implements MesToWmsService {
             return result;
         }
 
-        // 判断此任务的状态是否能删除
-        if (Integer.parseInt(taskDao.getTask_status()) > Integer.parseInt(TaskStatus.ISSUED.getCode())) {
+        // 调用ACS删除任务
+        JSONObject json = wmsToAcsService.cancelTask(jo);
+        if (json.getIntValue("status") == HttpStatus.HTTP_BAD_REQUEST) {
             result.put("ReturnStatus", 1);
-            result.put("ReturnInfo", "任务号为【"+jo.getString("TaskCode")+"】的任务正在执行中或者已完成,不能取消任务!");
+            result.put("ReturnInfo", "任务号为【"+jo.getString("TaskCode")+"】删除失败!"+ json.getString("message"));
             result.put("MsgTime", DateUtil.now());
             return result;
         }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java
index dfee110..df05a58 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java
@@ -6,6 +6,7 @@ import cn.hutool.http.HttpRequest;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.nl.common.exception.BadRequestException;
 import org.nl.config.SpringContextHolder;
 import org.nl.system.service.param.dao.Param;
 import org.nl.system.service.param.impl.SysParamServiceImpl;
@@ -111,4 +112,43 @@ public class AcsUtil {
         }
         return resultForAcs;
     }
+
+    public static JSONObject cancelTask(String api, JSONObject taskCode) {
+        JSONObject result = new JSONObject();
+
+        SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
+        //判断是否连接ACS系统
+        Param isConnectAcs = sysParamService.findByCode(GeneralDefinition.IS_CONNECT_ACS);
+        if (ObjectUtil.isEmpty(isConnectAcs)) {
+            result.put("status", "400");
+            result.put("message", "参数表中:" + GeneralDefinition.IS_CONNECT_ACS + "不存在");
+            return result;
+        }
+        String isConnect = isConnectAcs.getValue();
+        //ACS地址:127.0.0.1:8010
+        Param acsUrlObj = sysParamService.findByCode(GeneralDefinition.ACS_URL);
+        if (ObjectUtil.isEmpty(acsUrlObj)) {
+            result.put("status", "400");
+            result.put("message", "参数表中:" + GeneralDefinition.ACS_URL + "不存在");
+            return result;
+        }
+        String acsUrl = acsUrlObj.getValue();
+        if (StrUtil.equals(GeneralDefinition.NO, isConnect)) {
+            result.put("status", "200");
+            return result;
+        }
+        String url = acsUrl + api;
+        log.info("删除acs任务的输入参数为:{}", taskCode);
+        try {
+            String resultMsg = HttpRequest.post(url)
+                    .body(String.valueOf(taskCode))
+                    .execute().body();
+            result = JSONObject.parseObject(resultMsg);
+        } catch (Exception e) {
+            result.put("status", "400");
+            result.put("message", "ACS网络不通");
+        }
+        log.info("删除acs任务的输出参数为:{}", result);
+        return result;
+    }
 }