1
Huangxiaoqiang-03
2024-10-31 0bfe24ddf438636aeef8c1e6989d5c8c28b0bb1a
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -26,8 +26,10 @@
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Comm.Http;
using WIDESEA_Common.Log;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
@@ -40,6 +42,7 @@
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Core.Helper;
namespace WIDESEAWCS_TaskInfoService
{
@@ -73,7 +76,7 @@
            _task_HtyService = task_HtyService;
            _task_HtyRepository = task_HtyRepository;
        }
        public string url = AppSettings.Configuration["WMS"];
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
@@ -93,28 +96,6 @@
                    }
                    Dt_Task task = _mapper.Map<Dt_Task>(item);
                    task.Creater = "WMS";
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskInStatusEnum.InNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    tasks.Add(task);
                }
                BaseDal.AddData(tasks);
@@ -149,9 +130,9 @@
                    RoadWay = "SC01",
                    SourceAddress = sourceAddress,
                    TargetAddress = "SC01",
                    TaskState = (int)TaskInStatusEnum.InNew,
                    TaskState = TaskInStatusEnum.InNew.ObjToInt(),
                    Id = 0,
                    TaskType = (int)TaskInboundTypeEnum.Inbound
                    TaskType = TaskInboundTypeEnum.Inbound.ObjToInt()
                };
                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
@@ -171,7 +152,7 @@
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
        {
            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.SC_OutFinish.ObjToInt()) && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
@@ -182,7 +163,7 @@
        /// <returns></returns>
        public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == TaskInStatusEnum.Line_InExecuting.ObjToInt() || x.TaskState == TaskOutStatusEnum.Line_OutExecuting.ObjToInt()), TaskOrderBy);
        }
        /// <summary>
@@ -193,7 +174,7 @@
        /// <returns></returns>
        public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == TaskInStatusEnum.Line_InFinish.ObjToInt() || x.TaskState == TaskOutStatusEnum.Line_OutFinish.ObjToInt()), TaskOrderBy);
        }
        /// <summary>
@@ -205,11 +186,11 @@
        public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
        {
            if(taskTypeGroup == null)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.Line_InFinish.ObjToInt() || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt()), TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.Line_InFinish.ObjToInt(), TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
            return null;
        }
@@ -229,9 +210,9 @@
            else
            {
                if (string.IsNullOrEmpty(currentAddress))
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt()), TaskOrderBy);
                else
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt()), TaskOrderBy);
            }
        }
@@ -250,10 +231,29 @@
            }
            else
            {
                if (string.IsNullOrEmpty(currentAddress))
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                if (task != null && tasks == null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else if (task == null && tasks != null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
            }
        }
        /// <summary>
@@ -265,9 +265,9 @@
        public Dt_Task QueryStackerCraneRelocationTask(string deviceNo, string currentAddress = "")
        {
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
@@ -285,28 +285,28 @@
            }
            else
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                if (task != null && tasks == null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else if (task == null && tasks != null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
            }
@@ -327,7 +327,7 @@
            }
            else
            {
                return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.TargetAddress == outStationCodes, TaskOrderBy);
                return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() && x.TargetAddress == outStationCodes, TaskOrderBy);
            }
        }
@@ -413,32 +413,15 @@
                int oldState = task.TaskState;
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    task.TaskState = TaskOutStatusEnum.SC_OutExecuting.ObjToInt();
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    {
                        Random random = new Random();
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}";
                        task.TargetAddress = task.NextAddress;
                    }
                    task.TaskState = TaskInStatusEnum.SC_InExecuting.ObjToInt();
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    task.TaskState = TaskRelocationStatusEnum.RelocationExecuting.ObjToInt();
                }
                else
                {
@@ -513,56 +496,59 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == TaskOutStatusEnum.SC_OutExecuting.ObjToInt())
                {
                    List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                    if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = routers.FirstOrDefault().ChildPosi;
                    task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    //todo åŒæ­¥åˆ°WMS
                    //暂不考虑多个出库口
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState ==TaskInStatusEnum.SC_InExecuting.ObjToInt())
                {
                    //todo
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    task.TaskState = TaskInStatusEnum.InFinish.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                        Grade = 1,
                        PalletCode = task.PalletCode + "S",
                        RoadWay = "SC01",
                        SourceAddress = task.TargetAddress,
                        TargetAddress = "CLOutAreaA",
                        TaskState = (int)TaskOutStatusEnum.OutNew,
                        Id = 0,
                        TaskType = (int)TaskOutboundTypeEnum.Outbound
                    };
                    content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    //todo è°ƒç”¨WMS移库完成
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                {
                    task.TaskState = TaskRelocationStatusEnum.RelocationFinish.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else
                {
@@ -572,7 +558,11 @@
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】,异常信息:{ex.Message}");
            }
            finally
            {
                WriteLog.GetLog("完成任务").Write(JsonConvert.SerializeObject(content), "完成任务");
            }
            return content;
        }
@@ -581,22 +571,69 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryData(x => x.TaskNum == taskNum).FirstOrDefault();
                if (task != null)
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState != TaskOutStatusEnum.SC_OutExecuting.ObjToInt())
                {
                    if (task.TaskState != (int)TaskOutStatusEnum.SC_OutExecuting || task.TaskState != (int)TaskInStatusEnum.SC_InExecuting || task.TaskState != (int)TaskRelocationStatusEnum.SC_RelocationFinish)
                    task.TaskState = TaskOutStatusEnum.OutCancel.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库取消");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        task.TaskState = 501;
                        task.Modifier = "WMS";
                        BaseDal.DeleteData(task);
                        _task_HtyService.AddTaskHty(task);
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState != TaskInStatusEnum.SC_InExecuting.ObjToInt())
                {
                    task.TaskState = TaskInStatusEnum.InCancel.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库取消");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState != TaskRelocationStatusEnum.RelocationExecuting.ObjToInt())
                {
                    task.TaskState = TaskRelocationStatusEnum.RelocationCancel.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库取消");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else
                {
                    return content.Error("未找到WCS任务");
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                }
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {