HuBingJie
9 天以前 21078521d79f0eb5535cc34be7917a3fd1123b8f
´úÂë¹ÜÀí/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -19,8 +19,10 @@
using AutoMapper;
using HslCommunication;
using Magicodes.ExporterAndImporter.Core;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Routing;
using NetTaste;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
@@ -29,6 +31,7 @@
using SqlSugar;
using StackExchange.Profiling.Internal;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
@@ -38,6 +41,8 @@
using System.Net.NetworkInformation;
using System.Reflection;
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
@@ -121,8 +126,6 @@
        /// <returns>返回处理结果</returns>
        public ExpoReverse TaskInstruction(ExpoTaskDTO expoTask)
        {
            ExpoReverse content = new ExpoReverse();
            try
            {
@@ -138,8 +141,6 @@
                        WriteLog.Write_Log("任务接收", "任务重复", "异常任务", $"任务号:{dt_Tasks.TaskNum}重复,兰剑系统下发重复任务!!!");
                        return content;
                    }
                    if (item.type == 1)     //入库
                    {
                        Dt_Task dt_Task = new Dt_Task();
@@ -148,18 +149,18 @@
                        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;   //目前暂无
                        BaseDal.AddData(dt_Task);
                        content.code = 0;
                        int taskidt= BaseDal.QueryFirst(x=>x.TaskNum== dt_Task.TaskNum).TaskId;
                        int taskidt = BaseDal.QueryFirst(x => x.TaskNum == dt_Task.TaskNum).TaskId;
                        _taskExecuteDetailService.AddTaskExecuteDetail(taskidt, $"系统自动流程,创建任务");
                    }
                    else if (item.type == 2)    //出库
@@ -189,10 +190,10 @@
                        dt_Task.Roadway = roadway;
                        dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                        dt_Task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly;      //取货
                        dt_Task.RGVCurrentexecution = "0";      //目前暂无
                        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;
@@ -200,7 +201,7 @@
                        BaseDal.AddData(dt_Task);
                        content.code = 0;
                        _taskExecuteDetailService.AddTaskExecuteDetail(dt_Task.TaskId,$"系统自动流程,创建任务");
                        _taskExecuteDetailService.AddTaskExecuteDetail(dt_Task.TaskId, $"系统自动流程,创建任务");
                    }
                    else
                    {
@@ -225,70 +226,222 @@
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneTask(string DeviceCode)
        public Dt_Task QueryStackerCraneTask(AGVStation GdMuChe, AGVStation GdZiche)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode, TaskOrderBy);
            if (GdZiche.Station_Area == 3)  //3巷道母车
            {
                Dt_Task dt_Task = BaseDal.QueryFirst(x => x.Roadway == GdMuChe.ChildPosiDeviceCode && x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);    //获取到对应母车的任务
                if (dt_Task != null)
                {
                    Dt_Task dt_Task4 = BaseDal.QueryFirst(x => x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.NextAddress == GdZiche.MotherCarDeviceCode.ToString() && x.Grade < dt_Task.Grade, TaskOrderBy);
                    Dt_Task dt_Taskhcj = BaseDal.QueryFirst(x => x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp && x.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarFinish && x.CurrentAddress == GdZiche.HCJStorageaddress.ToString() && x.Grade < dt_Task.Grade, TaskOrderBy);
                    if (dt_Task4 == null && dt_Taskhcj == null)   //在两个站台的任务优先级都正常,则正常移动
                    {
                        return dt_Task;
                    }
                }
                //获取HCJ站台任务与4巷任务
                return null;
            }
            return null;
        }
        public Dt_Task ObtainHCJtask(string curraderr)
        {
            return BaseDal.QueryFirst(x => x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp && (x.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarFinish || x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheExecuting || x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheFinish || x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheReleaseExecuting) && x.CurrentAddress == curraderr, TaskOrderBy);
        }
        public Dt_Task ObtainMuChetask(string Nextaderr)
        {
            return BaseDal.QueryFirst(x => x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.NextAddress == Nextaderr, TaskOrderBy);
        }
        /// <summary>
        /// èŽ·å–æ¯è½¦æ˜¯å¦æœ‰ä»»åŠ¡ï¼Œè¿›è¡Œåˆ¤æ–­
        /// </summary>
        public Dt_Task ObtainMuChetaskbool(AGVStation ZicheinnerSide)
        {
            return BaseDal.QueryFirst(x => x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly && (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskType == (int)TaskOutStatusEnum.RGV_OutMothercarExecuting), TaskOrderBy);
        }
        public Dt_Task GetChariotTaskBool(string ChildPosiDeviceCode)
        {
            Dt_Task dt_Task2 = BaseDal.QueryFirst(x => x.Roadway == ChildPosiDeviceCode, TaskOrderBy);
            if (dt_Task2 != null) return dt_Task2;
            return null;
        }
        /// <summary>
        /// èŽ·å–HCJ站台是否有任务
        /// </summary>
        public Dt_Task GetHCJTaskBool(string ChildPosiDeviceCode,int HCJaddres)
        {
            Dt_Task dt_Task2 = BaseDal.QueryFirst(x => x.Roadway == ChildPosiDeviceCode && x.CurrentAddress== HCJaddres.ToString(), TaskOrderBy);
            if (dt_Task2 != null) return dt_Task2;
            return null;
        }
        public Dt_Task ChildVehicleMission(AGVStation aGVStation)
        {
            Dt_Task dt_Tasks =BaseDal.QueryFirst(x => x.Roadway == aGVStation.ChildPosiDeviceCode && x.CurrentAddress== aGVStation.MotherCarDeviceCode.ToString() && x.RGVTaskType== (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            if(dt_Tasks !=null) return dt_Tasks;
            Dt_Task dt_Tasks2 = BaseDal.QueryFirst(x => x.Roadway == aGVStation.ChildPosiDeviceCode && x.CurrentAddress == aGVStation.MotherCardeputy.ToString() && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            if (dt_Tasks2 != null) return dt_Tasks2;
            Dt_Task dt_Tasks = BaseDal.QueryFirst(x => x.Roadway == aGVStation.ChildPosiDeviceCode && x.CurrentAddress == aGVStation.MotherCarDeviceCode.ToString() && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            if (dt_Tasks != null) return dt_Tasks;
            Dt_Task dt_Tasks3 = BaseDal.QueryFirst(x => x.Roadway == aGVStation.ChildPosiDeviceCode && x.CurrentAddress == aGVStation.HCJStorageaddress.ToString() && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            if (dt_Tasks3 != null) return dt_Tasks3;
            return null;
        }
        public Dt_Task GetFinhuoTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
        }
        public Dt_Task GetOutkouFinhuoTask(string DeviceCode,string curraderr,int type)
        public Dt_Task GetOutkouFinhuoTask(string DeviceCode, string curraderr)
        {
            if (type == 1)
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheReleaseFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp && x.CurrentAddress == curraderr, TaskOrderBy);
            }
            else
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutPickupFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing && x.NextAddress !="", TaskOrderBy);
            }
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutPickupFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing && x.NextAddress != "", TaskOrderBy);
        }
        public Dt_Task GetInkouFinhuoTask(string DeviceCode,int type)
        /// <summary>
        /// èŽ·å–å‡ºåº“å£å­è½¦å–è´§
        /// </summary>
        /// <param name="DeviceCode"></param>
        /// <param name="curraderr"></param>
        /// <returns></returns>
        public Dt_Task GetOutchachekouFinhuoTask(string DeviceCode, string curraderr)
        {
            if (type == 1)
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InNew && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            }
            else
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InPickupFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
            }
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheReleaseFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp && x.CurrentAddress == curraderr, TaskOrderBy);
        }
        public Dt_Task GetInzicheTask(string DeviceCode, int type)
        /// <summary>
        /// å…¥åº“取货任务
        /// </summary>
        /// <param name="DeviceCode"></param>
        /// <param name="type">1:查找需要取货的任务</param>
        public Dt_Task PickupWarehouse(string DeviceCode)
        {
            if (type == 1)
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InReleaseFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
            }
            else
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InZicheFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
            }
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InNew && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
        }
        public Dt_Task GetInzicheTaskMobile(string DeviceCode, int type)
        /// <summary>
        /// ä»»åŠ¡æŸ¥æ‰¾
        /// </summary>
        /// <param name="DeviceCode"></param>
        /// <param name="type">1:查找需要取货的任务   2:查找需要放货的任务</param>
        public Dt_Task GetInkouFinhuoTask(string DeviceCode)
        {
            if (type == 1)  //1为子车移动任务    2为母车移动任务
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.NextAddress != "" && x.TaskState == (int)TaskInStatusEnum.RGV_InPickupFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
        }
        /// <summary>
        /// æ¯è½¦ç§»åŠ¨ä»»åŠ¡
        /// </summary>
        /// <param name="DeviceCode"></param>
        public Dt_Task MothermachinemovementTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly, TaskOrderBy);
        }
        /// <summary>
        /// èŽ·å–æ¯è½¦ç§»åŠ¨ä»»åŠ¡å’Œç§»åŠ¨ä¸­çš„ä»»åŠ¡ï¼ˆå…¥åº“ï¼‰
        /// </summary>
        /// <param name="DeviceCode"></param>
        /// <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);
        }
        /// <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 && x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly), TaskOrderBy);
        }
        /// <summary>
        /// èŽ·å–æ¯è½¦ç§»åŠ¨ä»»åŠ¡å’Œç§»åŠ¨ä¸­çš„ä»»åŠ¡ï¼ˆå‡ºåº“ï¼‰
        /// </summary>
        /// <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);
        }
        /// <summary>
        /// å­è½¦è¿›è¡Œæ”¾è´§ä»»åŠ¡
        /// </summary>
        /// <param name="DeviceCode"></param>
        public Dt_Task ViceChariotPlacingTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InZicheFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.Placing, TaskOrderBy);
        }
        /// <summary>
        /// å­è½¦å–货任务,取货HCJ任务
        /// </summary>
        /// <param name="DeviceCode"></param>
        public Dt_Task ViceChariotPickupTask(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InReleaseFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
        }
        /// <summary>
        /// èŽ·å–å­è½¦å–è´§ä»»åŠ¡ï¼Œè¿›å…¥æ¯è½¦å–è´§
        /// </summary>
        /// <param name="DeviceCode"></param>
        public Dt_Task OutPickupZiche(string DeviceCode)
        {
            return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && (x.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarFinish || x.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheExecuting) && x.RGVTaskType == (int)RGVTaskTypeEnum.PickingUp, TaskOrderBy);
        }
        /// <summary>
        /// åˆ¤æ–­æ˜¯å¦æœ‰å­è½¦å–HCJ任务,或者在执行的任务
        /// </summary>
        /// <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);
        }
        public WebResponseContent UpdateDeliveryAddress(string NextAddress, int tasktype)
        {
            WebResponseContent webResponse = new WebResponseContent();
            try
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly, TaskOrderBy);
                Dt_Task dt_Task = null;
                if (tasktype == 1)
                {
                    dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.TaskState== (int)TaskInStatusEnum.InexceptionalSelection);
                }
                else
                {
                    dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskOutboundTypeEnum.Outbound && x.NextAddress == "");
                }
                if (dt_Task == null) return webResponse.Error("未找到需要修改的任务,无需修改");
                dt_Task.NextAddress = NextAddress;
                BaseDal.UpdateData(dt_Task);
                return webResponse.OK("任务放货地址修改成功");
            }
            else
            catch (Exception ex)
            {
                return BaseDal.QueryFirst(x => x.Roadway == DeviceCode && x.TaskState == (int)TaskInStatusEnum.RGV_InZichemoveFinish && x.RGVTaskType == (int)RGVTaskTypeEnum.TravelingOnly, TaskOrderBy);
                return webResponse.Error($"任务放货地址修改失败!原因:{ex.Message}");
                throw;
            }
        }
