xiazhengtongxue
2026-04-07 b0b5deb5825684bca5b3fa7c2ab59f60ce0e799f
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -60,6 +60,7 @@
        private readonly ILocationInfoService _locationInfoService;
        private readonly IWarehouseService _warehouseService;
        private readonly IRoadWayinfoService _roadWayinfoService;
        private readonly ITask_HtyService _task_HtyService;
        private Timer _timer;
        public IRepository<Dt_Task> Repository => BaseDal;
@@ -74,7 +75,7 @@
        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
        public TaskService(ILogger<TaskService> logger, IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, ILocationInfoService locationInfoService,
            IWarehouseService warehouseService, IRoadWayinfoService roadWayinfoService) : base(BaseDal)
            IWarehouseService warehouseService, IRoadWayinfoService roadWayinfoService, ITask_HtyService task_HtyService) : base(BaseDal)
        {
            _logger = logger;
            _mapper = mapper;
@@ -82,8 +83,8 @@
            _stockInfoService = stockInfoService;
            _locationInfoService = locationInfoService;
            _warehouseService = warehouseService;
            _roadWayinfoService=roadWayinfoService;
            _roadWayinfoService = roadWayinfoService;
            _task_HtyService = task_HtyService;
        }
        public string MES_InReporttask = WIDESEA_Core.Helper.AppSettings.Configuration["MES_InReporttask"]; //入库反馈信息
        public string MES_OutReporttask = WIDESEA_Core.Helper.AppSettings.Configuration["MES_OutReporttask"];   //出库反馈信息
@@ -96,7 +97,7 @@
        public WebResponseContent CESTEXT()
        {
            WriteLog.Write_Log("接收MES入库任务下发", $"任务接收参数", "成功", $"参数:234jkljsldafjlasdf");
            return WebResponseContent.Instance.OK();
        }
@@ -192,7 +193,7 @@
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == wCSTask.TaskNum && x.PalletCode == wCSTask.PalletCode);
                if (task == null)
                    return webResponse.Error("未找到任务信息");
                    return webResponse.Error("未找到任务信息", 404);
                return TaskCompletedtask(task, wCSTask.TaskType);
            }
            catch (Exception ex)
@@ -503,6 +504,8 @@
                        MES_parameter mES_Parameter = AbnormalStorageLocation(task.PalletCode, task.SourceAddress, task.TargetAddress);
                        if (mES_Parameter.Result == "Y")
                        {
                            Dt_Task dtOutWit=BaseDal.QueryData(x=>x.PalletCode==task.PalletCode && x.TaskStatus== (int)OutTaskStatusEnum.OutWait).FirstOrDefault();
                            Dt_LocationInfo OriginalLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == task.SourceAddress).FirstOrDefault();
                            Dt_LocationInfo NewLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == task.TargetAddress).FirstOrDefault();
                            Dt_StockInfo dt_StockInfo = _stockInfoService.Repository.QueryData(x => x.LocationCode == task.SourceAddress).FirstOrDefault();
@@ -510,15 +513,27 @@
                            List<Dt_LocationInfo> dt_Locations = new List<Dt_LocationInfo>();
                            OriginalLocation.LocationStatus = (int)LocationStatusEnum.Free;
                            NewLocation.LocationStatus = (int)LocationStatusEnum.InStock;
                            NewLocation.LocationStatus = dtOutWit != null? (int)LocationStatusEnum.Lock:(int)LocationStatusEnum.InStock;
                            dt_StockInfo.LocationCode = NewLocation.LocationCode;
                            dt_StockInfo.StockStatus = (int)StockStatusEmun.已入库;
                            dt_StockInfo.StockStatus = dtOutWit != null? (int)StockStatusEmun.出库中:(int)StockStatusEmun.已入库;
                            task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationFinish;
                            if(dtOutWit != null)
                            {
                                dtOutWit.TaskStatus = (int)OutTaskStatusEnum.OutNew;
                                dtOutWit.SourceAddress = NewLocation.LocationCode;
                                dtOutWit.CurrentAddress = NewLocation.LocationCode;
                            }
                            dt_Locations.Add(OriginalLocation);
                            dt_Locations.Add(NewLocation);
                            _unitOfWorkManage.BeginTran();
                            if(dtOutWit!=null) BaseDal.UpdateData(dtOutWit);
                            _locationInfoService.UpdateData(dt_Locations);
                            _stockInfoService.UpdateData(dt_StockInfo);
                            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
