duyongjia
2024-11-29 c362218b8ef0af6402d3715fbed040ac1cbe0433
最新上传
已修改12个文件
327 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Client/src/api/http.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/src/extension/taskinfo/task.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/src/views/basic/locationInfo.vue 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/src/views/taskinfo/task.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicService/Base/LocationInfoService.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Basic/Dt_LocationInfo.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 233 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/api/http.js
@@ -12,7 +12,7 @@
let loadingInstance;
let loadingStatus = false;
if (process.env.NODE_ENV == 'development') {
    axios.defaults.baseURL = 'http://127.0.0.1:9291/';
    axios.defaults.baseURL = 'http://10.0.250.15:9291/';
}
else if (process.env.NODE_ENV == 'debug') {
    axios.defaults.baseURL = 'http://10.0.250.15:9291/';
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/extension/taskinfo/task.js
@@ -26,7 +26,7 @@
                    console.log("rows"+rows);
                    if (rows.length == 0 || rows.length > 1) return this.$error("请选择一行数据");
                    this.http
                        .post("/api/Task/ForceCompleteTask?taskNum=" + rows[0].TaskNum, {}, true)
                        .post("/api/Task/ForceCompleteTask?taskNum=" + rows[0].taskNum, {}, true)
                        .then((x) => {
                            if (!x.status) return this.$message.error(x.message);
                            this.options = x.data;
@@ -42,7 +42,7 @@
                    console.log("rows"+rows);
                    if (rows.length == 0 || rows.length > 1) return this.$error("请选择一行数据");
                    this.http
                        .post("/api/Task/CancelTask?taskNum=" + rows[0].TaskNum, {}, true)
                        .post("/api/Task/CancelTask?taskNum=" + rows[0].taskNum, {}, true)
                        .then((x) => {
                            if (!x.status) return this.$message.error(x.message);
                            this.options = x.data;
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/basic/locationInfo.vue
@@ -27,9 +27,12 @@
      sortName: "id",
    });
    const editFormFields = ref({
      locationCode:"",
      locationName:"",
      row: "",
      column: "",
      layer: "",
      roadwayNo:"",
      depth: "",
      locationType: "",
      locationStatus: "",
@@ -39,6 +42,40 @@
    const editFormOptions = ref([
      [
        {
          title: "货位编号",
          required: true,
          field: "locationCode",
          type: "string",
        },
        {
          title: "货位名称",
          required: true,
          field: "locationName",
          type: "string",
        },
         {
          title: "巷道编号",
          required: true,
          field: "roadwayNo",
          type: "string",
        },
        {
          title: "货位深度",
          field: "depth",
          type: "string",
          hidden: true,
        },
         {
          title: "备注",
          field: "remark",
          type: "string",
          hidden: true,
        },
      ],
        [
         {
          title: "货位行",
          required: true,
          field: "row",
@@ -56,12 +93,6 @@
          field: "layer",
          type: "string",
        },
        // {
        //   title: "货位深度",
        //   required: true,
        //   field: "depth",
        //   type: "string",
        // },
      ],
      [
        {
@@ -82,17 +113,12 @@
        },
        {
          title: "区域主键",
          required: true,
          //required: true,
          field: "areaId",
          type: "string",
          hidden: true,
        },
        // {
        //   title: "巷道编号",
        //   required: true,
        //   field: "roadwayNo",
        //   type: "string",
        // },
      ],
    ]);
    const searchFormFields = ref({
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/taskinfo/task.vue
@@ -143,7 +143,7 @@
      },
      {
        field: "nextAddress",
        title: "下一位置",
        title: "入库新任务号",
        type: "string",
        width: 120,
        align: "left",
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicService/Base/LocationInfoService.cs
@@ -35,14 +35,19 @@
            saveModel.MainData.Add(nameof(Dt_LocationInfo.EnableStatus), EnableStatusEnum.Normal.ObjToInt());
            saveModel.MainData.Add(nameof(Dt_LocationInfo.LocationStatus), LocationStatusEnum.Free.ObjToInt());
            Dt_LocationInfo locationInfo = saveModel.MainData.DicToModel<Dt_LocationInfo>();
            locationInfo.LocationCode = $"R{locationInfo.RoadwayNo.PadLeft(2, '0')}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
            locationInfo.LocationName = $"R{locationInfo.RoadwayNo.PadLeft(2, '0')}巷道{locationInfo.Row.ToString().PadLeft(3, '0')}行{locationInfo.Column.ToString().PadLeft(3, '0')}列{locationInfo.Layer.ToString().PadLeft(3, '0')}层{locationInfo.Depth.ToString().PadLeft(2, '0')}æ·±";
            //locationInfo.LocationCode = $"R{locationInfo.RoadwayNo.PadLeft(2, '0')}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
            //locationInfo.LocationName = $"R{locationInfo.RoadwayNo.PadLeft(2, '0')}巷道{locationInfo.Row.ToString().PadLeft(3, '0')}行{locationInfo.Column.ToString().PadLeft(3, '0')}列{locationInfo.Layer.ToString().PadLeft(3, '0')}层{locationInfo.Depth.ToString().PadLeft(2, '0')}æ·±";
            return base.AddData(locationInfo);
        }
        public override WebResponseContent UpdateData(SaveModel saveModel)
        {
            string locationtype = saveModel.MainData["locationType"].ToString();
            if (locationtype != "1")
            {
                return WebResponseContent.Instance.Error($"该货位类型不允计修改!");
            }
            return base.UpdateData(saveModel);
        }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -128,7 +128,7 @@
        OutFinish = 190,
        /// <summary>
        /// å‡ºåº“任务挂起
        /// å‡ºåº“任务强制完成
        /// </summary>
        [Description("出库任务挂起")]
        OutPending = 197,
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Basic/Dt_LocationInfo.cs
@@ -14,7 +14,7 @@
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        [SugarColumn(ColumnDescription = "区域主键")]
        [SugarColumn(IsNullable = true,ColumnDescription = "区域主键")]
        public int AreaId {  get; set; }=0;
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "货位编号")]
@@ -35,7 +35,7 @@
        [SugarColumn(IsNullable = false, ColumnDescription = "货位层")]
        public int Layer {  get; set; }
        [SugarColumn(IsNullable = false, ColumnDescription = "货位深度")]
        [SugarColumn(IsNullable = true, ColumnDescription = "货位深度")]
        public int Depth {  get; set; }
        //[SugarColumn(IsNullable = false, ColumnDescription = "左侧/右侧")]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -44,7 +44,7 @@
        /// </summary>
        [ImporterHeader(Name = "任务号")]
        [ExporterHeader(DisplayName = "任务号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务号"), SequenceAttirbute(nameof(SequenceEnum.SeqTaskNum), 6000)]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务号")]
        public int TaskNum { get; set; }
        /// <summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj
@@ -8,7 +8,7 @@
    <ItemGroup>
        <PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
        <PackageReference Include="WIDESEAWCS_Core" Version="1.0.6" />
        <PackageReference Include="WIDESEAWCS_Core" Version="1.0.7" />
    </ItemGroup>
    <ItemGroup>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -62,7 +62,7 @@
        }
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// ä»»åŠ¡å–æ¶ˆ(堆垛机回解决不了的故障需清除任务,清除任务后,需在WCS上取消任务)
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
@@ -74,14 +74,14 @@
        }
        /// <summary>
        /// ä»»åŠ¡å¼ºåˆ¶å®Œæˆ
        /// ä»»åŠ¡å¼ºåˆ¶å®Œæˆ  ï¼ˆå †åž›æœºå®žé™…已完成任务,WCS未收到完成信号或其他未知原因导致WCS任务未完成,可以执行该方法强制完成任务)
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("ForceCompleteTask")]
        public WebResponseContent ForceCompleteTask (int taskNum)
        {
            return null;
            return Service.ForceCompleteTask(taskNum);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -21,6 +21,7 @@
using SqlSugar;
using SqlSugar.Extensions;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
@@ -705,14 +706,123 @@
        }
        /// <summary>
        /// ä»»åŠ¡å¼ºåˆ¶å®Œæˆ
        /// ä»»åŠ¡å¼ºåˆ¶å®Œæˆ å †åž›æœºå®žé™…已完成任务,WCS未收到完成信号或其他未知原因导致WCS任务未完成,可以执行该方法强制完成任务
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        public WebResponseContent ForceCompleteTask(int taskNum)
        {
            return null;
            WebResponseContent content = new WebResponseContent();
            try
            {
                bool isBack = false;
                //1,先查询任务,根据不同的任务类型做任务强制完成操作
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                Dt_LocationInfo locationsrc = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress.ToString());
                Dt_LocationInfo locationdsc = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress.ToString());
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    if (task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                    {
                        task.TaskState = (int)TaskInStatusEnum.SC_InFinish;
                        //需要将目标地址改为有货状态
                        locationdsc.LocationStatus = (int)LocationStatusEnum.InStock;
                        //更新状态为任务完成
                        UpdateTaskStatus(task.TaskId, task.TaskState);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"入库任务完成");
                        //更新货位
                        _locationInfoRepository.UpdateData(locationdsc);
                        isBack = true;
                    }
                    else
                    {
                        return content = WebResponseContent.Instance.Error("该任务目前状态,不允计强制完成!");
                    }
                }
                else
                {
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                    {
                        if (task.TaskType == (int)TaskOutboundTypeEnum.OutInventory || task.TaskType == (int)TaskOutboundTypeEnum.OutPick)//异常出库 ç©ºè½¦å‡ºåº“
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                            //源地址更新为空闲
                            locationsrc.LocationStatus = (int)LocationStatusEnum.Free;
                            //更新状态为任务完成
                            UpdateTaskStatus(task.TaskId, task.TaskState);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库任务完成");
                            //更新货位
                            _locationInfoRepository.UpdateData(locationsrc);
                            isBack = true;
                        }
                        else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation)//移库
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                            //源地址更新为空闲
                            locationsrc.LocationStatus = (int)LocationStatusEnum.Free;
                            //目标地址更新为有货
                            locationdsc.LocationStatus = (int)LocationStatusEnum.InStock;
                            //更新状态为任务完成
                            UpdateTaskStatus(task.TaskId, task.TaskState);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库任务完成");
                            //更新货位
                            _locationInfoRepository.UpdateData(locationsrc);
                            _locationInfoRepository.UpdateData(locationdsc);
                            isBack = true;
                        }
                        else
                        {
                            return WebResponseContent.Instance.Error($"上料任务不允计强制完成!");
                        }
                    }
                    else
                    {
                        return WebResponseContent.Instance.Error($"该任务状态不允计强制完成!");
                    }
                }
                //任务强制完成回调MES
                if (isBack)
                {
                    if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)//入库时回传需传新任务号
                    {
                        task.TaskNum =int.Parse(task.NextAddress);
                    }
                    MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
                    MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                    if (res != null && res.code != 0)
                    {
                        ServiceLogger.WriteDebug("ForceCompleteTask", $"任务强制完成后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                        content = WebResponseContent.Instance.Error($"任务强制完成后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                    }
                    else
                    {
                        ServiceLogger.WriteDebug("ForceCompleteTask", $"任务强制完成后回传MES成功!,任务号:【{taskNum}】");
                        content = WebResponseContent.Instance.Error($"大堆垛机完成后回传MES成功!,任务号:【{taskNum}】");
                    }
                }
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
@@ -720,51 +830,112 @@
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public WebResponseContent CancelTask(int taskid)
        public WebResponseContent CancelTask(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //先查询任务,根据不同的任务类型做任务取消操作
                bool isAllow = false;
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskId == taskid);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务id:【{taskid}】");
                //1,先查询任务,根据不同的任务类型做任务取消操作
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                Dt_LocationInfo locationsrc = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress.ToString());
                Dt_LocationInfo locationdsc = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress.ToString());
                bool isBack = false;
                //如果是入库分自动和手动两种情况处理
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    if (task.WMSId == 0 && task.TaskState == (int)TaskInStatusEnum.InNew)//自动入库,1001-AGV请求是否允计进入,任务状态为“新建入库任务200”之前可以取消
                    {
                        isAllow = true;
                        task.TaskState = (int)TaskInStatusEnum.InCancel;
                        //需要将目标地址恢复为空闲状态
                        locationdsc.LocationStatus = (int)LocationStatusEnum.Free;
                        //更新状态为任务取消
                        UpdateTaskStatus(task.TaskId, task.TaskState);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"入库任务取消");
                        _locationInfoRepository.UpdateData(locationdsc);
                        isBack = true;
                    }
                    else if (task.WMSId == 1 && task.TaskState == (int)TaskInStatusEnum.AGV_InExecuting)//手动入库,3001-AGV放货完成,任务状态为“AGV入库执行中210”之前可以取消
                    {
                        isAllow = true;
                        task.TaskState = (int)TaskInStatusEnum.InCancel;
                        //需要将目标地址恢复空闲状态
                        locationdsc.LocationStatus = (int)LocationStatusEnum.Free;
                        //更新状态为任务取消
                        UpdateTaskStatus(task.TaskId, task.TaskState);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"入库任务取消");
                        _locationInfoRepository.UpdateData(locationdsc);
                        isBack = true;
                    }
                    else
                    {
                        return WebResponseContent.Instance.Error($"该任务状态不允计取消!");
                    }
                }
                else//其他任务,任务状态“新建出库任务”之前,才可以取消
                {
                    if (task.TaskState == (int)TaskOutStatusEnum.OutNew)
                    {
                        if(task.TaskType == (int)TaskOutboundTypeEnum.OutInventory|| task.TaskType == (int)TaskOutboundTypeEnum.OutPick)//异常出库 ç©ºè½¦å‡ºåº“
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutCancel;
                            //源地址恢复到有货
                            locationsrc.LocationStatus = (int)LocationStatusEnum.InStock;
                            //更新状态为任务取消
                            UpdateTaskStatus(task.TaskId, task.TaskState);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库任务取消");
                            _locationInfoRepository.UpdateData(locationsrc);
                            isBack = true;
                        }
                        else if(task.TaskType == (int)TaskRelocationTypeEnum.Relocation)//移库
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutCancel;
                            //源地址恢复到有货
                            locationsrc.LocationStatus = (int)LocationStatusEnum.InStock;
                            //需要将目标地址恢复空闲状态
                            locationdsc.LocationStatus = (int)LocationStatusEnum.Free;
                            //更新状态为任务取消
                            UpdateTaskStatus(task.TaskId, task.TaskState);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库任务取消");
                            _locationInfoRepository.UpdateData(locationsrc);
                            _locationInfoRepository.UpdateData(locationdsc);
                            isBack = true;
                        }
                        else
                        {
                            return WebResponseContent.Instance.Error($"上料任务不允计取消!");
                        }
                    }
                    else
                    {
                        isAllow = true;
                        task.TaskState = (int)TaskOutStatusEnum.OutCancel;
                        return WebResponseContent.Instance.Error($"该任务状态不允计取消!");
                    }
                }
                if (isAllow)//如果允计取消
                //任务取消回调MES
                if (isBack)
                {
                    //更新状态为任务取消
                    UpdateTaskStatus(task.TaskId, task.TaskState);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"手动任务取消");
                    content = WebResponseContent.Instance.OK("取消成功!");
                    //同步回传WMS
                    MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 3 };
                    MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                    if (res != null && res.code != 0)
                    {
                        ServiceLogger.WriteDebug("ForceCompleteTask", $"任务取消回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                        content = WebResponseContent.Instance.Error($"任务取消回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                    }
                    else
                    {
                        ServiceLogger.WriteDebug("ForceCompleteTask", $"任务取消回传MES成功!,任务号:【{taskNum}】");
                        content = WebResponseContent.Instance.Error($"任务取消回传MES成功!,任务号:【{taskNum}】");
                    }
                }
                else
                {
                    content = WebResponseContent.Instance.OK("该任务目前状态不充许取消!");
                }
            }
            catch (Exception ex)
            {
@@ -943,12 +1114,26 @@
                        _unitOfWorkManage.CommitTran();
                        //出库完成,回传WMS
                        //回传到WMS
                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                        if (res != null && res.code != 0)
                        if (task.TaskType == (int)TaskOutboundTypeEnum.OutPick)
                        {
                            ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            content = WebResponseContent.Instance.Error($"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
                            MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                            if (res != null && res.code != 0)
                            {
                                ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成空车出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                                content = WebResponseContent.Instance.Error($"大堆垛机完成空车出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            }
                        }
                        else
                        {
                            MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
                            MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                            if (res != null && res.code != 0)
                            {
                                ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成异常出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                                content = WebResponseContent.Instance.Error($"大堆垛机完成异常出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            }
                        }
                    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -6,11 +6,13 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.ServiceLog;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IBasicRepository;
@@ -89,6 +91,13 @@
                                            _taskService.UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutExecuting);
                                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库执行中");
                                        }
                                        //空车出库命令发送成功后,回传 status=1,
                                        if (task.TaskType == (int)TaskOutboundTypeEnum.OutPick)
                                        {
                                            MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 1 };
                                            MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                                        }
                                    }
                                    else
                                    {