@@ -354,7 +507,7 @@
                task.ExceptionMessage = message;
                task.ModifyDate = DateTime.Now;
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "更新任务异常:"+task.ExceptionMessage);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "更新任务异常:" + task.ExceptionMessage);
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -377,7 +530,7 @@
                int oldState = task.TaskState;
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    if (task.TaskState >= (int)TaskInStatusEnum.RGV_InMothercarFinish)
                    if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
@@ -385,6 +538,11 @@
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    /*if (task.TaskState == (int)TaskInStatusEnum.RGV_InPickupExecuting)  //当下发入库口取货中,则调取兰剑接口
                    {
                        TaskResultIn(task.TaskNum.ToString(),"",1,"");
                    }*/
                }
                else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
@@ -412,14 +570,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}】");
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ?
                $"人工手动将任务状态从【{oldstaterem}】跳转到【{afterstaterem}】"
                : $"系统自动流程,任务状态从【{oldstaterem}】转到【{afterstaterem}】");
                content = WebResponseContent.Instance.OK();
            }
@@ -497,24 +656,74 @@
                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 } });
                }*/
                if (taskExecuteDetail != null)
                {
                    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
                {
@@ -532,6 +741,7 @@
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId,
                    $"人工手动将任务状态从【{oldstaterem}】回归到【{afterstaterem}】");
                content = WebResponseContent.Instance.OK();
            }