@@ -668,5 +683,122 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        //任务获取
        public List<Dt_Task> GetaskQueue(string deviceId)
        {
            return BaseDal.QueryData(x => x.Roadway == deviceId
                           && (x.TaskStatus == (int)InTaskStatusEnum.PLC_InFinish
                               || x.TaskStatus == (int)OutTaskStatusEnum.OutNew)
                           && x.NumberSsuances == 0)
               .OrderBy(x => x.Remark == null ? 0 : 1)
               .ToList();
            //return BaseDal.QueryData(x => x.Roadway == deviceId && (x.TaskStatus == (int)InTaskStatusEnum.PLC_InFinish || x.TaskStatus == (int)OutTaskStatusEnum.OutNew) && x.NumberSsuances==0);
        }
        //获取当前堆垛机执行的任务
        public bool CurrentTaskProgress(string deviceId)
        {
           int taskcount=BaseDal.QueryData(x => x.Roadway == deviceId && (x.TaskStatus == (int)InTaskStatusEnum.SC_IntExecuting || x.TaskStatus == (int)OutTaskStatusEnum.SC_OutExecuting || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationExecuting)).Count();
            if (taskcount == 0) return false;
            return true;
        }
        //获取堆垛机完成,下发输送线的任务
        public static List<string> OutSCList = new List<string>() { "1109", "1105", "1210", "1212", "1214" };
        public List<Dt_Task> GetaskQueuePLC()
        {
            return BaseDal.QueryData(x => x.TaskStatus == (int)OutTaskStatusEnum.SC_OutFinish && OutSCList.Contains(x.CurrentAddress));
        }
        //获取是否有移库的任务
        public Dt_Task GeRelocationTaskQueue(string LocationCode)
        {
            return BaseDal.QueryData(x => x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew && x.CurrentAddress == LocationCode).FirstOrDefault();
        }
        public Dt_Task GeOutCuTaskQueue(string LocationCode)
        {
            return BaseDal.QueryData(x => x.TaskStatus == (int)OutTaskStatusEnum.OutNew && x.SourceAddress == LocationCode).FirstOrDefault();
        }
        public bool RelocationTaskProgress(string deviceId)
        {
            int taskcount = BaseDal.QueryData(x => x.Roadway == deviceId && (x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationExecuting || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew) ).Count();
            if (taskcount == 0) return false;
            return true;
        }
        //仓库容量状态
        public WebResponseContent GetWarehouseCapacity()
        {
            return _locationInfoService.GetWarehouseCapacity();
        }
        //出入库类型分布
        public WebResponseContent GetInOutTypeStats()
        {
            return _task_HtyService.GetInOutTypeStats();
        }
        //流量情况统计
        public WebResponseContent GetTodayTrafficStats()
        {
            return _task_HtyService.GetTodayInOutStats();
        }
        //当前进行的任务
        public WebResponseContent GetCurrentTasks()
        {
            // æŸ¥è¯¢æ‰€ä»¥è¿”回TaskNum,TaskType,CreateDate,TaskStatus,
            var tasks = BaseDal.QueryData()
                        .Select(t => new
                        {
                            WarehouseId = t.Roadway == "1" || t.Roadway == "2" ? 1 : 2,
                            PalletType = t.PalletType,
                            TaskNum = t.TaskId,
                            TaskType = t.TaskType,
                            CreateDate = t.CreateDate,
                            TaskStatus = t.TaskStatus,
                            TargetAddress = t.TargetAddress
                        })
                        .ToList();
            return WebResponseContent.Instance.OK("成功", tasks);
        }
        //总体进度
        public WebResponseContent GetWarehouseOperationStatistics()
        {
            /// <summary>
            /// åŽŸæ–™ä»“ï¼Œæ€»å‡ºå…¥åº“ä»»åŠ¡æ•°é‡ï¼Œä»Šæ—¥å…¥åº“ï¼Œä»Šæ—¥å‡ºåº“ï¼Œä»Šæ—¥å¾…å®Œæˆï¼Œä»Šæ—¥å¼‚å¸¸ä»»åŠ¡ï¼Œæˆå“ä»“ï¼Œæ€»å‡ºå…¥åº“æ•°é‡ï¼Œä»Šæ—¥å…¥åº“ï¼Œä»Šæ—¥å‡ºåº“ï¼Œä»Šæ—¥å¾…å®Œæˆ
            /// </summary>
            return _task_HtyService.GetWarehouseOperationStatistics();
        }
        public WebResponseContent GetTaskDestination(string targetAddress)
        {
            WebResponseContent content = new WebResponseContent();
            // å‚数校验
            if (string.IsNullOrWhiteSpace(targetAddress))
            {
                return content.Error("目标地址不能为空");
            }
            try
            {
                // æŸ¥è¯¢æ•°æ®
                var queryResult = BaseDal.QueryData(x => x.TargetAddress == targetAddress);
                // åˆ¤æ–­æŸ¥è¯¢ç»“æžœ
                if (queryResult == null || !queryResult.Any())
                {
                    return content.Error($"未找到目标地址为[{targetAddress}]的任务");
                }
                return content.OK($"有目标地址为[{targetAddress}]的任务,请拦截");
            }
            catch (Exception ex)
            {
                return content.Error($"获取任务目的地失败: {ex.Message}");
            }
        }
    }
}