1
HuBingJie
2025-12-05 28110912ca4803e5793f181517d7bf2d7a5ea2ad
´úÂë¹ÜÀí/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -51,9 +51,11 @@
using WIDESEA_Common.Log;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Utilities;
using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.Enum;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ISystemServices;
@@ -65,6 +67,7 @@
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_TaskInfoRepository;
using static Microsoft.IO.RecyclableMemoryStreamManager;
using static System.Net.Mime.MediaTypeNames;
@@ -80,6 +83,7 @@
        private readonly IMapper _mapper;
        private readonly IEquipmentStatusService _equipmentStatus;
        private readonly IAgvStationService _gvStationService;
        private readonly IRepository<AbnormalTask> _abnormalTask;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -94,7 +98,7 @@
        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService task_HtyService, IRouterRepository routerRepository, IEquipmentStatusService equipmentStatus, IAgvStationService agvStationService) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService task_HtyService, IRouterRepository routerRepository, IEquipmentStatusService equipmentStatus, IAgvStationService agvStationService, IRepository<AbnormalTask> abnormalTask) : base(BaseDal)
        {
            _routerService = routerService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -104,6 +108,7 @@
            _routerRepository = routerRepository;
            _equipmentStatus = equipmentStatus;
            _gvStationService = agvStationService;
            _abnormalTask = abnormalTask;
        }
        /// <summary>
@@ -144,19 +149,20 @@
                    if (item.type == 1)     //入库
                    {
                        Dt_Task dt_Task = new Dt_Task();
                        dt_Task.TaskNum = item.taskNo;
                        dt_Task.TaskNum = BaseDal.GetTaskNo().Result;
                        dt_Task.PalletCode = item.containerNo;    //暂无
                        dt_Task.Roadway = "RGV101";
                        dt_Task.TaskType = (int)TaskInboundTypeEnum.Inbound;
                        dt_Task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp;      //取货
                        dt_Task.RGVCurrentexecution = "0";      //目前暂无
                        dt_Task.RGVCurrentexecution = "";      //目前暂无
                        dt_Task.TaskState = (int)TaskInStatusEnum.RGV_InNew;      //目前暂无
                        dt_Task.SourceAddress = item.startAddress;
                        dt_Task.TargetAddress = item.endAddress;
                        dt_Task.CurrentAddress = item.startAddress;
                        dt_Task.NextAddress = "1021";   //目前暂无
                        dt_Task.NextAddress = "";   //目前暂无
                        dt_Task.Grade = item.priority;
                        dt_Task.WMSId = 0;   //目前暂无
                        dt_Task.LJTaskNum= item.taskNo;
                        BaseDal.AddData(dt_Task);
                        content.code = 0;
@@ -185,19 +191,20 @@
                        AGVStation gVStation = _gvStationService.Corridorequipment(roadway);
                        Dt_Task dt_Task = new Dt_Task();
                        dt_Task.TaskNum = item.taskNo;
                        dt_Task.TaskNum = BaseDal.GetTaskNo().Result;
                        dt_Task.PalletCode = item.containerNo;    //暂无
                        dt_Task.Roadway = roadway;
                        dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                        dt_Task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly;      //取货
                        dt_Task.RGVCurrentexecution = "0";      //目前暂无
                        dt_Task.TaskState = (int)TaskOutStatusEnum.OutNewLj;      //目前暂无
                        dt_Task.RGVCurrentexecution = "";      //目前暂无
                        dt_Task.TaskState = (int)TaskOutStatusEnum.OutNew;      //目前暂无
                        dt_Task.SourceAddress = item.startAddress;
                        dt_Task.TargetAddress = "0";
                        dt_Task.TargetAddress = "";
                        dt_Task.CurrentAddress = gVStation.Motherinlaw.ToString();
                        dt_Task.NextAddress = gVStation.ZicheMotherinlaw.ToString();   //目前暂无
                        dt_Task.Grade = item.priority;
                        dt_Task.WMSId = 0;   //目前暂无
                        dt_Task.LJTaskNum = item.taskNo;
                        BaseDal.AddData(dt_Task);
                        content.code = 0;
@@ -302,6 +309,11 @@
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
        }
        public Dt_Task ChacheGetFinhuoTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutPickupExecuting, TaskOrderBy);
        }
        public Dt_Task GetOutkouFinhuoTask(string DeviceCode, string curraderr)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutPickupFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing && x.NextAddress != "", TaskOrderBy);
