yanjinhui
2026-03-31 0128fce75a5e7cc9afc4bd89ce1966eb2231b69f
编写海康跨楼层接口
已添加6个文件
已修改11个文件
1089 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IAGVCartInfoService.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/BasicInfo/AGVCartInfoController.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile1.pubxml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/ScheduledTaskJob.cs 438 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskExtend.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskJob.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.AGV.HIKROBOT;
using WIDESEAWCS_IBasicInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_BasicInfoService
{
    public class AGVCartInfoService : ServiceBase<Dt_AGVCartInfo, IRepository<Dt_AGVCartInfo>>, IAGVCartInfoService
    {
        IApiInfoService _repository;
        ITrackloginfoService _trackloginfoService;
        public AGVCartInfoService(IRepository<Dt_AGVCartInfo> BaseDal, IApiInfoService repository, ITrackloginfoService ITrackloginfo) : base(BaseDal)
        {
            _repository = repository;
            _trackloginfoService = ITrackloginfo;
        }
        public IRepository<Dt_AGVCartInfo> Repository => BaseDal;
        /// <summary>
        /// æŸ¥æµ·åº·å°è½¦åœ¨é‚£ä¸ªæ¥¼å±‚
        /// </summary>
        /// <param name="agvcode"></param>
        /// <returns></returns>
        public WebResponseContent CheckTheCar()
        {
            WebResponseContent content = new WebResponseContent();
            List<HIKROBOTQueryData> dataList = new List<HIKROBOTQueryData>();
            HIKROBOTReturn hIKROBOTReturn = null;
            var apiInfo = _repository.Repository.QueryFirst(it => it.ApiCode == nameof(HIKROBOTQuery));
            if (apiInfo == null)
            {
                throw new Exception("未找到海康小车信息接口配置信息!请检查接口配置!");
            }
            try
            {
                var agvInfo = Repository.QueryData();
                if (agvInfo == null || !agvInfo.Any())
                {
                    content.Error("未查询到AGV小车信息");
                    return content;
                }
                List<string> failedAgvCodes = new List<string>();
                List<string> successMessages = new List<string>();
                foreach (var item in agvInfo)
                {
                     var headers = new Dictionary<string, string>
                    {
                        { "X-lr-request-id", DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + item.AGVCode }
                    };
                    HIKROBOTQuery hIKROBOTQuery = new HIKROBOTQuery()
                    {
                        singleRobotCode = item.AGVCode
                    };
                    string requestData = hIKROBOTQuery.Serialize();
                    try
                    {
                        string response = HttpHelper.Post(apiInfo.ApiAddress, requestData, headers: headers);
                        hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>();
                        // åˆ¤æ–­æŽ¥å£è¿”回是否成功
                        if (hIKROBOTReturn != null && hIKROBOTReturn.code == "SUCCESS" && hIKROBOTReturn.message == "成功")
                        {
                            // å°† data ååºåˆ—化为具体的 HIKROBOTQueryData ç±»åž‹
                            var queryData = Newtonsoft.Json.JsonConvert.DeserializeObject<HIKROBOTQueryData>(
                                Newtonsoft.Json.JsonConvert.SerializeObject(hIKROBOTReturn.data)
                            );
                            dataList.Add(new HIKROBOTQueryData
                            {
                                singleRobotCode = item.AGVCode,
                                mapCode = queryData?.mapCode ?? string.Empty
                            });
                            successMessages.Add($"AGV小车-{item.AGVCode}所在楼层{queryData?.mapCode}查询成功");
                        }
                        else
                        {
                            // è®°å½•失败的小车
                            failedAgvCodes.Add(item.AGVCode);
                            string errorMsg = hIKROBOTReturn?.message ?? "获取小车信息失败";
                        }
                    }
                    catch (Exception ex)
                    {
                        // æ•获单个小车查询的异常
                        failedAgvCodes.Add(item.AGVCode);
                        string errorMsg = $"查询AGV小车{item.AGVCode}时发生异常:{ex.Message}";
                        _trackloginfoService.AddTrackLog(
                            requestData,
                            new WebResponseContent { Status = false, Message = errorMsg },
                            $"查看海康AGV小车信息-异常-{item.AGVCode}",
                            "",
                            errorMsg
                        );
                    }
                }
                // æ ¹æ®æŸ¥è¯¢ç»“果设置返回状态
                if (dataList.Any())
                {
                    if (failedAgvCodes.Any())
                    {
                        // éƒ¨åˆ†æˆåŠŸï¼Œéƒ¨åˆ†å¤±è´¥
                        string message = $"部分小车查询成功,失败的小车:{string.Join(",", failedAgvCodes)}";
                        content.OK(message, dataList);
                        // å¦‚果需要标记为部分成功,可以在这里设置额外的标志
                        //content.Status = true; // ä¿æŒ true,但通过 Message å‘ŠçŸ¥éƒ¨åˆ†å¤±è´¥
                    }
                    else
                    {
                        // å…¨éƒ¨æˆåŠŸ
                        content.OK("所有AGV小车信息查询成功", dataList);
                    }
                }
                else
                {
                    // å…¨éƒ¨å¤±è´¥
                    string errorMsg = failedAgvCodes.Any()
                        ? $"所有AGV小车查询失败,失败列表:{string.Join(",", failedAgvCodes)}"
                        : "未查询到任何AGV小车信息";
                    content.Error(errorMsg);
                }
                return content;
            }
            catch (Exception ex)
            {
                content.Error($"批量查询AGV小车信息失败:{ex.Message}");
                return content;
            }
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -121,6 +121,33 @@
        ///// </summary>
        //[Description("AGV取/放货中")]
        //AGV_ToPuting,
        /// <summary>
        /// å‘¼å«æµ·åº·æ¬è¿ä¸­  19
        /// </summary>
        [Description("等待海康AGV搬运到位")]
        WaitingHkAGVMovePosition,
        /// <summary>
        /// å‘¼å«æµ·åº·æ¬è¿ä¸­
        /// </summary>
        [Description("呼叫海康AGV搬运")]
        CallingHKtransportation,
        /// <summary>
        /// æµ·åº·AGV搬运中
        /// </summary>
        [Description("海康AGV搬运中")]
        HktransportIng,
        /// <summary>
        /// æµ·åº·AGV搬运完成 22
        /// </summary>
        [Description("海康AGV搬运完成")]
        HkTransportCompleted,
        #endregion
        #region å››å‘车其他任务状态
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO
{
    /// <summary>
    /// æµ·åº·å°è½¦ä¿¡æ¯
    /// </summary>
    public class HIKROBOTQuery
    {
        /// <summary>
        /// å°è½¦ç¼–号
        /// </summary>
        public string singleRobotCode { get; set; }
    }
    public class HIKROBOTQueryData
    {
        /// <summary>
        /// é€šè¿‡è¿”回的"mapCode"来区分楼层 AA是1楼,BB是2楼,CC是3楼,DD是4楼,EE是5楼,FF是6楼
        /// </summary>
        public string mapCode { get; set; }
        /// <summary>
        /// å°è½¦ç¼–号
        /// </summary>
        public string singleRobotCode { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IAGVCartInfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_IBasicInfoService
{
    public interface IAGVCartInfoService : IService<Dt_AGVCartInfo>
    {
        public IRepository<Dt_AGVCartInfo> Repository { get; }
        /// <summary>
        /// æ£€æŸ¥æµ·åº·å°è½¦
        /// </summary>
        /// <returns></returns>
        WebResponseContent CheckTheCar();
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable(nameof(Dt_AGVCartInfo), "海康AGV小车信息")]
    public class Dt_AGVCartInfo : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// å°è½¦ç¼–号
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "站台编号")]
        public string AGVCode { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/BasicInfo/AGVCartInfoController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_IBasicInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_Server.Controllers.BasicInfo
{
    /// <summary>
    ///海康小车信息
    /// </summary>
    [Route("api/AGVCartInfo")]
    [ApiController]
    public class AGVCartInfoController : ApiBaseController<IAGVCartInfoService, Dt_AGVCartInfo>
    {
        public AGVCartInfoController(IAGVCartInfoService service) : base(service)
        {
        }
        [HttpPost,Route("CheckTheCar"), AllowAnonymous]
        public WebResponseContent CheckTheCar()
        {
            return Service.CheckTheCar();
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile1.pubxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <DeleteExistingFiles>false</DeleteExistingFiles>
    <ExcludeApp_Data>false</ExcludeApp_Data>
    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <PublishProvider>FileSystem</PublishProvider>
    <PublishUrl>C:\Users\Administrator\Desktop\义乌惠普\后端发布文件</PublishUrl>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <_TargetId>Folder</_TargetId>
  </PropertyGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs
@@ -308,10 +308,26 @@
                        }
                        break;
                    case TaskTypeEnum.Q3RK:
                        break;
                    case TaskTypeEnum.Q3CK:
                        break;
                    case TaskTypeEnum.Move:
                        {
                            TargetRouteDto target = new TargetRouteDto()
                            {
                                code = task.CurrentAddress,
                                operation = "DELIVERY",//取货
                                seq = 0,
                                type = "SITE",
                            };
                            TargetRouteDto targetRoute = new TargetRouteDto()
                            {
                                code = task.NextAddress,
                                operation = "DELIVERY",//送货
                                seq = 1,
                                type = "SITE",
                            };
                            hIKROBOTTaskSubmit.targetRoute.Add(target);
                            hIKROBOTTaskSubmit.targetRoute.Add(targetRoute);
                        }
                        break;
                    case TaskTypeEnum.CPMoveInventory:
                        break;
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs
@@ -13,6 +13,7 @@
using WIDESEAWCS_DTO;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_TaskInfoService
{
@@ -201,18 +202,91 @@
        }
        #endregion
        #region 5 è·¨æ¥¼å±‚运输任务创建
        #region 5 è·¨æ¥¼å±‚运输任务创建 ï¼ˆéƒ½æ˜¯ç‚¹åˆ°ç‚¹ï¼‰
        public WebResponseContent CarryTask(TaskDTO taskDTO, int taskType)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_HKLocationInfo? hKLocationInfo = null;
                Dt_StationInfo? 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,
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = taskType,
                        SourceAddress = taskDTO.fromLocationCode,
                        CurrentAddress = taskDTO.fromLocationCode,
                        NextAddress = taskDTO.toLocationCode,
                        TargetAddress = taskDTO.toLocationCode,
                        Creater = "WMS",
                    };
                return WebResponseContent.Instance.OK();
                }
                //出库
                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()
                    {
                        TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        WMSTaskNum = taskDTO.taskCode,
                        //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        Grade = taskDTO.taskPriority,
                        PalletCode = taskDTO.containerCode,
                        Roadway = hKLocationInfo.RoadwayNo,
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = taskType,
                        SourceAddress = taskDTO.fromLocationCode,
                        CurrentAddress = taskDTO.fromLocationCode,
                        NextAddress = taskDTO.toLocationCode,
                        TargetAddress = taskDTO.toLocationCode,
                        Creater = "WMS",
                    };
                }
                try
                {
                    Db.Ado.BeginTran();
                    BaseDal.AddData(dt_Task);
                    _hKLocationInfoService.Repository.UpdateData(hKLocationInfo);
                    _stationInfo.Repository.UpdateData(stationInfo);
                    Db.Ado.CommitTran();
            }
            catch (Exception ex)
            {
                    Db.Ado.RollbackTran();
                throw new Exception(ex.Message);
            }
                return content.OK(data: new
                {
                    taskCode = taskDTO.taskCode,
                    Message = "成功!"
                });
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        #endregion
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -78,13 +78,20 @@
                    switch (hIKROBOT.extra.values.method)
                    {
                        case "start":
                            if (task.TaskState==(int)TaskStatusEnum.CallingHKtransportation&& task.TaskType == (int)TaskTypeEnum.Move)
                            {
                                task.TaskState = (int)TaskStatusEnum.HktransportIng;
                            }
                            else
                            {
                            task.TaskState = (int)TaskStatusEnum.Takeing;
                            TaskFeedback(task, 1);
                            }
                            break;
                        case "outbin"://离开起点
                            {
                                ///判断任务是否跟设备有关
                                TaskFromCompleted(task, deviceTypeEnum);
                                TaskFromCompleted(task, deviceTypeEnum); //任务状体改为3取货完成,更新起点货位状态,并反馈WMS起点完成
                            }
                            break;
                        case "finish"://离开提升机
@@ -145,6 +152,19 @@
                                            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())
                                    {
                                        //如果是六楼到一楼就写一个信号给1楼plc告诉他我来入库了
                                    }
                                    else
                                    {
                                        //这个就写一个复位状态,告诉它我出库了
                                    }
                                }
                            }
                            break;
                        case "into"://申请进入提升机
@@ -161,9 +181,18 @@
                            break;
                        case "end"://任务完成通知
                            {
                                if (task.TaskType==(int)TaskTypeEnum.Move &&task.TaskState==(int)TaskStatusEnum.HkTransportCompleted)
                                {
                                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
                                    TaskFeedback(task, 2);
                                    BaseDal.DeleteAndMoveIntoHty(task,OperateTypeEnum.自动完成);
                                }
                                else
                                {
                                ///判断任务是否跟设备有关
                                TaskCompleted(task, deviceTypeEnum);
                            }
                            }
                            break;
                        default:
                            throw new Exception("未定义的方法名!");
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -318,9 +318,14 @@
                        robotTaskCode = dt_Task.WMSTaskNum,
                        cancelType = "CANCEL"//原软取消,DROP人工介入(原硬取消)
                    };
                    var headers = new Dictionary<string, string>
                    {
                        { "X-lr-request-id", DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + wMSCancelTask.TaskCode }
                    };
                    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());
                    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 == "成功")
