已添加3个文件
已修改24个文件
1223 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 16 ●●●● 补丁 | 查看 | 原始文档 | 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_DTO/WMS/WMSReturn.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/inboundElevatorExitDTO.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/inboundTransportCheckDTO.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IAGVCartInfoService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/BasicInfo/AGVCartInfoController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs 227 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskExtend.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskJob.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestExtend.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs
@@ -37,7 +37,7 @@
        /// </summary>
        /// <param name="agvcode"></param>
        /// <returns></returns>
        public WebResponseContent CheckTheCar()
        public WebResponseContent CheckTheCar(string hkagvType)
        {
            WebResponseContent content = new WebResponseContent();
            List<HIKROBOTQueryData> dataList = new List<HIKROBOTQueryData>();
@@ -51,7 +51,7 @@
            try
            {
                var agvInfo = Repository.QueryData();
                var agvInfo = Repository.QueryData(x => x.HkagvType == hkagvType);
                if (agvInfo == null || !agvInfo.Any())
                {
                    content.Error("未查询到AGV小车信息");
@@ -63,7 +63,7 @@
                foreach (var item in agvInfo)
                {
                     var headers = new Dictionary<string, string>
                    var headers = new Dictionary<string, string>
                    {
                        { "X-lr-request-id", DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + item.AGVCode }
                    };
@@ -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}查询成功");
@@ -155,6 +156,6 @@
        }
    }
}
´úÂë¹ÜÀí/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,28 +124,28 @@
        /// <summary>
        /// å‘¼å«æµ·åº·æ¬è¿ä¸­  19
        /// å‘¼å«AGV小车中
        /// </summary>
        [Description("等待海康AGV搬运到位")]
        [Description("呼叫AGV小车中")]
        WaitingHkAGVMovePosition,
        /// <summary>
        /// å‘¼å«æµ·åº·æ¬è¿ä¸­
        /// æµ·åº·AGV空车跨层下发
        /// </summary>
        [Description("呼叫海康AGV搬运")]
        [Description("海康AGV空车跨层下发")]
        CallingHKtransportation,
        /// <summary>
        /// æµ·åº·AGV搬运中
        /// æµ·åº·AGV空车跨层运行中
        /// </summary>
        [Description("海康AGV搬运中")]
        [Description("海康AGV空车跨层运行中")]
        HktransportIng,
        /// <summary>
        /// æµ·åº·AGV搬运完成 22
        /// æµ·åº·AGV空车跨层完成
        /// </summary>
        [Description("海康AGV搬运完成")]
        [Description("海康AGV空车跨层完成")]
        HkTransportCompleted,