@@ -325,7 +337,13 @@
        /// <param name="type">1:查找需要取货的任务</param>
        public Dt_Task PickupWarehouse(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InNew && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            Dt_Task _Task = BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskInStatusEnum.Inexcepjxz || x.TaskState == (int)TaskInStatusEnum.InAbnormalFinish || x.TaskState == (int)TaskInStatusEnum.InexceptionalSelection || x.TaskState == (int)TaskInStatusEnum.InFinish_exceptionalSelection
             || x.TaskState == (int)TaskInStatusEnum.InAbnormalFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InPickupExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InPickupFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InReleaseExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InReleaseFinish));
            if (_Task == null)
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InNew && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            }
            return null;
        }
@@ -336,7 +354,7 @@
        /// <param name="type">1:查找需要取货的任务   2:查找需要放货的任务</param>
        public Dt_Task GetInkouFinhuoTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.NextAddress != "" && x.TaskState == (int)TaskInStatusEnum.RGV_InPickupFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.NextAddress != "" && (x.TaskState == (int)TaskInStatusEnum.RGV_InPickupFinish || x.TaskState == (int)TaskInStatusEnum.InexceptionalSelection) && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
        }
        /// <summary>
@@ -355,7 +373,15 @@
        /// <returns></returns>
        public Dt_Task MothermachinemovementTask2(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InMothercarExecuting || x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly), TaskOrderBy);
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InMothercarExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InMothercarFinish || x.TaskState == (int)TaskInStatusEnum.SC_InExecuting || x.TaskState == (int)TaskInStatusEnum.InFinish), TaskOrderBy);
        }
        /// <summary>
        /// èŽ·å–æ¯è½¦ç§»åŠ¨ä»»åŠ¡å’Œç§»åŠ¨ä¸­çš„ä»»åŠ¡ï¼ˆå…¥åº“ï¼‰
        /// </summary>
        public Dt_Task MothermacTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InMothercarExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InMothercarFinish || x.TaskState == (int)TaskInStatusEnum.SC_InExecuting || x.TaskState == (int)TaskInStatusEnum.InFinish ), TaskOrderBy);
        }
        /// <summary>
@@ -364,7 +390,7 @@
        /// <param name="DeviceCode"></param>
        public Dt_Task OutMothermaTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarExecuting || x.RGVTaskType == (int)TaskOutStatusEnum.RGV_OutMothercarFinish), TaskOrderBy);
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarExecuting && x.RGVTaskType == (int)TaskOutStatusEnum.RGV_OutMothercarFinish), TaskOrderBy);
        }
@@ -403,8 +429,9 @@
        /// <param name="DeviceCode"></param>
        public Dt_Task ViceChariotPickupTask2(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskInStatusEnum.RGV_InReleaseFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseFinish) && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskInStatusEnum.RGV_InReleaseFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheFinish || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting || x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseFinish), TaskOrderBy);
        }