@@ -1114,7 +1119,9 @@
                        {
                            LoctionCode = item.LocationCode,
                            LocationStatus = item.LocationStatus,
                            EnableStatus = item.EnableStatus
                            EnableStatus = item.EnableStatus,
                            PalletCode = item.PalletCode
                        });
                    }
                    content.OK(data: list);
@@ -1132,7 +1139,8 @@
                        {
                            LoctionCode = item.LocationCode,
                            LocationStatus = item.LocationStatus,
                            EnableStatus = item.EnableStatus
                            EnableStatus = item.EnableStatus,
                              PalletCode = item.PalletCode
                        });
                    }
                    content.OK(data: list);
@@ -1153,7 +1161,22 @@
                }
                else if (getLocationInfo.WarehouseId == 4)
                {
                    List<Dt_HKLocationInfo> rGVLocationInfos = new List<Dt_HKLocationInfo>();
                    if (!string.IsNullOrEmpty(getLocationInfo.AreaCode))
                        rGVLocationInfos = _hKLocationInfoService.Repository.QueryData(x => x.WarehouseId == getLocationInfo.AreaCode.ObjToInt());
                    else
                        rGVLocationInfos = _hKLocationInfoService.Repository.QueryData();
                    foreach (var item in rGVLocationInfos)
                    {
                        list.Add(new
                        {
                            LoctionCode = item.LocationCode,
                            LocationStatus = item.LocationStatus,
                            EnableStatus = item.EnableStatus,
                              PalletCode = item.PalletCode
                        });
                    }
                    content.OK(data: list);
                }
                else if (getLocationInfo.WarehouseId == 5)
                {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs
@@ -162,6 +162,7 @@
                            task.ExceptionMessage = "";
                            Uptasks.Add(task);
                        }
                    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs
@@ -4,6 +4,8 @@
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO;
@@ -36,6 +38,117 @@
            {
                var content = _taskService.SendHIKROBOTTask(item);
            }
        }
        #endregion
        #region ä¸‹å‘海康1-6楼的AGV任务
        public void SendAGVTask(List<Dt_Task> tasks)
        {
            foreach (var item in tasks)
            {
                if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                {
                    // è°ƒç”¨æŽ¥å£èŽ·å–å°è½¦ä¿¡æ¯
                    var result = _agvcartInfoService.CheckTheCar();
                    // åˆ¤æ–­æ˜¯å¦æœ‰ AA æˆ– FF
                    bool hasAAOrFF = false;
                    if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                    {
                        if (result != null && result.Status)
                        {
                            var dataList = result.Data as List<HIKROBOTQueryData>;
                            if (dataList != null && dataList.Any())
                            {
                                // æ£€æŸ¥è¿”回的 mapCode åˆ—表中是否有 AA
                                hasAAOrFF = dataList.Any(d => d.mapCode == "AA");
                                if (hasAAOrFF)
                                {
                                    var content = _taskService.SendHIKROBOTTask(item);
                                    item.TaskState = (int)TaskStatusEnum.Execut;
                                }
                                else//这里我就要呼叫空车来
                                {
                                    //添加空车运输任务
                                    AddAGVCartInfo(item);
                                    item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                }
                            }
                        }
                    }
                    else
                    {
                        if (result != null && result.Status)
                        {
                            if (hasAAOrFF)
                            {
                                var content = _taskService.SendHIKROBOTTask(item);
                                item.TaskState = (int)TaskStatusEnum.Execut;
                            }
                            else//这里我就要呼叫空车来
                            {
                                //添加空车运输任务
                                AddAGVCartInfo(item);
                                item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                            }
                        }
                    }
                }
            }
            _taskService.UpdateData(tasks);
        }
        #endregion
        #region å¤„理海康agv搬运任务
        public WebResponseContent AddAGVCartInfo(Dt_Task task)
        {
            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);
            }
            catch (Exception ex)
            {
                content.Error($"创建失败:{ex.Message}");
            }
            return content;
        }
        #endregion
        #region å¤„理agv待空车搬运任务
        public void SendHKWaitTask()
        {
            try
            {
                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Move);
                if (reslut.Count<0)
                {
                    foreach (var item in reslut)
                    {
                        var content = _taskService.SendHIKROBOTTask(item);
                    }
                    reslut.ForEach(x =>
                    {
                        x.TaskState =(int)TaskStatusEnum.Execut;
                    });
                }
                _taskService.UpdateData(reslut);
            }
            catch (Exception ex)
            {
                WriteError(nameof(TaskJob), ex.Message, ex);
            }
        }
        #endregion
    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/ScheduledTaskJob.cs