´úÂë¹ÜÀí/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_DTO/WMS/WMSReturn.cs
@@ -23,11 +23,11 @@
        /// <summary>
        /// TRUE
        /// </summary>
        public string success { get; set; }
        public bool success { get; set; }
        /// <summary>
        /// æˆåŠŸ
        /// </summary>
        public string result { get; set; }
        public object result { get; set; }
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
@@ -38,4 +38,16 @@
        /// </summary>
        public object data { get; set; }
    }
    public class Exists
    {
        /// <summary>
        /// æ˜¯å¦åœ¨é€”
        /// </summary>
        public bool taskExists { get; set; }
        /// <summary>
        /// å¼‚常地址
        /// </summary>
        public string errorAreaCode { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/inboundElevatorExitDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO.WMS
{
    /// <summary>
    /// 4F提升机出口托盘号上报WMS
    /// </summary>
    public class inboundElevatorExitDTO
    {
        public string containerCode { get; set; }
        public string toLocationCode { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/inboundTransportCheckDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO.WMS
{
    /// <summary>
    /// è£ç‰‡å…¥åº“3F到4F运输箱号校验
    /// </summary>
    public class inboundTransportCheckDTO
    {
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        public string containerCode { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IAGVCartInfoService.cs
@@ -19,6 +19,6 @@
        /// æ£€æŸ¥æµ·åº·å°è½¦
        /// </summary>
        /// <returns></returns>
        WebResponseContent CheckTheCar();
        WebResponseContent CheckTheCar(string hkagvType);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -270,6 +270,13 @@
        /// <returns></returns>
        public WebResponseContent MaterialBoxInspection(string taskCode ,string containerCode);
        /// <summary>
        /// 4F提升机出口托盘号上报WMS
        /// </summary>
        /// <param name="LocationCode"></param>
        /// <param name="containerCode"></param>
        /// <returns></returns>
        public WebResponseContent InboundElevatorExit(string LocationCode, string containerCode);
        /// <summary>
        /// wcs移库数据回传
´úÂë¹ÜÀí/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.cs
@@ -58,7 +58,7 @@
        /// </summary>
        [ImporterHeader(Name = "托盘编号")]
        [ExporterHeader(DisplayName = "托盘编号")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "托盘编号")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "托盘编号")]
        public string PalletCode { get; set; }
        /// <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_Server/Controllers/BasicInfo/AGVCartInfoController.cs
@@ -20,9 +20,9 @@
        }
        [HttpPost,Route("CheckTheCar"), AllowAnonymous]
        public WebResponseContent CheckTheCar()
        public WebResponseContent CheckTheCar(string hkagvType)
        {
            return Service.CheckTheCar();
            return Service.CheckTheCar(hkagvType);
        }
    }
´úÂë¹ÜÀí/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,21 +246,22 @@
                hIKROBOTTaskSubmit.initPriority = task.Grade;
                hIKROBOTTaskSubmit.robotTaskCode = task.WMSTaskNum;
                hIKROBOTTaskSubmit.taskType = tasktype.ToString(); ExtraDto extraDto = new ExtraDto();
                CarrierInfoDto carrierInfoDto = new CarrierInfoDto()
                if (task.TaskType != (int)TaskTypeEnum.MOVE && task.TaskType != (int)TaskTypeEnum.Q3RK && task.TaskType != (int)TaskTypeEnum.Q3CK && task.TaskType != (int)TaskTypeEnum.F01)
                {
                    carrierCode = task.PalletCode,
                    carrierType = task.PalletCode.Contains("LXM") ? "DX" : "SX"
                };
                extraDto.carrierInfo.Add(carrierInfoDto);
                hIKROBOTTaskSubmit.extra = extraDto;
                    CarrierInfoDto carrierInfoDto = new CarrierInfoDto()
                    {
                        carrierCode = task.PalletCode,
                        carrierType = task.PalletCode.Contains("LXM") ? "DX" : "SX"
                    };
                    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 +331,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,28 +209,18 @@
            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)
                {
                    //读取光电信号
                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                    if (device == null) throw new Exception("未找到1楼质检门设备信息");
                    if (!device.IsConnected) throw new Exception("PLC1楼质检门设备连接失败");
                    bool value = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_StockAvailableSymbol, taskDTO.toLocationCode);
                    if (value)
                    {
                        content.Error($"{taskDTO.toLocationCode}站台有货,无法入库");
                    }
                    dt_Task = new Dt_Task()
                    {
                        TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        WMSTaskNum = taskDTO.taskCode,
                        Grade = taskDTO.taskPriority,
                        PalletCode = taskDTO.containerCode,
                        Roadway = hKLocationInfo.RoadwayNo,
                        Roadway = "1",
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = taskType,
                        SourceAddress = taskDTO.fromLocationCode,
@@ -238,22 +229,20 @@
                        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}】不匹配!");
                        dt_Task = new Dt_Task()
                    //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)),
                        WMSTaskNum = taskDTO.taskCode,
                        //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 +256,6 @@
                {
                    Db.Ado.BeginTran();
                    BaseDal.AddData(dt_Task);
                    _hKLocationInfoService.Repository.UpdateData(hKLocationInfo);
                    _stationInfo.Repository.UpdateData(stationInfo);
                    Db.Ado.CommitTran();
                }
                catch (Exception ex)
@@ -295,8 +282,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 +328,43 @@
            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.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,15 +78,10 @@
                    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;
                            }
                            else if (task.TaskType == (int)TaskTypeEnum.Q3RK|| task.TaskType == (int)TaskTypeEnum.Q3CK)
                            {
                                UpdateStandStatus(task, task.TargetAddress, LocationStatusEnum.Lock);
                                task.TaskState = (int)TaskStatusEnum.Takeing;
                                TaskFeedback(task, 1);
                                BaseDal.UpdateData(task);
                            }
                            else
                            {
@@ -96,22 +91,11 @@
                            break;
                        case "outbin"://离开起点
                            {
                                  if (task.TaskType == (int)TaskTypeEnum.Q3RK|| task.TaskType == (int)TaskTypeEnum.Q3CK)
                                {
                                    UpdateStandStatus(task, task.TargetAddress, LocationStatusEnum.Free);
                                    task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt();
                                    TaskFeedback(task, 1);
                                }
                                else
                                {
                                    TaskFromCompleted(task, deviceTypeEnum); //任务状体改为3取货完成,更新起点货位状态,并反馈WMS起点完成
                                }
                                ///判断任务是否跟设备有关
                                TaskFromCompleted(task, deviceTypeEnum); //任务状体改为3取货完成,更新起点货位状态,并反馈WMS起点完成
                            }
                            break;
                        case "finish"://离开提升机
                            {
                                //入提升机
                                if (task.TaskType == TaskTypeEnum.RK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.CheckPalletCodeFinish)
                                {
@@ -119,72 +103,130 @@
                                    if (device == null) task.ExceptionMessage = "未找到提升机信息";
                                    else
                                    {
                                        DeviceProDTO? deviceProDTO = device.DeviceProDTOs.FirstOrDefault((DeviceProDTO x) => x.DeviceProParamName == HoistEnum.Inboundboxon.ToString());//放到位了
                                        bool Work = false;
                                        if (device.IsConnected)
                                            device.SetValue(HoistEnum.Inboundboxon, 1);
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                        {
                                            int i = 0;
                                            while (!Work && i <= 3)
                                            {
                                                i++;
                                                Work = device.SetValue(HoistEnum.Inboundboxon, 1, task.TargetAddress);
                                                Thread.Sleep(500);
                                            }
                                        }
                                        if (!Work)
                                        {
                                            task.ExceptionMessage = $"【{task.TargetAddress}】写入3楼入库箱放到位失败";
                                            task.Remark = $"{device.DeviceCode}_Inboundboxon_{1}_{task.TargetAddress}";
                                        }
                                    }
                                    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 = "未找到提升机信息";
                                    else
                                    {
                                        bool Work = false;
                                        if (device.IsConnected)
                                            device.SetValue(HoistEnum.Outboundboxon, 1);//出库完成
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                        {
                                            int i = 0;
                                            while (!Work && i <= 3)
                                            {
                                                i++;
                                                Work = device.SetValue(HoistEnum.Outboundboxon, 1, task.SourceAddress);//出库完成
                                                Thread.Sleep(500);
                                            }
                                        }
                                        if (!Work)
                                        {
                                            task.ExceptionMessage = $"【{task.SourceAddress}】写入3楼出库箱放到位失败";
                                            task.Remark = $"{device.DeviceCode}_Outboundboxon_{1}_{task.SourceAddress}";
                                        }
                                    }
                                    BaseDal.UpdateData(task);
                                }
                                //四楼 å‡ºåº“
                                //四楼 å‡ºåº“
                                else if ((task.TaskType == TaskTypeEnum.CHUKU1.ObjToInt() || task.TaskType == TaskTypeEnum.F04.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
                                {
                                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                                    if (device == null) task.ExceptionMessage = "未找到提升机信息";
                                    else
                                    {
                                        bool Work = false;
                                        if (device.IsConnected)
                                            device.SetValue(HoistEnum.Emptyboxplacedinposition, 1);
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                        {
                                            int i = 0;
                                            while (!Work && i <= 3)
                                            {
                                                i++;
                                                Work = device.SetValue(HoistEnum.Emptyboxplacedinposition, 1, task.TargetAddress);
                                                Thread.Sleep(500);
                                            }
                                        }
                                        if (!Work)
                                        {
                                            task.ExceptionMessage = $"【{task.TargetAddress}】写入4楼空箱放到位失败";
                                            task.Remark = $"{device.DeviceCode}_Emptyboxplacedinposition_{1}_{task.TargetAddress}";
                                        }
                                    }
                                    BaseDal.UpdateData(task);
                                }
                                //四楼 å…¥åº“
                                // //四楼出提升机 å…¥åº“ ä¹‹å‰æ˜¯AGV_ToExecute  //要写成取货完成状态TakeFinish
                                else if ((task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
                                {
                                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                                    if (device == null) task.ExceptionMessage = "未找到提升机信息";
                                    else
                                    {
                                        bool Work = false;
                                        if (device.IsConnected)
                                            //写以一个出库完成信号
                                            device.SetValue(HoistEnum.Outboundboxretrievalcompleted, 1, task.SourceAddress);
                                        else
                                            task.ExceptionMessage = "提升机信息设备连接失败";
                                    }
                                }
                                else if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || task.TaskType == TaskTypeEnum.Q3CK.ObjToInt() && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
                                {
                                    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)
                                                //写以一个出库完成信号
                                                device.SetValue(QualityInspectionCommandEnum.RequestToEnter, false, task.TargetAddress);
                                            else
                                                task.ExceptionMessage = "质检门信息设备连接失败";
                                            int i = 0;
                                            while (!Work && i <= 3)
                                            {
                                                i++;
                                                Work = device.SetValue(HoistEnum.Outboundboxretrievalcompleted, 1, task.SourceAddress);
                                                Thread.Sleep(500);
                                            }
                                        }
                                        if (!Work)
                                        {
                                            task.ExceptionMessage = $"【{task.SourceAddress}】写入4楼出库取箱完成失败";
                                            task.Remark = $"{device.DeviceCode}_Outboundboxretrievalcompleted_{1}_{task.SourceAddress}";
                                        }
                                    }
                                    BaseDal.UpdateData(task);
                                }
                                //跨楼层
                                else if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || task.TaskType == TaskTypeEnum.Q3CK.ObjToInt()/* && task.TaskState == (int)TaskStatusEnum.TakeFinish*/)
                                {
                                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                                    if (device == null) task.ExceptionMessage = "未找到质检门信息";
                                    else
                                    {
                                        bool Wok = false;
                                        var Address = task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() ? task.TargetAddress : task.SourceAddress;
                                        if (device.IsConnected)
                                        {
                                            int i = 0;
                                            while (!Wok && i <= 3)
                                            {
                                                i++;
                                                Wok = device.SetValue(QualityInspectionCommandEnum.RequestToEnter, false, Address);
                                                Thread.Sleep(500);
                                            }
                                        }
                                        if (!Wok)
                                        {
                                            task.ExceptionMessage = $"【{Address}】关闭请求进入失败!";
                                            task.Remark = $"{device.DeviceCode}_RequestToEnter_{false}_{Address}";
                                        }
                                    }
                                    BaseDal.UpdateData(task);
                                }
                            }
                            break;
@@ -201,11 +243,22 @@
                                if (device == null) task.ExceptionMessage = "未找到提升机信息";
                                else
                                {
                                    bool Wok = false;
                                    if (device.IsConnected)
                                        //写以一个出库完成信号
                                        device.SetValue(HoistEnum.Outboundboxretrievalcompleted, 1, task.SourceAddress);
                                    else
                                        task.ExceptionMessage = "提升机信息设备连接失败";
                                    {
                                        int i = 0;
                                        while (!Wok && i <= 3)
                                        {
                                            i++;
                                            Wok = device.SetValue<HoistEnum, short>(HoistEnum.Codereadingtriggered, 1, "TSJR3F");
                                            Thread.Sleep(500);
                                        }
                                    }
                                    if (!Wok)
                                    {
                                        task.ExceptionMessage = $"【TSJR3F】3楼读码触发失败!";
                                        task.Remark = $"{device.DeviceCode}_Codereadingtriggered_{1}_TSJR3F";
                                    }
                                }
                                task.TaskState = (int)TaskStatusEnum.CheckPalletCodeing;
                                BaseDal.UpdateData(task);
@@ -213,21 +266,16 @@
                            break;
                        case "end"://任务完成通知
                            {
                                if (task.TaskType==(int)TaskTypeEnum.Move &&task.TaskState==(int)TaskStatusEnum.HkTransportCompleted)
                                if (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();
                                    TaskFeedback(task, 2);
                                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
                                    var Task = BaseDal.QueryFirst(x => task.WMSTaskNum.Contains(x.WMSTaskNum));
                                    Task.TaskState = TaskStatusEnum.HkTransportCompleted.ObjToInt();
                                    BaseDal.UpdateData(Task);
                                }
                                else
                                {
                                    ///判断任务是否跟设备有关
                                    TaskCompleted(task, deviceTypeEnum);
                                }
                            }
@@ -235,17 +283,19 @@
                        case "intolift": //进入电梯
                            {
                                //六楼到一楼的入库任务
                                if (task.TaskType==(int)TaskTypeEnum.Q3RK)
                                if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.MOVE || task.TaskType == (int)TaskTypeEnum.F01)
                                {
                                    task.TaskState = TaskStatusEnum.Hkintolift.ObjToInt();
                                    BaseDal.UpdateData(task);
                                }
                            }
                            break;
                            case "leavelift": //离开电梯
                        case "leavelift": //离开电梯
                            {
                                if (task.TaskType == (int)TaskTypeEnum.Q3RK)
                                if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.MOVE || task.TaskType == (int)TaskTypeEnum.F01)
                                {
                                    task.TaskState = TaskStatusEnum.HKleavelift.ObjToInt();
                                    BaseDal.UpdateData(task);
                                }
                            }
                            break;
@@ -439,7 +489,7 @@
            try
            {
                dt_Task.TaskState = TaskStatusEnum.Finish.ObjToInt();
                TaskFeedback(dt_Task, 2);
                TaskFeedback(dt_Task, 2, string.IsNullOrEmpty(dt_Task.Remark));
                //Db.Ado.BeginTran();
                UpdateLocationStatus(dt_Task.TargetAddress, dt_Task.PalletCode, deviceTypeEnum, LocationStatusEnum.InStock);
@@ -513,6 +563,21 @@
                        stationInfo.StationStatus = locationStatusEnum.ObjToInt();
                        _stationInfo.UpdateData(stationInfo);
                    }
                    Dt_StationManger stationManger = _stationMangerService.Repository.QueryFirst(x => x.StationCode == locationCode);
                    if (stationManger != null)
                    {
                        if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
                        {
                            stationManger.Remark = "";
                            stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
                        }
                        else
                        {
                            stationManger.Remark = palletCode;
                            stationManger.IsOccupied = LocationStatusEnum.Lock.ObjToInt();
                        }
                        _stationMangerService.UpdateData(stationManger);
                    }
                }
                else if (deviceTypeEnum == DeviceTypeEnum.YuanLiJuHe)
                {
@@ -547,7 +612,7 @@
        #endregion
        #region æ›´æ–°ä¸€æ¥¼ç«™å°çŠ¶æ€
        public WebResponseContent UpdateStandStatus(Dt_Task task,string stationCode,LocationStatusEnum locationStatusEnum)
        public WebResponseContent UpdateStandStatus(Dt_Task task, string stationCode, LocationStatusEnum locationStatusEnum)
        {
            try
            {
@@ -575,7 +640,7 @@
        #endregion
        #region ä¸ŠæŠ¥WMS
        public WebResponseContent TaskFeedback(Dt_Task dt_Task, int Status)
        public WebResponseContent TaskFeedback(Dt_Task dt_Task, int Status, bool Del = true)
        {
            WebResponseContent content = new WebResponseContent();
            WMSInOutBoundCompleteFeedback boundCompleteFeedback = new WMSInOutBoundCompleteFeedback();
@@ -592,7 +657,7 @@
                    boundCompleteFeedback.toLocationCode = dt_Task.TargetAddress;
                    boundCompleteFeedback.status = Status;
                    boundCompleteFeedback.custStatus = "";
                    string response = HttpHelper.Post(apiInfo.ApiAddress,boundCompleteFeedback.Serialize());
                    string response = HttpHelper.Post(apiInfo.ApiAddress, boundCompleteFeedback.Serialize());
                    agvContent = response.DeserializeObject<WMSReturn>();
                    content.OK(data: agvContent);
                    if (agvContent.code != 200)
@@ -609,7 +674,7 @@
            finally
            {
                _trackloginfoService.AddTrackLog(boundCompleteFeedback, content, "出入库任务状态反馈WMS", "", "");
                if (agvContent != null && agvContent.code == 200 && Status == 2)
                if (agvContent != null && agvContent.code == 200 && Del)
                    BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动完成);
                else
                    BaseDal.UpdateData(dt_Task);
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,6 +16,7 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using Newtonsoft.Json;
using SixLabors.ImageSharp.ColorSpaces;
using SqlSugar;
using System.Collections.Generic;
@@ -130,7 +131,7 @@
                            continue;
                            //throw new Exception($"托盘号【{task.containerCode}】已存在任务");
                        }
                        if (BaseDal.QueryFirst(x => x.SourceAddress == task.fromLocationCode && x.TaskType == item.taskType&&x.TaskState<TaskStatusEnum.TakeFinish.ObjToInt())!=null)
                        if (BaseDal.QueryFirst(x => x.SourceAddress == task.fromLocationCode && x.TaskType == item.taskType && x.TaskState < TaskStatusEnum.TakeFinish.ObjToInt()) != null)
                        {
                            objects.Add(new
                            {
@@ -168,7 +169,7 @@
                                break;
                            #endregion
                            #region æµ·åº·AGV
                            case(int)TaskTypeEnum.STURR:
                            case (int)TaskTypeEnum.STURR:
                            case (int)TaskTypeEnum.Q1TSJ4:
                                content = CreateHKNewInTask(task, item.taskType);
                                objects.Add(content.Data);
@@ -178,13 +179,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:
@@ -239,7 +244,7 @@
                //四向车
                bool isAGV = dt_Task.TaskType == (int)TaskTypeEnum.CPInbound || dt_Task.TaskType == (int)TaskTypeEnum.CPOutbound;
                //海康
                bool isHK = dt_Task.TaskType == (int)TaskTypeEnum.F01 || dt_Task.TaskType == (int)TaskTypeEnum.RK3F || dt_Task.TaskType == (int)TaskTypeEnum.CK3F || dt_Task.TaskType == (int)TaskTypeEnum.Q1TSJ4 || dt_Task.TaskType == (int)TaskTypeEnum.STU0003 || dt_Task.TaskType == (int)TaskTypeEnum.F02 || dt_Task.TaskType == (int)TaskTypeEnum.CHUKU1 || dt_Task.TaskType == (int)TaskTypeEnum.Q3RK || dt_Task.TaskType == (int)TaskTypeEnum.Q3CK||dt_Task.TaskType==(int)TaskTypeEnum.STURR;
                bool isHK = dt_Task.TaskType == (int)TaskTypeEnum.F01 || dt_Task.TaskType == (int)TaskTypeEnum.RK3F || dt_Task.TaskType == (int)TaskTypeEnum.CK3F || dt_Task.TaskType == (int)TaskTypeEnum.Q1TSJ4 || dt_Task.TaskType == (int)TaskTypeEnum.STU0003 || dt_Task.TaskType == (int)TaskTypeEnum.F02 || dt_Task.TaskType == (int)TaskTypeEnum.CHUKU1 || dt_Task.TaskType == (int)TaskTypeEnum.Q3RK || dt_Task.TaskType == (int)TaskTypeEnum.Q3CK || dt_Task.TaskType == (int)TaskTypeEnum.STURR;
                //这里将状态改变了198取消任务
                dt_Task.TaskType = TaskStatusEnum.WMSCancel.ObjToInt();
                #region å‡¯ä¹å£«
@@ -327,7 +332,7 @@
                    Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(CancelHIKROBOTTask));
                    if (apiInfo == null) throw new Exception("未找到四向车AGV任务下发接口配置信息!请检查接口配置");
                    string response = HttpHelper.Post(apiInfo.ApiAddress, cancelHIKROBOTTask.Serialize(),headers: headers);
                    string response = HttpHelper.Post(apiInfo.ApiAddress, cancelHIKROBOTTask.Serialize(), headers: headers);
                    HIKROBOTReturn hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>();
                    content.OK(data: hIKROBOTReturn);
                    if (hIKROBOTReturn.code == "SUCCESS" && hIKROBOTReturn.message == "成功")
@@ -1142,7 +1147,7 @@
                            LoctionCode = item.LocationCode,
                            LocationStatus = item.LocationStatus,
                            EnableStatus = item.EnableStatus,
                              PalletCode = item.PalletCode
                            PalletCode = item.PalletCode
                        });
                    }
                    content.OK(data: list);
@@ -1153,13 +1158,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,
                        LocationStatus = value != 0 ? 100 : 0,
                        EnableStatus = 0,
                    });
                    content.OK(data: list);
                }
                else if (getLocationInfo.WarehouseId == 4)
                {
@@ -1175,7 +1181,7 @@
                            LoctionCode = item.LocationCode,
                            LocationStatus = item.LocationStatus,
                            EnableStatus = item.EnableStatus,
                              PalletCode = item.PalletCode
                            PalletCode = item.PalletCode
                        });
                    }
                    content.OK(data: list);