@@ -418,17 +445,22 @@
                Dt_Task dt_Task = null;
                if (tasktype == 1)
                {
                    dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.NextAddress == "999");
                    dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.TaskState== (int)TaskInStatusEnum.InexceptionalSelection);
                    if (dt_Task == null) return webResponse.Error("未找到需要修改的任务,无需修改");
                    dt_Task.NextAddress = NextAddress;
                    BaseDal.UpdateData(dt_Task);
                    return webResponse.OK("任务放货地址修改成功");
                }
                else
                {
                    dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskOutboundTypeEnum.Outbound && x.NextAddress == "999");
                    dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskOutboundTypeEnum.Outbound && x.NextAddress == ""&&x.TaskState == (int)TaskOutStatusEnum.RGV_OutPickupFinish);
                    if (dt_Task == null) return webResponse.Error("未找到需要修改的任务,无需修改");
                    dt_Task.NextAddress = NextAddress;
                    BaseDal.UpdateData(dt_Task);
                    return webResponse.OK("任务放货地址修改成功");
                }
                if (dt_Task == null) return webResponse.Error("未找到需要修改的任务,无需修改");
                dt_Task.NextAddress = NextAddress;
                BaseDal.UpdateData(dt_Task);
                return webResponse.OK("任务放货地址修改成功");
            }
            catch (Exception ex)
            {
@@ -520,9 +552,9 @@
            try
            {
                int oldState = task.TaskState;
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound && task.TaskState != (int)TaskInStatusEnum.InexceptionalSelection)
                {
                    if (task.TaskState >= (int)TaskInStatusEnum.RGV_InMothercarFinish)
                    if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
@@ -542,6 +574,12 @@
                    task.TaskState = nextStatus;
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound && task.TaskState== (int)TaskInStatusEnum.InexceptionalSelection)
                {
                    int nextStatus = (int)TaskInStatusEnum.Inexcepjxz;
                    task.TaskState = nextStatus;
                }
                else
                {
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{task.TaskNum}】,任务类型:【{task.TaskType}】");
@@ -557,14 +595,15 @@
                task.Modifier = "System";
                BaseDal.UpdateData(task);
                string oldstaterem = _taskExecuteDetailService.GetEnumDescription(oldState); //前一个状态
                string afterstaterem = _taskExecuteDetailService.GetEnumDescription(task.TaskState); //后一个状态
                string rgvtyperem = _taskExecuteDetailService.GetEnumDescription2(task.RGVTaskType); //后一个状态
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ?
                    $"人工手动将任务状态从【{oldstaterem}】跳转到【{afterstaterem}】"
                    : $"系统自动流程,任务状态从【{oldstaterem}】转到【{afterstaterem}】");
                $"人工手动将任务状态从【{oldstaterem}】跳转到【{afterstaterem}】"
                : $"系统自动流程,任务状态从【{oldstaterem}】转到【{afterstaterem}】");
                content = WebResponseContent.Instance.OK();
            }
@@ -643,15 +682,56 @@
                int oldState = task.TaskState;
                Dt_TaskExecuteDetail taskExecuteDetail = null;
                if (task.CurrentAddress == "1061")
                if(task.TaskState == (int)TaskInStatusEnum.RGV_InReleaseFinish && task.CurrentAddress == "1061" && (task.NextAddress == "1091" || task.NextAddress == "1081"))
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState > task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting && x.NextAddress== "1061" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                else if (task.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting && task.CurrentAddress == "1021" && task.NextAddress == "1061")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskInStatusEnum.RGV_InZicheFinish && x.CurrentAddress == "1021" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                else if (task.TaskState == (int)TaskInStatusEnum.RGV_InZicheFinish && task.CurrentAddress == "1021" && task.NextAddress == "1061")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskInStatusEnum.RGV_InZicheExecuting && x.CurrentAddress == "1021" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                else if (task.TaskState == (int)TaskInStatusEnum.RGV_InZicheExecuting && task.CurrentAddress == "1021" && task.NextAddress == "1061")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskInStatusEnum.RGV_InReleaseFinish && x.CurrentAddress == "1021" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                //出库内容
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarFinish && task.CurrentAddress == "1131" && task.NextAddress == "1171")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheReleaseExecuting && x.NextAddress == "1131" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheReleaseExecuting && (task.CurrentAddress == "1101" || task.CurrentAddress == "1121") && task.NextAddress == "1131")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheFinish && x.NextAddress == "1131" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheFinish && (task.CurrentAddress == "1101" || task.CurrentAddress == "1121") && task.NextAddress == "1131")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheExecuting && x.NextAddress == "1131" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheExecuting && (task.CurrentAddress == "1101" || task.CurrentAddress == "1121") && task.NextAddress == "1131")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarFinish && x.NextAddress == "1131" && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                else
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }
                /*if (task.TaskState== (int)TaskInStatusEnum.RGV_InReleaseFinish && task.CurrentAddress == "1021" && task.NextAddress == "1061")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }else if(task.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting && task.CurrentAddress == "1021")
                {
                    taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                }*/
