yanjinhui
7 天以前 7e69830653c9be2d675c3fb4c5578ac1efa4b89c
添加跨楼层的接口以及优化
已修改17个文件
509 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs 261 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs
@@ -91,7 +91,8 @@
                            dataList.Add(new HIKROBOTQueryData
                            {
                                singleRobotCode = item.AGVCode,
                                mapCode = queryData?.mapCode ?? string.Empty
                                mapCode = queryData?.mapCode ?? string.Empty,
                                CarType = item.HkagvType  // ä»Žæœ¬åœ°æ•°æ®åº“获取小车类型
                            });
                            successMessages.Add($"AGV小车-{item.AGVCode}所在楼层{queryData?.mapCode}查询成功");
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs
@@ -29,7 +29,7 @@
        Outboundmaterialbox,
        /// <summary>
        /// 4楼空箱箱号
        /// 4楼出库箱箱
        /// </summary>
        Emptycontainernumber,
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -124,7 +124,7 @@
        /// <summary>
        /// å‘¼å«æµ·åº·æ¬è¿ä¸­  19
        /// ç­‰å¾…海康AGV搬运到位  19
        /// </summary>
        [Description("等待海康AGV搬运到位")]
        WaitingHkAGVMovePosition,
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -84,7 +84,7 @@
        /// ç©ºè½¦è·¨æ¥¼å±‚
        /// </summary>
        [Description("空车跨楼层")]
        Move,
        MOVE,
        /// <summary>
        /// æˆå“ç§»åº“
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs
@@ -32,7 +32,29 @@
        /// å°è½¦ç¼–号
        /// </summary>
        public string singleRobotCode { get; set; }
        /// <summary>
        /// å°è½¦ç±»åž‹
        /// </summary>
        public string CarType { get; set; }
    }
    public class FloorMapping
    {
        public static Dictionary<string, FloorInfo> FloorMap = new Dictionary<string, FloorInfo>
    {
        { "AA", new FloorInfo { Floor = "1楼", PointCode = "1A" } },
        { "BB", new FloorInfo { Floor = "2楼", PointCode = "2B" } },
        { "CC", new FloorInfo { Floor = "3楼", PointCode = "3C" } },
        { "DD", new FloorInfo { Floor = "4楼", PointCode = "4D" } },
        { "EE", new FloorInfo { Floor = "5楼", PointCode = "5E" } },
        { "FF", new FloorInfo { Floor = "6楼", PointCode = "6F" } }
    };
    }
    public class FloorInfo
    {
        public string Floor { get; set; }
        public string PointCode { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs
@@ -10,6 +10,6 @@
    {
        public string warehouseID { get; set; } = "HETU";
        public string clientCode { get; set; } = "WCS";
        public string requestID { get; set; } = DateTime.Now.ToString("yyyyMMddHHmmss");
        public string requestID { get; set; } = DateTime.Now.ToString("yyyyMMddHHmmssfff");
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs
@@ -20,8 +20,15 @@
        /// <summary>
        /// å°è½¦ç¼–号
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "站台编号")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "小车编号")]
        public string AGVCode { get; set; }
        /// <summary>
        /// å°è½¦ç±»åž‹
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "小车类型")]
        public string HkagvType { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs
@@ -9,7 +9,7 @@
{
    public class Dt_Task_Hty : Dt_Task, IBaseHistoryEntity
    {
        public new DateTime CreateDate { get; set; } = DateTime.Now;
        public new DateTime CreateDate { get; set; }
        public int SourceId { get; set; }
        public string OperateType { get; set; }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs
@@ -14,6 +14,7 @@
using WIDESEAWCS_DTO.AGV.HIKROBOT;
using System.Diagnostics.CodeAnalysis;
using System.Reflection.PortableExecutable;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_TaskInfoService
{
@@ -43,6 +44,23 @@
                //获取货位信息
                else
                    hKLocationInfo = _hKLocationInfoService.GetFreeLocationInfo(taskDTO.toAreaCode) ?? throw new Exception($"未找到终点库区【{taskDTO.toAreaCode}】可用空货位!");
                if (taskType==(int)TaskTypeEnum.Q1TSJ4)
                {
                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                    if (device.IsConnected)
                    {
                        var reslu = device.GetValue<HoistEnum, string>(HoistEnum.Emptycontainernumber);
                        var result = reslu?.TrimEnd('\0')?.Substring(2);
                        if (reslu== taskDTO.containerCode&&result!=null)
                        {
                            throw new Exception($"当前的料箱号为{reslu}与{taskDTO.containerCode}料箱号不匹配");
                        }
                    }
                    else
                    {
                        throw new Exception("提升机信息设备连接失败");
                    }
                }
                Dt_Task dt_Task = new Dt_Task()
                {
                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
@@ -111,6 +129,8 @@
                Dt_HKLocationInfo? hKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode) ?? throw new Exception($"未找到起点库位【{taskDTO.fromLocationCode}】!");
                if (hKLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】当前库位状态不可出库!");
                if (hKLocationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】绑定料箱号【{hKLocationInfo.PalletCode}】与任务料箱号【{taskDTO.containerCode}】不匹配!");
                //库内到库外的点到点任务,是否需要判断货位状态?
                Dt_Task dt_Task = new Dt_Task()
                {
                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
@@ -226,6 +246,9 @@
                hIKROBOTTaskSubmit.initPriority = task.Grade;
                hIKROBOTTaskSubmit.robotTaskCode = task.WMSTaskNum;
                hIKROBOTTaskSubmit.taskType = tasktype.ToString(); ExtraDto extraDto = new ExtraDto();
                if (task.TaskType != (int)TaskTypeEnum.MOVE &&task.TaskType != (int)TaskTypeEnum.Q3RK && task.TaskType != (int)TaskTypeEnum.Q3CK &&
                    task.TaskType != (int)TaskTypeEnum.F01)
                {
                CarrierInfoDto carrierInfoDto = new CarrierInfoDto()
                {
                    carrierCode = task.PalletCode,
@@ -233,14 +256,13 @@
                };
                extraDto.carrierInfo.Add(carrierInfoDto);
                hIKROBOTTaskSubmit.extra = extraDto;
                }
                switch (tasktype)
                {
                    case TaskTypeEnum.CPInbound:
                    case TaskTypeEnum.CPOutbound:
                    case TaskTypeEnum.MLInbound:
                    case TaskTypeEnum.MLOutbound:
                        break;
                    case TaskTypeEnum.F01:
                        break;
                    case TaskTypeEnum.RK3F:
                    case TaskTypeEnum.CK3F:
@@ -310,7 +332,8 @@
                        break;
                    case TaskTypeEnum.Q3RK:
                    case TaskTypeEnum.Q3CK:
                    case TaskTypeEnum.Move:
                    case TaskTypeEnum.MOVE:
                    case TaskTypeEnum.F01:
                        {
                            TargetRouteDto target = new TargetRouteDto()
                            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs
@@ -14,6 +14,7 @@
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_QuartzJob;
using System.Reflection.Metadata;
namespace WIDESEAWCS_TaskInfoService
{
@@ -208,8 +209,7 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_HKLocationInfo? hKLocationInfo = null;
                Dt_StationInfo? stationInfo = null;
                Dt_StationManger? stationInfo = null;
                Dt_Task dt_Task = null;
                //入库 åˆ°ä¸€æ¥¼ä¸‰ä¸ªç«™å°çš„位置
                if (taskType == (int)TaskTypeEnum.Q3RK)
@@ -229,7 +229,7 @@
                        WMSTaskNum = taskDTO.taskCode,
                        Grade = taskDTO.taskPriority,
                        PalletCode = taskDTO.containerCode,
                        Roadway = hKLocationInfo.RoadwayNo,
                        Roadway = "1",
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = taskType,
                        SourceAddress = taskDTO.fromLocationCode,
@@ -238,14 +238,12 @@
                        TargetAddress = taskDTO.toLocationCode,
                        Creater = "WMS",
                    };
                }
                //出库
                if (taskType == (int)TaskTypeEnum.Q3CK)
                {
                     stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.toLocationCode) ?? throw new Exception($"未找到起点库位【{taskDTO.toLocationCode}】!");
                    if (stationInfo.StationName != LocationStatusEnum.InStock.ToString()) throw new Exception($"起点库位【{taskDTO.toLocationCode}】当前库位状态不可出库!");
                    if (stationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"起点库位【{taskDTO.toLocationCode}】绑定料箱号【{stationInfo.PalletCode}】与任务料箱号【{taskDTO.containerCode}】不匹配!");
                    //stationInfo = _stationMangerService.Repository.QueryFirst(x => x.StationCode == taskDTO.fromLocationCode) ?? throw new Exception($"未找到起点库位【{taskDTO.fromLocationCode}】!");
                    //if (stationInfo.IsOccupied != (int)LocationStatusEnum.InStock) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】当前库位状态不可出库!");
                        dt_Task = new Dt_Task()
                    {
                        TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
@@ -253,7 +251,7 @@
                        //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        Grade = taskDTO.taskPriority,
                        PalletCode = taskDTO.containerCode,
                        Roadway = hKLocationInfo.RoadwayNo,
                        Roadway = "1",
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = taskType,
                        SourceAddress = taskDTO.fromLocationCode,
@@ -267,8 +265,6 @@
                {
                    Db.Ado.BeginTran();
                    BaseDal.AddData(dt_Task);
                    _hKLocationInfoService.Repository.UpdateData(hKLocationInfo);
                    _stationInfo.Repository.UpdateData(stationInfo);
                    Db.Ado.CommitTran();
                }
                catch (Exception ex)
@@ -295,8 +291,23 @@
        public WebResponseContent CJCarryTaske(TaskDTO taskDTO, int taskType)
        {
            WebResponseContent content = new WebResponseContent();
            Dt_StationInfo? stationInfo = null;
            try
            {
                //#region æ˜¯å¦éœ€è¦åˆ¤æ–­å¹³åº“库位状态
                //if (taskType!= (int)TaskTypeEnum.CK3F)
                //{
                //    stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.fromLocationCode) ?? throw new Exception($"未找到起点库位【{taskDTO.fromLocationCode}】!");
                //    if (stationInfo.StationName != LocationStatusEnum.InStock.ToString()) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】当前库位状态不可出库!");
                //    if (stationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】绑定料箱号【{stationInfo.PalletCode}】与任务料箱号【{taskDTO.containerCode}】不匹配!");
                //}
                //else
                //{
                //    stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.toLocationCode) ?? throw new Exception($"未找到终点库位【{taskDTO.toLocationCode}】!");
                //    if (stationInfo.StationName != LocationStatusEnum.InStock.ToString()) throw new Exception($"起点库位【{taskDTO.toLocationCode}】当前库位状态不可出库!");
                //}
                //#endregion
                Dt_Task dt_Task = new Dt_Task()
                {
                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
@@ -326,5 +337,44 @@
            return content;
        }
        #endregion
        #region 5空车转运
        public WebResponseContent HKF01Transport(TaskDTO taskDTO, int taskType)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.fromLocationCode) ?? throw new Exception($"未找到起点库位【{taskDTO.fromLocationCode}】!");
                var dt_Task = new Dt_Task()
                {
                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    WMSTaskNum = taskDTO.taskCode,
                    //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    Grade = taskDTO.taskPriority,
                    PalletCode = taskDTO.containerCode,
                    Roadway = "1",
                    TaskState = (int)TaskStatusEnum.New,
                    TaskType = taskType,
                    SourceAddress = taskDTO.fromLocationCode,
                    CurrentAddress = taskDTO.fromLocationCode,
                    NextAddress = taskDTO.toLocationCode,
                    TargetAddress = taskDTO.toLocationCode,
                    Creater = "WMS",
                };
                content = SendHIKROBOTTask(dt_Task);
                if (!content.Status) throw new Exception(content.Message);
                dt_Task.TaskState = (int)TaskStatusEnum.Execut;
                dt_Task.Dispatchertime = DateTime.Now;
                BaseDal.AddData(dt_Task);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        #endregion
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs
@@ -53,6 +53,7 @@
                    CurrentAddress = taskDTO.fromLocationCode,
                    NextAddress = stationManger.RGVStationCode,
                    TargetAddress = "",
                    Dispatchertime=DateTime.Now,
                    Creater = "WMS",
                };
                BaseDal.AddData(dt_Task);
@@ -104,6 +105,7 @@
                    CurrentAddress = taskDTO.fromLocationCode,
                    NextAddress = taskDTO.toLocationCode,
                    TargetAddress = taskDTO.toLocationCode,
                    Dispatchertime = DateTime.Now,
                    Creater = "WMS",
                };
                rGVLocationInfo.LocationStatus = LocationStatusEnum.OutLock.ObjToInt();
@@ -134,6 +136,7 @@
                };
                return content.Error(ex.Message);
            }
        }
        #endregion
        /// <summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -78,11 +78,18 @@
                    switch (hIKROBOT.extra.values.method)
                    {
                        case "start":
                            if (task.TaskState == (int)TaskStatusEnum.CallingHKtransportation && task.TaskType == (int)TaskTypeEnum.Move)
                            if (task.TaskState == (int)TaskStatusEnum.CallingHKtransportation && task.TaskType == (int)TaskTypeEnum.MOVE)
                            {
                                task.TaskState = (int)TaskStatusEnum.HktransportIng;
                                BaseDal.UpdateData(task);
                            }
                            else if (task.TaskType == (int)TaskTypeEnum.Q3RK|| task.TaskType == (int)TaskTypeEnum.Q3CK)
                            else if (task.TaskType == (int)TaskTypeEnum.Q3CK)
                            {
                                UpdateStandStatus(task, task.SourceAddress, LocationStatusEnum.Lock);
                                task.TaskState = (int)TaskStatusEnum.Takeing;
                                TaskFeedback(task, 1);
                            }
                            else if (task.TaskType == (int)TaskTypeEnum.Q3RK)
                            {
                                UpdateStandStatus(task, task.TargetAddress, LocationStatusEnum.Lock);
                                task.TaskState = (int)TaskStatusEnum.Takeing;
@@ -98,12 +105,14 @@
                            {
                                  if (task.TaskType == (int)TaskTypeEnum.Q3RK|| task.TaskType == (int)TaskTypeEnum.Q3CK)
                                {
                                    UpdateStandStatus(task, task.TargetAddress, LocationStatusEnum.Free);
                                    UpdateStandStatus(task, task.SourceAddress, LocationStatusEnum.Free);
                                    task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt();
                                    BaseDal.UpdateData(task);
                                    TaskFeedback(task, 1);
                                }
                                else
                                {
                                    TaskFromCompleted(task, deviceTypeEnum); //任务状体改为3取货完成,更新起点货位状态,并反馈WMS起点完成
                                }
                                ///判断任务是否跟设备有关
@@ -125,10 +134,11 @@
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                    }
                                    BaseDal.UpdateData(task);
                                }
                                //出提升机
                                else if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
                                //3 å‡ºæå‡æœº ä¹‹å‰æ˜¯AGV_ToExecute
                                else if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                                {
                                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                                    if (device == null) task.ExceptionMessage = "未找到提升机信息";
@@ -139,6 +149,7 @@
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                    }
                                    BaseDal.UpdateData(task);
                                }
                                //四楼 å‡ºåº“
                                else if ((task.TaskType == TaskTypeEnum.CHUKU1.ObjToInt() || task.TaskType == TaskTypeEnum.F04.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
@@ -152,9 +163,10 @@
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                    }
                                    BaseDal.UpdateData(task);
                                }
                                //四楼 å…¥åº“
                                else if ((task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
                                // //四楼出提升机 å…¥åº“ ä¹‹å‰æ˜¯AGV_ToExecute
                                if ((task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                                {
                                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                                    if (device == null) task.ExceptionMessage = "未找到提升机信息";
@@ -166,14 +178,15 @@
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                    }
                                    BaseDal.UpdateData(task);
                                }
                                else if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || task.TaskType == TaskTypeEnum.Q3CK.ObjToInt() && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
                                //跨楼层
                                else if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || task.TaskType == TaskTypeEnum.Q3CK.ObjToInt() && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                                {
                                    if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt()|| task.TaskType == TaskTypeEnum.Q3RK.ObjToInt())
                                    {
                                        var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                                        if (device == null) task.ExceptionMessage = "未找到质检门信息";
                                        else
                                        {
                                            if (device.IsConnected)
@@ -184,7 +197,7 @@
                                        }
                                    }
                                    BaseDal.UpdateData(task);
                                }
                            }
                            break;
@@ -202,8 +215,8 @@
                                else
                                {
                                    if (device.IsConnected)
                                        //写以一个出库完成信号
                                        device.SetValue(HoistEnum.Outboundboxretrievalcompleted, 1, task.SourceAddress);
                                         //打开扫码器
                                       device.SetValue<HoistEnum, short>(HoistEnum.Codereadingtriggered, 1);
                                    else
                                        task.ExceptionMessage = "提升机信息设备连接失败";
                                }
@@ -213,15 +226,10 @@
                            break;
                        case "end"://任务完成通知
                            {
                                if (task.TaskType==(int)TaskTypeEnum.Move &&task.TaskState==(int)TaskStatusEnum.HkTransportCompleted)
                                 if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.Q3CK|| task.TaskType == (int)TaskTypeEnum.MOVE)
                                {
                                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
                                    TaskFeedback(task, 2);
                                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
                                }
                                else if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.Q3CK)
                                {
                                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
                                    BaseDal.UpdateData(task);
                                    TaskFeedback(task, 2);
                                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
                                }
@@ -235,17 +243,19 @@
                        case "intolift": //进入电梯
                            {
                                //六楼到一楼的入库任务
                                if (task.TaskType==(int)TaskTypeEnum.Q3RK)
                                if (task.TaskType==(int)TaskTypeEnum.Q3RK||task.TaskType==(int)TaskTypeEnum.MOVE)
                                {
                                    task.TaskState = TaskStatusEnum.Hkintolift.ObjToInt();
                                    BaseDal.UpdateData(task);
                                }
                            }
                            break;
                            case "leavelift": //离开电梯
                            {
                                if (task.TaskType == (int)TaskTypeEnum.Q3RK)
                                if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.MOVE)
                                {
                                    task.TaskState = TaskStatusEnum.HKleavelift.ObjToInt();
                                    BaseDal.UpdateData(task);
                                }
                            }
                            break;
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -178,13 +178,17 @@
                                content = CreateHKNewOutTask(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            case (int)TaskTypeEnum.F01:
                            case (int)TaskTypeEnum.Q3RK:
                            case (int)TaskTypeEnum.Q3CK:
                                content = CarryTask(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            case (int)TaskTypeEnum.F01:
                                content = HKF01Transport(task, item.taskType);
                                break;
                            case (int)TaskTypeEnum.F04:
                            case (int)TaskTypeEnum.F03:
                            case (int)TaskTypeEnum.F02:
                            case (int)TaskTypeEnum.RK3F:
                            case (int)TaskTypeEnum.CK3F:
@@ -1153,13 +1157,14 @@
                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                    if (device == null) throw new Exception("未找到提升机设备信息");
                    if (!device.IsConnected) throw new Exception("PLC1提升机设备连接失败");
                    var value = device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJ");
                    var value = device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJC3F");
                    list.Add(new
                    {
                        LoctionCode = value,
                        LocationStatus = value!=0? 100 : 0,
                        EnableStatus = 0,
                    });
                    content.OK(data: list);
                }
                else if (getLocationInfo.WarehouseId == 4)
                {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs
@@ -146,6 +146,7 @@
                                    }
                                    continue;
                                }
                                if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, task.SourceAddress) != 1)
                                {
                                    if (task.ExceptionMessage != "4楼提升机出口扫码完成信号没有完成")
@@ -180,9 +181,9 @@
                    var RK3FTasks = _taskService.Repository.QueryFirst(x => x.TaskType == TaskTypeEnum.RK3F.ObjToInt() && x.TaskState == (int)TaskStatusEnum.CheckPalletCodeing);
                    if (RK3FTasks != null)
                    {
                        var Barcode = device.SetValue<HoistEnum, short>(HoistEnum.Codereadingtriggered, 1);
                        //检查3楼入库箱号是多少,然后传给wms
                        var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Inboxnumber, RK3FTasks.TargetAddress);
                        BinNumber = BinNumber?.TrimEnd('\0')?.Substring(2);
                        if (device.GetValue<HoistEnum, short>(HoistEnum.RInScanningCompletionSignal, RK3FTasks.TargetAddress ) !=1 )
                        {
                            RK3FTasks.ExceptionMessage = "3楼扫码完成信号没有完成";
@@ -212,6 +213,7 @@
                                    Uptasks.Add(RK3FTasks);
                                }
                            }
                            RK3FTasks.ExceptionMessage = "";
                            RK3FTasks.TaskState = (int)TaskStatusEnum.CheckPalletCodeFinish;
                        }
                        Uptasks.Add(RK3FTasks);
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs
@@ -1,6 +1,8 @@
using System;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
@@ -47,78 +49,225 @@
        {
            foreach (var item in tasks)
            {
                if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                // å‡ºåº“任务处理 (从1楼出库到6楼)
                if (item.TaskType == (int)TaskTypeEnum.Q3CK)
                {
                    // è°ƒç”¨æŽ¥å£èŽ·å–å°è½¦ä¿¡æ¯
                    var result = _agvcartInfoService.CheckTheCar();
                    // åˆ¤æ–­æ˜¯å¦æœ‰ AA æˆ– FF
                    bool hasAAOrFF = false;
                    if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                    {
                        if (result != null && result.Status)
                        {
                            var dataList = result.Data as List<HIKROBOTQueryData>;
                            if (dataList != null && dataList.Any())
                            {
                                // æ£€æŸ¥è¿”回的 mapCode åˆ—表中是否有 AA
                                hasAAOrFF = dataList.Any(d => d.mapCode == "AA");
                                if (hasAAOrFF)
                                {
                                    var content = _taskService.SendHIKROBOTTask(item);
                                    item.TaskState = (int)TaskStatusEnum.Execut;
                                }
                                else//这里我就要呼叫空车来
                                {
                                    //添加空车运输任务
                                    AddAGVCartInfo(item);
                                    item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                }
                            }
                            // å‡ºåº“任务:检查是否有在1楼(AA)的小车
                            // Q3CK æ˜¯AA→FF的跨楼层任务,只能使用专用小车
                            var specialCarInAA = dataList.FirstOrDefault(d => d.mapCode == "AA" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
                           
                            if (specialCarInAA != null)
                            {
                                // æœ‰åœ¨1楼的小车,直接执行任务
                                var content = _taskService.SendHIKROBOTTask(item);
                                if (content.Status)
                                {
                                    item.TaskState = (int)TaskStatusEnum.Execut;
                        }
                    }
                    else
                    {
                        if (result != null && result.Status)
                                // æ²¡æœ‰ä¸“用小车在1楼,需要呼叫专用小车来到1楼
                                var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
                                if (anySpecialCar != null)
                        {
                            if (hasAAOrFF)
                                    // èµ·ç‚¹ï¼šå°è½¦å½“前所在楼层的点位,目标:1楼点位
                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "AA");
                                    if (callCarResult.Status)
                            {
                                var content = _taskService.SendHIKROBOTTask(item);
                                item.TaskState = (int)TaskStatusEnum.Execut;
                            }
                            else//这里我就要呼叫空车来
                            {
                                //添加空车运输任务
                                AddAGVCartInfo(item);
                                        // åŽŸä»»åŠ¡çŠ¶æ€æ”¹ä¸ºç­‰å¾…ç©ºè½¦
                                item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                            }
                        }
                                else
                                {
                                    item.ExceptionMessage = "未找到可用AGV小车";
                    }
                }
            }
            _taskService.UpdateData(tasks);
        }
                    else
                    {
                        item.ExceptionMessage = "获取AGV小车信息失败";
                    }
                }
                // å…¥åº“任务处理 (从6楼入库到1楼)
                else if (item.TaskType == (int)TaskTypeEnum.Q3RK)
                {
                    var result = _agvcartInfoService.CheckTheCar();
                    if (result != null && result.Status)
                    {
                        var dataList = result.Data as List<HIKROBOTQueryData>;
                        if (dataList != null && dataList.Any())
                        {
                            // Q3RK æ˜¯FF→AA的跨楼层任务,只能使用专用小车
                            var specialCarInFF = dataList.FirstOrDefault(d => d.mapCode == "FF" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
                            if (specialCarInFF!=null)
                            {
                                // æœ‰åœ¨1楼的小车,直接执行任务
                                var content = _taskService.SendHIKROBOTTask(item);
                                item.TaskState = (int)TaskStatusEnum.Execut;
                            }
                            else
                            {
                                // æ²¡æœ‰ä¸“用小车在6楼,需要呼叫专用小车来到6楼
                                var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
                                if (anySpecialCar != null)
                                {
                                    // èµ·ç‚¹ï¼šå°è½¦å½“前所在楼层的点位,目标:6楼点位
                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "FF");
                                    if (callCarResult.Status)
                                    {
                                        item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                    }
                                }
                                else
                                {
                                    item.ExceptionMessage = "未找到可用AGV小车";
                                }
                            }
                        }
                    }
                    else
                    {
                        item.ExceptionMessage = "获取AGV小车信息失败";
                    }
                }
                else if (item.TaskType == (int)TaskTypeEnum.F01)
                {
                    // F01任务处理:根据目标地址判断需要哪个楼层的小车
                    var result = _agvcartInfoService.CheckTheCar();
                    if (result != null && result.Status)
                    {
                        var dataList = result.Data as List<HIKROBOTQueryData>;
                        if (dataList != null && dataList.Any())
                        {
                            // ä»Žä»»åŠ¡çš„èµ·å§‹åœ°å€ä¸­æå–éœ€è¦çš„æ¥¼å±‚ä»£ç 
                            string requiredMapCode = GetMapCodeFromAddress(item.SourceAddress);
                            if (string.IsNullOrEmpty(requiredMapCode))
                            {
                                item.ExceptionMessage = $"无法从目标地址 {item.SourceAddress} ä¸­è¯†åˆ«æ¥¼å±‚信息";
                                _taskService.UpdateData(item);
                                continue;
                            }
                            // æ£€æŸ¥æ˜¯å¦æœ‰åœ¨ç›®æ ‡æ¥¼å±‚的小车
                            var hasRequiredCar = dataList.FirstOrDefault(d => d.mapCode == requiredMapCode&&d.CarType== "MR-Q3-600LE-D(M)");
                            if (hasRequiredCar!=null)
                            {
                                // æœ‰åœ¨ç›®æ ‡æ¥¼å±‚的小车,直接执行任务
                                var content = _taskService.SendHIKROBOTTask(item);
                                if (content.Status)
                                {
                                    item.TaskState = (int)TaskStatusEnum.Execut;
                                }
                            }
                            else
                            {
                                // æ²¡æœ‰ç›®æ ‡æ¥¼å±‚的小车,需要呼叫空车从当前位置到目标楼层
                                var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)");
                                if (anySpecialCar != null)
                                {
                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, requiredMapCode);
                                    if (callCarResult.Status)
                                    {
                                        item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                    }
                                }
                                else
                                {
                                    item.ExceptionMessage = "未找到可用AGV小车";
                                }
                            }
                        }
                    }
                    }
                _taskService.UpdateData(item);
            }
        }
        #endregion
        #region å¤„理海康agv搬运任务
        public WebResponseContent AddAGVCartInfo(Dt_Task task)
        /// <summary>
        /// åˆ›å»ºç©ºè½¦å‘¼å«ä»»åŠ¡ï¼šæ ¹æ®å°è½¦å½“å‰ä½ç½®å’Œç›®æ ‡æ¥¼å±‚ï¼Œè®¾ç½®ä»»åŠ¡çš„èµ·ç‚¹ã€å½“å‰ä½ç½®å’Œç›®æ ‡ç‚¹ï¼Œå¹¶ä¸‹å‘ç»™æµ·åº·æŽ¥å£
        /// </summary>
        /// <param name="task"></param>
        /// <param name="currentMapCode">当前位置</param>
        /// <param name="targetMapCode">目标地址</param>
        /// <returns></returns>
        public WebResponseContent AddAGVCartInfo(Dt_Task task, string currentMapCode, string targetMapCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                task.TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                task.WMSTaskNum = null;
                task.TaskType = (int)TaskTypeEnum.Move;//换层任务
                task.TaskState = (int)TaskStatusEnum.CallingHKtransportation;
                var result = _taskService.SendHIKROBOTTask(task);
                _taskService.AddData(task);
                // èŽ·å–èµ·ç‚¹æ¥¼å±‚ä¿¡æ¯
                if (!FloorMapping.FloorMap.ContainsKey(currentMapCode))
                {
                    content.Error($"无效的起点楼层代码:{currentMapCode}");
                    return content;
                }
                // èŽ·å–ç›®æ ‡æ¥¼å±‚ä¿¡æ¯
                if (!FloorMapping.FloorMap.ContainsKey(targetMapCode))
                {
                    content.Error($"无效的目标楼层代码:{targetMapCode}");
                    return content;
                }
                var currentFloorInfo = FloorMapping.FloorMap[currentMapCode];
                var targetFloorInfo = FloorMapping.FloorMap[targetMapCode];
                // è®¾ç½®ä»»åŠ¡ä¿¡æ¯
                //task.SourceAddress = currentFloorInfo.PointCode;  // èµ·ç‚¹ï¼šå°è½¦å½“前位置的点位
                //task.CurrentAddress = currentFloorInfo.PointCode; // å½“前位置:小车当前位置的点位
                //task.TargetAddress = targetFloorInfo.PointCode;   // ç›®æ ‡ç‚¹ï¼šç›®æ ‡æ¥¼å±‚点位
                //task.NextAddress = targetFloorInfo.PointCode; // è®°å½•目标楼层代码
                Dt_Task newTask = new Dt_Task
                {
                    WMSTaskNum="HKkc"+ DateTime.Now.ToString("yyyyMMddHHmmss"), // ç”Ÿæˆå”¯ä¸€çš„WMS任务号
                    TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    SourceAddress = currentFloorInfo.PointCode,
                    CurrentAddress = currentFloorInfo.PointCode,
                    TargetAddress = targetFloorInfo.PointCode,
                    NextAddress = targetFloorInfo.PointCode,
                    TaskType = (int)TaskTypeEnum.MOVE,
                    Grade = task.Grade,
                    PalletCode = null,
                    TaskState = (int)TaskStatusEnum.CallingHKtransportation,
                    // å¤åˆ¶å…¶ä»–必要字段
                    CreateDate = DateTime.Now,
                    Creater = "System"
                };
                _taskService.AddData(newTask);  // æ·»åŠ æ–°ä»»åŠ¡
                var result = _taskService.SendHIKROBOTTask(newTask);
                if (result.Status)
                {
                    content.OK("空车呼叫任务创建成功", newTask);
                }
                else
                {
                    content.Error("空车呼叫任务下发失败");
                }
                return content;
            }
            catch (Exception ex)
            {
                content.Error($"创建失败:{ex.Message}");
                content.Error($"创建空车呼叫任务失败:{ex.Message}");
            }
            return content;
        }
