yanjinhui
2026-03-31 0128fce75a5e7cc9afc4bd89ce1966eb2231b69f
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -55,6 +55,7 @@
        private readonly IRepository<Dt_TaskExecuteDetail> _taskExecuteDetailRepository;
        private readonly IApiInfoService _apiInfoService;
        private readonly IStationMangerService _stationMangerService;
        private readonly IStationInfoService _stationInfo;
        private readonly IMapper _mapper;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -74,7 +75,7 @@
        /// </summary>
        public IRepository<Dt_Task> Repository => BaseDal;
        public TaskService(IRepository<Dt_Task> BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, IRepository<Dt_TaskExecuteDetail> taskExecuteDetailRepository, IMapper mapper, IKLSLocationInfoService kLSLocationInfoService, IRGVLocationInfoService rGVLocationInfoService, IHKLocationInfoService hKLocationInfoService, IApiInfoService apiInfoService, ITrackloginfoService trackloginfoService, IStationMangerService stationMangerService) : base(BaseDal)
        public TaskService(IRepository<Dt_Task> BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, IRepository<Dt_TaskExecuteDetail> taskExecuteDetailRepository, IMapper mapper, IKLSLocationInfoService kLSLocationInfoService, IRGVLocationInfoService rGVLocationInfoService, IHKLocationInfoService hKLocationInfoService, IApiInfoService apiInfoService, ITrackloginfoService trackloginfoService, IStationMangerService stationMangerService, IStationInfoService stationInfo) : base(BaseDal)
        {
            _routerService = routerService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -86,6 +87,7 @@
            _apiInfoService = apiInfoService;
            _trackloginfoService = trackloginfoService;
            _stationMangerService = stationMangerService;
            _stationInfo = stationInfo;
        }
        public WebResponseContent ReceiveWMSTask([NotNull] List<WMSTasksDTO> taskDTOs)
        {
@@ -94,11 +96,11 @@
            {
                List<object> objects = new List<object>();
                foreach (var item in taskDTOs)
                {
                {
                    foreach (var task in item.tasks)
                    {
                        #region åˆ¤æ–­
                       var  contentStatus = TaskHelpMethods.isOkTaskInfo(task, true, true);
                        var contentStatus = TaskHelpMethods.isOkTaskInfo(task, true, true);
                        if (!contentStatus.Status)
                        {
                            objects.Add(new
@@ -107,7 +109,6 @@
                                Message = $"任务号【{task.taskCode}】{content.Message}"
                            });
                            continue;
                            //throw new Exception(content.Message);
                        }
                        if (BaseDal.QueryFirst(x => x.WMSTaskNum == task.taskCode && x.TaskType == item.taskType) != null)
                        {
@@ -119,7 +120,7 @@
                            continue;
                            //throw new Exception($"任务号【{task.taskCode}】已存在任务");
                        }
                        if (BaseDal.QueryFirst(x => x.PalletCode == task.containerCode && x.TaskType == item.taskType) != null)
                        if (BaseDal.QueryFirst(x => x.PalletCode == task.containerCode /*&& x.TaskType == item.taskType*/) != null)
                        {
                            objects.Add(new
                            {
@@ -129,7 +130,7 @@
                            continue;
                            //throw new Exception($"托盘号【{task.containerCode}】已存在任务");
                        }
                        if (BaseDal.QueryFirst(x => x.SourceAddress == task.fromLocationCode && x.TaskType == item.taskType) != null)
                        if (BaseDal.QueryFirst(x => x.SourceAddress == task.fromLocationCode && x.TaskType == item.taskType&&x.TaskState<TaskStatusEnum.TakeFinish.ObjToInt())!=null)
                        {
                            objects.Add(new
                            {
@@ -142,6 +143,7 @@
                        #endregion
                        switch (item.taskType)
                        {
                            #region å‡¯ä¹å£«AGV面料库
                            case (int)TaskTypeEnum.MLInbound:
                                content = CreateKLSNewInTask(task, item.taskType);
                                objects.Add(content.Data);
@@ -150,6 +152,8 @@
                                content = CreateKLSNewOutTask(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            #endregion
                            #region æ—·è§†å››å‘车成品库
                            case (int)TaskTypeEnum.CPInbound:
                                content = CreateRGVNewInTask(task, item.taskType);
                                objects.Add(content.Data);
@@ -158,22 +162,34 @@
                                content = CreateRGVNewOutTask(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            case (int)TaskTypeEnum.CJInbound:
                            case (int)TaskTypeEnum.CPMoveInventory:
                                content = CreateRGVNewMoveTask(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            #endregion
                            #region æµ·åº·AGV
                            case (int)TaskTypeEnum.Q1TSJ4:
                                content = CreateHKNewInTask(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            case (int)TaskTypeEnum.CJOutbound:
                            case (int)TaskTypeEnum.STU0003:
                            case (int)TaskTypeEnum.CHUKU1:
                                content = CreateHKNewOutTask(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            case (int)TaskTypeEnum.Carry:
                            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.CJCarry:
                            case (int)TaskTypeEnum.F02:
                            case (int)TaskTypeEnum.RK3F:
                            case (int)TaskTypeEnum.CK3F:
                                content = CJCarryTaske(task, item.taskType);
                                objects.Add(content.Data);
                                break;
                            #endregion
                            default:
                                objects.Add(new
                                {
@@ -212,7 +228,7 @@
            var deviceName = "";
            try
            {
                Dt_Task dt_Task = BaseDal.QueryFirst(x => x.WMSTaskNum == wMSCancelTask.TaskCode&&x.TaskType!=TaskTypeEnum.CPMoveInventory.ObjToInt());
                Dt_Task dt_Task = BaseDal.QueryFirst(x => x.WMSTaskNum == wMSCancelTask.TaskCode && x.TaskType != TaskTypeEnum.CPMoveInventory.ObjToInt());
                if (dt_Task == null) throw new Exception("未查询到任务号相关任务");
                // åˆ¤æ–­å½“前任务是否为凯乐士任务
@@ -221,13 +237,13 @@
                //四向车
                bool isAGV = dt_Task.TaskType == (int)TaskTypeEnum.CPInbound || dt_Task.TaskType == (int)TaskTypeEnum.CPOutbound;
                //海康
                bool isHK = dt_Task.TaskType == (int)TaskTypeEnum.Carry || dt_Task.TaskType == (int)TaskTypeEnum.CJInbound || dt_Task.TaskType == (int)TaskTypeEnum.CJInbound || dt_Task.TaskType == (int)TaskTypeEnum.CJOutbound;
                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;
                //这里将状态改变了198取消任务
                dt_Task.TaskType = TaskStatusEnum.WMSCancel.ObjToInt();
                #region å‡¯ä¹å£«
                if (isGALAXISTask)
                {
                    deviceName= "凯乐士AGV";
                    deviceName = "凯乐士AGV";
                    KLS = new CancelGALAXISTask
                    {
                        taskId = dt_Task.WMSTaskNum,
@@ -256,9 +272,9 @@
                if (isAGV)
                {
                    deviceName = "四向车";
                    if (dt_Task.RGVTaskId==0)
                    if (dt_Task.RGVTaskId == 0)
                    {
                        if (dt_Task.TaskType == TaskTypeEnum.CPOutbound.ObjToInt()&&dt_Task.TaskState==TaskStatusEnum.RGV_WaitSend.ObjToInt())
                        if (dt_Task.TaskType == TaskTypeEnum.CPOutbound.ObjToInt() && dt_Task.TaskState == TaskStatusEnum.RGV_WaitSend.ObjToInt())
                        {
                            //修改库位状态
                            var rgvlocaiion = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == dt_Task.SourceAddress);
@@ -302,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 == "成功")
@@ -358,7 +379,7 @@
                bool isAGV = dt_Task.TaskType == (int)TaskTypeEnum.CPInbound || dt_Task.TaskType == (int)TaskTypeEnum.CPOutbound;
                //海康
                bool isHK = dt_Task.TaskType == (int)TaskTypeEnum.Carry || dt_Task.TaskType == (int)TaskTypeEnum.CJInbound || dt_Task.TaskType == (int)TaskTypeEnum.CJInbound || dt_Task.TaskType == (int)TaskTypeEnum.CJOutbound;
                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.Grade = updateTaskPriority.taskPriority;
                #region å‡¯ä¹å£«
@@ -1098,7 +1119,9 @@
                        {
                            LoctionCode = item.LocationCode,
                            LocationStatus = item.LocationStatus,
                            EnableStatus = item.EnableStatus
                            EnableStatus = item.EnableStatus,
                            PalletCode = item.PalletCode
                        });
                    }
                    content.OK(data: list);
@@ -1116,35 +1139,61 @@
                        {
                            LoctionCode = item.LocationCode,
                            LocationStatus = item.LocationStatus,
                            EnableStatus = item.EnableStatus
                            EnableStatus = item.EnableStatus,
                              PalletCode = item.PalletCode
                        });
                    }
                    content.OK(data: list);
                }
                else if (getLocationInfo.WarehouseId == 3)
                {
                    //这里是提升机的
                    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");
                    list.Add(new
                    {
                        LoctionCode = value,
                        LocationStatus = value!=0? 100 : 0,
                        EnableStatus = 0,
                    });
                }
                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)
                {
                    //读取光电信号
                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                    if (device == null) throw new Exception("未找到1楼质检门设备信息") ;
                    if (device == null) throw new Exception("未找到1楼质检门设备信息");
                    if (!device.IsConnected) throw new Exception("PLC1楼质检门设备连接失败");
                    var sta = _stationMangerService.Repository.QueryData(x => x.Remark == "成品库");
                    foreach (var item in sta)
                    {
                        bool value = device.GetValue<QualityInspectionCommandEnum,bool>(QualityInspectionCommandEnum.R_StockAvailableSymbol, item.StationCode);
                             list.Add(new
                             {
                                 LoctionCode = item.StationCode,
                                 LocationStatus = value?100:0,
                                 EnableStatus = 0,
                             });
                        bool value = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_StockAvailableSymbol, item.StationCode);
                        list.Add(new
                        {
                            LoctionCode = item.StationCode,
                            LocationStatus = value ? 100 : 0,
                            EnableStatus = 0,
                        });
                    }
                    content.OK(data: list);
                }
@@ -1338,6 +1387,6 @@
        }
    }
}