AdminDesktopHomeService.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. using SqlSugar;
  2. using wms.sqlsugar.model.fj;
  3. using WMS.BZModels;
  4. using WMS.BZModels.Dto;
  5. using WMS.BZSqlSugar;
  6. using WMS.Info;
  7. namespace WMS.BZServices.FJ
  8. {
  9. public class AdminDesktopHomeService
  10. {
  11. private readonly Repository<WCS_TaskOld> _wcstaskoldrepository;
  12. private readonly Repository<BaseWarehouse> _baseWarehouseRepository;
  13. private readonly Repository<BillInvnow> _billInvnowrepository;
  14. private readonly Repository<WCS_AgvTaskInfo> _agvtaskrepository;
  15. public AdminDesktopHomeService(Repository<WCS_TaskOld> wcstaskoldrepository, Repository<BillInvnow> billInvnowrepository,
  16. Repository<BaseWarehouse> baseWarehouseRepository, Repository<WCS_AgvTaskInfo> agvtaskrepository)
  17. {
  18. _wcstaskoldrepository = wcstaskoldrepository;
  19. _billInvnowrepository = billInvnowrepository;
  20. _baseWarehouseRepository = baseWarehouseRepository;
  21. _agvtaskrepository = agvtaskrepository;
  22. }
  23. /// <summary>
  24. /// 今日出入库统计
  25. /// </summary>
  26. public TodayTaskInOutPieDto GetTodayTaskInOutPie(DateTime todaystart, DateTime todayend, string warehouse)
  27. {
  28. TodayTaskInOutPieDto todayTaskInOutPieDto = new TodayTaskInOutPieDto();
  29. var valuenames = new List<ValueName<int>>();
  30. var lists = TaskInOutQueryable(todaystart, todayend, warehouse).ToList();
  31. //出库 入库
  32. var outs = lists.Where(o => o.BusType == "车间叫料").Sum(o => o.Count);
  33. valuenames.Add(new ValueName<int>() { Value = outs, Name = "出库" });
  34. var ins = lists.Where(o => o.BusType == "码垛入库").Sum(o => o.Count);
  35. valuenames.Add(new ValueName<int>() { Value = ins, Name = "入库" });
  36. // 移库 组盘
  37. foreach (var item in BZModels.Extensions.EnumToList<TaskType>().Where(o => new int[] { 3, 0 }.Contains(o.id)))
  38. {
  39. var task = lists.Where(o => o.Type == item.id).Sum(o => o.Count);
  40. valuenames.Add(new ValueName<int>() { Value = task, Name = item.text });
  41. }
  42. todayTaskInOutPieDto.Total += valuenames.Sum(o => o.Value);
  43. todayTaskInOutPieDto.Tasks = valuenames;
  44. return todayTaskInOutPieDto;
  45. }
  46. /// <summary>
  47. /// 近七天任务动态
  48. /// </summary>
  49. /// <returns></returns>
  50. public Models Get7daysTaskBar(DateTime start, DateTime end, string warehouse)
  51. {
  52. Models models = new Models() { Series = new List<Series>() };
  53. var lists = TaskInOutQueryable(start.Date, DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59"), warehouse).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. int[] SetPlate = new int[7];
  59. for (int i = 0; i < (end - start).TotalDays - 1; i++)
  60. {
  61. var date = start.AddDays(i);
  62. models.XAxis[i] = date.ToString("M-d");
  63. //if (DateTime.Now.Hour <= 8)
  64. //{
  65. // continue;
  66. //}
  67. var starttime = new DateTime(date.Year, date.Month, date.Day, 8, 0, 0);
  68. var endtime = starttime.AddDays(1);
  69. Outints[i] = lists.Where(o => o.BusType == "车间叫料" && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count);
  70. EnterDepots[i] = lists.Where(o => o.BusType == "码垛入库" && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count);
  71. TransferDepots[i] = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count);
  72. SetPlate[i] = lists.Where(o => o.Type == (int)TaskType.SetPlate && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count);
  73. }
  74. models.Series.Add(new Series { Name = "出库", Data = Outints });
  75. models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
  76. models.Series.Add(new Series { Name = "移库", Data = TransferDepots });
  77. models.Series.Add(new Series { Name = "组盘", Data = SetPlate });
  78. return models;
  79. }
  80. public ISugarQueryable<TaskInOutDto> TaskInOutQueryable(DateTime? start, DateTime? end, string warehouse)
  81. {
  82. string[] warehousecodes = GetWearhouseCodes(warehouse);
  83. var predicate = Expressionable.Create<WCS_TaskOld>();
  84. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  85. predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
  86. predicate = predicate.AndIF(start != null && start.HasValue && start.Value != DateTime.MinValue, m => m.EndTime >= start.Value);
  87. predicate = predicate.AndIF(end != null && end.HasValue && end.Value != DateTime.MinValue, m => m.EndTime <= end.Value);
  88. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  89. .Select(it => new
  90. {
  91. Type = it.Type,
  92. BusType = it.BusType,
  93. CreateTime = it.EndTime.Value
  94. })
  95. .MergeTable()//将查询结果转成一个表
  96. .GroupBy(o => new { o.Type, o.BusType, o.CreateTime })
  97. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, BusType = it.BusType, CreateTime = it.CreateTime });
  98. return sugarQueryable;
  99. }
  100. private long[] GetWearhouseIds(string warehouse)
  101. {
  102. var list = _baseWarehouseRepository.Queryable().Where(o => o.IsStop == 0).ToArray();
  103. if (warehouse == "fjall")
  104. {
  105. return list.Select(o => o.Id).ToArray();
  106. }
  107. else
  108. {
  109. warehouse = warehouse.Replace("fj", "");
  110. long[] warehouseIds = list.Where(o => o.Code.Contains(warehouse)).Select(o => o.Id).ToArray();
  111. return warehouseIds;
  112. }
  113. }
  114. private string[] GetWearhouseCodes(string warehouse)
  115. {
  116. var list = _baseWarehouseRepository.Queryable().Where(o => o.IsStop == 0).Select(o => o.Code).ToArray();
  117. if (warehouse == "fjall")
  118. {
  119. return list.ToArray();
  120. }
  121. else
  122. {
  123. warehouse = warehouse.Replace("fj", "");
  124. string[] warehousecodes = list.Where(o => o.Contains(warehouse)).ToArray();
  125. return warehousecodes;
  126. }
  127. }
  128. /// <summary>
  129. /// 24小时内任务动态
  130. /// </summary>
  131. /// <param name="start"></param>
  132. /// <param name="end"></param>
  133. /// <returns></returns>
  134. public Models GettodaysHourTask(DateTime start, DateTime end, string warehouse)
  135. {
  136. Models models = new Models() { Series = new List<Series>() };
  137. string[] warehousecodes = GetWearhouseCodes(warehouse);
  138. var predicate = Expressionable.Create<WCS_TaskOld>();
  139. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  140. predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
  141. predicate = predicate.AndIF(start != DateTime.MinValue, m => m.EndTime >= start.Date);
  142. predicate = predicate.AndIF(end != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59"));
  143. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  144. .Select(it => new
  145. {
  146. Type = it.Type,
  147. BusType = it.BusType,
  148. Hour = it.EndTime.Value.Hour
  149. })
  150. .MergeTable()//将查询结果转成一个表
  151. .GroupBy(o => new { o.Type, o.BusType, o.Hour })
  152. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), BusType = it.BusType, Type = it.Type, Hour = it.Hour });
  153. var lists = sugarQueryable.ToList();
  154. models.XAxis = new string[24]; //lists.OrderBy(o => o.Hour).Select(o => o.Hour.ToString()).Distinct().ToArray();
  155. int[] Outints = new int[24];
  156. int[] EnterDepots = new int[24];
  157. int[] TransferDepots = new int[24];
  158. int[] SetPlate = new int[24];
  159. //for (int i = 0; i < models.XAxis.Length; i++)
  160. //{
  161. // var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  162. // Outints[i] = Outqty;
  163. // var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  164. // EnterDepots[i] = EnterDepotqty;
  165. // var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0);
  166. // TransferDepots[i] = TransferDepotqty;
  167. //}
  168. for (int i = 0; i < 24; i++)
  169. {
  170. models.XAxis[i] = i.ToString();
  171. var Outqty = lists.Where(o => o.BusType == "车间叫料" && o.Hour == i).Sum(o => o.Count);
  172. Outints[i] = Outqty;
  173. var EnterDepotqty = lists.Where(o => o.BusType == "码垛入库" && o.Hour == i).Sum(o => o.Count);
  174. EnterDepots[i] = EnterDepotqty;
  175. var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour == i).Sum(o => o.Count);
  176. TransferDepots[i] = TransferDepotqty;
  177. var SetPlateQty = lists.Where(o => o.Type == (int)TaskType.SetPlate && o.Hour == i).Sum(o => o.Count);
  178. SetPlate[i] = SetPlateQty;
  179. }
  180. models.Series.Add(new Series { Name = "出库", Data = Outints });
  181. models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
  182. models.Series.Add(new Series { Name = "移库", Data = TransferDepots });
  183. models.Series.Add(new Series { Name = "组盘", Data = SetPlate });
  184. return models;
  185. }
  186. public Models GetHourTask(DateTime start, DateTime end, string warehouse)
  187. {
  188. Models models = new Models() { Series = new List<Series>() };
  189. string[] warehousecodes = GetWearhouseCodes(warehouse);
  190. var predicate = Expressionable.Create<WCS_TaskOld>();
  191. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  192. predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
  193. predicate = predicate.AndIF(start != DateTime.MinValue, m => m.EndTime >= start.Date);
  194. predicate = predicate.AndIF(end != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59"));
  195. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  196. .Select(it => new
  197. {
  198. Type = it.Type,
  199. BusType = it.BusType,
  200. Hour = it.EndTime.Value.Hour,
  201. Day = it.EndTime.Value.Day,
  202. })
  203. .MergeTable()//将查询结果转成一个表
  204. .GroupBy(o => new { o.Type, o.BusType, o.Hour, o.Day })
  205. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), BusType = it.BusType, Type = it.Type, Hour = it.Hour, Day = it.Day });
  206. var lists = sugarQueryable.ToList();
  207. //models.XAxis = new string[24]; //lists.OrderBy(o => o.Hour).Select(o => o.Hour.ToString()).Distinct().ToArray();
  208. var XAxis = new List<string>();
  209. var Outints = new List<int>();
  210. var EnterDepots = new List<int>();
  211. var TransferDepots = new List<int>();
  212. var SetPlate = new List<int>();
  213. foreach (var item in new int[] { start.Day, end.Day })
  214. {
  215. for (int i = 0; i < 24; i++)
  216. {
  217. //XAxis.Add(item+"-"+i.ToString());
  218. XAxis.Add(i.ToString());
  219. //models.XAxis[i] = i.ToString();
  220. var Outqty = lists.Where(o => o.BusType == "车间叫料" && o.Hour == i && o.Day == item).Sum(o => o.Count);
  221. Outints.Add(Outqty);
  222. var EnterDepotqty = lists.Where(o => o.BusType == "码垛入库" && o.Hour == i && o.Day == item).Sum(o => o.Count);
  223. EnterDepots.Add(EnterDepotqty);
  224. var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour == i && o.Day == item).Sum(o => o.Count);
  225. TransferDepots.Add(TransferDepotqty);
  226. var SetPlateQty = lists.Where(o => o.Type == (int)TaskType.SetPlate && o.Hour == i && o.Day == item).Sum(o => o.Count);
  227. SetPlate.Add(SetPlateQty);
  228. }
  229. }
  230. models.XAxis = XAxis.ToArray();
  231. models.Series.Add(new Series { Name = "出库", Data = Outints.ToArray() });
  232. models.Series.Add(new Series { Name = "入库", Data = EnterDepots.ToArray() });
  233. models.Series.Add(new Series { Name = "移库", Data = TransferDepots.ToArray() });
  234. models.Series.Add(new Series { Name = "组盘", Data = SetPlate.ToArray() });
  235. return models;
  236. }
  237. public ISugarQueryable<TaskInOutDto> TaskGoodsTypeQueryable(DateTime? start, DateTime? end, string warehouse)
  238. {
  239. string[] warehousecodes = GetWearhouseCodes(warehouse);
  240. var predicate = Expressionable.Create<WCS_TaskOld>();
  241. predicate = predicate.And(m => m.Type == 0);
  242. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  243. predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
  244. predicate = predicate.AndIF(start != null && start.HasValue && start.Value != DateTime.MinValue, m => m.EndTime >= start.Value);
  245. predicate = predicate.AndIF(end != null && end.HasValue && end.Value != DateTime.MinValue, m => m.EndTime <= end.Value);
  246. var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(2))
  247. .GroupBy(o => new { o.GoodsType })
  248. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.GoodsType), Type = it.GoodsType });
  249. return sugarQueryable;
  250. }
  251. public List<ValueName<decimal>> GetTaskGoodsTypes(DateTime todaystart, DateTime todayend, string warehouse)
  252. {
  253. var valuenames = new List<ValueName<decimal>>();
  254. long[] warehouseIds = GetWearhouseIds(warehouse);
  255. var lists = TaskGoodsTypeQueryable(todaystart, todayend, warehouse).ToList();
  256. decimal total = 0;
  257. for (int i = 0; i < lists.Count; i++)
  258. {
  259. if (i < 5)
  260. {
  261. valuenames.Add(new ValueName<decimal> { Value = lists[i].Count, Name = lists[i].Type.ToString() });
  262. }
  263. else
  264. {
  265. total += lists[i].Count;
  266. }
  267. }
  268. valuenames.Add(new ValueName<decimal> { Value = total, Name = "其他" });
  269. return valuenames;
  270. }
  271. public List<ValueName<decimal>> GetMatWeightCategory(string warehouse)
  272. {
  273. var valuenames = new List<ValueName<decimal>>();
  274. long[] warehouseIds = GetWearhouseIds(warehouse);
  275. var lists = _billInvnowrepository.Queryable().Where(o => warehouseIds.Contains(o.WarehouseId))
  276. .Select(it => new
  277. {
  278. matname = it.MatName,
  279. tolwqty = SqlFunc.AggregateSum(it.TolWQty)
  280. })
  281. .GroupBy(o => o.matname).OrderByDescending(o => o.tolwqty).ToList();
  282. decimal total = 0;
  283. for (int i = 0; i < lists.Count; i++)
  284. {
  285. if (i < 5)
  286. {
  287. valuenames.Add(new ValueName<decimal> { Value = lists[i].tolwqty, Name = lists[i].matname });
  288. }
  289. else
  290. {
  291. total += lists[i].tolwqty;
  292. }
  293. }
  294. valuenames.Add(new ValueName<decimal> { Value = total, Name = "其他" });
  295. return valuenames;
  296. }
  297. private string[] WarehouseNames = new string[] { "分拣一", "分拣二", "分拣三" };
  298. public PagedInfo<DailyStatisticsDto> GetDailyStatistics(Pagination pagination, DateTime? start, DateTime? end)
  299. {
  300. var predicate = Expressionable.Create<WCS_TaskOld>();
  301. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  302. predicate = predicate.And(m => m.EndTime >= start);
  303. predicate = predicate.And(m => m.EndTime <= end);
  304. var TaskStatisticsLists = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  305. .GroupBy(o => new { o.WarehouseCode, o.BusType, o.Type }).Select(it => new TaskStatisticsDto
  306. {
  307. WarehouseCode = it.WarehouseCode,
  308. BusType = it.BusType,
  309. Type = it.Type,
  310. Count = SqlFunc.AggregateCount(it.WarehouseCode),
  311. }).ToList();
  312. //满托异常
  313. var taskErrorLists = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(m => m.Status == (int)BZModels.TaskStatus.Finish)
  314. .Where(m => m.EditTime >= start).Where(m => m.EditTime <= end).Where(m => m.MaterialCode.StartsWith("Error"))
  315. .SplitTable(tabs => tabs.Take(3))
  316. .GroupBy(o => new { o.WarehouseCode })
  317. .Select(it => new TaskStatisticsDto
  318. {
  319. WarehouseCode = it.WarehouseCode,
  320. Count = SqlFunc.AggregateCount(it.WarehouseCode),
  321. }).ToList();
  322. // 所有入库任务
  323. var agv = _agvtaskrepository.Queryable().With(SqlWith.NoLock).SplitTable(tabs => tabs.Take(3));
  324. var task = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).SplitTable(tabs => tabs.Take(3));
  325. var agvTaskLists = agv.LeftJoin(task, (agvTaskInfo, taskOld) => agvTaskInfo.TaskId == taskOld.ID)
  326. .Where((agvTaskInfo, taskOld) => agvTaskInfo.TaskType == 1 && agvTaskInfo.Status == (int)BZModels.TaskStatus.Finish)
  327. .Where((agvTaskInfo, taskOld) => agvTaskInfo.EditTime >= start && agvTaskInfo.EditTime <= end)
  328. .GroupBy((agvTaskInfo, taskOld) => new { taskOld.WarehouseCode })
  329. .Select((agvTaskInfo, taskOld) => new TaskStatisticsDto
  330. {
  331. WarehouseCode = taskOld.WarehouseCode,
  332. Count = SqlFunc.AggregateCount(taskOld.WarehouseCode)
  333. }).ToList();
  334. PagedInfo<DailyStatisticsDto> pagedInfos = new PagedInfo<DailyStatisticsDto>()
  335. {
  336. Result = new List<DailyStatisticsDto>()
  337. };
  338. for (int i = 0; i < WarehouseNames.Length; i++)
  339. {
  340. var code = i + 1;
  341. var mod = new DailyStatisticsDto
  342. {
  343. WarehouseName = WarehouseNames[i],
  344. TrussNorthQty = TaskStatisticsLists.Where(o =>!string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.WarehouseCode == code.ToString() + "N" && o.Type == 0).Sum(o=>o.Count),
  345. TrussSouthQty = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.WarehouseCode == code.ToString() + "S" && o.Type == 0).Sum(o => o.Count),
  346. CircularSouthQty = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.WarehouseCode == code.ToString() + "SR" && o.Type == 0).Sum(o => o.Count),
  347. CircularNorthQty = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.WarehouseCode == code.ToString() + "NR" && o.Type == 0).Sum(o => o.Count),
  348. DailySummary = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.Type == 0).Sum(o => o.Count),
  349. FullNormalQty = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.BusType == "车间叫料").Sum(o => o.Count),
  350. EmptyAbnormalQty = taskErrorLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString())).Sum(o => o.Count),
  351. EmptyAutomaticQty = agvTaskLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString())).Sum(o => o.Count) - TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.BusType == "皮盘入库").Sum(o => o.Count),
  352. EmptyWarehouseQty = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.BusType == "皮盘入库").Sum(o => o.Count),
  353. };
  354. pagedInfos.Result.Add(mod);
  355. }
  356. return pagedInfos;
  357. }
  358. }
  359. }