@@ -129,10 +278,11 @@
        {
            try
            {
                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Move);
                if (reslut.Count<0)
                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.MOVE);
                if (reslut.Count<=0)
                {
                    foreach (var item in reslut)
                    List<Dt_Task> reslut2 = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Q3RK||x.TaskType==(int)TaskTypeEnum.Q3CK || x.TaskType == (int)TaskTypeEnum.F01);
                    foreach (var item in reslut2)
                    {
                        var content = _taskService.SendHIKROBOTTask(item);
                    }   
@@ -151,5 +301,30 @@
            }
        }
        #endregion
        /// <summary>
        /// ä»Žåœ°å€ä¸­æå–楼层代码(AA、BB、CC、DD、EE、FF)
        /// </summary>
        /// <param name="address">点位地址</param>
        /// <returns>楼层代码</returns>
        private string GetMapCodeFromAddress(string address)
        {
            if (string.IsNullOrEmpty(address))
                return null;
            // åœ°å€æ ¼å¼ç¤ºä¾‹ ï¼šAA å¯¹åº” 0339050AA0309145
            // keys æ˜¯ AA、BB、CC、DD、EE、FF,vule是对应的点位信息
            foreach (var floorCode in FloorMapping.FloorMap.Keys)
            {
                if (address.Contains(floorCode))
                {
                    return floorCode;//返回的就是AA、BB、CC、DD、EE、FF中的一个,代表对应的楼层
                }
            }
            return null;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs
@@ -65,6 +65,7 @@
                        task.RGVTaskId = fOURBO.taskID;
                        task.ExceptionMessage = "";
                        task.TaskState = (int)TaskStatusEnum.Execut;
                        task.Dispatchertime=DateTime.Now;
                    }
                    catch (Exception ex)
                    {
@@ -119,6 +120,7 @@
                        keepRobot = 1,
                        keepRobotTimeout = 1
                    };
                    fOURBOTnewMovePodTask.requestID += item.TaskId;
                    fOURBOTnewMovePodTask.desType = 1;
                    fOURBOTnewMovePodTask.desNodeID = item.NextAddress;
                    string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