@@ -37,216 +37,55 @@
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                #region ä¸‰æ¥¼è‡ªåŠ¨ä»»åŠ¡
                List<string> StationCodes = new() { "0348840CC0315690", "0349350CC0315686" };
                var stations = _StationInfoService.Repository.QueryData(x => StationCodes.Contains(x.StationCode));
                #region å…¥æå‡æœºä»»åŠ¡
                var station = stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.InStock && x.IsOccupied == 0);
                if (station != null)
                {
                    var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                    Dt_Task dt_Task = new Dt_Task()
                    {
            //try
            //{
            //    #region ä¸‰æ¥¼è‡ªåŠ¨ä»»åŠ¡
            //    List<string> StationCodes = new() { "0348840CC0315690", "0349350CC0315686" };
            //    var stations = _StationInfoService.Repository.QueryData(x => StationCodes.Contains(x.StationCode));
            //    #region å…¥æå‡æœºä»»åŠ¡
            //    var station = stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.InStock && x.IsOccupied == 0);
            //    if (station != null)
            //    {
            //        var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
            //        Dt_Task dt_Task = new Dt_Task()
            //        {
                        TaskNum = tasknum,
                        WMSTaskNum = "GP" + tasknum,
                        Grade = 60,
                        PalletCode = station.PalletCode,
                        Roadway = "",
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = TaskTypeEnum.RK3F.ObjToInt(),
                        SourceAddress = station.StationCode,
                        CurrentAddress = station.StationCode,
                        NextAddress = "TSJR3F",
                        TargetAddress = "TSJR3F",
                        Creater = "WCS",
                    };
                    var content = _taskService.SendHIKROBOTTask(dt_Task);
                    if (content.Status)
                    {
                        dt_Task.TaskState = (int)TaskStatusEnum.Execut;
                        dt_Task.Dispatchertime = DateTime.Now;
                        station.StationStatus = (int)LocationStatusEnum.OutLock;
                        _taskService.AddData(dt_Task);
                        _StationInfoService.UpdateData(station);
                    }
                }
                #endregion
            //            TaskNum = tasknum,
            //            WMSTaskNum = "GP" + tasknum,
            //            Grade = 60,
            //            PalletCode = station.PalletCode,
            //            Roadway = "",
            //            TaskState = (int)TaskStatusEnum.New,
            //            TaskType = TaskTypeEnum.RK3F.ObjToInt(),
            //            SourceAddress = station.StationCode,
            //            CurrentAddress = station.StationCode,
            //            NextAddress = "TSJR3F",
            //            TargetAddress = "TSJR3F",
            //            Creater = "WCS",
            //        };
            //        var content = _taskService.SendHIKROBOTTask(dt_Task);
            //        if (content.Status)
            //        {
            //            dt_Task.TaskState = (int)TaskStatusEnum.Execut;
            //            dt_Task.Dispatchertime = DateTime.Now;
            //            station.StationStatus = (int)LocationStatusEnum.OutLock;
            //            _taskService.AddData(dt_Task);
            //            _StationInfoService.UpdateData(station);
            //        }
            //    }
            //    #endregion
                #region å‡ºæå‡æœºä»»åŠ¡
                var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                if (device != null && device.IsConnected)
                {
                    if (device.GetValue<HoistEnum, short>(HoistEnum.SOutboundmaterialbox, "TSJC3F") == 1)
                    {
                        Dt_Task dt_Task = _taskService.Repository.QueryFirst(x => x.SourceAddress == "TSJC3F" /*&& x.TaskState < TaskStatusEnum.TakeFinish.ObjToInt()*/);
                        if (dt_Task == null)
                        {
                            station = stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.Free && x.IsOccupied == 0);
                            if (station != null)
                            {
                                var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                                dt_Task = new Dt_Task()
                                {
                                    TaskNum = tasknum,
                                    WMSTaskNum = "GP" + tasknum,
                                    Grade = 60,
                                    PalletCode = "LXM" + tasknum,
                                    Roadway = "",
                                    TaskState = (int)TaskStatusEnum.New,
                                    TaskType = TaskTypeEnum.CK3F.ObjToInt(),
                                    SourceAddress = "TSJC3F",
                                    CurrentAddress = "TSJC3F",
                                    NextAddress = station.StationCode,
                                    TargetAddress = station.StationCode,
                                    Creater = "WCS",
                                };
                                var content = _taskService.SendHIKROBOTTask(dt_Task);
                                if (content.Status)
                                {
                                    dt_Task.TaskState = (int)TaskStatusEnum.Execut;
                                    dt_Task.Dispatchertime = DateTime.Now;
                                    station.StationStatus = (int)LocationStatusEnum.InLock;
                                    _taskService.AddData(dt_Task);
                                    _StationInfoService.UpdateData(station);
                                }
                            }
                        }
                    }
                }
                #endregion
                #endregion
                #region 4F
                List<string> stationCodes = new() { "0319882DD0313240", "0319882DD0313750"};
                var Stations = _StationInfoService.Repository.QueryData(x => stationCodes.Contains(x.StationCode));
                #region å…¥æå‡æœºä»»åŠ¡
                var Station = Stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.InStock && x.IsOccupied == 0);
                if (Station != null)
                {
                    var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                    Dt_Task dt_Task = new Dt_Task()
                    {
                        TaskNum = tasknum,
                        WMSTaskNum = "GP" + tasknum,
                        Grade = 60,
                        PalletCode = Station.PalletCode,
                        Roadway = "",
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = TaskTypeEnum.F04.ObjToInt(),
                        SourceAddress = Station.StationCode,
                        CurrentAddress = Station.StationCode,
                        NextAddress = "TSJR4F",
                        TargetAddress = "TSJR4F",
                        Creater = "WCS",
                    };
                    var content = _taskService.SendHIKROBOTTask(dt_Task);
                    if (content.Status)
                    {
                        dt_Task.TaskState = (int)TaskStatusEnum.Execut;
                        dt_Task.Dispatchertime = DateTime.Now;
                        Station.StationStatus = (int)LocationStatusEnum.OutLock;
                        _taskService.AddData(dt_Task);
                        _StationInfoService.UpdateData(Station);
                    }
                }
                #endregion
                #region å‡ºæå‡æœºä»»åŠ¡
                device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                if (device != null && device.IsConnected)
                {
                    var reslur = device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, "TSJC4F");
                    if (device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, "TSJC4F") == 1)
                    {
                        Dt_Task dt_Task = _taskService.Repository.QueryFirst(x => x.SourceAddress == "TSJC4F" /*&& x.TaskState < TaskStatusEnum.TakeFinish.ObjToInt()*/);
                        if (dt_Task == null)
                        {
                            Station = Stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.Free && x.IsOccupied == 0);
                            if (Station != null)
                            {
                                var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                                dt_Task = new Dt_Task()
                                {
                                    TaskNum = tasknum,
                                    WMSTaskNum = "GP" + tasknum,
                                    Grade = 60,
                                    PalletCode = "LXM" + tasknum,
                                    Roadway = "",
                                    TaskState = (int)TaskStatusEnum.New,
                                    TaskType = TaskTypeEnum.F03.ObjToInt(),
                                    SourceAddress = "TSJC4F",
                                    CurrentAddress = "TSJC4F",
                                    NextAddress = Station.StationCode,
                                    TargetAddress = Station.StationCode,
                                    Creater = "WCS",
                                };
                                var content = _taskService.SendHIKROBOTTask(dt_Task);
                                if (content.Status)
                                {
                                    dt_Task.TaskState = (int)TaskStatusEnum.Execut;
                                    dt_Task.Dispatchertime = DateTime.Now;
                                    Station.StationStatus = (int)LocationStatusEnum.InLock;
                                    _taskService.AddData(dt_Task);
                                    _StationInfoService.UpdateData(Station);
                                }
                            }
                        }
                    }
                }
                #endregion
                #endregion
                #region å››æ¥¼è‡ªåŠ¨ä»»åŠ¡
                //List<string> LocationCodes = new() { "RGD0303A04041", "RG0302A05041", "RG0304A05041", "RG0205A05031" };
                List<string> LocationCodes = new() { "RGD0302A05041", "RGD0304A05041", "R3CG0106A04031", "RGD0307A05012" };
                var hKLocationInfos = _HKLocationInfoService.Repository.QueryData(x => LocationCodes.Contains(x.LocationCode));
                #region å…¥æå‡æœºä»»åŠ¡
                var hKLocation = hKLocationInfos.FirstOrDefault(x => x.LocationStatus == (int)LocationStatusEnum.InStock);
                if (hKLocation != null)
                {
                    var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                    Dt_Task dt_Task = new Dt_Task()
                    {
                        TaskNum = tasknum,
                        WMSTaskNum = "GP" + tasknum,
                        Grade = 60,
                        PalletCode = hKLocation.PalletCode,
                        Roadway = "",
                        TaskState = (int)TaskStatusEnum.New,
                        TaskType = TaskTypeEnum.CHUKU1.ObjToInt(),
                        SourceAddress = hKLocation.LocationCode,
                        CurrentAddress = hKLocation.LocationCode,
                        NextAddress = "TSJR4F",
                        TargetAddress = "TSJR4F",
                        Creater = "WCS",
                    };
                    var content = _taskService.SendHIKROBOTTask(dt_Task);
                    if (content.Status)
                    {
                        dt_Task.TaskState = (int)TaskStatusEnum.Execut;
                        dt_Task.Dispatchertime = DateTime.Now;
                        hKLocation.LocationStatus = (int)LocationStatusEnum.OutLock;
                        _taskService.AddData(dt_Task);
                        _HKLocationInfoService.UpdateData(hKLocation);
                    }
                }
                #endregion
                #region å‡ºæå‡æœºä»»åŠ¡
            //    #region å‡ºæå‡æœºä»»åŠ¡
            //    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                //if (device != null && device.IsConnected)
                //{
                //    if (device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, "TSJC4F") == 1)
            //        if (device.GetValue<HoistEnum, short>(HoistEnum.SOutboundmaterialbox, "TSJC3F") == 1)
                //    {
                //        Dt_Task dt_Task = _taskService.Repository.QueryFirst(x => x.SourceAddress == "TSJC4F");
            //            Dt_Task dt_Task = _taskService.Repository.QueryFirst(x => x.SourceAddress == "TSJC3F" /*&& x.TaskState < TaskStatusEnum.TakeFinish.ObjToInt()*/);
                //        if (dt_Task == null)
                //        {
                //            hKLocation = hKLocationInfos.FirstOrDefault(x => x.LocationStatus == (int)LocationStatusEnum.Free);
                //            if (hKLocation != null)
            //                station = stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.Free && x.IsOccupied == 0);
            //                if (station != null)
                //            {
                //                var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                //                dt_Task = new Dt_Task()