@@ -660,6 +740,15 @@
                    task.TaskState = taskExecuteDetail.TaskState;
                    task.CurrentAddress = taskExecuteDetail.CurrentAddress;
                    task.NextAddress = taskExecuteDetail.NextAddress;
                    task.RGVTaskType = taskExecuteDetail.RGVTaskType;
                    task.Roadway=taskExecuteDetail.Roadway;
                }else if(task.TaskState == (int)TaskInStatusEnum.RGV_InPickupExecuting)
                {
                    task.TaskState = (int)TaskInStatusEnum.RGV_InNew;
                }
                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarExecuting)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutNew;
                }
                else
                {
@@ -677,6 +766,7 @@
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId,
                    $"人工手动将任务状态从【{oldstaterem}】回归到【{afterstaterem}】");
                content = WebResponseContent.Instance.OK();
            }
@@ -760,13 +850,17 @@
            try
            {
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)  //正常流程
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound )  //正常流程
                {
                    HandleInboundTask(task);
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound && (task.NextAddress == "1001" || task.NextAddress == "1002"))
                {
                    task.TaskState = (int)TaskInStatusEnum.RGV_InMothercarFinish;
                    if(task.NextAddress == "1001" || task.NextAddress == "1002")
                    {
                        task.TaskState = (int)TaskInStatusEnum.InFinish_exceptionalSelection;
                    }
                    else
                    {
                        HandleInboundTask(task);
                    }
                }
                else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
@@ -789,16 +883,31 @@
                    : $"系统自动流程,任务状态从【{oldstaterem}】转到【{afterstaterem}】");
                if (task.TaskState == (int)TaskInStatusEnum.RGV_InMothercarFinish)   //入库任务完成
                if (task.TaskState == (int)TaskInStatusEnum.RGV_InMothercarFinish || task.TaskState == (int)TaskOutStatusEnum.OutFinish || task.TaskState == (int)TaskInStatusEnum.InFinish_exceptionalSelection)   //入库任务完成
                {
                    //AutomaticTaskCompleted(task);   //任务完成
                    if (task.NextAddress == "1001" || task.NextAddress == "1002")
                    {
                        AbnormalTask abnormalTask = _abnormalTask.QueryFirst(x=> x.TaskNum == task.TaskNum);
                        //异常排除任务时,异常上报
                        TaskResultIn(task.LJTaskNum.ToString(), task.NextAddress, 3,abnormalTask.ErrorContent);
                        AutomaticTaskCompleted(task);   //任务完成
                        BaseDal.DeleteData(task);
                    }
                    else
                    {
                        //正常任务,正常上报
                        if(task.TaskType == (int)TaskInboundTypeEnum.Inbound && task.NextAddress != "1001" && task.NextAddress != "1002")
                        {
                            TaskResultIn(task.LJTaskNum.ToString(), "", 2, "");
                        }
                        else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                        {
                            TaskResultOut(task.LJTaskNum.ToString(), task.NextAddress, 2, "");
                            AutomaticTaskCompleted(task);   //任务完成
                            BaseDal.DeleteData(task);
                        }
                    }
                }
