| | |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_ITaskInfoService; |
| | | using WIDESEA_Model.Models; |
| | |
| | | public Task_HtyService(IRepository<Dt_Task_Hty> BaseDal) : base(BaseDal) |
| | | { |
| | | } |
| | | public WebResponseContent GetInOutTypeStats() |
| | | { |
| | | // æ¥è¯¢ææä»»å¡æ°æ® |
| | | var allTasks = BaseDal.QueryData() |
| | | .Select(x => new |
| | | { |
| | | TaskType = (TaskTypeEnum)x.TaskType, |
| | | Roadway = x.Roadway, |
| | | x.WarehouseId |
| | | }) |
| | | .ToList(); |
| | | |
| | | // å¦ææ²¡ææ°æ®ï¼è¿å空å表 |
| | | if (allTasks == null || !allTasks.Any()) |
| | | { |
| | | return WebResponseContent.Instance.OK("æªæ¾å°ä»»ä½ä»»å¡æ°æ®", new List<object>()); |
| | | } |
| | | |
| | | // 计ç®åä»åºçä»»å¡ç±»ååå¸ |
| | | var result = allTasks |
| | | .GroupBy(x => x.Roadway == "1" || x.Roadway == "2" ? 1 : 2) // Roadway "1"å"2"å±äºWarehouseId=1ï¼å
¶ä»å±äº2 |
| | | .Select(g => new |
| | | { |
| | | WarehouseId = g.Key, |
| | | Stats = g.Where(t => Enum.IsDefined(typeof(TaskTypeEnum), t.TaskType)) |
| | | .GroupBy(t => t.TaskType) |
| | | .Select(typeGroup => new |
| | | { |
| | | Type = typeGroup.Key.GetDescription(), |
| | | Count = typeGroup.Count(), |
| | | Percentage = (int)(Math.Round((double)typeGroup.Count() / g.Count() * 100, 2)) |
| | | }) |
| | | .OrderByDescending(x => x.Count) |
| | | .ToList(), |
| | | TotalCount = g.Count() |
| | | }) |
| | | .ToList(); |
| | | |
| | | return WebResponseContent.Instance.OK("æå", result); |
| | | } |
| | | public WebResponseContent GetWarehouseOperationStatistics() |
| | | { |
| | | /// <summary> |
| | | /// åæä»ï¼æ»åºå
¥åºä»»å¡æ°éï¼ä»æ¥å
¥åºï¼ä»æ¥åºåºï¼æåä»ï¼æ»åºå
¥åºæ°éï¼ä»æ¥å
¥åºï¼ä»æ¥åºåºï¼ |
| | | /// </summary> |
| | | |
| | | // è·åä»å¤©çæ¥æï¼ä¸èèæ¶é´é¨åï¼ |
| | | var today = DateTime.Today; |
| | | var tomorrow = today.AddDays(1); |
| | | |
| | | // æ¥è¯¢ææä»»å¡æ°æ®ï¼å
å«å建æ¶é´ |
| | | var allTasks = BaseDal.QueryData() |
| | | .Select(x => new |
| | | { |
| | | TaskType = (TaskTypeEnum)x.TaskType, |
| | | Roadway = x.Roadway, |
| | | x.WarehouseId, |
| | | CreateTime = x.CreateDate |
| | | }) |
| | | .ToList(); |
| | | |
| | | // å¦ææ²¡ææ°æ®ï¼è¿åé»è®¤å¼ |
| | | if (allTasks == null || !allTasks.Any()) |
| | | { |
| | | var emptyResult = new |
| | | { |
| | | RawMaterialWarehouse = new |
| | | { |
| | | TotalTasks = 0, |
| | | TodayInbound = 0, |
| | | TodayOutbound = 0 |
| | | }, |
| | | FinishedProductWarehouse = new |
| | | { |
| | | TotalTasks = 0, |
| | | TodayInbound = 0, |
| | | TodayOutbound = 0 |
| | | }, |
| | | Summary = new |
| | | { |
| | | TotalAllTasks = 0, |
| | | TotalInbound = 0, |
| | | TotalOutbound = 0 |
| | | } |
| | | }; |
| | | return WebResponseContent.Instance.OK("æªæ¾å°ä»»ä½ä»»å¡æ°æ®", emptyResult); |
| | | } |
| | | |
| | | // å®ä¹åºå
¥åºä»»å¡ç±»å |
| | | var inboundTypes = new[] { TaskTypeEnum.Inbound }; |
| | | var outboundTypes = new[] { TaskTypeEnum.Outbound }; |
| | | |
| | | // è¿æ»¤åºææç任塿°æ® |
| | | var validTasks = allTasks.Where(t => Enum.IsDefined(typeof(TaskTypeEnum), t.TaskType)).ToList(); |
| | | |
| | | // 计ç®åæä»ï¼WarehouseId = 1ï¼çç»è®¡ |
| | | var rawMaterialTasks = validTasks.Where(t => |
| | | t.Roadway == "1" || t.Roadway == "2" || t.WarehouseId == 1).ToList(); |
| | | |
| | | var rawMaterialStats = new |
| | | { |
| | | TotalTasks = rawMaterialTasks.Count, |
| | | TodayInbound = rawMaterialTasks.Count(t => |
| | | inboundTypes.Contains(t.TaskType) && |
| | | t.CreateTime >= today && t.CreateTime < tomorrow), |
| | | TodayOutbound = rawMaterialTasks.Count(t => |
| | | outboundTypes.Contains(t.TaskType) && |
| | | t.CreateTime >= today && t.CreateTime < tomorrow) |
| | | }; |
| | | |
| | | // è®¡ç®æåä»ï¼WarehouseId = 2ï¼çç»è®¡ |
| | | var finishedProductTasks = validTasks.Where(t => |
| | | (t.Roadway != "1" && t.Roadway != "2") || t.WarehouseId == 2).ToList(); |
| | | |
| | | var finishedProductStats = new |
| | | { |
| | | TotalTasks = finishedProductTasks.Count, |
| | | TodayInbound = finishedProductTasks.Count(t => |
| | | inboundTypes.Contains(t.TaskType) && |
| | | t.CreateTime >= today && t.CreateTime < tomorrow), |
| | | TodayOutbound = finishedProductTasks.Count(t => |
| | | outboundTypes.Contains(t.TaskType) && |
| | | t.CreateTime >= today && t.CreateTime < tomorrow) |
| | | }; |
| | | |
| | | // è®¡ç®æ»çå
¥åºååºåºæ°éï¼ææä»åºï¼æææ¶é´ï¼ |
| | | var totalInbound = validTasks.Count(t => inboundTypes.Contains(t.TaskType)); |
| | | var totalOutbound = validTasks.Count(t => outboundTypes.Contains(t.TaskType)); |
| | | |
| | | // æå»ºè¿åç»æ |
| | | var result = new |
| | | { |
| | | RawMaterialWarehouse = rawMaterialStats, |
| | | FinishedProductWarehouse = finishedProductStats, |
| | | Summary = new |
| | | { |
| | | TotalAllTasks = validTasks.Count, |
| | | TotalInbound = totalInbound, // æ»å
±å
¥åºæ°é |
| | | TotalOutbound = totalOutbound // æ»å
±åºåºæ°é |
| | | } |
| | | }; |
| | | |
| | | return WebResponseContent.Instance.OK("æå", result); |
| | | } |
| | | public WebResponseContent GetTodayInOutStats() |
| | | { |
| | | // è·åä»å¤©å7天åçæ¥æ |
| | | var today = DateTime.Now.Date; |
| | | var sevenDaysAgo = today.AddDays(-6); // å
å«ä»å¤©å
±7天 |
| | | |
| | | // æ¥è¯¢7天å
å
¨å¤©æ°æ®ï¼0:00-24:00ï¼ |
| | | var query = BaseDal.QueryData(x => |
| | | x.CreateDate >= sevenDaysAgo && |
| | | x.CreateDate < today.AddDays(1) // å
å«ä»å¤©å
¨å¤© |
| | | ); |
| | | |
| | | var tasks = query.Select(x => new |
| | | { |
| | | TaskType = (TaskTypeEnum)x.TaskType, |
| | | CreateDate = x.CreateDate |
| | | }).ToList(); |
| | | |
| | | if (!tasks.Any()) |
| | | { |
| | | return WebResponseContent.Instance.OK("æªæ¾å°ä»»ä½ä»»å¡æ°æ®", new List<object>()); |
| | | } |
| | | |
| | | // ç»è®¡æ¯å¤©åºå
¥åºæ°é |
| | | var dailyStats = new List<object>(); |
| | | |
| | | for (int i = 0; i < 7; i++) |
| | | { |
| | | var currentDate = sevenDaysAgo.AddDays(i); |
| | | var nextDate = currentDate.AddDays(1); // ä¸ä¸å¤©ç0:00 |
| | | |
| | | var dayTasks = tasks.Where(t => |
| | | t.CreateDate >= currentDate && |
| | | t.CreateDate < nextDate |
| | | ).ToList(); |
| | | |
| | | var stats = new |
| | | { |
| | | Date = currentDate.ToString("yyyy-MM-dd"), |
| | | InboundCount = dayTasks.Count(t => t.TaskType == TaskTypeEnum.Inbound), |
| | | OutboundCount = dayTasks.Count(t => t.TaskType == TaskTypeEnum.Outbound), |
| | | TotalCount = dayTasks.Count |
| | | }; |
| | | |
| | | dailyStats.Add(stats); |
| | | } |
| | | |
| | | return WebResponseContent.Instance.OK("æå", dailyStats); |
| | | } |
| | | |
| | | } |