@@ -603,7 +813,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent UpdateTaskStatus(int taskNum, int Completetype)
        public WebResponseContent UpdateTaskStatus(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
@@ -615,9 +825,13 @@
            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;
                }
                else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
@@ -640,9 +854,22 @@
                    : $"系统自动流程,任务状态从【{oldstaterem}】转到【{afterstaterem}】");
                if (task.TaskState == (int)TaskInStatusEnum.RGV_InMothercarFinish && Completetype==2)   //入库任务完成
                if (task.TaskState == (int)TaskInStatusEnum.RGV_InMothercarFinish || task.TaskState == (int)TaskOutStatusEnum.OutFinish)   //入库任务完成
                {
                    CompletedManually(task.TaskId, Completetype);
                    if (task.NextAddress == "1001" || task.NextAddress == "1002")
                    {
                        //异常排除任务时,异常上报
                    }
                    else
                    {
                        //正常任务,正常上报
                        TaskResultIn(task.TaskNum.ToString(), "", 2, "");
                        /*AutomaticTaskCompleted(task);   //任务完成
                        BaseDal.DeleteData(task);*/
                    }
                }
                return WebResponseContent.Instance.OK();
@@ -655,6 +882,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)
@@ -662,10 +902,11 @@
                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:
                    HandleInboundRelease(task);
                    HandleInboundRelease(task);     //入库RGV放货完成后,修改任务状态到子车取货任务
                    break;
                case (int)TaskInStatusEnum.RGV_InZicheExecuting:
@@ -674,14 +915,8 @@
                    break;
                case (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting:
                    task.TaskState = (int)TaskInStatusEnum.RGV_InZicheReleaseFinish;
                    task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly;
                    break;
                case (int)TaskInStatusEnum.RGV_InZichemoveExecuting:
                    HandleInboundZichemove(task);
                    break;
                case (int)TaskInStatusEnum.RGV_InMothercarExecuting:
                    task.TaskState = (int)TaskInStatusEnum.RGV_InMothercarFinish;
                    break;
@@ -691,67 +926,71 @@
            }
        }
        /// <summary>
        /// å…¥åº“RGV放货完成后
        /// </summary>
        /// <param name="task"></param>
        private void HandleInboundRelease(Dt_Task task)
        {
            task.TaskState = (int)TaskInStatusEnum.RGV_InReleaseFinish;
            task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp;
            var routes = _routerRepository.QueryData(x =>
            Dt_Router routes = _routerRepository.QueryFirst(x =>
                x.StartPosi == task.NextAddress &&
                x.InOutType == 1 &&
                x.IsEnd == false
            );
            foreach (var route in routes)
                x.IsEnd == false && x.ChildPosi == task.TargetAddress
                );
            if (task.TargetAddress != "1" && task.TargetAddress != "2")
            {
                if (route.ChildPosi == task.TargetAddress ||
                    (int.Parse(route.ChildPosi) > 2 && int.Parse(task.TargetAddress) > 2))
                {
                    task.Roadway = route.ChildPosiDeviceCode;
                    task.CurrentAddress = route.StartPosi;
                    task.NextAddress = route.NextPosi;
                    break; // æ‰¾åˆ°åŒ¹é…è·¯ç”±åŽé€€å‡ºå¾ªçޝ
                }
                routes = _routerRepository.QueryFirst(x =>
                x.StartPosi == task.NextAddress &&
                x.InOutType == 1 &&
                x.IsEnd == false && x.ChildPosi == "1061"
                );
            }
            task.Roadway = routes.ChildPosiDeviceCode;
            task.CurrentAddress = routes.StartPosi;
            task.NextAddress = routes.NextPosi;
        }
        private void HandleInboundZichemove(Dt_Task task)
        {
            try
            if (task.TargetAddress == "1" || task.TargetAddress == "2")
            {
                Dt_Router dt_Router = null;
                task.TaskState = (int)TaskInStatusEnum.RGV_InZichemoveFinish;
                if (task.TargetAddress == "4" || task.TargetAddress == "3")
                {
                    dt_Router = _routerRepository.QueryFirst(x =>
                    x.StartPosi == task.NextAddress &&
                    x.InOutType == 1);
                    if (task.CurrentAddress != "1061") task.TaskState = (int)TaskInStatusEnum.RGV_InReleaseFinish;
                task.TaskState = (int)TaskInStatusEnum.RGV_InZicheReleaseFinish;
                task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly;
                Dt_Router dt_InRouter = _routerRepository.QueryFirst(x => x.IsEnd == true && x.StartPosi == task.NextAddress && x.InOutType == 1);
                task.CurrentAddress = dt_InRouter.StartPosi;
                task.NextAddress = dt_InRouter.NextPosi;
                task.Roadway = dt_InRouter.ChildPosiDeviceCode;
            }
            else
            {
                //子车完成
                Dt_Router dt_Routernei = _routerRepository.QueryFirst(x => x.StartPosi == task.NextAddress && x.InOutType == 1 && x.ChildPosi == task.TargetAddress && x.IsEnd == false);
                if (dt_Routernei != null)
                {
                    task.TaskState = (int)TaskInStatusEnum.RGV_InReleaseFinish;
                    task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp;
                    task.CurrentAddress = dt_Routernei.StartPosi;
                    task.NextAddress = dt_Routernei.NextPosi;
                    task.Roadway = dt_Routernei.ChildPosiDeviceCode;
                }
                else
                {
                    dt_Router = _routerRepository.QueryFirst(x =>
                    x.IsEnd == true &&
                    x.ChildPosi == task.NextAddress &&
                    x.InOutType == 1);
                    Dt_Router dt_Routernei2 = _routerRepository.QueryFirst(x => x.StartPosi == task.NextAddress && x.InOutType == 1 && x.ChildPosi == task.TargetAddress && x.IsEnd==true);
                    task.TaskState = (int)TaskInStatusEnum.RGV_InZicheReleaseFinish;
                    task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly;
                    task.CurrentAddress = dt_Routernei2.StartPosi;
                    task.NextAddress = dt_Routernei2.NextPosi;
                    task.Roadway = dt_Routernei2.ChildPosiDeviceCode;
                }
                if (dt_Router == null)
                    throw new InvalidOperationException("未找到对应的结束路由");
                task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp;
                task.CurrentAddress = dt_Router.StartPosi;
                task.NextAddress = dt_Router.NextPosi;
                task.Roadway = dt_Router.ChildPosiDeviceCode;
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        #endregion
@@ -763,6 +1002,10 @@
            switch (task.TaskState)
            {
                case (int)TaskOutStatusEnum.RGV_OutMothercarExecuting:
                    Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.StartPosi == task.NextAddress && x.InOutType == 2);
                    task.CurrentAddress = dt_Router.StartPosi;
                    task.NextAddress = dt_Router.NextPosi;
                    task.Roadway = dt_Router.ChildPosiDeviceCode;
                    task.TaskState = (int)TaskOutStatusEnum.RGV_OutMothercarFinish;
                    task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp;
                    break;
@@ -805,6 +1048,8 @@
                task.TaskState = (int)TaskOutStatusEnum.RGV_OutZicheReleaseFinish;
                task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp;
                task.Roadway = "RGV118";
                task.CurrentAddress = "1171";
                task.NextAddress = "";
            }
            else
            {
@@ -820,7 +1065,7 @@
                task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp;
                task.CurrentAddress = nextRoute.StartPosi;
                task.NextAddress = nextRoute.NextPosi;
                task.Roadway = route.ChildPosiDeviceCode;
                task.Roadway = nextRoute.ChildPosiDeviceCode;
            }
        }
        #endregion
@@ -829,7 +1074,7 @@
        #region å…°å‰‘调取接口内容
        /// <summary>
        /// æŸ¥è¯¢RGV状态
        /// æŸ¥è¯¢RGV状态(完成,待测试)
        /// </summary>
        /// <param name="statusquery"></param>
        /// <returns></returns>
@@ -853,60 +1098,88 @@
                        rGVstatus.msg = "明和WCS接收到RGV编号为空,请检查";
                        return rGVstatus;
                    }
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == item.rgvTag);
                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                    DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == item.rgvTag && x.DeviceProParamName == "RGVCurrentlocation" && x.DeviceProParamType == "ReadDeviceCommand");
                    if (device == null)
                    {
                        rGVstatus.code = 1;
                        rGVstatus.msg = "查询的RGV已断线";
                        return rGVstatus;
                    }
                    SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
                    //当前位置
                    DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == item.rgvTag && x.DeviceProParamName == "RGVCurrentlocation" && x.DeviceProParamType == "RGVCurrentlocation");
                    if (item.type == "pick")   //取货
                    {
                        //获取设备
                        //获取取货站台货位站台
                        Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.InOutType == 1 && x.ChildPosiDeviceCode == item.rgvTag && x.IsEnd == true);
                        AGVStation aGVStation = _gvStationService.Corridorequipment(item.rgvTag);
                        if (aGVStation == null)
                        {
                            rGVstatus.code = 1;
                            rGVstatus.msg = "未查找到该RGV";
                            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 = conveyorLine.Communicator.Read<short>(deviceProDTO.DeviceProAddress);
                        if (Currentlocation == int.Parse(dt_Router.NextPosi))    //为无货
                        int Currentlocation = Commonstacker.Communicator.Read<short>(deviceProDTO.DeviceProAddress);
                        if (Currentlocation == aGVStation.Motherinlaw && Itstock == 1 && RgvCraneAutoStatusValues == 1)    //是否在取货位
                        {
                            rGVstatus.code = 0;
                            rGVstatus.data = new List<RgvOperation>
                    {
                        new RgvOperation { rgvTag = item.rgvTag, type = "pick", status = 1 },
                    };
                            {
                                new RgvOperation { rgvTag = item.rgvTag, type = "pick", status = 1 },
                            };
                        }
                        else
                        {
                            rGVstatus.code = 0;
                            rGVstatus.data = new List<RgvOperation>
                    {
                        new RgvOperation { rgvTag = item.rgvTag, type = "pick", status = 0 },
                    };
                            {
                                new RgvOperation { rgvTag = item.rgvTag, type = "pick", status = 0 },
                            };
                        }
                    }
                    else if (item.type == "put")    //放货
                    {
                        AGVStation aGVStation = _gvStationService.Corridorequipment(item.rgvTag);
                        int Currentlocation = Commonstacker.Communicator.Read<short>(deviceProDTO.DeviceProAddress);
                        int Currentlocation = conveyorLine.Communicator.Read<short>(deviceProDTO.DeviceProAddress);
                        switch (Currentlocation)
                        //有无货状态
                        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);
                        if (aGVStation.Motherinlaw== Currentlocation && Itstock==0 && RgvCraneAutoStatusValues==1) //Itstock:0为无货    RgvCraneAutoStatusValues: 1为自动
                        {
                            case 1101:
                            case 1121:
                            case 1141:
                            case 1151:
                                rGVstatus.code = 0;
                                rGVstatus.data = new List<RgvOperation>
                            rGVstatus.code = 0;
                            rGVstatus.data = new List<RgvOperation>
                                {
                                    new RgvOperation { rgvTag = item.rgvTag, type = "put", status = 2 },
                                };
                                break;
                            default:
                                rGVstatus.code = 0;
                                rGVstatus.data = new List<RgvOperation>
                        }
                        else
                        {
                            rGVstatus.code = 0;
                            rGVstatus.data = new List<RgvOperation>
                                {
                                    new RgvOperation { rgvTag = item.rgvTag, type = "put", status = 0 },
                                };
                                break;
                        }
                    }
                    else
                    {
@@ -926,6 +1199,7 @@
            }
        }
        /// <summary>