@@ -813,6 +922,19 @@
        }
        #region å…¥åº“
        public WebResponseContent HandleInAbnormal(int taskNum)
        {
            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
            if (task == null)
                return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
            task.TaskState = (int)TaskInStatusEnum.InAbnormalFinish;
            task.RGVTaskType = (int)RGVTaskTypeEnum.Placing;
            BaseDal.UpdateData(task);
            return WebResponseContent.Instance.OK();
        }
        private void HandleInboundTask(Dt_Task task)
        {
            switch (task.TaskState)
@@ -820,6 +942,7 @@
                case (int)TaskInStatusEnum.RGV_InPickupExecuting:
                    task.TaskState = (int)TaskInStatusEnum.RGV_InPickupFinish;
                    task.RGVTaskType = (int)RGVTaskTypeEnum.Placing;
                    task.NextAddress = "1021";
                    break;
                case (int)TaskInStatusEnum.RGV_InReleaseExecuting:
@@ -1039,8 +1162,18 @@
                            return rGVstatus;
                        }
                        //有无货状态
                        DeviceProDTO? deviceProFh = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == item.rgvTag && x.DeviceProParamName == "RgvEquipmentStatus" && x.DeviceProParamType == "RgvEquipmentStatus");
                        DeviceProDTO? RgvCraneAutoStatus = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == item.rgvTag && x.DeviceProParamName == "RgvCraneAutoStatus" && x.DeviceProParamType == "RgvCraneAutoStatus");
                        int Itstock = Commonstacker.Communicator.Read<short>(deviceProFh.DeviceProAddress);
                        int RgvCraneAutoStatusValues = Commonstacker.Communicator.Read<short>(RgvCraneAutoStatus.DeviceProAddress);
                        int Currentlocation = Commonstacker.Communicator.Read<short>(deviceProDTO.DeviceProAddress);
                        if (Currentlocation == aGVStation.Motherinlaw)    //是否在取货位
                        if (Currentlocation == aGVStation.Motherinlaw && Itstock == 1 && RgvCraneAutoStatusValues == 1)    //是否在取货位
                        {
                            rGVstatus.code = 0;
                            rGVstatus.data = new List<RgvOperation>
@@ -1062,10 +1195,16 @@
                        AGVStation aGVStation = _gvStationService.Corridorequipment(item.rgvTag);
                        int Currentlocation = Commonstacker.Communicator.Read<short>(deviceProDTO.DeviceProAddress);
                        //有无货状态
                        DeviceProDTO? deviceProFh = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == item.rgvTag && x.DeviceProParamName == "RgvEquipmentStatus" && x.DeviceProParamType == "RgvEquipmentStatus");
                        DeviceProDTO? RgvCraneAutoStatus = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == item.rgvTag && x.DeviceProParamName == "RgvCraneAutoStatus" && x.DeviceProParamType == "RgvCraneAutoStatus");
                        int Itstock = Commonstacker.Communicator.Read<short>(deviceProFh.DeviceProAddress);
                        if (aGVStation.Motherinlaw== Currentlocation && Itstock==0)
                        int RgvCraneAutoStatusValues = Commonstacker.Communicator.Read<short>(RgvCraneAutoStatus.DeviceProAddress);
                        if (aGVStation.Motherinlaw== Currentlocation && Itstock==0 && RgvCraneAutoStatusValues==1) //Itstock:0为无货    RgvCraneAutoStatusValues: 1为自动
                        {
                            rGVstatus.code = 0;
                            rGVstatus.data = new List<RgvOperation>
@@ -1157,14 +1296,14 @@
                            }
                            dt_Task.TaskState = (int)TaskInStatusEnum.InFinish;
                            AutomaticTaskCompleted(dt_Task);    //有问题,等待优化
                            BaseDal.DeleteData(dt_Task);
                            BaseDal.DeleteData(dt_Task);        //删除任务
                            expoReverse.code = 0;
                        }
                        
                    }
                    else if (item.type == "put")    //放货
                    {
                        if (item.status == 2)   //堆垛机执行中
/*                       if (item.status == 2)   //堆垛机执行中
                        {
                            Dt_Task dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskOutboundTypeEnum.Outbound && x.TaskState == (int)TaskOutStatusEnum.OutNewLj && x.Roadway == item.rgvTag);
                            if (dt_Task != null)
@@ -1172,7 +1311,7 @@
                                dt_Task.TaskState = (int)TaskOutStatusEnum.OutNew;
                                BaseDal.UpdateData(dt_Task);
                            }
                        }
                        }*/
                        expoReverse.code = 0;
                    }
                    else
@@ -1193,7 +1332,7 @@
        }
        /// <summary>
        /// å †åž›æœºæ•…障信息
        /// èŽ·å–å †åž›æœºæ•…éšœä¿¡æ¯
        /// </summary>
        /// <param name="sCErrorStatus"></param>
        /// <returns></returns>