@@ -257,11 +96,11 @@
                //                    PalletCode = "LXM" + tasknum,
                //                    Roadway = "",
                //                    TaskState = (int)TaskStatusEnum.New,
                //                    TaskType = TaskTypeEnum.Q1TSJ4.ObjToInt(),
                //                    SourceAddress = "TSJC4F",
                //                    CurrentAddress = "TSJC4F",
                //                    NextAddress = hKLocation.LocationCode,
                //                    TargetAddress = hKLocation.LocationCode,
            //                        TaskType = TaskTypeEnum.CK3F.ObjToInt(),
            //                        SourceAddress = "TSJC3F",
            //                        CurrentAddress = "TSJC3F",
            //                        NextAddress = station.StationCode,
            //                        TargetAddress = station.StationCode,
                //                    Creater = "WCS",
                //                };
                //                var content = _taskService.SendHIKROBOTTask(dt_Task);
@@ -269,23 +108,184 @@
                //                {
                //                    dt_Task.TaskState = (int)TaskStatusEnum.Execut;
                //                    dt_Task.Dispatchertime = DateTime.Now;
                //                    hKLocation.LocationStatus = (int)LocationStatusEnum.InLock;
            //                        station.StationStatus = (int)LocationStatusEnum.InLock;
            //                        _taskService.AddData(dt_Task);
            //                        _StationInfoService.UpdateData(station);
            //                    }
            //                }
            //            }
            //        }
            //    }
            //    #endregion
            //    #endregion
            //    #region 4F
            //    List<string> stationCodes = new() { "0319882DD0313240", "0319882DD0313750"};
            //    var Stations = _StationInfoService.Repository.QueryData(x => stationCodes.Contains(x.StationCode));
            //    #region å…¥æå‡æœºä»»åŠ¡
            //    var Station = Stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.InStock && x.IsOccupied == 0);
            //    if (Station != null)
            //    {
            //        var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
            //        Dt_Task dt_Task = new Dt_Task()
            //        {
            //            TaskNum = tasknum,
            //            WMSTaskNum = "GP" + tasknum,
            //            Grade = 60,
            //            PalletCode = Station.PalletCode,
            //            Roadway = "",
            //            TaskState = (int)TaskStatusEnum.New,
                        //TaskType = TaskTypeEnum.F04.ObjToInt(),
            //            SourceAddress = Station.StationCode,
            //            CurrentAddress = Station.StationCode,
            //            NextAddress = "TSJR4F",
            //            TargetAddress = "TSJR4F",
            //            Creater = "WCS",
            //        };
            //        var content = _taskService.SendHIKROBOTTask(dt_Task);
            //        if (content.Status)
            //        {
            //            dt_Task.TaskState = (int)TaskStatusEnum.Execut;
            //            dt_Task.Dispatchertime = DateTime.Now;
            //            Station.StationStatus = (int)LocationStatusEnum.OutLock;
            //            _taskService.AddData(dt_Task);
            //            _StationInfoService.UpdateData(Station);
            //        }
            //    }
            //    #endregion
            //    #region å‡ºæå‡æœºä»»åŠ¡
            //    device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
            //    if (device != null && device.IsConnected)
            //    {
            //        var reslur = device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, "TSJC4F");
            //        if (device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, "TSJC4F") == 1)
            //        {
            //            Dt_Task dt_Task = _taskService.Repository.QueryFirst(x => x.SourceAddress == "TSJC4F" /*&& x.TaskState < TaskStatusEnum.TakeFinish.ObjToInt()*/);
            //            if (dt_Task == null)
            //            {
            //                Station = Stations.FirstOrDefault(x => x.StationStatus == (int)LocationStatusEnum.Free && x.IsOccupied == 0);
            //                if (Station != null)
            //                {
            //                    var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
            //                    dt_Task = new Dt_Task()
            //                    {
            //                        TaskNum = tasknum,
            //                        WMSTaskNum = "GP" + tasknum,
            //                        Grade = 60,
            //                        PalletCode = "LXM" + tasknum,
            //                        Roadway = "",
            //                        TaskState = (int)TaskStatusEnum.New,
            //                        TaskType = TaskTypeEnum.F03.ObjToInt(),
            //                        SourceAddress = "TSJC4F",
            //                        CurrentAddress = "TSJC4F",
            //                        NextAddress = Station.StationCode,
            //                        TargetAddress = Station.StationCode,
            //                        Creater = "WCS",
            //                    };
            //                    var content = _taskService.SendHIKROBOTTask(dt_Task);
            //                    if (content.Status)
            //                    {
            //                        dt_Task.TaskState = (int)TaskStatusEnum.Execut;
            //                        dt_Task.Dispatchertime = DateTime.Now;
            //                        Station.StationStatus = (int)LocationStatusEnum.InLock;
            //                        _taskService.AddData(dt_Task);
            //                        _StationInfoService.UpdateData(Station);
            //                    }
            //                }
            //            }
            //        }
            //    }
            //    #endregion
            //    #endregion
            //    #region å››æ¥¼è‡ªåŠ¨ä»»åŠ¡
            //    //List<string> LocationCodes = new() { "RGD0303A04041", "RG0302A05041", "RG0304A05041", "RG0205A05031" };
            //    List<string> LocationCodes = new() { "RGD0302A05041", "RGD0304A05041", "R3CG0106A04031", "RGD0307A05012" };
            //    var hKLocationInfos = _HKLocationInfoService.Repository.QueryData(x => LocationCodes.Contains(x.LocationCode));
            //    #region å…¥æå‡æœºä»»åŠ¡
            //    var hKLocation = hKLocationInfos.FirstOrDefault(x => x.LocationStatus == (int)LocationStatusEnum.InStock);
            //    if (hKLocation != null)
            //    {
            //        var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
            //        Dt_Task dt_Task = new Dt_Task()
            //        {
            //            TaskNum = tasknum,
            //            WMSTaskNum = "GP" + tasknum,
            //            Grade = 60,
            //            PalletCode = hKLocation.PalletCode,
            //            Roadway = "",
            //            TaskState = (int)TaskStatusEnum.New,
                        //TaskType = TaskTypeEnum.CHUKU1.ObjToInt(),
            //            SourceAddress = hKLocation.LocationCode,
            //            CurrentAddress = hKLocation.LocationCode,
            //            NextAddress = "TSJR4F",
            //            TargetAddress = "TSJR4F",
            //            Creater = "WCS",
            //        };
            //        var content = _taskService.SendHIKROBOTTask(dt_Task);
            //        if (content.Status)
            //        {
            //            dt_Task.TaskState = (int)TaskStatusEnum.Execut;
            //            dt_Task.Dispatchertime = DateTime.Now;
            //            hKLocation.LocationStatus = (int)LocationStatusEnum.OutLock;
                //                    _taskService.AddData(dt_Task);
                //                    _HKLocationInfoService.UpdateData(hKLocation);
                //                }
                //            }
                //        }
            //    #endregion
                //    }
                //}
                #endregion
            //    #region å‡ºæå‡æœºä»»åŠ¡
            //    //if (device != null && device.IsConnected)
            //    //{
            //    //    if (device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, "TSJC4F") == 1)
            //    //    {
            //    //        Dt_Task dt_Task = _taskService.Repository.QueryFirst(x => x.SourceAddress == "TSJC4F");
            //    //        if (dt_Task == null)
            //    //        {
            //    //            hKLocation = hKLocationInfos.FirstOrDefault(x => x.LocationStatus == (int)LocationStatusEnum.Free);
            //    //            if (hKLocation != null)
            //    //            {
            //    //                var tasknum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
            //    //                dt_Task = new Dt_Task()
            //    //                {
            //    //                    TaskNum = tasknum,
            //    //                    WMSTaskNum = "GP" + tasknum,
            //    //                    Grade = 60,
            //    //                    PalletCode = "LXM" + tasknum,
            //    //                    Roadway = "",
            //    //                    TaskState = (int)TaskStatusEnum.New,
            //    //                    TaskType = TaskTypeEnum.Q1TSJ4.ObjToInt(),
            //    //                    SourceAddress = "TSJC4F",
            //    //                    CurrentAddress = "TSJC4F",
            //    //                    NextAddress = hKLocation.LocationCode,
            //    //                    TargetAddress = hKLocation.LocationCode,
            //    //                    Creater = "WCS",
            //    //                };
            //    //                var content = _taskService.SendHIKROBOTTask(dt_Task);
            //    //                if (content.Status)
            //    //                {
            //    //                    dt_Task.TaskState = (int)TaskStatusEnum.Execut;
            //    //                    dt_Task.Dispatchertime = DateTime.Now;
            //    //                    hKLocation.LocationStatus = (int)LocationStatusEnum.InLock;
            //    //                    _taskService.AddData(dt_Task);
            //    //                    _HKLocationInfoService.UpdateData(hKLocation);
            //    //                }
            //    //            }
            //    //        }
                #endregion
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(nameof(TaskJob) + ":" + ex.Message);
            }
            //    //    }
            //    //}
            //    #endregion
            //    #endregion
            //}
            //catch (Exception ex)
            //{
            //    Console.Out.WriteLine(nameof(TaskJob) + ":" + ex.Message);
            //}
            return Task.CompletedTask;
        }
    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskExtend.cs