@@ -949,24 +1223,61 @@
                    if (item.rgvTag == null)
                    {
                        expoReverse.code = 1;
                        expoReverse.msg = "明和WCS接收到RGV编号为空,请检查";
                        return expoReverse;
                    }
                    //查找RGV完成的任务
                    if (item.type == "pick")   //取货
                    {
                        expoReverse.code = 0;
                        if (item.status == 1)   //堆垛机进行取货中
                        {
                            Dt_Task dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.TaskState == (int)TaskInStatusEnum.RGV_InMothercarFinish && x.Roadway == item.rgvTag);
                            if (dt_Task == null)
                            {
                                expoReverse.code = 1;
                                expoReverse.msg = "明和WCS未找到需要取货的任务";
                                return expoReverse;
                            }
                            dt_Task.TaskState = (int)TaskInStatusEnum.SC_InExecuting;
                            BaseDal.UpdateData(dt_Task);
                            expoReverse.code = 0;
                        }
                        else if (item.status == 2)
                        {
                            Dt_Task dt_Task = BaseDal.QueryFirst(x => x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.TaskState == (int)TaskInStatusEnum.SC_InExecuting && x.Roadway == item.rgvTag);
                            if (dt_Task == null)
                            {
                                expoReverse.code = 1;
                                expoReverse.msg = "明和WCS未找到需要取货的任务";
                                return expoReverse;
                            }
                            dt_Task.TaskState = (int)TaskInStatusEnum.InFinish;
                            AutomaticTaskCompleted(dt_Task);    //有问题,等待优化
                            BaseDal.DeleteData(dt_Task);        //删除任务
                            expoReverse.code = 0;
                        }
                    }
                    else if (item.type == "put")    //放货
                    {
/*                        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)
                            {
                                dt_Task.TaskState = (int)TaskOutStatusEnum.OutNew;
                                BaseDal.UpdateData(dt_Task);
                            }
                        }*/
                        expoReverse.code = 0;
                    }
                    else
                    {
                        expoReverse.code = 1;
                        expoReverse.msg = $"明和WCS接收的参数类型错误,实际接收值为:{item.type}";
                    }
                }
