AdminDesktopHomeService.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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.sx;
  8. using WMS.BZModels;
  9. using WMS.BZModels.Dto;
  10. using WMS.BZSqlSugar;
  11. namespace WMS.BZServices.SX
  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, 3 }.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 = new string[7]; //lists.OrderBy(o => o.CreateTime).Select(o => o.CreateTime.ToString("M-dd")).Distinct().ToArray();
  55. int[] Outints = new int[7];
  56. int[] EnterDepots = new int[7];
  57. int[] TransferDepots = new int[7];
  58. for (int i = 0; i < (end - start).TotalDays; i++)
  59. {
  60. var date = start.AddDays(i);
  61. models.XAxis[i] = date.ToString("M-d");
  62. 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);
  63. 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);
  64. TransferDepots[i] = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.TransferDepot && o.CreateTime.Date == date.Date).Select(o => o.Count).FirstOrDefault(0);
  65. }
  66. models.Series.Add(new Series { Name = "出库", Data = Outints });
  67. models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
  68. models.Series.Add(new Series { Name = "移库", Data = TransferDepots });
  69. return models;
  70. }
  71. public ISugarQueryable<TaskInOutDto> TaskInOutQueryable(DateTime? start, DateTime? end)
  72. {
  73. var predicate = Expressionable.Create<WCS_TaskOld>();
  74. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  75. predicate = predicate.AndIF(start.HasValue && start.Value != DateTime.MinValue, m => m.EditTime >= start.Value.Date);
  76. predicate = predicate.AndIF(end.HasValue && end.Value != DateTime.MinValue, m => m.EditTime <= DateTime.Parse(end.Value.Date.ToString("yyyy-MM-dd") + " 23:59:59"));
  77. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  78. .Select(it => new
  79. {
  80. Type = it.Type,
  81. CreateTime = it.EditTime.Date
  82. })
  83. .MergeTable()//将查询结果转成一个表
  84. .GroupBy(o => new { o.Type, o.CreateTime })
  85. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, CreateTime = it.CreateTime });
  86. return sugarQueryable;
  87. }
  88. /// <summary>
  89. /// 24小时内任务动态
  90. /// </summary>
  91. /// <param name="start"></param>
  92. /// <param name="end"></param>
  93. /// <returns></returns>
  94. public Models GettodaysHourTask(DateTime start, DateTime end)
  95. {
  96. Models models = new Models() { Series = new List<Series>() };
  97. var predicate = Expressionable.Create<WCS_TaskOld>();
  98. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  99. predicate = predicate.AndIF(start != DateTime.MinValue, m => m.EditTime >= start.Date);
  100. predicate = predicate.AndIF(end != DateTime.MinValue, m => m.EditTime <= DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59"));
  101. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  102. .Select(it => new
  103. {
  104. Type = it.Type,
  105. Hour = it.EditTime.Hour
  106. })
  107. .MergeTable()//将查询结果转成一个表
  108. .GroupBy(o => new { o.Type, o.Hour })
  109. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, Hour = it.Hour });
  110. var lists = sugarQueryable.ToList();
  111. models.XAxis = new string[24]; //lists.OrderBy(o => o.Hour).Select(o => o.Hour.ToString()).Distinct().ToArray();
  112. int[] Outints = new int[24];
  113. int[] EnterDepots = new int[24];
  114. int[] TransferDepots = new int[24];
  115. //for (int i = 0; i < models.XAxis.Length; i++)
  116. //{
  117. // var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  118. // Outints[i] = Outqty;
  119. // var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  120. // EnterDepots[i] = EnterDepotqty;
  121. // var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  122. // TransferDepots[i] = TransferDepotqty;
  123. //}
  124. for (int i = 0; i < 24; i++)
  125. {
  126. models.XAxis[i] = i.ToString();
  127. var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
  128. Outints[i] = Outqty;
  129. var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
  130. EnterDepots[i] = EnterDepotqty;
  131. var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
  132. TransferDepots[i] = TransferDepotqty;
  133. }
  134. models.Series.Add(new Series { Name = "出库", Data = Outints });
  135. models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
  136. models.Series.Add(new Series { Name = "移库", Data = TransferDepots });
  137. return models;
  138. }
  139. public List<ValueName<decimal>> GetMatWeightCategory()
  140. {
  141. var valuenames = new List<ValueName<decimal>>();
  142. var lists = _billInvnowrepository.Queryable()
  143. .Select(it => new
  144. {
  145. matname = it.MatName,
  146. tolwqty = SqlFunc.AggregateSum(it.TolWQty)
  147. })
  148. .GroupBy(o => o.matname).OrderByDescending(o => o.tolwqty).ToList();
  149. decimal total = 0;
  150. for (int i = 0; i < lists.Count; i++)
  151. {
  152. if (i < 5)
  153. {
  154. valuenames.Add(new ValueName<decimal> { Value = lists[i].tolwqty, Name = lists[i].matname });
  155. }
  156. else
  157. {
  158. total += lists[i].tolwqty;
  159. }
  160. }
  161. valuenames.Add(new ValueName<decimal> { Value = total, Name = "其他" });
  162. return valuenames;
  163. }
  164. }
  165. }