@@ -1,4 +1,5 @@
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -41,6 +42,13 @@
                    //Tasks = newTasks.Where(x => x.TaskType == (int)TaskTypeEnum.F01 || x.TaskType == (int)TaskTypeEnum.RK3F || x.TaskType == (int)TaskTypeEnum.CK3F || x.TaskType == (int)TaskTypeEnum.Q1TSJ4 || x.TaskType == (int)TaskTypeEnum.STU0003 || x.TaskType == (int)TaskTypeEnum.F02 || x.TaskType == (int)TaskTypeEnum.CHUKU1 || x.TaskType == (int)TaskTypeEnum.Q3RK || x.TaskType == (int)TaskTypeEnum.Q3CK).OrderByDescending(x => x.Grade).ToList();
                    //if (Tasks.Count > 0) HIKROBOTTask(Tasks);
                    //#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();
                    if (Tasks.Count > 0) SendAGVTask(Tasks);
                    #endregion
                }
            }
            catch (Exception ex)
@@ -102,6 +110,14 @@
                    //Tasks = ExecutTasks.Where(x => x.TaskState == (int)TaskStatusEnum.CheckPalletCodeFinish).OrderByDescending(x => x.Grade).ToList();
                    //if (Tasks.Count > 0) SendAGVWaitToExecuteTask(Tasks);
                    #endregion
                    #region å¤„理agv待空车搬运任务
                    Tasks = ExecutTasks.Where(x => x.TaskState == (int)TaskStatusEnum.WaitingHkAGVMovePosition).OrderByDescending(x => x.Grade).ToList();
                    if (Tasks.Count > 0) SendHKWaitTask();
                    #endregion
                }
            }
            catch (Exception ex)
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskJob.cs
@@ -34,8 +34,9 @@
        private readonly IStationMangerService _stationMangerService;
        private readonly ITrackloginfoService _trackloginfoService;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IAGVCartInfoService _agvcartInfoService;
        public TaskJob(ITaskService taskService, IApiInfoService apiInfoService, IRGVLocationInfoService rGVLocationInfoService, IStationMangerService stationMangerService, ITrackloginfoService trackloginfoService, IUnitOfWorkManage unitOfWorkManage)
        public TaskJob(ITaskService taskService, IApiInfoService apiInfoService, IRGVLocationInfoService rGVLocationInfoService, IStationMangerService stationMangerService, ITrackloginfoService trackloginfoService, IUnitOfWorkManage unitOfWorkManage, IAGVCartInfoService agvcartInfoService)
        {
            _taskService = taskService;//注入
            _apiInfoService = apiInfoService;
@@ -43,6 +44,7 @@
            _stationMangerService = stationMangerService;
            _trackloginfoService = trackloginfoService;
            _unitOfWorkManage = unitOfWorkManage;
            _agvcartInfoService = agvcartInfoService;
        }
        public Task Execute(IJobExecutionContext context)
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
@@ -52,6 +52,7 @@
                {
                    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)
                    {
@@ -89,12 +90,30 @@
                                //device.SetValue(QualityInspectionCommandEnum.FaultReset, true, task.SourceAddress);
                            }
                        }
                        else
                        {
                            //写入停止质检信号
                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                            device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                        //else
                        //{
                        //    //写入停止质检信号
                        //    device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                        //    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                        //}
                        }
                    foreach (var item in AGVtaskList)
                    {
                            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);
                    }
                    _taskService.UpdateData(Uptasks);
                    WriteInfo(device.DeviceName, "infoLog");