1
huangxiaoqiang
2 天以前 2190be42c0d77be84fed82d387f2a34da7fe4acc
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,10 +16,12 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using HslCommunication;
using Mapster;
using Newtonsoft.Json;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using WIDESEA_Comm.Http;
using WIDESEA_Common.Log;
using WIDESEAWCS_Common;
@@ -41,8 +43,10 @@
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_TaskInfoRepository;
using static WIDESEAWCS_QuartzJob.Service.DeviceInfoService;
namespace WIDESEAWCS_TaskInfoService
{
@@ -55,7 +59,9 @@
        private readonly ITask_HtyRepository _taskHtyRepository;
        private readonly ISys_ConfigService _sys_ConfigService;
        private readonly IMapper _mapper;
        private readonly IDeviceInfoRepository _deviceInfoRepository;
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        private readonly IDt_WMSErrorMessageRepository _errorMessageRepository;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -71,7 +77,8 @@
        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
        public List<int> TaskRelocationboundTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService taskHtyService, ISys_ConfigService sys_ConfigService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository taskHtyRepository) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService taskHtyService, ISys_ConfigService sys_ConfigService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository taskHtyRepository,
        IDeviceInfoRepository deviceInfoRepository, IDt_WMSErrorMessageRepository errorMessageRepository) : base(BaseDal)
        {
            _routerService = routerService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -82,6 +89,8 @@
            _taskHtyRepository = taskHtyRepository;
            _mapper = mapper;
            _sys_ConfigService = sys_ConfigService;
            _deviceInfoRepository = deviceInfoRepository;
            _errorMessageRepository = errorMessageRepository;
        }
        /// <summary>