@@ -1186,7 +1192,7 @@
                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                    if (device == null) throw new Exception("未找到1楼质检门设备信息");
                    if (!device.IsConnected) throw new Exception("PLC1楼质检门设备连接失败");
                    var sta = _stationMangerService.Repository.QueryData(x => x.Remark == "成品库");
                    var sta = _stationMangerService.Repository.QueryData(x => x.StationName.Contains("成品仓"));
                    foreach (var item in sta)
                    {
                        bool value = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_StockAvailableSymbol, item.StationCode);
@@ -1228,7 +1234,28 @@
        {
            throw new NotImplementedException();
        }
        public WebResponseContent InboundElevatorExit(string LocationCode, string containerCode)
        {
            WebResponseContent content = new WebResponseContent();
            inboundElevatorExitDTO inboundElevator=new inboundElevatorExitDTO();
            try
            {
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(inboundElevatorExitDTO)) ?? throw new Exception("未找到4F提升机出口托盘号上报WMS接口配置信息!请检查接口配置");
                inboundElevator.containerCode= containerCode;
                inboundElevator.toLocationCode = LocationCode;
                string response = HttpHelper.Post(apiInfo.ApiAddress, inboundElevator.Serialize());
                content.OK(data: response);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
            finally
            {
                _trackloginfoService.AddTrackLog(inboundElevator, content, "4F提升机出口托盘号上报WMS", "", "");
            }
        }
        /// <summary>
        /// æ–™ç®±éªŒè¯
        /// </summary>