@@ -1212,24 +1351,21 @@
                List<EquipmentStatus> equipmentdata = new List<EquipmentStatus>();
                List<EquipmentStatus> equipmentList = _equipmentStatus.GetEquipmentStatus();
                string msgeetst = "";
                foreach (var item in sCErrorStatus.data)
                {
                    EquipmentStatus equipment = equipmentList.Find(x => x.Equipment_Number == item.stackerName);
                    msgeetst += $"《设备:{equipment.Equipment_Number},修改前状态:{equipment.Equipment_Status},";
                    equipment.Equipment_Status = item.errorStatus;
                    msgeetst += $"<修改后状态:{equipment.Equipment_Status}>》................";
                    equipmentdata.Add(equipment);
                    if (equipment.Equipment_Status != item.errorStatus)
                    {
                        equipment.Equipment_Status = item.errorStatus;
                        equipmentdata.Add(equipment);
                    }
                }
                WriteLog.Write_Log("设备状态更改", "堆垛机状态更改", "正常", msgeetst);
                _equipmentStatus.UpdateData(equipmentdata);     //修改状态
                if (equipmentdata.Count > 0)
                {
                    _equipmentStatus.UpdateData(equipmentdata);     //修改状态
                }
                expoReverse.code = 0;
                return expoReverse;
            }
            catch (Exception ex)
@@ -1270,7 +1406,7 @@
                            _task_HtyService.AddTaskHty(dt_Task);
                            BaseDal.DeleteData(dt_Task);
                            expoReverse.code = 0;
                            WriteLog.Write_Log("任务取消信息", "任务取消", "信息", $"任务号:{dt_Task.TaskNum},已取消");
                            WriteLog.Write_Log("兰剑调取任务取消信息", "任务取消", "信息", $"任务号:{dt_Task.TaskNum},已取消");
                        }
                        else
                        {
@@ -1345,11 +1481,13 @@
            StkRunStatusReturns LJReturns = HttpHelper.Post<StkRunStatusReturns>(urlLanJianWCSAPI + LanJiantaskResult, reception, "任务反馈接口");
            if (LJReturns.code == 0)
            {
                WriteLog.Write_Log("入库任务上传情况", "正常上传", "内容信息", $"任务编号:{taskNo},目标地址:{finalAddress},上传状态:{status},信息内容:{remark}");
                responseContent.OK("上传成功");
            }
            else
            {
                responseContent.OK("上传失败,原因:" + LJReturns.msg);
                WriteLog.Write_Log("入库任务上传情况", "上传失败", "内容信息", $"任务编号:{taskNo},目标地址:{finalAddress},上传状态:{status},信息内容:{remark}=====》上传失败,原因:{LJReturns.msg}");
                responseContent.Error("上传失败,原因:" + LJReturns.msg);
            }
            // åˆ›å»ºå¹¶èµ‹å€¼
            return responseContent;
@@ -1368,10 +1506,12 @@
            StkRunStatusReturns LJReturns = HttpHelper.Post<StkRunStatusReturns>(urlLanJianWCSAPI + LanJiantaskResult, reception, "任务反馈接口");
            if (LJReturns.code == 0)
            {
                WriteLog.Write_Log("出库任务上传情况", "正常上传", "内容信息", $"任务编号:{taskNo},目标地址:{finalAddress},上传状态:{status},信息内容:{remark}");
                responseContent.OK("上传成功");
            }
            else
            {
                WriteLog.Write_Log("出库任务上传情况", "上传失败", "内容信息", $"任务编号:{taskNo},目标地址:{finalAddress},上传状态:{status},信息内容:{remark}=====》上传失败,原因:{LJReturns.msg}");
                responseContent.OK("上传失败,原因:" + LJReturns.msg);
            }
            // åˆ›å»ºå¹¶èµ‹å€¼
@@ -1407,6 +1547,7 @@
                    RGVTaskType = dt_task.RGVTaskType,
                    RGVCurrentexecution = dt_task.RGVCurrentexecution
                });
                return WebResponseContent.Instance.OK();
            }