@@ -89,97 +98,323 @@
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs)
        public WebResponseContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTOs)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {// åˆ›å»ºä¸€ä¸ªDt_Task类型的列表用于存储转换后的任务数据
                List<Dt_Task> tasks = new List<Dt_Task>();
                // éåŽ†ä¼ å…¥çš„WMSTaskDTO列表
                foreach (var item in taskDTOs)
            {
                WriteLog.GetLog("接收WMS任务").Write(JsonConvert.SerializeObject(taskDTOs), "接收WMS任务");
                Dt_Task task =null;
                // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå‡ºåº“ä»»åŠ¡
                if (taskDTOs.TaskType == "2")
                {
                    var task = BaseDal.QueryFirst(x => x.WMSTaskNum == item.TaskId || x.PalletCode == item.TPbarcode);
                    if (task != null)
                    if (Convert.ToInt32(taskDTOs.EndPoint) > 1999 && Convert.ToInt32(taskDTOs.EndPoint) < 3000)
                    {
                        task.Creater = "WMS";
                        task.Grade = 1;
                        task.PalletCode = item.TPbarcode;
                    }
                    // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå‡ºåº“ä»»åŠ¡
                    if (item.TaskType == "2")
                    {
                        string[] targetCodes = item.BeginPoint.Split("-");
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == GetScCode(Convert.ToInt32(targetCodes[0])) && x.stationType == 2);
                        Dt_Task taskOut = new Dt_Task()
                        Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskDTOs.EndPoint);
                        if (stationManagerStart == null)
                        {
                            return content.Error("未找到出库站台信息");
                        }
                        task = new Dt_Task()
                        {
                            TaskNum = BaseDal.GetTaskNo().Result,
                            Creater = "WMS",
                            WMSTaskNum=item.TaskId,
                            WMSTaskNum = taskDTOs.TaskId,
                            Grade = 1,
                            PalletCode = item.TPbarcode,
                            PalletCode = taskDTOs.TPbarcode,
                            TaskType = (int)TaskOutboundTypeEnum.Outbound,
                            TaskState = (int)TaskOutStatusEnum.OutNew,
                            SourceAddress = item.BeginPoint,
                            CurrentAddress = item.BeginPoint,
                            Roadway = GetScCode(Convert.ToInt32(targetCodes[0])),
                            NextAddress = stationManager.stationChildCode,
                            TargetAddress = item.EndPoint,
                            RGVName = "RGV01"
                            SourceAddress = taskDTOs.BeginPoint,
                            CurrentAddress = taskDTOs.BeginPoint,
                            Roadway = stationManagerStart.Roadway,
                            NextAddress = taskDTOs.EndPoint,
                            TargetAddress = taskDTOs.EndPoint,
                            Floor = stationManagerStart.stationFloor,
                            RGVName = ""
                        };
                        BaseDal.AddData(taskOut);
                    }
                    // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå…¥åº“ä»»åŠ¡
                    else if (item.TaskType == "1")
                    {
                        task.TaskType = (int)TaskInboundTypeEnum.Inbound;
                        task.TaskState = (int)TaskInStatusEnum.RGV_IndispatchFinish;
                        task.CurrentAddress = item.BeginPoint;
                        task.WMSTaskNum = item.TaskId;
                        task.TargetAddress = item.EndPoint;
                        string[] targetCodes = item.EndPoint.Split("-");
                        task.Roadway = GetScCode(Convert.ToInt32(targetCodes[0]));
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationType == 3);
                        task.NextAddress = stationManager.stationChildCode;
                        BaseDal.UpdateData(task);
                    }
                    else if (item.TaskType == "3")
                    {
                        task.TaskType = (int)TaskRelocationTypeEnum.Relocation;
                        task.TaskState = (int)TaskRelocationStatusEnum.RelocationNew;
                        task.SourceAddress = item.BeginPoint;
                        task.CurrentAddress = item.BeginPoint;
                        task.NextAddress = item.EndPoint;
                        task.TargetAddress = item.EndPoint;
                        task.Grade = 3;
                        BaseDal.AddData(tasks);
                        BaseDal.AddData(task);
                    }
                    else
                    {
                        return content.Error($"任务类型错误,未找到该任务类型,任务号:【{item.TaskId}】,任务类型:【{item.TaskType}】");
                        string[] targetCodes = taskDTOs.BeginPoint.Split("-");
                        if (taskDTOs.EndPoint == "3004")
                        {
                            var newTask = BaseDal.QueryFirst(x => x.SourceAddress == "3001" && x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.TaskState != (int)TaskInStatusEnum.HoistNew && x.TaskState != (int)TaskInStatusEnum.HoistInExecuting && x.TaskState > 225);
                            if (newTask != null)
                            {
                                return content.Error("已存在入库任务,出库任务不可下发");
                            }
                        }
                        Dt_StationManager stationManagerEnd = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskDTOs.EndPoint);
                        if (stationManagerEnd == null)
                        {
                            return content.Error("未找到出库站台信息");
                        }
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == GetScCode(Convert.ToInt32(targetCodes[0])) && x.stationType == 2 && x.stationFloor == stationManagerEnd.stationFloor);
                        var RGVName = string.Empty;
                        if (stationManager.stationFloor == "1F")
                        {
                            RGVName = stationManager.RGVName;
                        }
                        Dt_Task NewTask = new Dt_Task()
                        {
                            TaskNum = BaseDal.GetTaskNo().Result,
                            Creater = "WMS",
                            WMSTaskNum = taskDTOs.TaskId,
                            Grade = 1,
                            PalletCode = taskDTOs.TPbarcode,
                            TaskType = (int)TaskOutboundTypeEnum.Outbound,
                            TaskState = (int)TaskOutStatusEnum.OutNew,
                            SourceAddress = taskDTOs.BeginPoint,
                            CurrentAddress = taskDTOs.BeginPoint,
                            Roadway = GetScCode(Convert.ToInt32(targetCodes[0])),
                            NextAddress = stationManager.stationChildCode,
                            TargetAddress = taskDTOs.EndPoint,
                            RGVName = stationManager.RGVName != null ? stationManager.RGVName : RGVName,
                            Floor = stationManager.stationFloor,
                            TargetStation = stationManagerEnd.remark,
                            SourceStation = 0,
                        };
                        if (GetScCode(Convert.ToInt32(targetCodes[0])) == "SC01" && (taskDTOs.EndPoint == "1030" || taskDTOs.EndPoint == "1029"))
                        {
                            Dt_StationManager stationTransfer = _stationManagerRepository.QueryFirst(x => x.stationChildCode== "1025");
                            NewTask.TargetStation = stationTransfer.stationRemark;
                            NewTask.Remark = "1025";
                        }
                        if(taskDTOs.EndPoint == "1004")
                        {
                            return content.Error("该点位不是出库点位");
                        }
                        if (GetScCode(Convert.ToInt32(targetCodes[0])) == "SC06" && taskDTOs.EndPoint == "1002")
                        {
                            Dt_StationManager stationTransfer = _stationManagerRepository.QueryFirst(x => x.stationChildCode == "1026");
                            NewTask.TargetStation = stationTransfer.stationRemark;
                            NewTask.Remark = "1026";
                        }
                        task = NewTask;
                        BaseDal.AddData(NewTask);
                    }
                }
                _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskId).ToList(), "接收WMS任务");
                // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå…¥åº“ä»»åŠ¡
                else if (taskDTOs.TaskType == "1")
                {
                    if (taskDTOs.BeginPoint == "3002")
                    {
                        Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskDTOs.BeginPoint);
                        if (stationManagerStart == null)
                        {
                            return content.Error("未找到入库站台信息");
                        }
                        string[] targetCodes = taskDTOs.EndPoint.Split("-");
                        task = new Dt_Task()
                        {
                            TaskNum = BaseDal.GetTaskNo().Result,
                            Creater = "WMS",
                            WMSTaskNum = taskDTOs.TaskId,
                            Grade = 1,
                            PalletCode = taskDTOs.TPbarcode,
                            TaskType = (int)TaskInboundTypeEnum.Inbound,
                            TaskState = (int)TaskInStatusEnum.HoistNew,
                            SourceAddress = taskDTOs.BeginPoint,
                            CurrentAddress = stationManagerStart.stationChildCode,
                            Roadway = GetScCode(Convert.ToInt32(targetCodes[0])),
                            NextAddress = stationManagerStart.stationNextChildCode,
                            TargetAddress = taskDTOs.EndPoint,
                            Floor = stationManagerStart.stationFloor,
                            RGVName = "RGV03"
                        };
                        BaseDal.AddData(task);
                    }
                    else if (Convert.ToInt32(taskDTOs.BeginPoint) > 1999 && Convert.ToInt32(taskDTOs.BeginPoint) < 3000)
                    {
                        Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskDTOs.BeginPoint);
                        if (stationManagerStart == null)
                        {
                            return content.Error("未找到出库站台信息");
                        }
                        task = new Dt_Task()
                        {
                            TaskNum = BaseDal.GetTaskNo().Result,
                            Creater = "WMS",
                            WMSTaskNum = taskDTOs.TaskId,
                            Grade = 1,
                            PalletCode = taskDTOs.TPbarcode,
                            TaskType = (int)TaskInboundTypeEnum.Inbound,
                            TaskState = (int)TaskInStatusEnum.Line_InFinish,
                            SourceAddress = taskDTOs.BeginPoint,
                            CurrentAddress = stationManagerStart.stationChildCode,
                            Roadway = stationManagerStart.Roadway,
                            NextAddress = taskDTOs.EndPoint,
                            TargetAddress = taskDTOs.EndPoint,
                            Floor = stationManagerStart.stationFloor,
                            RGVName = ""
                        };
                        BaseDal.AddData(task);
                    }
                    else
                    {
                        task = BaseDal.QueryFirst(x => x.PalletCode == taskDTOs.TPbarcode);
                        string[] targetCodes = taskDTOs.EndPoint.Split("-");
                        if (task != null)
                        {
                            task.Creater = "WMS";
                            task.Grade = 1;
                            task.PalletCode = taskDTOs.TPbarcode;
                            task.TaskType = (int)TaskInboundTypeEnum.Inbound;
                            task.TaskState = (int)TaskInStatusEnum.RGV_IndispatchFinish;
                            task.CurrentAddress = taskDTOs.BeginPoint;
                            task.WMSTaskNum = taskDTOs.TaskId;
                            task.TargetAddress = taskDTOs.EndPoint;
                            task.Roadway = GetScCode(Convert.ToInt32(targetCodes[0]));
                            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationType == 3 && x.stationFloor == task.Floor);
                            Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationChildCode==taskDTOs.BeginPoint && x.stationFloor == task.Floor);
                            task.NextAddress = stationManager.stationChildCode;
                            task.SourceStation = stationManagerStart.remark;
                            task.TargetStation = stationManager.stationRemark;
                            if (GetScCode(Convert.ToInt32(targetCodes[0])) == "SC01" && (taskDTOs.BeginPoint == "1030" || taskDTOs.EndPoint == "1029"))
                            {
                                Dt_StationManager stationTransfer = _stationManagerRepository.QueryFirst(x => x.stationChildCode == "1026");
                                task.TargetStation = stationTransfer.stationRemark;
                                task.Remark = "1026";
                            }
                            if (GetScCode(Convert.ToInt32(targetCodes[0])) == "SC06" && (taskDTOs.BeginPoint == "1002" || taskDTOs.BeginPoint == "1004"))
                            {
                                Dt_StationManager stationTransfer = _stationManagerRepository.QueryFirst(x => x.stationChildCode == "1026");
                                task.TargetStation = stationTransfer.stationRemark;
                                task.Remark = "1025";
                            }
                            BaseDal.UpdateData(task);
                        }
                        else
                        {
                            return content.Error($"未找到该托盘【{taskDTOs.TPbarcode}】任务");
                        }
                    }
                }
                else if (taskDTOs.TaskType == "3")
                {
                    string[] targetCodes = taskDTOs.BeginPoint.Split("-");
                    task = new Dt_Task()
                    {
                        TaskType = (int)TaskRelocationTypeEnum.Relocation,
                        TaskState = (int)TaskRelocationStatusEnum.RelocationNew,
                        Roadway = GetScCode(Convert.ToInt32(targetCodes[0])),
                        SourceAddress = taskDTOs.BeginPoint,
                        CurrentAddress = taskDTOs.BeginPoint,
                        NextAddress = taskDTOs.EndPoint,
                        TargetAddress = taskDTOs.EndPoint,
                        Grade = 3,
                    };
                    BaseDal.AddData(task);
                }
                else if (taskDTOs.TaskType == "4")
                {
                    task = BaseDal.QueryFirst(x => x.PalletCode == taskDTOs.TPbarcode);
                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
                    if (stationManager == null)
                    {
                        return content.Error("未找到起点站台");
                    }
                    if (task != null)
                    {
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        task_Hty.OperateType = (int)OperateTypeEnum.异常退回;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                        Dt_WMSErrorMessage message = new Dt_WMSErrorMessage()
                        {
                            TaskNum = task.TaskNum,
                            PalletCode=taskDTOs.TPbarcode,
                            ErrorMessage=taskDTOs.EndPoint,
                            CreateDate=DateTime.Now,
                            Creater = "WMS"
                        };
                        _errorMessageRepository.AddData(message);
                        IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.RGVName);
                        if (device != null)
                        {
                            if (task.RGVName == "RGV01" || task.RGVName == "RGV02")
                            {
                                CommonRGV_FirstFloor commonRGV = (CommonRGV_FirstFloor)device;
                                commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, Convert.ToSByte(stationManager.stationRemark));
                                commonRGV.SetValue(StackerCraneDBName.TaskNum, Convert.ToInt16(task.TaskNum));
                                commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(4));
                            }
                            else
                            {
                                CommonRGV commonRGV = (CommonRGV)device;
                                commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, Convert.ToSByte(stationManager.stationRemark));
                                commonRGV.SetValue(StackerCraneDBName.TaskNum, Convert.ToInt16(task.TaskNum));
                                commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(4));
                            }
                        }
                    }
                    else
                    {
                        IDevice? deviceconveyorline = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
                        if (deviceconveyorline != null)
                        {
                            CommonConveyorLine conveyorLine = (CommonConveyorLine)deviceconveyorline;
                            conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode);
                            Dt_WMSErrorMessage message = new Dt_WMSErrorMessage()
                            {
                                PalletCode = taskDTOs.TPbarcode,
                                ErrorMessage = taskDTOs.EndPoint,
                                CreateDate = DateTime.Now,
                                Creater ="WMS"
                            };
                            _errorMessageRepository.AddData(message);
                        }
                    }
                    return content.OK();
                }
                else
                {
                    return content.Error($"任务类型错误,未找到该任务类型,任务号:【{taskDTOs.TaskId}】,任务类型:【{taskDTOs.TaskType}】");
                }
                _taskExecuteDetailService.AddTaskExecuteDetailS(task.TaskNum, "接收WMS任务");
                content = WebResponseContent.Instance.OK("成功");
            }
            catch (Exception ex)
            {
                WriteLog.GetLog("接收WMS任务").Write(JsonConvert.SerializeObject(ex.Message), "接收WMS任务");
                content = WebResponseContent.Instance.Error($"生成任务失败,错误信息:{ex.Message}");
            }
            finally