@@ -1237,7 +1264,30 @@
        /// <returns></returns>
        public WebResponseContent MaterialBoxInspection(string taskCode, string containerCode)
        {
            throw new NotImplementedException();
            WebResponseContent content = new WebResponseContent();
            inboundTransportCheckDTO checkDTO = new inboundTransportCheckDTO();
            try
            {
                checkDTO.containerCode = containerCode;
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(inboundTransportCheckDTO)) ?? throw new Exception("未找到裁片入库3F到4F运输箱号校验接口配置信息!请检查接口配置");
                string response = HttpHelper.Post(apiInfo.ApiAddress, checkDTO.Serialize());
                content.OK(data: response);
                WMSReturn wMSReturn = response.DeserializeObject<WMSReturn>();
                if (wMSReturn == null) throw new Exception("WMS返回结果转换失败!");
                if (!wMSReturn.success) throw new Exception(wMSReturn.message);
                string dataJson = wMSReturn.result.ToString();
                Exists? exists = JsonConvert.DeserializeObject<Exists>(dataJson);
                if (exists == null) throw new Exception($"WMS返回结果的result转换失败");
                return WebResponseContent.Instance.OK(exists.errorAreaCode);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
            finally
            {
                _trackloginfoService.AddTrackLog(checkDTO, content, "裁片入库3F到4F运输箱号校验", "", "");
            }
        }
        /// <summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs
@@ -30,7 +30,7 @@
{
    [DisallowConcurrentExecution]
    public class TSJJob : JobBase, IJob
    {
    {
        private readonly ITaskService _taskService;
        private readonly IStationMangerService _stationMangerService;
        public TSJJob(ITaskService taskService, IStationMangerService stationMangerService)
@@ -146,6 +146,7 @@
                                    }
                                    continue;
                                }
                                if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, task.SourceAddress) != 1)
                                {
                                    if (task.ExceptionMessage != "4楼提升机出口扫码完成信号没有完成")
@@ -171,59 +172,79 @@
                            task.ExceptionMessage = "";
                            Uptasks.Add(task);
                        }
                    }
                    #region æ‰˜ç›˜å·ç¡®è®¤ä¸­
                    //查找三楼入库任务状态为CheckPalletCodeing的任务托盘号确认中
                    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);
                        if (device.GetValue<HoistEnum, short>(HoistEnum.RInScanningCompletionSignal, RK3FTasks.TargetAddress ) !=1 )
                        {
                            RK3FTasks.ExceptionMessage = "3楼扫码完成信号没有完成";
                        }
                        else //完成就把任务状态改成托盘号确认完成
                        {
                            //根据读到的箱号进行料箱检验,检验通过就触发读码器读取,如果不通过就抛出异常
                            //var Verification = _taskService.MaterialBoxInspection(RK3FTasks.WMSTaskNum, BinNumber.ToString());
                            //if (!Verification.Status)
                            //{
                            //    if (!(RK3FTasks.ExceptionMessage == Verification.Message))
                            //    {
                            //        RK3FTasks.ExceptionMessage = Verification.Message;
                            //        Uptasks.Add(RK3FTasks);
                            //    }
                            //    //料箱验证写好后,需要更改
                            //    RK3FTasks.TargetAddress = Verification.Data.ToString();
                            //}
                            //如果料箱检验成功就写入读码器的值
                            var result = _taskService.Hikvisiontaskscontinue(RK3FTasks.WMSTaskNum, RK3FTasks.TargetAddress);
                            if (result.Status == false)
                            {
                                if (RK3FTasks.ExceptionMessage != result.Message)
                                {
                                    RK3FTasks.ExceptionMessage = result.Message;
                                    Uptasks.Add(RK3FTasks);
                                }
                            }
                            RK3FTasks.TaskState = (int)TaskStatusEnum.CheckPalletCodeFinish;
                        }
                        Uptasks.Add(RK3FTasks);
                    }
                    #endregion
                    if (Uptasks.Count > 0)
                    {
                        _taskService.UpdateData(Uptasks);
                    }
                    WriteInfo(device.DeviceName, "infoLog");
                    WriteDebug(device.DeviceName, "debugLog");
                    #region æ‰˜ç›˜å·ç¡®è®¤ä¸­
                    //查找三楼入库任务状态为CheckPalletCodeing的任务托盘号确认中
                    var RK3FTask = _taskService.Repository.QueryFirst(x => x.TaskType == TaskTypeEnum.RK3F.ObjToInt() && x.TaskState == (int)TaskStatusEnum.CheckPalletCodeing);
                    if (RK3FTask != null)
                    {
                        if (device.GetValue<HoistEnum, short>(HoistEnum.RInScanningCompletionSignal, RK3FTask.TargetAddress) != 1)
                        {
                            RK3FTask.ExceptionMessage = "3楼扫码完成信号没有完成";
                            _taskService.UpdateData(RK3FTask);
                        }
                        else //完成就把任务状态改成托盘号确认完成
                        {
                            //检查3楼入库箱号是多少,然后传给wms
                            var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Inboxnumber, RK3FTask.TargetAddress);
                            if (!string.IsNullOrEmpty(BinNumber))
                            {
                                BinNumber = BinNumber.TrimEnd('\0').Substring(2);
                                //根据读到的箱号进行料箱检验,检验通过就触发读码器读取,如果不通过就抛出异常
                                var Verification = _taskService.MaterialBoxInspection(RK3FTask.WMSTaskNum, BinNumber);
                                if (!Verification.Status)
                                {
                                    if (RK3FTask.ExceptionMessage != Verification.Message)
                                    {
                                        RK3FTask.ExceptionMessage = Verification.Message;
                                        _taskService.UpdateData(RK3FTask);
                                    }
                                }
                                else
                                {
                                    if (!string.IsNullOrEmpty(Verification.Message)) RK3FTask.TargetAddress = Verification.Message;
                                    //如果料箱检验成功就写入读码器的值
                                    var result = _taskService.Hikvisiontaskscontinue(RK3FTask.WMSTaskNum, RK3FTask.TargetAddress);
                                    if (result.Status)
                                    {
                                        RK3FTask.ExceptionMessage = "";
                                        RK3FTask.TaskState = (int)TaskStatusEnum.CheckPalletCodeFinish;
                                        _taskService.UpdateData(RK3FTask);
                                    }
                                    else
                                    {
                                        if (RK3FTask.ExceptionMessage != result.Message)
                                        {
                                            RK3FTask.ExceptionMessage = result.Message;
                                            _taskService.UpdateData(RK3FTask);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    #endregion
                    #region 4F提升机出口托盘号上报WMS
                    var Address = "TSJC4F";
                    if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, Address) == 1)
                    {
                        var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Emptycontainernumber, Address);
                        if (!string.IsNullOrEmpty(BinNumber))
                        {
                            BinNumber = BinNumber.TrimEnd('\0').Substring(2);
                            _taskService.InboundElevatorExit(Address, BinNumber);
                        }
                    }
                    #endregion
                    //WriteInfo(device.DeviceName, "infoLog");
                    //WriteDebug(device.DeviceName, "debugLog");
                }
                catch (Exception ex)
                {
@@ -232,7 +253,7 @@
            }
            else
            {
                WriteError(nameof(TestJob), "参数错误,未传递设备参数或设备类型错误");
                WriteError(nameof(TSJJob), "参数错误,未传递设备参数或设备类型错误");
            }
´úÂë¹ÜÀí/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,103 +49,204 @@
        {
            foreach (var item in tasks)
            {
                if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                // å‡ºåº“任务处理 (从1楼出库到6楼)
                if (item.TaskType == (int)TaskTypeEnum.Q3CK || item.TaskType == (int)TaskTypeEnum.Q3RK)
                {
                    // è°ƒç”¨æŽ¥å£èŽ·å–å°è½¦ä¿¡æ¯
                    var result = _agvcartInfoService.CheckTheCar();
                    // åˆ¤æ–­æ˜¯å¦æœ‰ AA æˆ– FF
                    bool hasAAOrFF = false;
                    if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                    var result = _agvcartInfoService.CheckTheCar("MR-Q3-600LE-D(M)(YWGP)");
                    if (result != null && result.Status)
                    {
                        if (result != null && result.Status)
                        var dataList = result.Data as List<HIKROBOTQueryData>;
                        if (dataList != null && dataList.Any())
                        {
                            var dataList = result.Data as List<HIKROBOTQueryData>;
                            if (dataList != null && dataList.Any())
                            // å‡ºåº“任务:检查是否有在1楼(AA)的小车
                            // Q3CK æ˜¯AA→FF的跨楼层任务,只能使用专用小车
                            var code = item.TaskType == (int)TaskTypeEnum.Q3CK ? "AA" : "FF";
                            var specialCarInAA = dataList.FirstOrDefault(d => d.mapCode == code);
                            if (specialCarInAA != null)
                            {
                                // æ£€æŸ¥è¿”回的 mapCode åˆ—表中是否有 AA
                                hasAAOrFF = dataList.Any(d => d.mapCode == "AA");
                                if (hasAAOrFF)
                                // æœ‰åœ¨1楼的小车,直接执行任务
                                var content = _taskService.SendHIKROBOTTask(item);
                                if (content.Status)
                                {
                                    var content = _taskService.SendHIKROBOTTask(item);
                                    item.TaskState = (int)TaskStatusEnum.Execut;
                                }
                                else//这里我就要呼叫空车来
                            }
                            else
                            {
                                // æ²¡æœ‰ä¸“用小车在1楼,需要呼叫专用小车来到1楼
                                var anySpecialCar = dataList.FirstOrDefault();
                                if (anySpecialCar != null)
                                {
                                    //添加空车运输任务
                                    AddAGVCartInfo(item);
                                    item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                    // èµ·ç‚¹ï¼šå°è½¦å½“前所在楼层的点位,目标:1楼点位
                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, code);
                                    if (callCarResult.Status)
                                    {
                                        // åŽŸä»»åŠ¡çŠ¶æ€æ”¹ä¸ºç­‰å¾…ç©ºè½¦
                                        item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                    }
                                }
                                else
                                {
                                    item.ExceptionMessage = "未找到可用AGV小车";
                                }
                            }
                        }
                    }
                    else
                    {
                        if (result != null && result.Status)
                        item.ExceptionMessage = "获取AGV小车信息失败";
                    }
                }
                else if (item.TaskType == (int)TaskTypeEnum.F01)
                {
                    // F01任务处理:根据目标地址判断需要哪个楼层的小车
                    var result = _agvcartInfoService.CheckTheCar("MR-Q3-600LE-D(M)");
                    if (result != null && result.Status)
                    {
                        var dataList = result.Data as List<HIKROBOTQueryData>;
                        if (dataList != null && dataList.Any())
                        {
                            if (hasAAOrFF)
                            // ä»Žä»»åŠ¡çš„èµ·å§‹åœ°å€ä¸­æå–éœ€è¦çš„æ¥¼å±‚ä»£ç 
                            string requiredMapCode = GetMapCodeFromAddress(item.SourceAddress);
                            if (string.IsNullOrEmpty(requiredMapCode))
                            {
                                var content = _taskService.SendHIKROBOTTask(item);
                                item.TaskState = (int)TaskStatusEnum.Execut;
                                item.ExceptionMessage = $"无法从目标地址 {item.SourceAddress} ä¸­è¯†åˆ«æ¥¼å±‚信息";
                                _taskService.UpdateData(item);
                                continue;
                            }
                            else//这里我就要呼叫空车来
                            // æ£€æŸ¥æ˜¯å¦æœ‰åœ¨ç›®æ ‡æ¥¼å±‚的小车
                            var hasRequiredCar = dataList.FirstOrDefault(d => d.mapCode == requiredMapCode);
                            if (hasRequiredCar != null)
                            {
                                //添加空车运输任务
                                AddAGVCartInfo(item);
                                item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                // æœ‰åœ¨ç›®æ ‡æ¥¼å±‚的小车,直接执行任务
                                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);
            }
            _taskService.UpdateData(tasks);
        }
        #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 = "HK_" + task.WMSTaskNum, // ç”Ÿæˆå”¯ä¸€çš„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 = "",
                    TaskState = (int)TaskStatusEnum.CallingHKtransportation,
                    // å¤åˆ¶å…¶ä»–必要字段
                    CreateDate = DateTime.Now,
                    Creater = "System"
                };
                var result = _taskService.SendHIKROBOTTask(newTask);
                if (result.Status)
                {
                    _taskService.AddData(newTask);  // æ·»åŠ æ–°ä»»åŠ¡
                    content.OK("空车呼叫任务创建成功", newTask);
                }
                else
                {
                    content.Error("空车呼叫任务下发失败");
                }
                return content;
            }
            catch (Exception ex)
            {
                content.Error($"创建失败:{ex.Message}");
                content.Error($"创建空车呼叫任务失败:{ex.Message}");
            }
            return content;
        }
        #endregion
        #region å¤„理agv待空车搬运任务
        public void SendHKWaitTask()
        public void SendHKWaitTask(List<Dt_Task> Tasks)
        {
            try
            {
                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Move);
                if (reslut.Count<0)
                List<Dt_Task> Uptasks = new List<Dt_Task>();
                foreach (var item in Tasks)
                {
                    foreach (var item in reslut)
                    var content = _taskService.SendHIKROBOTTask(item);
                    if (content.Status)
                    {
                        var content = _taskService.SendHIKROBOTTask(item);
                    }
                    reslut.ForEach(x =>
                    {
                        x.TaskState =(int)TaskStatusEnum.Execut;
                    });
                        item.TaskState = (int)TaskStatusEnum.Execut;
                        Uptasks.Add(item);
                    }
                }
                _taskService.UpdateData(reslut);
                _taskService.UpdateData(Uptasks);
            }
            catch (Exception ex)
            {
@@ -151,5 +254,29 @@
            }
        }
        #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