@@ -134,6 +136,7 @@
                        }
                        //FOURBOTnewMovePodTaskResponseData fOURBO = fOURBOTReturn.data as FOURBOTnewMovePodTaskResponseData ?? throw new Exception("未获取到四向车返回的任务ID");
                        item.RGVTaskId = fOURBO.taskID;
                        item.Dispatchertime = DateTime.Now;
                        item.TaskState = (int)TaskStatusEnum.TakeFinish;
                    }
                }
@@ -206,7 +209,10 @@
                                #endregion
                                var responseContent = AddMoveTask(item.blockPods, task);//添加移库任务
                                if (!responseContent.Status) task.ExceptionMessage = responseContent.Message;
                                else task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
                                else
                                {
                                    task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
                                }
                                dt_Tasks.Add(task);
                            }
                            else
@@ -274,6 +280,7 @@
                            {
                                autoToRest = 1
                            };
                            fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + item.TaskId;
                            item.CurrentAddress = item.NextAddress;
                            item.NextAddress = rGVLocationInfo.LocationCode;
                            item.TargetAddress = rGVLocationInfo.LocationCode;
@@ -288,8 +295,8 @@
                                var fOURBO = data.DeserializeObject<FOURBOTnewMovePodTaskResponseData>();
                                item.RGVTaskId = fOURBO.taskID;
                                item.TaskState = (int)TaskStatusEnum.Puting;
                                rGVLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt();
                                item.Dispatchertime = DateTime.Now;
                                locationsToUpdate.Add(rGVLocationInfo);
                                #region é‡Šæ”¾å…¥åº“站台