@@ -1460,6 +1601,26 @@
                    db.Ado.RollbackTran();
                    return WebResponseContent.Instance.Error($"{Remark}失败!");
                }
                if (dt_task.NextAddress == "1001" || dt_task.NextAddress == "1002")
                {
                    //异常排除任务时,异常上报
                    TaskResultIn(dt_task.LJTaskNum.ToString(), dt_task.NextAddress, 3, "手动完成");
                }
                else
                {
                    if (dt_task.TaskType == (int)TaskInboundTypeEnum.Inbound && dt_task.NextAddress != "1001" && dt_task.NextAddress != "1002")
                    {
                        TaskResultIn(dt_task.LJTaskNum.ToString(), "", 2, "手动完成");
                    }
                    else if(dt_task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                    {
                        TaskResultOut(dt_task.LJTaskNum.ToString(), dt_task.NextAddress, 2, "手动完成");
                    }
                }
                var deletetask = BaseDal.DeleteData(dt_task);
                if (deletetask == false)
@@ -1529,11 +1690,26 @@
                    db.Ado.RollbackTran();
                    return WebResponseContent.Instance.Error("取消任务失败!");
                }
                /*int oldState = dt_task.TaskState;
                _taskExecuteDetailService.AddTaskExecuteDetail(
    dt_task.TaskId,
    $"自动任务状态从【{oldState}】进入到【{dt_Task_Hty.TaskState}】"
);*/
                if (dt_task.NextAddress == "1001" || dt_task.NextAddress == "1002")
                {
                    //异常排除任务时,异常上报
                    TaskResultIn(dt_task.LJTaskNum.ToString(), dt_task.NextAddress, 3, "任务取消");
                }
                else
                {
                    if (dt_task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                    {
                        TaskResultIn(dt_task.LJTaskNum.ToString(), "", 3, "任务取消");
                    }
                    else
                    {
                        TaskResultOut(dt_task.LJTaskNum.ToString(), dt_task.NextAddress, 3, "任务取消");
                    }
                }
                bool deletetask = BaseDal.DeleteData(dt_task);
                if (!deletetask)
@@ -1610,5 +1786,61 @@
            // åˆ›å»ºå¹¶èµ‹å€¼
            return responseContent;
        }
        /// <summary>
        /// ä»»åŠ¡å¼‚å¸¸å®Œæˆï¼ˆå†™å…¥å¼‚å¸¸ä¿¡æ¯åŽï¼Œæ ‡è®°å¼‚å¸¸å®Œæˆï¼‰
        /// </summary>
        public WebResponseContent AbnormalComplete(AbnormalCompleteDTO completeDTO)
        {
            try
            {
                Dt_Task dt_task = BaseDal.QueryData().Where(x => x.TaskNum == completeDTO.taskNum).FirstOrDefault();
                if (dt_task == null) return WebResponseContent.Instance.Error($"未查询到任务");
                dt_task.NextAddress = completeDTO.station;
                dt_task.TargetAddress = completeDTO.station;
                //异常排除任务时,异常上报
                WebResponseContent webResponse = TaskResultIn(dt_task.LJTaskNum.ToString(), completeDTO.station, 3, completeDTO.message);
                if (webResponse.Status == false)
                {
                    return webResponse;
                }
                var db = BaseDal.Db as SqlSugarClient;
                db.Ado.BeginTran();
            BaseDal.DeleteData(dt_task);
                var res = _task_HtyService.AddData(new Dt_Task_hty
                {
                    TaskNum = dt_task.TaskNum,
                    PalletCode = dt_task.PalletCode,
                    Roadway = dt_task.Roadway,
                    TaskType = dt_task.TaskType,
                    TaskState = dt_task.TaskState,
                    SourceAddress = dt_task.SourceAddress,
                    TargetAddress = dt_task.TargetAddress,
                    CurrentAddress = dt_task.CurrentAddress,
                    NextAddress = dt_task.NextAddress,
                    WMSId = dt_task.WMSId,
                    Dispatchertime = dt_task.Dispatchertime,
                    Remark = "人工手动异常排出",
                    Creater = App.User.UserName,
                    CreateDate = DateTime.Now,
                    RGVTaskType = dt_task.RGVTaskType,
                    RGVCurrentexecution = dt_task.RGVCurrentexecution
                });
                //提交事务
                db.Ado.CommitTran();
                return WebResponseContent.Instance.OK("人工手动排出成功");
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.ToString());
            }
        }
    }
}