@@ -32,10 +32,8 @@
            try
            {
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置");
                int i = 0;
                foreach (var task in tasks)
                {
                    i++;
                    fOURBOTnewMovePodTask = new()
                    {
                        priority = task.Grade,
@@ -65,10 +63,16 @@
                        task.RGVTaskId = fOURBO.taskID;
                        task.ExceptionMessage = "";
                        task.TaskState = (int)TaskStatusEnum.Execut;
                        task.Dispatchertime = DateTime.Now;
                    }
                    catch (Exception ex)
                    {
                        task.ExceptionMessage = ex.Message;
                        content.Error(ex.Message);
                    }
                    finally
                    {
                        _trackloginfoService.AddTrackLog(fOURBOTnewMovePodTask, content, "下发四向车新建入库任务", "", "");
                    }
                }
                var uptasks = tasks.Where(task => string.IsNullOrEmpty(task.ExceptionMessage)).ToList();
@@ -78,6 +82,7 @@
                {
                    foreach (var item in errortasks)
                    {
                        Thread.Sleep(500);
                        _taskService.ErrorTaskFeedback(item, true);
                    }
                }
@@ -86,10 +91,6 @@
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            finally
            {
                _trackloginfoService.AddTrackLog(fOURBOTnewMovePodTask, content, "下发四向车新建入库任务", "", "");
            }
        }
@@ -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;
                    }
                }
