using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using wms.sqlsugar.model.pt; using WMS.BZModels; using WMS.BZModels.Dto; using WMS.BZSqlSugar; namespace WMS.BZServices.PT { public class AdminDesktopHomeService { private readonly Repository _wcstaskoldrepository; private readonly Repository _billInvnowrepository; public AdminDesktopHomeService(Repository wcstaskoldrepository, Repository billInvnowrepository) { _wcstaskoldrepository = wcstaskoldrepository; _billInvnowrepository = billInvnowrepository; } /// /// 今日出入库统计 /// public TodayTaskInOutPieDto GetTodayTaskInOutPie(DateTime todaystart, DateTime todayend) { TodayTaskInOutPieDto todayTaskInOutPieDto = new TodayTaskInOutPieDto(); var valuenames = new List>(); var lists = TaskInOutQueryable(todaystart, todayend).ToList(); foreach (var item in BZModels.Extensions.EnumToList().Where(o => new int[] { 2, 1, 5 }.Contains(o.id))) { var task = lists.FirstOrDefault(o => o.Type == item.id); if (task != null) { valuenames.Add(new ValueName() { Value = task.Count, Name = item.text }); todayTaskInOutPieDto.Total += task.Count; } else { valuenames.Add(new ValueName() { Value = 0, Name = item.text }); } } todayTaskInOutPieDto.Tasks = valuenames; return todayTaskInOutPieDto; } /// /// 近七天任务动态 /// /// public Models Get7daysTaskBar(DateTime start, DateTime end) { Models models = new Models() { Series = new List() }; var lists = TaskInOutQueryable(start, end).ToList(); //models.XAxis = lists.OrderBy(o => o.CreateTime).Select(o => o.CreateTime.ToString("M-dd")).Distinct().ToArray(); //models.Series.Add(new Series { Name = "出库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.OutDepot).Select(o => o.Count).ToArray() }); //models.Series.Add(new Series { Name = "入库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.EnterDepot).Select(o => o.Count).ToArray() }); //models.Series.Add(new Series { Name = "移库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.TransferDepot).Select(o => o.Count).ToArray() }); models.XAxis = new string[7]; //lists.OrderBy(o => o.CreateTime).Select(o => o.CreateTime.ToString("M-dd")).Distinct().ToArray(); int[] Outints = new int[7]; int[] EnterDepots = new int[7]; int[] TransferDepots = new int[7]; for (int i = 0; i < (end - start).TotalDays; i++) { var date = start.AddDays(i); models.XAxis[i] = date.ToString("M-d"); Outints[i] = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.OutDepot && o.CreateTime.Date == date.Date).Select(o => o.Count).FirstOrDefault(0); EnterDepots[i] = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.EnterDepot && o.CreateTime.Date == date.Date).Select(o => o.Count).FirstOrDefault(0); TransferDepots[i] = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.Delivery && o.CreateTime.Date == date.Date).Select(o => o.Count).FirstOrDefault(0); } models.Series.Add(new Series { Name = "出库", Data = Outints }); models.Series.Add(new Series { Name = "入库", Data = EnterDepots }); models.Series.Add(new Series { Name = "移动", Data = TransferDepots }); return models; } public ISugarQueryable TaskInOutQueryable(DateTime? start, DateTime? end) { var predicate = Expressionable.Create(); predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish); predicate = predicate.AndIF(start.HasValue && start.Value != DateTime.MinValue, m => m.EndTime >= start.Value.Date); predicate = predicate.AndIF(end.HasValue && end.Value != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Value.Date.ToString("yyyy-MM-dd") + " 23:59:59")); var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3)) .Select(it => new { Type = it.Type, CreateTime = it.EndTime.Value.Date }) .MergeTable()//将查询结果转成一个表 .GroupBy(o => new { o.Type, o.CreateTime }) .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, CreateTime = it.CreateTime }); return sugarQueryable; } /// /// 24小时内任务动态 /// /// /// /// public Models GettodaysHourTask(DateTime start, DateTime end) { Models models = new Models() { Series = new List() }; var predicate = Expressionable.Create(); predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish); predicate = predicate.AndIF(start != DateTime.MinValue, m => m.EndTime >= start.Date); predicate = predicate.AndIF(end != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59")); var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3)) .Select(it => new { Type = it.Type, Hour = it.EndTime.Value.Hour }) .MergeTable()//将查询结果转成一个表 .GroupBy(o => new { o.Type, o.Hour }) .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, Hour = it.Hour }); var lists = sugarQueryable.ToList(); models.XAxis = new string[24]; //lists.OrderBy(o => o.Hour).Select(o => o.Hour.ToString()).Distinct().ToArray(); int[] Outints = new int[24]; int[] EnterDepots = new int[24]; int[] TransferDepots = new int[24]; //for (int i = 0; i < models.XAxis.Length; i++) //{ // var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0); // Outints[i] = Outqty; // var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0); // EnterDepots[i] = EnterDepotqty; // var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0); // TransferDepots[i] = TransferDepotqty; //} for (int i = 0; i < 24; i++) { models.XAxis[i] = i.ToString(); var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0); Outints[i] = Outqty; var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0); EnterDepots[i] = EnterDepotqty; var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.Delivery && o.Hour == i).Select(o => o.Count).FirstOrDefault(0); TransferDepots[i] = TransferDepotqty; } models.Series.Add(new Series { Name = "出库", Data = Outints }); models.Series.Add(new Series { Name = "入库", Data = EnterDepots }); models.Series.Add(new Series { Name = "移动", Data = TransferDepots }); return models; } public List> GetMatWeightCategory() { var valuenames = new List>(); var lists = _billInvnowrepository.Queryable() .Select(it => new { matname = it.MatName, tolwqty = SqlFunc.AggregateSum(it.TolWQty) }) .GroupBy(o => o.matname).OrderByDescending(o => o.tolwqty).ToList(); decimal total = 0; for (int i = 0; i < lists.Count; i++) { if (i < 5) { valuenames.Add(new ValueName { Value = lists[i].tolwqty, Name = lists[i].matname }); } else { total += lists[i].tolwqty; } } valuenames.Add(new ValueName { Value = total, Name = "其他" }); return valuenames; } } }