AdminDesktopHomeService.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using SqlSugar;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using wms.sqlsugar.model.pt;
  8. using WMS.BZModels;
  9. using WMS.BZModels.Dto;
  10. using WMS.BZSqlSugar;
  11. namespace WMS.BZServices.PT
  12. {
  13. public class AdminDesktopHomeService
  14. {
  15. private readonly Repository<WCS_TaskOld> _wcstaskoldrepository;
  16. private readonly Repository<BillInvnow> _billInvnowrepository;
  17. public AdminDesktopHomeService(Repository<WCS_TaskOld> wcstaskoldrepository, Repository<BillInvnow> billInvnowrepository)
  18. {
  19. _wcstaskoldrepository = wcstaskoldrepository;
  20. _billInvnowrepository = billInvnowrepository;
  21. }
  22. /// <summary>
  23. /// 今日出入库统计
  24. /// </summary>
  25. public TodayTaskInOutPieDto GetTodayTaskInOutPie(DateTime todaystart, DateTime todayend)
  26. {
  27. TodayTaskInOutPieDto todayTaskInOutPieDto = new TodayTaskInOutPieDto();
  28. var valuenames = new List<ValueName<int>>();
  29. var lists = TaskInOutQueryable(todaystart, todayend).ToList();
  30. foreach (var item in BZModels.Extensions.EnumToList<TaskType>().Where(o => new int[] { 2, 1, 5 }.Contains(o.id)))
  31. {
  32. var task = lists.FirstOrDefault(o => o.Type == item.id);
  33. if (task != null)
  34. {
  35. valuenames.Add(new ValueName<int>() { Value = task.Count, Name = item.text });
  36. todayTaskInOutPieDto.Total += task.Count;
  37. }
  38. else
  39. {
  40. valuenames.Add(new ValueName<int>() { Value = 0, Name = item.text });
  41. }
  42. }
  43. todayTaskInOutPieDto.Tasks = valuenames;
  44. return todayTaskInOutPieDto;
  45. }
  46. /// <summary>
  47. /// 近七天任务动态
  48. /// </summary>
  49. /// <returns></returns>
  50. public Models Get7daysTaskBar(DateTime start, DateTime end)
  51. {
  52. Models models = new Models() { Series = new List<Series>() };
  53. var lists = TaskInOutQueryable(start, end).ToList();
  54. //models.XAxis = lists.OrderBy(o => o.CreateTime).Select(o => o.CreateTime.ToString("M-dd")).Distinct().ToArray();
  55. //models.Series.Add(new Series { Name = "出库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.OutDepot).Select(o => o.Count).ToArray() });
  56. //models.Series.Add(new Series { Name = "入库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.EnterDepot).Select(o => o.Count).ToArray() });
  57. //models.Series.Add(new Series { Name = "移库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.TransferDepot).Select(o => o.Count).ToArray() });
  58. models.XAxis = new string[7]; //lists.OrderBy(o => o.CreateTime).Select(o => o.CreateTime.ToString("M-dd")).Distinct().ToArray();
  59. int[] Outints = new int[7];
  60. int[] EnterDepots = new int[7];
  61. int[] TransferDepots = new int[7];
  62. for (int i = 0; i < (end - start).TotalDays; i++)
  63. {
  64. var date = start.AddDays(i);
  65. models.XAxis[i] = date.ToString("M-d");
  66. 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);
  67. 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);
  68. 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);
  69. }
  70. models.Series.Add(new Series { Name = "出库", Data = Outints });
  71. models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
  72. models.Series.Add(new Series { Name = "移动", Data = TransferDepots });
  73. return models;
  74. }
  75. public ISugarQueryable<TaskInOutDto> TaskInOutQueryable(DateTime? start, DateTime? end)
  76. {
  77. var predicate = Expressionable.Create<WCS_TaskOld>();
  78. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  79. predicate = predicate.AndIF(start.HasValue && start.Value != DateTime.MinValue, m => m.EndTime >= start.Value.Date);
  80. predicate = predicate.AndIF(end.HasValue && end.Value != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Value.Date.ToString("yyyy-MM-dd") + " 23:59:59"));
  81. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  82. .Select(it => new
  83. {
  84. Type = it.Type,
  85. CreateTime = it.EndTime.Value.Date
  86. })
  87. .MergeTable()//将查询结果转成一个表
  88. .GroupBy(o => new { o.Type, o.CreateTime })
  89. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, CreateTime = it.CreateTime });
  90. return sugarQueryable;
  91. }
  92. /// <summary>
  93. /// 24小时内任务动态
  94. /// </summary>
  95. /// <param name="start"></param>
  96. /// <param name="end"></param>
  97. /// <returns></returns>
  98. public Models GettodaysHourTask(DateTime start, DateTime end)
  99. {
  100. Models models = new Models() { Series = new List<Series>() };
  101. var predicate = Expressionable.Create<WCS_TaskOld>();
  102. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  103. predicate = predicate.AndIF(start != DateTime.MinValue, m => m.EndTime >= start.Date);
  104. predicate = predicate.AndIF(end != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59"));
  105. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  106. .Select(it => new
  107. {
  108. Type = it.Type,
  109. Hour = it.EndTime.Value.Hour
  110. })
  111. .MergeTable()//将查询结果转成一个表
  112. .GroupBy(o => new { o.Type, o.Hour })
  113. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, Hour = it.Hour });
  114. var lists = sugarQueryable.ToList();
  115. models.XAxis = new string[24]; //lists.OrderBy(o => o.Hour).Select(o => o.Hour.ToString()).Distinct().ToArray();
  116. int[] Outints = new int[24];
  117. int[] EnterDepots = new int[24];
  118. int[] TransferDepots = new int[24];
  119. //for (int i = 0; i < models.XAxis.Length; i++)
  120. //{
  121. // var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  122. // Outints[i] = Outqty;
  123. // var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  124. // EnterDepots[i] = EnterDepotqty;
  125. // var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  126. // TransferDepots[i] = TransferDepotqty;
  127. //}
  128. for (int i = 0; i < 24; i++)
  129. {
  130. models.XAxis[i] = i.ToString();
  131. var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
  132. Outints[i] = Outqty;
  133. var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
  134. EnterDepots[i] = EnterDepotqty;
  135. var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.Delivery && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
  136. TransferDepots[i] = TransferDepotqty;
  137. }
  138. models.Series.Add(new Series { Name = "出库", Data = Outints });
  139. models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
  140. models.Series.Add(new Series { Name = "移动", Data = TransferDepots });
  141. return models;
  142. }
  143. public List<ValueName<decimal>> GetMatWeightCategory()
  144. {
  145. var valuenames = new List<ValueName<decimal>>();
  146. var lists = _billInvnowrepository.Queryable()
  147. .Select(it => new
  148. {
  149. matname = it.MatName,
  150. tolwqty = SqlFunc.AggregateSum(it.TolWQty)
  151. })
  152. .GroupBy(o => o.matname).OrderByDescending(o => o.tolwqty).ToList();
  153. decimal total = 0;
  154. for (int i = 0; i < lists.Count; i++)
  155. {
  156. if (i < 5)
  157. {
  158. valuenames.Add(new ValueName<decimal> { Value = lists[i].tolwqty, Name = lists[i].matname });
  159. }
  160. else
  161. {
  162. total += lists[i].tolwqty;
  163. }
  164. }
  165. valuenames.Add(new ValueName<decimal> { Value = total, Name = "其他" });
  166. return valuenames;
  167. }
  168. }
  169. }