@@ -180,7 +183,9 @@
                };
                requestData = request;  // ä¿å­˜è¯·æ±‚数据用于日志
                //content.candidatePodIDs = tasks.Select(x => x.PalletCode).ToList();
                string response = HttpHelper.Post(apiInfo.ApiAddress, request.Serialize());
                string response = HttpHelper.Post("http://127.0.0.1:4523/m2/6165241-5857331-default/440906899?apifoxApiId=440906899", request.Serialize());
                //string response = HttpHelper.Post(apiInfo.ApiAddress, request.Serialize());
                FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
                content.OK(data: fOURBOTReturn);
                if (fOURBOTReturn.returnCode == 0)
@@ -206,7 +211,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 +282,7 @@
                            {
                                autoToRest = 1
                            };
                            fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + item.TaskId;
                            item.CurrentAddress = item.NextAddress;
                            item.NextAddress = rGVLocationInfo.LocationCode;
                            item.TargetAddress = rGVLocationInfo.LocationCode;
@@ -288,17 +297,17 @@
                                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 é‡Šæ”¾å…¥åº“站台
                                //var stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress);
                                //if (stationManger != null)
                                //{
                                //    stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
                                //    stationsToUpdate.Add(stationManger);
                                //}
                                var stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress);
                                if (stationManger != null)
                                {
                                    stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
                                    stationsToUpdate.Add(stationManger);
                                }
                                content.OK();
                                #endregion
                            }
@@ -316,6 +325,10 @@
                        item.ExceptionMessage = $"处理任务异常:{ex.Message}";
                        //WriteError($"{nameof(TaskJob)}-{item.TaskId}", ex.Message, ex);
                        content.Error($"四向车接口返回错误:{ex.Message}");
                    }
                    finally
                    {
                    }
                }
                #region MyRegion
@@ -401,8 +414,8 @@
                            _taskService.UpdateData(tasksToUpdate);
                        if (locationsToUpdate.Any())
                            _rGVLocationInfoService.UpdateData(locationsToUpdate);
                        //if (stationsToUpdate.Any())
                        //    _stationMangerService.UpdateData(stationsToUpdate);
                        if (stationsToUpdate.Any())
                            _stationMangerService.UpdateData(stationsToUpdate);
                        _unitOfWorkManage.CommitTran();
                    }
@@ -467,6 +480,7 @@
                        }
                        item.RGVTaskId = fOURBO.taskID;
                        item.TaskState = (int)TaskStatusEnum.Puting;
                        item.Dispatchertime = DateTime.Now;
                    }
                }
                _taskService.UpdateData(tasks);
@@ -571,6 +585,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);
@@ -595,10 +610,11 @@
            {
                foreach (var item in tasks)
                {
                    var takes = _taskService.Repository.QueryFirst(x => x.Roadway == item.Roadway && x.TaskType == (int)TaskTypeEnum.CPMoveInventory);
                    var takes = _taskService.Repository.QueryFirst(x => x.Roadway == item.Roadway && x.TaskType == (int)TaskTypeEnum.CPMoveInventory && (x.TaskState == (int)TaskStatusEnum.RGV_NewMoveTask || x.TaskState == (int)TaskStatusEnum.RGV_MoveTaskSend));
                    if (takes == null)
                    {
                        item.TaskState = (int)TaskStatusEnum.RGV_WaitSend;
                        item.Dispatchertime = DateTime.Now;
                    }
                }
                _taskService.UpdateData(tasks);
@@ -643,7 +659,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 +673,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/Task/TaskExtend.cs
@@ -44,7 +44,7 @@
                    //#endregion
                    #region ä¸‹å‘海康1到6楼的AGV任务/下发海康6到1楼的AGV任务
                    Tasks = newTasks.Where(x => (x.TaskType == (int)TaskTypeEnum.Q3CK) || x.TaskType == (int)TaskTypeEnum.Q3RK).OrderByDescending(x => x.Grade).ToList();
                    Tasks = newTasks.Where(x => (x.TaskType == (int)TaskTypeEnum.Q3CK) || x.TaskType == (int)TaskTypeEnum.Q3RK||x.TaskType==(int)TaskTypeEnum.F01).OrderByDescending(x => x.Grade).ToList();
                    if (Tasks.Count > 0) SendAGVTask(Tasks);
@@ -113,8 +113,8 @@
                    #region å¤„理agv待空车搬运任务
                    Tasks = ExecutTasks.Where(x => x.TaskState == (int)TaskStatusEnum.WaitingHkAGVMovePosition).OrderByDescending(x => x.Grade).ToList();
                    if (Tasks.Count > 0) SendHKWaitTask();
                    Tasks = ExecutTasks.Where(x => x.TaskState == (int)TaskStatusEnum.HkTransportCompleted).OrderByDescending(x => x.Grade).ToList();
                    if (Tasks.Count > 0) SendHKWaitTask(Tasks);
                    #endregion
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskJob.cs
@@ -2,6 +2,7 @@
using HslCommunication;
using HslCommunication.Core;
using Microsoft.VisualBasic.FileIO;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz;
using SixLabors.ImageSharp.PixelFormats;
using SqlSugar;
@@ -15,12 +16,14 @@
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_IBasicInfoService;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
namespace WIDESEAWCS_Tasks
@@ -54,6 +57,29 @@
                SendNewTask();
                SendWaitToTask();
                #region å¤„理写入设备信号异常任务
                var tasks = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.Finish.ObjToInt() && !string.IsNullOrEmpty(x.Remark));
                if (tasks.Count > 0)
                {
                    List<Dt_Task> list = new List<Dt_Task>();
                    foreach (var item in tasks)
                    {
                        var infos = item.Remark.Split("_");
                        var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == infos[0]) as OtherDevice;
                        if (device != null && device.IsConnected)
                        {
                            DeviceProDTO? devicePro = device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == infos[1] && x.DeviceChildCode == infos[3]);
                            if (devicePro != null)
                            {
                                var W = device.Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, infos[2]);
                                if (W) list.Add(item);
                            }
                        }
                    }
                    _taskService.Repository.DeleteAndMoveIntoHty(list, OperateTypeEnum.自动删除);
                }
                #endregion
            }
            catch (Exception ex)
            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestExtend.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.LocationEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Common;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_Tasks
{
    public partial class TestJob
    {
        /// <summary>
        /// å››å‘车质检任务
        /// </summary>
        /// <param name="device"></param>
        public void SXCTasks(OtherDevice device)
        {
            #region å››å‘车任务
            List<Dt_Task> Uptasks = new List<Dt_Task>();
            var taskList = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.CPInbound.ObjToInt() && x.TaskState == TaskStatusEnum.CheckShapeing.ObjToInt());
            //任务的目标地址对于站台号;
            foreach (var task in taskList)
            {
                if (device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspection, task.SourceAddress))
                {
                    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, false, task.SourceAddress);
                    //再读取质检结果
                    var qualityResult = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspectionInProgress, task.SourceAddress);
                    //左超宽警告
                    var R_LeftOverWidthWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_LeftOverWidthWarning, task.SourceAddress);
                    //右超宽警告
                    var R_RightWideWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_RightWideWarning, task.SourceAddress);
                    //超高警告
                    var R_ExtremeWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_ExtremeWarning, task.SourceAddress);
                    if (qualityResult)
                    {
                        //如果质检通过了,就把任务状态改为质检完成
                        task.TaskState = TaskStatusEnum.CheckShapeingOk.ObjToInt();
                        task.ExceptionMessage = "";
                        Uptasks.Add(task);
                    }
                    else
                    {
                        task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
                        task.ExceptionMessage = "外检失败";
                        if (R_LeftOverWidthWarning) task.ExceptionMessage += ",左超宽";
                        if (R_RightWideWarning) task.ExceptionMessage += ",右超宽";
                        if (R_ExtremeWarning) task.ExceptionMessage += ",超高";
                        Uptasks.Add(task);
                        //写入复位信号
                        //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
                //{
                //    //写入停止质检信号
                //    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);
                }
            }
            if (Uptasks.Count > 0)
            {
                _taskService.UpdateData(Uptasks);
            }
            #endregion
        }
        /// <summary>
        /// æµ·åº·AGV1-6楼任务
        /// </summary>
        /// <param name="device"></param>
        public void KHTasks(OtherDevice device)
        {
            List<Dt_Task> Uptasks = new List<Dt_Task>();
            var AGVtaskList = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && (x.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || x.TaskType == TaskTypeEnum.Q3CK.ObjToInt()));//1-6和6-1楼任务
            foreach (var item in AGVtaskList)
            {
                var address = item.TaskType == TaskTypeEnum.Q3RK.ObjToInt() ? item.TargetAddress : item.SourceAddress;
                var stationManger = _stationMangerService.Repository.QueryFirst(x => x.StationCode == address);
                if (stationManger == null)
                {
                    item.ExceptionMessage = $"未找到【{address}】站台信息";
                    Uptasks.Add(item);
                    continue;
                }
                var StockAvailableSymbol = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_StockAvailableSymbol, address);
                if (item.TaskType == TaskTypeEnum.Q3RK.ObjToInt())
                {
                    if (StockAvailableSymbol)
                    {
                        item.ExceptionMessage = $"{address}站台光电检测有货!";
                        Uptasks.Add(item);
                        continue;
                    }
                    if (stationManger.IsOccupied == (int)LocationStatusEnum.Lock)
                    {
                        item.ExceptionMessage = $"站台有货!";
                        Uptasks.Add(item);
                        continue;
                    }
                }
                else
                {
                    if (!StockAvailableSymbol)
                    {
                        item.ExceptionMessage = $"{address}站台光电检测无货!";
                        Uptasks.Add(item);
                        continue;
                    }
                    if (stationManger.IsOccupied == (int)LocationStatusEnum.Free)
                    {
                        item.ExceptionMessage = $"站台无货!";
                        Uptasks.Add(item);
                        continue;
                    }
                }
                //into进入一楼位置的时候,写入进入信号
                device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, address);
                if (!device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.Blocking, address))
                {
                    item.ExceptionMessage = $"{address}站台光栅不为true(1)!";
                    Uptasks.Add(item);
                    continue;
                }
                var result = _taskService.Hikvisiontaskscontinue(item.WMSTaskNum);
                if (result.Status == false)
                {
                    if (item.ExceptionMessage != result.Message)
                    {
                        item.ExceptionMessage = result.Message;
                        Uptasks.Add(item);
                    }
                    continue;
                }
                item.TaskState = (int)TaskStatusEnum.AGV_ToExecute;
                item.ExceptionMessage = "";
                Uptasks.Add(item);
            }
            if (Uptasks.Count > 0)
            {
                _taskService.UpdateData(Uptasks);
            }
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
@@ -12,6 +12,7 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.LocationEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Helper;
@@ -27,7 +28,7 @@
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class TestJob : JobBase, IJob
    public partial class TestJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        private readonly IStationMangerService _stationMangerService;