@@ -981,7 +1292,7 @@
        }
        /// <summary>
        /// å †åž›æœºæ•…障信息
        /// èŽ·å–å †åž›æœºæ•…éšœä¿¡æ¯
        /// </summary>
        /// <param name="sCErrorStatus"></param>
        /// <returns></returns>
@@ -1000,24 +1311,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)
@@ -1030,7 +1338,7 @@
        }
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆæŽ¥å£
        /// ä»»åŠ¡å–æ¶ˆæŽ¥å£(待测试)
        /// </summary>
        /// <param name="sCErrorStatus"></param>
        /// <returns></returns>
@@ -1122,7 +1430,7 @@
        /// <summary>
        /// ä»»åŠ¡ä¿¡æ¯çŠ¶æ€ä¸Šä¼ (固定入库接口)
        /// ä»»åŠ¡ä¿¡æ¯çŠ¶æ€ä¸Šä¼ (固定入库接口)可进行测试   1.当执行该任务的时候,上报兰剑任务执行中
        /// </summary>
        /// <param name="sCErrorStatus"></param>
        /// <returns></returns>
@@ -1144,14 +1452,15 @@
        }
        /// <summary>
        /// ä»»åŠ¡ä¿¡æ¯çŠ¶æ€ä¸Šä¼ (固定出库接口)
        /// ä»»åŠ¡ä¿¡æ¯çŠ¶æ€ä¸Šä¼ (固定出库接口)可进行测试
        /// </summary>
        /// <param name="sCErrorStatus"></param>
        /// <returns></returns>
        public WebResponseContent TaskResultOut(string taskNo, string finalAddress, int status, string remark)
        {
            WebResponseContent responseContent = new WebResponseContent();
            TaskfeedbackResponse reception = new TaskfeedbackResponse { data = new List<TaskfeedbackData> { new TaskfeedbackData { taskNo = taskNo, type = 1, finalAddress = finalAddress, status = status, remark = remark } } };
            TaskfeedbackResponse reception = new TaskfeedbackResponse { data = new List<TaskfeedbackData> { new TaskfeedbackData { taskNo = taskNo, type = 2, finalAddress = finalAddress, status = status, remark = remark } } };
            StkRunStatusReturns LJReturns = HttpHelper.Post<StkRunStatusReturns>(urlLanJianWCSAPI + LanJiantaskResult, reception, "任务反馈接口");
            if (LJReturns.code == 0)
            {
@@ -1165,13 +1474,46 @@
            return responseContent;
        }
        /// <summary>
        /// äººå·¥æ‰‹åŠ¨å®Œæˆ
        /// è‡ªåŠ¨å®Œæˆä»»åŠ¡
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public WebResponseContent AutomaticTaskCompleted(Dt_Task dt_task)
        {
            try
            {
                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
                });
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error("任务完成失败!");
            }
        }
        /// <summary>
        /// äººå·¥æ‰‹åŠ¨å®Œæˆ
        /// </summary>