@@ -195,17 +430,25 @@
            {
                return "SC01";
            }
            else if (number >= 5 && number <= 8)
            else if (number >= 5 && number <= 7)
            {
                return "SC02";
            }
            else if (number >= 9 && number <= 12)
            else if (number >= 8 && number <= 10)
            {
                return "SC03";
            }
            else if (number >= 13 && number <= 16)
            else if (number >= 11 && number <= 14)
            {
                return "SC04";
            }
            else if (number >= 15 && number <= 18)
            {
                return "SC05";
            }
            else if (number >= 19 && number <= 22)
            {
                return "SC06";
            }
            else
            {
@@ -221,8 +464,8 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.WMSTaskNum == taskDTO.TaskId || x.Roadway == taskDTO.WhCode);
                Dt_Task_Hty taskHty = _taskHtyRepository.QueryFirst(x => x.WMSTaskNum == taskDTO.TaskId || x.Roadway == taskDTO.WhCode);
                Dt_Task task = BaseDal.QueryFirst(x => x.WMSTaskNum == taskDTO.TaskId && x.Roadway == taskDTO.WhCode);
                Dt_Task_Hty taskHty = _taskHtyRepository.QueryFirst(x => x.WMSTaskNum == taskDTO.TaskId && x.Roadway == taskDTO.WhCode);
                if (task != null)
                {
                    return content.OK(data: new WMSTaskDTO()
@@ -317,7 +560,7 @@
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTask(string currentAddress)
        public Dt_Task QueryConveyorLineTask(string currentAddress,int taskNum)
        {
            Dt_Task task= BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.RGV_InExecutingFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
            if (task == null)
@@ -333,12 +576,12 @@
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryConveyorLineFinishTask(string currentAddress)
        public Dt_Task QueryConveyorLineFinishTask(string currentAddress,int taskNum)
        {
            Dt_Task task = BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InExecuting && x.NextAddress == currentAddress, TaskOrderBy);
            Dt_Task task = BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InExecuting && x.NextAddress == currentAddress && x.TaskNum == taskNum, TaskOrderBy);
            if (task == null)
            {
                task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting && x.NextAddress == currentAddress, TaskOrderBy);
                task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting && x.CurrentAddress == currentAddress && x.TaskNum == taskNum, TaskOrderBy);
            }
            return task;
        }