@@ -50,84 +51,14 @@
                // _taskService.Repository ä»“储层,进行数据库访问-
                try
                {
                    List<Dt_Task> Uptasks = new List<Dt_Task>();
                    var taskList = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.CPInbound.ObjToInt() && x.TaskState == TaskStatusEnum.CheckShapeing.ObjToInt());
                    var AGVtaskList = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt()&& (x.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || x.TaskType == TaskTypeEnum.Q3CK.ObjToInt()));//1-6和6-1楼任务
                    //任务的目标地址对于站台号;
                    foreach (var task in taskList)
                    {
                        if (device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspection, task.SourceAddress))
                        {
                            device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, false, task.SourceAddress);
                            //再读取质检结果
                            var qualityResult = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspectionInProgress, task.SourceAddress);
                            //左超宽警告
                            var R_LeftOverWidthWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_LeftOverWidthWarning, task.SourceAddress);
                            //右超宽警告
                            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)
                            {
                                //如果质检通过了,就把任务状态改为质检完成
                                task.TaskState = TaskStatusEnum.CheckShapeingOk.ObjToInt();
                                task.ExceptionMessage = "";
                                Uptasks.Add(task);
                            }
                            else
                            {
                                task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
                                task.ExceptionMessage = "外检失败";
                                if (R_LeftOverWidthWarning) task.ExceptionMessage += ",左超宽";
                                if (R_RightWideWarning) task.ExceptionMessage += ",右超宽";
                                if (R_ExtremeWarning) task.ExceptionMessage += ",超高";
                                Uptasks.Add(task);
                                //写入复位信号
                                //device.SetValue(QualityInspectionCommandEnum.FaultReset, true, task.SourceAddress);
                            }
                        }
                        //else
                        //{
                        //    //写入停止质检信号
                        //    device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                        //    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                        //}
                    }
                    foreach (var item in AGVtaskList)
                    {
                    SXCTasks(device);
                        //into进入一楼位置的时候,写入进入信号
                        device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, item.TargetAddress);
                        if (!device.GetValue<QualityInspectionCommandEnum,bool>(QualityInspectionCommandEnum.Blocking)==true)
                        {
                            item.ExceptionMessage = $"{item.TargetAddress}站台光栅不为true(1)!";
                        }
                        var result = _taskService.Hikvisiontaskscontinue(item.WMSTaskNum);
                        if (result.Status == false)
                        {
                            if (item.ExceptionMessage != result.Message)
                            {
                                item.ExceptionMessage = result.Message;
                                Uptasks.Add(item);
                            }
                            continue;
                        }
                        item.TaskState = (int)TaskStatusEnum.AGV_ToExecute;
                        item.ExceptionMessage = "";
                        Uptasks.Add(item);
                    KHTasks(device);
                    }
                    //WriteInfo(device.DeviceName, "infoLog");
                    _taskService.UpdateData(Uptasks);
                    WriteInfo(device.DeviceName, "infoLog");
                    WriteDebug(device.DeviceName, "debugLog");
                    //WriteDebug(device.DeviceName, "debugLog");
                }
                catch (Exception ex)
                {
@@ -138,8 +69,6 @@
            {
                WriteError(nameof(TestJob), "参数错误,未传递设备参数或设备类型错误");
            }
            return Task.CompletedTask;
        }
    }