@@ -316,6 +323,10 @@
                        item.ExceptionMessage = $"处理任务异常:{ex.Message}";
                        //WriteError($"{nameof(TaskJob)}-{item.TaskId}", ex.Message, ex);
                        content.Error($"四向车接口返回错误:{ex.Message}");
                    }
                    finally
                    {
                    }
                }
                #region MyRegion
@@ -467,6 +478,7 @@
                        }
                        item.RGVTaskId = fOURBO.taskID;
                        item.TaskState = (int)TaskStatusEnum.Puting;
                        item.Dispatchertime = DateTime.Now;
                    }
                }
                _taskService.UpdateData(tasks);
@@ -571,6 +583,7 @@
                        var task = tasks.First(x => x.PalletCode == item.podID);
                        task.RGVTaskId = item.taskID;
                        task.TaskState = TaskStatusEnum.RGV_MoveTaskSend.ObjToInt();
                        task.Dispatchertime = DateTime.Now;
                        dt_Tasks.Add(task);
                    }
                    _taskService.UpdateData(dt_Tasks);
@@ -599,6 +612,7 @@
                    if (takes == null)
                    {
                        item.TaskState = (int)TaskStatusEnum.RGV_WaitSend;
                        item.Dispatchertime = DateTime.Now;
                    }
                }
                _taskService.UpdateData(tasks);