@@ -352,7 +595,18 @@
        /// <returns></returns>
        public Dt_Task QueryRGVExecutingTask(string deviceNo)
        {
            return BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish);
            return BaseDal.QueryFirst(x => (x.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish|| x.TaskState == (int)TaskInStatusEnum.RGV_InAwaitWMS|| x.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish) && x.RGVName == deviceNo);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址查询RGV未执行的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryRGVExecutingTask(string deviceNo,int taskNum)
        {
            return BaseDal.QueryFirst(x => (x.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InAwaitWMS) && x.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish && x.RGVName == deviceNo&&x.TaskNum==taskNum);
        }
        /// <summary>
@@ -404,6 +658,11 @@
        public Dt_Task QueryRGVTask(string deviceNo)
        {
            return BaseDal.QueryFirst(x => x.RGVName == deviceNo && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish)), TaskOrderBy);
        }
        public List<Dt_Task> QueryRGVTask()
        {
            return BaseDal.QueryData(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish) && x.Floor == "1F"), TaskOrderBy);
        }
        /// <summary>
@@ -496,6 +755,147 @@
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
        /// </summary>
        /// <param name="taskNum">任务号</param>
        public WebResponseContent HandUpdateTaskStatusToNext(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                int oldState = task.TaskState;
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutFinish)
                    {
                        task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        task_Hty.OperateType = (int)OperateTypeEnum.人工完成;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                        var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                        var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                        var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                        WMSTaskDTO taskDTO = new WMSTaskDTO()
                        {
                            TaskId = task.WMSTaskNum,
                            TPbarcode = task.PalletCode,
                            WhCode = "1001",
                            BeginPoint = task.SourceAddress,
                            EndPoint = task.TargetAddress,
                            Results = "1"
                        };
                        if (wmsBase == null || requestTask == null)
                        {
                            throw new InvalidOperationException("WMS IP æœªé…ç½®");
                        }
                        var wmsIpAddress = wmsBase + requestTask;
                        var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV出库完成");
                    }
                    if (task.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
                    {
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationChildCode == task.NextAddress);
                        Dt_StationManager stationManagerend = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress);
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = task.TargetAddress;
                        task.SourceStation = stationManager.stationRemark;
                        task.TargetStation = stationManagerend.remark;
                    }
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
                    {
                        content = StackCraneTaskCompleted(task.TaskNum);
                        return content;
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    {
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = task.TargetAddress;
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                    {
                        return content.Error("请等待WMS下发入库任务");
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.RGV_InExecutingFinish)
                    {
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress && x.stationFloor == task.Floor);
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = stationManager.stationNextChildCode;
                        task.ModifyDate = DateTime.Now;
                        BaseDal.UpdateData(task);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV入库完成");
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                    {
                        if (App.User.UserId > 0)
                        {
                            content = StackCraneTaskCompleted(task.TaskNum);
                            return content;
                        }
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        task_Hty.OperateType = (int)OperateTypeEnum.人工完成;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish || task.TaskState == (int)TaskInStatusEnum.RGV_InExecutingFinish)
                    {
                        RGVTaskCompleted(task.TaskNum);
                    }
                }
                else
                {
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{task.TaskNum}】,任务类型:【{task.TaskType}】");
                }
                if (task.TaskState <= 0)
                {
                    return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                }
                task.ModifyDate = DateTime.Now;
                task.Modifier = "System";
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskState}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】");
                content = WebResponseContent.Instance.OK();
                return content;
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
        /// </summary>
        /// <param name="taskNum">任务号</param>
        public WebResponseContent UpdateTaskStatusToNext(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
@@ -529,16 +929,14 @@
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutFinish)
                    if (task.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
                    {
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationChildCode == task.NextAddress);
                        Dt_StationManager stationManagerend = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress);
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = task.TargetAddress;
                        task.SourceStation = stationManager.stationRemark;
                        task.TargetStation = stationManagerend.remark;
                    }
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
@@ -546,18 +944,17 @@
                        content = StackCraneTaskCompleted(task.TaskNum);
                        return content;
                    }
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                    {
                        task.Dispatchertime = DateTime.Now;
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InExecuting)
                    {
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationChildCode== task.NextAddress);
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = stationManager.stationNextChildCode;
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    {
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = task.TargetAddress;
@@ -578,6 +975,10 @@
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.InFinish|| task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                    {
                        RGVTaskCompleted(task.TaskNum);
                    }
                }
                else