@@ -1187,12 +1529,9 @@
            {
                db.Ado.BeginTran();
                Dt_Task dt_task = BaseDal.QueryData().Where(x => x.TaskId == id).FirstOrDefault();
                if (dt_task == null) return WebResponseContent.Instance.Error($"未查询到任务");
                string Remark = CompletionType == 1 ? "人工手动完成" : "自动完成";
                var res = _task_HtyService.AddData(new Dt_Task_hty
                {
                    TaskNum = dt_task.TaskNum,
@@ -1282,7 +1621,8 @@
                    RGVCurrentexecution = dt_task.RGVCurrentexecution
                };
                var res = _task_HtyService.AddData(dt_Task_Hty);
                if (res.Status == false) {
                if (res.Status == false)
                {
                    db.Ado.RollbackTran();
                    return WebResponseContent.Instance.Error("取消任务失败!");
                }
@@ -1293,7 +1633,8 @@
);*/
                bool deletetask = BaseDal.DeleteData(dt_task);
                if (!deletetask) {
                if (!deletetask)
                {
                    db.Ado.RollbackTran();
                    return WebResponseContent.Instance.Error("删除任务失败所有操作回滚!");
                }
@@ -1328,7 +1669,6 @@
                case (int)TaskInStatusEnum.RGV_InReleaseFinish:
                case (int)TaskInStatusEnum.RGV_InZicheFinish:
                case (int)TaskInStatusEnum.RGV_InZicheReleaseFinish:
                case (int)TaskInStatusEnum.RGV_InZichemoveFinish:
                //入库状态
                //出库状态
                case (int)TaskOutStatusEnum.OutNew:
@@ -1347,7 +1687,6 @@
                case (int)TaskInStatusEnum.RGV_InReleaseExecuting:
                case (int)TaskInStatusEnum.RGV_InZicheExecuting:
                case (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting:
                case (int)TaskInStatusEnum.RGV_InZichemoveExecuting:
                case (int)TaskInStatusEnum.RGV_InMothercarExecuting:
                //入库状态
                //出库状态
@@ -1358,15 +1697,19 @@
                case (int)TaskOutStatusEnum.RGV_OutReleaseExecuting:
                    //出库状态
                    //调取完成接口
                    responseContent = UpdateTaskStatus(task.TaskNum, 1);
                    responseContent = UpdateTaskStatus(task.TaskNum);
                    break;
                case (int)TaskInStatusEnum.RGV_InMothercarFinish:
                    return WebResponseContent.Instance.Error("任务已");
                    return WebResponseContent.Instance.Error("RGV部分任务已走位,不可往下执行");
                default:
                    return WebResponseContent.Instance.Error("任务状态错误,执行下一步失败");
            }
            // åˆ›å»ºå¹¶èµ‹å€¼
            return responseContent;
        }
    }
}