@@ -643,7 +657,7 @@
                        autoToRest = 1
                    };
                    fOURBOTnewMovePodTask.desType = 5;
                    fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmss") + item.TaskId;
                    fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + item.TaskId;
                    string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
                    FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
                    content.OK(data: fOURBOTReturn);
@@ -657,6 +671,7 @@
                        }
                        item.RGVTaskId = fOURBO.taskID;
                        item.TaskState = (int)TaskStatusEnum.Execut;
                        item.Dispatchertime = DateTime.Now;
                        //stationManger.IsOccupied = LocationStatusEnum.Lock.ObjToInt();
                        //_stationMangerService.UpdateData(stationManger);
                    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
@@ -67,10 +67,6 @@
                            var R_RightWideWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_RightWideWarning, task.SourceAddress);
                            //超高警告
                            var R_ExtremeWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_ExtremeWarning, task.SourceAddress);
                            //写入停止质检信号
                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress);
                            Thread.Sleep(500);
                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                            if (qualityResult)
                            {
                                //如果质检通过了,就把任务状态改为质检完成
@@ -89,6 +85,10 @@
                                //写入复位信号
                                //device.SetValue(QualityInspectionCommandEnum.FaultReset, true, task.SourceAddress);
                            }
                            //写入停止质检信号
                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress);
                            Thread.Sleep(500);
                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                        }
                        //else
                        //{
@@ -96,12 +96,18 @@
                        //    device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                        //    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                        //}
                        else
                        {
                            task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
                            task.ExceptionMessage = "未检测到质检完成信号";
                            Uptasks.Add(task);
                        }
                    }
                    foreach (var item in AGVtaskList)
                    {
                        //into进入一楼位置的时候,写入进入信号
                        device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, item.TargetAddress);
                        device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, item.SourceAddress);
                        if (!device.GetValue<QualityInspectionCommandEnum,bool>(QualityInspectionCommandEnum.Blocking)==true)
                        {
                            item.ExceptionMessage = $"{item.TargetAddress}站台光栅不为true(1)!";