@@ -616,38 +1017,37 @@
                if (task.TaskState == (int)TaskInStatusEnum.RGV_Indispatch)
                {
                    //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                    //var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue;
                    //var keys = new Dictionary<string, object>()
                    //{
                    //    {"TPbarcode", Barcode},
                    //    {"WhCode", "1001"},
                    //    {"BeginPoint", task.SourceAddress}
                    //};
                    //if (wmsBase == null || requestTask == null)
                    //{
                    //    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    //}
                    //var wmsIpAddress = wmsBase + requestTask;
                    //var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, keys.ToString()).Result;
                    task.TaskState = (int)TaskInStatusEnum.RGV_InAwaitWMS;
                    task.PalletCode = Barcode;
                    task.ModifyDate = DateTime.Now;
                    BaseDal.UpdateData(task);
                    //if (result != null)
                    //{
                        task.TaskState = (int)TaskInStatusEnum.RGV_InAwaitWMS;
                        task.PalletCode = Barcode;
                        task.ModifyDate = DateTime.Now;
                        BaseDal.UpdateData(task);
                    //}
                    var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                    var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue;
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    {
                        TPbarcode = Barcode,
                        WhCode = "1001",
                        BeginPoint = task.SourceAddress
                    };
                    if (wmsBase == null || requestTask == null)
                    {
                        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    }
                    var wmsIpAddress = wmsBase + requestTask;
                    var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                    WriteLog.GetLog("WMS接口返回信息").Write(JsonConvert.SerializeObject(result), "WMS接口返回信息");
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV调度完成等待WMS任务");
                }
                else if (task.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
                {
                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress && x.stationFloor == task.Floor);
                    task.TaskState = (int)TaskInStatusEnum.RGV_InExecutingFinish;
                    task.NextAddress = stationManager.stationNextChildCode;
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = stationManager.stationNextChildCode;
                    task.ModifyDate = DateTime.Now;
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV入库完成");
@@ -657,11 +1057,10 @@
                    task.TaskState = (int)TaskOutStatusEnum.RGV_OutdispatchFinish;
                    task.ModifyDate = DateTime.Now;
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV出库调度");
                }
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting)
                else if (task.TaskState == (int)TaskInStatusEnum.InRetuen)
                {
                    task.TaskState = (int)TaskOutStatusEnum.RGV_OutFinish;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
@@ -671,6 +1070,52 @@
                    BaseDal.DeleteData(task);
                    _taskHtyRepository.AddData(task_Hty);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV出库完成");
                }
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                    task_Hty.TaskId = 0;
                    task_Hty.OperateType = (int)OperateTypeEnum.自动完成;
                    BaseDal.DeleteData(task);
                    _taskHtyRepository.AddData(task_Hty);
                    var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                    var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    {
                        TaskId = task.WMSTaskNum,
                        TPbarcode = task.PalletCode,
                        WhCode = "1001",
                        BeginPoint = task.SourceAddress,
                        EndPoint = task.TargetAddress,
                        Results = "1"
                    };
                    if (wmsBase == null || requestTask == null)
                    {
                        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    }
                    var wmsIpAddress = wmsBase + requestTask;
                    var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                    WriteLog.GetLog("WMS接口返回信息").Write(JsonConvert.SerializeObject(result), "WMS接口返回信息");
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV出库完成");
                }
                else if (task.TaskState == (int)TaskInStatusEnum.RGV_TransFer)
                {
                    task.TaskState = (int)TaskInStatusEnum.RGV_TransFerFInish;
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV入库中转");
                }
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_TransFer)
                {
                    task.TaskState = (int)TaskOutStatusEnum.RGV_TransFerFInish;
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV出库中转");
                }
                else
                {
@@ -694,58 +1139,72 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                //var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                //var keys = new Dictionary<string, object>()
                //    {
                //        {"TaskId", task.WMSTaskNum},
                //        {"TPbarcode", task.PalletCode},
                //        {"WhCode", "1001"},
                //        {"BeginPoint", task.SourceAddress},
                //        {"EndPoint", task.TargetAddress},
                //        {"Results", 1},
                //    };
                //if (wmsBase == null || requestTask == null)
                //{
                //    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                //}
                //var wmsIpAddress = wmsBase + requestTask;
                //var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, keys.ToString()).Result;
                //if (result != null)
                //{
                //    task.ExceptionMessage += "   " + content.Message;
                //}
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                {
                    task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
                    if (Convert.ToInt32(task.TargetAddress) > 1999 && Convert.ToInt32(task.TargetAddress) < 3000)
                    {
                        task.TaskState = (int)TaskOutStatusEnum.OutFinish; ;
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationType == 2);
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        task_Hty.OperateType = (int)OperateTypeEnum.自动完成;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    }
                    else
                    {
                        task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
                    task.CurrentAddress = task.NextAddress;
                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationType == 2 && x.stationFloor == task.Floor);
                    task.NextAddress = stationManager.stationNextChildCode;
                        task.CurrentAddress = task.NextAddress;
                    BaseDal.UpdateData(task);
                        task.NextAddress = stationManager.stationNextChildCode;
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                        BaseDal.UpdateData(task);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
                {
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                {
                    //todo åŒæ­¥åˆ°WMS
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    task.TaskState = (int)TaskInStatusEnum.InFinish; ;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                    task_Hty.TaskId = 0;
                    task_Hty.OperateType = (int)OperateTypeEnum.自动完成;
                    BaseDal.DeleteData(task);
                    _taskHtyRepository.AddData(task_Hty);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                    var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    {
                        TaskId = task.WMSTaskNum,
                        TPbarcode = task.PalletCode,
                        WhCode = "1001",
                        BeginPoint = task.SourceAddress,
                        EndPoint = task.TargetAddress,
                        Results = "1"
                    };
                    if (wmsBase == null || requestTask == null)
                    {
                        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    }
                    var wmsIpAddress = wmsBase + requestTask;
                    var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                    WriteLog.GetLog("WMS接口返回信息").Write(JsonConvert.SerializeObject(result), "WMS接口返回信息");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
@@ -756,10 +1215,30 @@
                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                    task_Hty.TaskId = 0;
                    task_Hty.OperateType = (int)OperateTypeEnum.自动完成;
                    BaseDal.DeleteData(task);
                    _taskHtyRepository.AddData(task_Hty);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                    var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                    var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    {
                        TaskId = task.WMSTaskNum,
                        TPbarcode = task.PalletCode,
                        WhCode = "1001",
                        BeginPoint = task.SourceAddress,
                        EndPoint = task.TargetAddress,
                        Results = "1"
                    };
                    if (wmsBase == null || requestTask == null)
                    {
                        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    }
                    var wmsIpAddress = wmsBase + requestTask;
                    var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                    WriteLog.GetLog("WMS接口返回信息").Write(JsonConvert.SerializeObject(result), "WMS接口返回信息");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                {
@@ -805,6 +1284,130 @@
            return content;
        }
        public WebResponseContent TaskCancel(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return content.Error("未找到该任务信息");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutCancel;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    task.TaskState = (int)TaskInStatusEnum.InCancel;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    task.TaskState = (int)TaskRelocationStatusEnum.RelocationCancel;
                }
                else
                {
                    return content.Error($"任务类型错误,未找到该任务类型,任务号:【{task.TaskNum}】,任务类型:【{task.TaskType}】");
                }
                task.ModifyDate = DateTime.Now;
                BaseDal.DeleteData(task);
                Dt_Task_Hty taskHty = _mapper.Map<Dt_Task_Hty>(task);
                taskHty.OperateType = (int)OperateTypeEnum.WCS人工取消;
                _taskHtyRepository.AddData(taskHty);
                #region ä¸ŠæŠ¥WMS执行结果
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskId = task.WMSTaskNum,
                    TPbarcode = task.PalletCode,
                    WhCode = "1001",
                    BeginPoint = task.SourceAddress,
                    EndPoint = task.TargetAddress,
                    Results = "3"
                };
                if (wmsBase == null || requestTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + requestTask;
                var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                WriteLog.GetLog("WMS接口返回信息").Write(JsonConvert.SerializeObject(result), "WMS接口返回信息");
                #endregion
                content = WebResponseContent.Instance.OK("取消任务成功");
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        public WebResponseContent TaskComplete(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var task=BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return content.Error("未找到该任务信息");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutHandFinish;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    task.TaskState = (int)TaskInStatusEnum.InHandFinish;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    task.TaskState = (int)TaskRelocationStatusEnum.RelocationHandFinish;
                }
                else
                {
                    return content.Error($"任务类型错误,未找到该任务类型,任务号:【{task.TaskNum}】,任务类型:【{task.TaskType}】");
                }
                task.ModifyDate = DateTime.Now;
                BaseDal.DeleteData(task);
                Dt_Task_Hty taskHty = _mapper.Map<Dt_Task_Hty>(task);
                taskHty.OperateType = (int)OperateTypeEnum.人工完成;
                _taskHtyRepository.AddData(taskHty);
                #region ä¸ŠæŠ¥WMS完成
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskId = task.WMSTaskNum,
                    TPbarcode = task.PalletCode,
                    WhCode = "1001",
                    BeginPoint = task.SourceAddress,
                    EndPoint = task.TargetAddress,
                    Results = "2"
                };
                if (wmsBase == null || requestTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + requestTask;
                var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                WriteLog.GetLog("WMS接口返回信息").Write(JsonConvert.SerializeObject(result), "WMS接口返回信息");
                #endregion
                content = WebResponseContent.Instance.OK("手动完成成功");
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æ¢å¤æŒ‚起任务
        /// </summary>