StatisticsreportService.cs 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. using SqlSugar;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using WMS.BZModels;
  7. using WMS.Info;
  8. using wms.sqlsugar.model.fj;
  9. using WMS.BZSqlSugar;
  10. using WMS.BZModels.Dto.FJ.ReportDtos;
  11. using WMS.BZModels.Dto;
  12. using WMS.Util;
  13. using NPOI.SS.Formula.Functions;
  14. using System.Reflection;
  15. using System.Collections;
  16. namespace WMS.BZServices.FJ
  17. {
  18. public class StatisticsreportService
  19. {
  20. private readonly Repository<BillInvflow> _flowrepository;
  21. private readonly Repository<WCS_TaskOld> _taskoldrepository;
  22. private readonly Repository<BillBomsetgrp> _billBomsetgrprepository;
  23. private readonly Repository<BillBomsetinfo> _billBomsetinforepository;
  24. private readonly Repository<BaseWarehouse> _baseWarehouseRepository;
  25. public StatisticsreportService(Repository<BillInvflow> flowrepository, Repository<WCS_TaskOld> taskoldrepository, Repository<BillBomsetgrp> billBomsetgrprepository, Repository<BillBomsetinfo> billBomsetinforepository, Repository<BaseWarehouse> baseWarehouseRepository)
  26. {
  27. _flowrepository = flowrepository;
  28. _taskoldrepository = taskoldrepository;
  29. _billBomsetgrprepository = billBomsetgrprepository;
  30. _billBomsetinforepository = billBomsetinforepository;
  31. _baseWarehouseRepository = baseWarehouseRepository;
  32. }
  33. public PagedInfo<StatisticsDto> GetPageList(Pagination pagination, StatisticsQueryDto statisticsQueryDto)
  34. {
  35. //if (pagination.sord.ToUpper() != "ASC")
  36. //{
  37. // pagination.sidx = pagination.sidx + " DESC";
  38. //}
  39. //if (pagination.sidx.IsEmpty())
  40. //{
  41. // pagination.sidx = "AddTime DESC";
  42. //}
  43. //var predicate = Expressionable.Create<BillInvflow, WCS_TaskOld>();
  44. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.KeyWord), (flow, taskold) => flow.MatCode.Contains(statisticsQueryDto.KeyWord) || taskold.Floor.ToString() == statisticsQueryDto.KeyWord
  45. //|| taskold.Tunnel.Contains(statisticsQueryDto.KeyWord) || taskold.Device.Contains(statisticsQueryDto.KeyWord) || taskold.AddrTo.Contains(statisticsQueryDto.KeyWord) || taskold.AddrFrom.Contains(statisticsQueryDto.KeyWord));
  46. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.MatCode), (flow, taskold) => flow.MatCode.Contains(statisticsQueryDto.MatCode));
  47. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.Tunnel), (flow, taskold) => taskold.Tunnel.Contains(statisticsQueryDto.Tunnel));
  48. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.Floor), (flow, taskold) => taskold.Floor.ToString() == statisticsQueryDto.Floor);
  49. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.Device), (flow, taskold) => taskold.Device.Contains(statisticsQueryDto.Device));
  50. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.AddrFrom), (flow, taskold) => taskold.AddrFrom.Contains(statisticsQueryDto.AddrFrom));
  51. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.AddrTo), (flow, taskold) => taskold.AddrTo.Contains(statisticsQueryDto.AddrTo));
  52. var list = GetQueryable(statisticsQueryDto).ToPage(pagination);
  53. return list;
  54. }
  55. public IList<StatisticsDto> GetList(StatisticsQueryDto statisticsQueryDto)
  56. {
  57. ISugarQueryable<StatisticsDto> sugarQueryable = GetQueryable(statisticsQueryDto);
  58. var list = sugarQueryable.ToList();
  59. return list;
  60. }
  61. private ISugarQueryable<StatisticsDto> GetQueryable(StatisticsQueryDto statisticsQueryDto)
  62. {
  63. var sugarQueryable = _taskoldrepository.Context.Queryable<WCS_TaskOld>().With(SqlWith.NoLock).SplitTable(p => p.Take(10))
  64. .LeftJoin<BaseMatinfo>((taskold, mater) => taskold.MaterialCode == mater.Code)
  65. .WhereIF(statisticsQueryDto != null && !string.IsNullOrWhiteSpace(statisticsQueryDto.Status), (taskold, mater) => taskold.Status.Equals(statisticsQueryDto.Status))
  66. .WhereIF(statisticsQueryDto != null && !string.IsNullOrWhiteSpace(statisticsQueryDto.KeyWord), (taskold, mater) => mater.Code.Contains(statisticsQueryDto.KeyWord) || mater.Name.Contains(statisticsQueryDto.KeyWord))
  67. .WhereIF(statisticsQueryDto != null && !string.IsNullOrWhiteSpace(statisticsQueryDto.MatCode), (taskold, mater) => mater.Code.Contains(statisticsQueryDto.MatCode))
  68. .WhereIF(statisticsQueryDto != null && !string.IsNullOrWhiteSpace(statisticsQueryDto.MatName), (taskold, mater) => mater.Name.Contains(statisticsQueryDto.MatName))
  69. .WhereIF(statisticsQueryDto != null && statisticsQueryDto.AddTimeFrom != null && statisticsQueryDto.AddTimeFrom.HasValue, (taskold, mater) => taskold.AddTime >= statisticsQueryDto.AddTimeFrom)
  70. .WhereIF(statisticsQueryDto != null && statisticsQueryDto.AddTimeTo != null && statisticsQueryDto.AddTimeTo.HasValue, (taskold, mater) => taskold.AddTime <= statisticsQueryDto.AddTimeTo)
  71. .WhereIF(statisticsQueryDto != null && statisticsQueryDto.StartTimeBegin.HasValue, (taskold, mater) => taskold.StartTime >= statisticsQueryDto.StartTimeBegin)
  72. .WhereIF(statisticsQueryDto != null && statisticsQueryDto.StartTimeEnd.HasValue, (taskold, mater) => taskold.StartTime <= statisticsQueryDto.StartTimeEnd)
  73. .WhereIF(statisticsQueryDto != null && statisticsQueryDto.EndTimeBegin.HasValue, (taskold, mater) => taskold.EndTime >= statisticsQueryDto.EndTimeBegin)
  74. .WhereIF(statisticsQueryDto != null && statisticsQueryDto.EndTimeEnd.HasValue, (taskold, mater) => taskold.EndTime <= statisticsQueryDto.EndTimeEnd)
  75. .GroupBy((taskold, mater) => new { mater.Code, mater.Name, taskold.Floor, taskold.Type })
  76. .Select((taskold, mater) => new StatisticsDto
  77. {
  78. MatCode = mater.Code,
  79. MatName = mater.Name,
  80. Floor = taskold.Floor,
  81. Type = taskold.Type,
  82. Count = SqlFunc.AggregateDistinctCount(taskold.ID)
  83. }).MergeTable();
  84. return sugarQueryable;
  85. }
  86. /// <summary>
  87. /// 跺型当前来料比
  88. /// </summary>
  89. /// <param name="pagination"></param>
  90. /// <param name="statisticsQueryDto"></param>
  91. /// <returns></returns>
  92. public PagedInfo<BomSetGrpCurrentMaterialRateDto> GetBomSetGrpCurrentMaterialRateList(Pagination pagination, BomSetGrpCurrentMaterialRateQueryDto statisticsQueryDto)
  93. {
  94. if (string.IsNullOrEmpty(pagination.sidx))
  95. {
  96. pagination.sidx = "SetGrpBomCode";
  97. }
  98. var bomsetquery = _billBomsetgrprepository.Context.Queryable<BillBomsetgrp, BillBomsetinfo>((billBomsetgrp, billBomsetinfo) => new object[] {
  99. JoinType.Left, billBomsetgrp.Id == billBomsetinfo.BomSetHdrId,
  100. }).With(SqlWith.NoLock)
  101. //.Where((billBomsetgrp, billBomsetinfo) => billBomsetgrp.IsStop == 0 && billBomsetgrp.IsDelete == 0)
  102. .GroupBy((billBomsetgrp, billBomsetinfo) => new { billBomsetgrp.ProCode, billBomsetgrp.Name, billBomsetinfo.MatCode })
  103. .Select((billBomsetgrp, billBomsetinfo) => new
  104. {
  105. SetGrpBomCode = billBomsetgrp.ProCode,
  106. SetGrpMatCode = billBomsetinfo.MatCode,
  107. SetGrpName = billBomsetgrp.Name,
  108. SetGrpQty = SqlFunc.AggregateCount(billBomsetinfo.MatCode)
  109. }).Distinct();
  110. var now = DateTime.Now;
  111. var tasksquery = _taskoldrepository.Context.Queryable<WCS_TaskOld>().With(SqlWith.NoLock).SplitTable(p => p.Take(2))
  112. .Where(o => o.Status > 0 && o.Status <= 10)
  113. .Where(o => o.EditTime >= now.AddHours(-3) && o.EditTime <= now)
  114. //.WhereIF(!string.IsNullOrWhiteSpace(statisticsQueryDto.KeyWord),o=>o.MatCode.Contains(statisticsQueryDto.KeyWord))
  115. .GroupBy(taskold => taskold.MatCode)
  116. .Select(taskold => new
  117. {
  118. MatCode = taskold.MatCode,
  119. Qty = SqlFunc.AggregateCount(taskold.ID)
  120. });//.ToPage<BomSetGrpCurrentMaterialRateDto>(pagination);
  121. var tasks = tasksquery.LeftJoin(bomsetquery, (taskold, bomset) => taskold.MatCode == bomset.SetGrpMatCode)
  122. .Where((taskold, bomset) => !SqlFunc.IsNullOrEmpty(bomset.SetGrpBomCode))
  123. .GroupBy((taskold, bomset) => new { bomset.SetGrpBomCode, taskold.MatCode })
  124. .Select((taskold, bomset) =>
  125. new BomSetGrpCurrentMaterialRateDto
  126. {
  127. BomCode = bomset.SetGrpBomCode,
  128. MatCode = taskold.MatCode,
  129. Qty = SqlFunc.AggregateCount(taskold.MatCode)
  130. }).ToPage<BomSetGrpCurrentMaterialRateDto>(pagination);
  131. var BomSetGrps = bomsetquery.ToList();// _billBomsetgrprepository.Queryable().Where(o => o.IsStop == 0 && o.IsDelete == 0).ToList();
  132. foreach (var item in tasks.Result)
  133. {
  134. var bom = BomSetGrps.FirstOrDefault(o => o.SetGrpBomCode.Split('|').Any(v => v.Equals(item.MatCode)));
  135. if (bom != null)
  136. {
  137. var boms = bom.SetGrpBomCode.Split('|');
  138. if (boms.Length > 1)
  139. {
  140. var total = tasks.Result.Where(o => boms.Contains(o.MatCode)).Sum(o => o.Qty);
  141. if (total == 0)
  142. {
  143. item.Rate = 0;// "0%";
  144. }
  145. else
  146. {
  147. item.Rate = (decimal)item.Qty / total;// rate.ToString("P2");
  148. }
  149. }
  150. else
  151. {
  152. item.Rate = 1;// "100%";
  153. }
  154. item.BomSetName = bom.SetGrpName;
  155. var bomtotalqty = BomSetGrps.Where(o => o.SetGrpBomCode == bom.SetGrpBomCode).Sum(o => o.SetGrpQty);
  156. var matQty = BomSetGrps.Where(o => o.SetGrpMatCode == item.MatCode).Sum(o => o.SetGrpQty);
  157. if (bomtotalqty == 0)
  158. {
  159. item.NormalRate = 0;
  160. }
  161. else
  162. {
  163. item.NormalRate = (decimal)matQty / bomtotalqty;
  164. }
  165. }
  166. }
  167. var groups = tasks.Result.Select(o => o.BomSetName).Distinct().ToList();
  168. foreach (var item in groups)
  169. {
  170. foreach (var child in BomSetGrps.Where(o => o.SetGrpName == item && o.SetGrpQty > 0).ToList())
  171. {
  172. var bommat = tasks.Result.FirstOrDefault(o => o.MatCode == child.SetGrpMatCode);
  173. if (bommat == null)
  174. {
  175. var bomtotalqty = BomSetGrps.Where(o => o.SetGrpName == item).Sum(o => o.SetGrpQty);
  176. var matQty = BomSetGrps.Where(o => o.SetGrpMatCode == child.SetGrpMatCode).Sum(o => o.SetGrpQty);
  177. tasks.Result.Add(new BomSetGrpCurrentMaterialRateDto
  178. {
  179. BomSetName = child.SetGrpName,
  180. MatCode = child.SetGrpMatCode,
  181. Qty = 0,
  182. Rate = 0,
  183. NormalRate = bomtotalqty == 0 ? 0 : (decimal)matQty / bomtotalqty,
  184. });
  185. }
  186. }
  187. }
  188. foreach (var item in tasks.Result)
  189. {
  190. var totalqty = tasks.Result.Where(o => o.BomSetName == item.BomSetName).Sum(o => o.Qty);
  191. item.DiffQty = item.Qty - (int)Math.Floor((totalqty * item.NormalRate));
  192. }
  193. //foreach (var item in groups)
  194. //{
  195. // var qty = tasks.Result.Where(o => o.BomSetName == item).Max(o => o.Qty);
  196. // var rate = tasks.Result.Where(o => o.BomSetName == item).Max(o => o.NormalRate);
  197. // foreach (var child in tasks.Result.Where(o => o.BomSetName == item).ToList())
  198. // {
  199. // if (child.Qty < qty)
  200. // {
  201. // int childrate = Convert.ToInt32((decimal)rate / child.NormalRate);
  202. // child.DiffQty =Convert.ToInt32( Math.Ceiling( ((decimal)qty / childrate) - child.Qty));
  203. // }
  204. // }
  205. //}
  206. return tasks;
  207. }
  208. /// <summary>
  209. /// 24小时内任务动态
  210. /// </summary>
  211. /// <param name="start"></param>
  212. /// <param name="end"></param>
  213. /// <returns></returns>
  214. public PagedInfo<HourTaskDto> GetHourTask(Pagination pagination, HourTaskQueryDto hourTaskQueryDto)
  215. {
  216. if (!hourTaskQueryDto.EndTimeBegin.HasValue)
  217. {
  218. hourTaskQueryDto.EndTimeBegin = DateTime.Now.Date;
  219. }
  220. if (!hourTaskQueryDto.EndTimeEnd.HasValue)
  221. {
  222. hourTaskQueryDto.EndTimeEnd = DateTime.Now.AddHours(1);
  223. }
  224. if ((hourTaskQueryDto.EndTimeEnd.Value - hourTaskQueryDto.EndTimeBegin.Value).Days > 60)
  225. {
  226. throw BZSysExCore.ThrowFailException("查询日期范围不能超过60天!");
  227. }
  228. var predicate = Expressionable.Create<WCS_TaskOld>();
  229. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish && m.Type != (int)TaskType.Delivery);
  230. predicate = predicate.AndIF(!string.IsNullOrEmpty(hourTaskQueryDto.WarehouseCode), m => hourTaskQueryDto.WarehouseCode.Equals(m.WarehouseCode));
  231. if (hourTaskQueryDto.GroupName == "AddTime")
  232. {
  233. predicate = predicate.AndIF(hourTaskQueryDto.EndTimeBegin.HasValue, m => m.AddTime >= hourTaskQueryDto.EndTimeBegin.Value);
  234. predicate = predicate.AndIF(hourTaskQueryDto.EndTimeEnd.HasValue, m => m.AddTime <= hourTaskQueryDto.EndTimeEnd.Value);
  235. }
  236. else
  237. {
  238. predicate = predicate.AndIF(hourTaskQueryDto.EndTimeBegin.HasValue, m => m.EndTime >= hourTaskQueryDto.EndTimeBegin.Value);
  239. predicate = predicate.AndIF(hourTaskQueryDto.EndTimeEnd.HasValue, m => m.EndTime <= hourTaskQueryDto.EndTimeEnd.Value);
  240. }
  241. predicate = predicate.AndIF(!string.IsNullOrEmpty(hourTaskQueryDto.TaskType) && (new string[] { "1", "2", "0" }.Any(o => o.Equals(hourTaskQueryDto.TaskType))), m => m.Type.Equals(hourTaskQueryDto.TaskType));
  242. predicate = predicate.AndIF(!string.IsNullOrEmpty(hourTaskQueryDto.BusType), m => m.BusType.Equals(hourTaskQueryDto.BusType));
  243. var sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Select(it => new TaskInOutDto { });
  244. if (!string.IsNullOrEmpty(hourTaskQueryDto.TaskType) && (hourTaskQueryDto.TaskType == "100" || hourTaskQueryDto.TaskType == "101"))
  245. {
  246. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  247. .Select(it => new
  248. {
  249. WarehouseCode = it.WarehouseCode,
  250. EditTime = hourTaskQueryDto.GroupName == "AddTime" ? it.AddTime.Date : it.EndTime.Value.Date,
  251. Hour = hourTaskQueryDto.GroupName == "AddTime" ? it.AddTime.Hour : it.EndTime.Value.Hour
  252. })
  253. .MergeTable()//将查询结果转成一个表
  254. .GroupBy(o => new { o.Hour, o.EditTime, o.WarehouseCode })
  255. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Hour), Hour = it.Hour, CreateTime = it.EditTime, WarehouseCode = it.WarehouseCode })
  256. .OrderBy(o => o.CreateTime);
  257. }
  258. else
  259. {
  260. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  261. .Select(it => new
  262. {
  263. WarehouseCode = it.WarehouseCode,
  264. Type = it.Type,
  265. EditTime = hourTaskQueryDto.GroupName == "AddTime" ? it.AddTime.Date : it.EndTime.Value.Date,
  266. Hour = hourTaskQueryDto.GroupName == "AddTime" ? it.AddTime.Hour : it.EndTime.Value.Hour
  267. })
  268. .MergeTable()//将查询结果转成一个表
  269. .GroupBy(o => new { o.Type, o.Hour, o.EditTime, o.WarehouseCode })
  270. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, Hour = it.Hour, CreateTime = it.EditTime, WarehouseCode = it.WarehouseCode })
  271. .OrderBy(o => o.CreateTime);
  272. }
  273. var lists = sugarQueryable.ToList();
  274. PagedInfo<HourTaskDto> HourTasks = new PagedInfo<HourTaskDto>()
  275. {
  276. Result = new List<HourTaskDto>()
  277. };
  278. //var plist = new List<PropertyInfo>(typeof(HourTaskDto).GetProperties());
  279. var plist = typeof(HourTaskDto);
  280. var WarehouseCodes = lists.Select(o => o.WarehouseCode).Distinct().OrderBy(o => o).ToList();
  281. var types = lists.Select(o => o.Type).Distinct().OrderBy(o => o).ToList();
  282. var dates = lists.Select(o => o.CreateTime).Distinct().OrderBy(o => o).ToList();
  283. var warehouses = _baseWarehouseRepository.Queryable().Where(o => o.IsStop == 0).ToList();
  284. foreach (var warehouse in WarehouseCodes)
  285. {
  286. foreach (var p in dates)
  287. {
  288. if (!string.IsNullOrEmpty(hourTaskQueryDto.TaskType) && (hourTaskQueryDto.TaskType == "100" || hourTaskQueryDto.TaskType == "101"))
  289. {
  290. if (!lists.Any(o => o.WarehouseCode == warehouse && o.CreateTime == p))
  291. {
  292. continue;
  293. }
  294. HourTaskDto s = Activator.CreateInstance<HourTaskDto>();
  295. var warehouseCode = plist.GetProperty("WarehouseCode");
  296. if (warehouseCode != null)
  297. warehouseCode.SetValue(s, warehouse, null);
  298. var warehousename = warehouses.FirstOrDefault(o => o.Code == warehouse);
  299. var name = plist.GetProperty("WarehouseName");
  300. if (warehousename != null && name != null)
  301. name.SetValue(s, warehousename.Name, null);
  302. var TaskDate = plist.GetProperty("TaskDate");
  303. if (TaskDate != null)
  304. TaskDate.SetValue(s, p.ToString("yyyy-MM-dd"), null);
  305. var TaskType = plist.GetProperty("TaskType");
  306. if (TaskType != null)
  307. TaskType.SetValue(s, -1, null);
  308. for (int i = 0; i < 24; i++)
  309. {
  310. PropertyInfo info = plist.GetProperty("A" + i.ToString());
  311. if (info != null)
  312. {
  313. var first = lists.FirstOrDefault(o => o.WarehouseCode == warehouse && o.CreateTime == p && o.Hour == i);
  314. if (first != null)
  315. {
  316. info.SetValue(s, first.Count, null);
  317. }
  318. }
  319. }
  320. HourTasks.Result.Add(s);
  321. }
  322. else
  323. {
  324. foreach (var t in types)
  325. {
  326. if (!lists.Any(o => o.WarehouseCode == warehouse && o.CreateTime == p && o.Type == t))
  327. {
  328. continue;
  329. }
  330. HourTaskDto s = Activator.CreateInstance<HourTaskDto>();
  331. var warehouseCode = plist.GetProperty("WarehouseCode");
  332. if (warehouseCode != null)
  333. warehouseCode.SetValue(s, warehouse, null);
  334. var warehousename = warehouses.FirstOrDefault(o => o.Code == warehouse);
  335. var name = plist.GetProperty("WarehouseName");
  336. if (warehousename != null && name != null)
  337. name.SetValue(s, warehousename.Name, null);
  338. var TaskType = plist.GetProperty("TaskType");
  339. if (TaskType != null)
  340. TaskType.SetValue(s, (TaskType)t, null);
  341. var TaskDate = plist.GetProperty("TaskDate");
  342. if (TaskDate != null)
  343. TaskDate.SetValue(s, p.ToString("yyyy-MM-dd"), null);
  344. for (int i = 0; i < 24; i++)
  345. {
  346. PropertyInfo info = plist.GetProperty("A" + i.ToString());
  347. if (info != null)
  348. {
  349. var first = lists.FirstOrDefault(o => o.WarehouseCode == warehouse && o.Type == t && o.CreateTime == p && o.Hour == i);
  350. if (first != null)
  351. {
  352. info.SetValue(s, first.Count, null);
  353. }
  354. }
  355. }
  356. HourTasks.Result.Add(s);
  357. }
  358. }
  359. }
  360. }
  361. if (!pagination.sidx.IsEmpty())
  362. {
  363. pagination.sidx = pagination.sidx.Replace("DESC", "").Replace("ASC", "");
  364. HourTasks.Result.Sort(
  365. delegate (HourTaskDto info1, HourTaskDto info2)
  366. {
  367. Type t = typeof(HourTaskDto);
  368. PropertyInfo pro = t.GetProperty(pagination.sidx);
  369. if (pagination.sidx == "TaskDate" || pagination.sidx == "TypeName" || pagination.sidx == "WarehouseName")
  370. {
  371. return pagination.sord.ToLower().Contains("asc") ?
  372. pro.GetValue(info1, null).ToEmptyString().CompareTo(pro.GetValue(info2, null).ToEmptyString()) :
  373. pro.GetValue(info2, null).ToEmptyString().CompareTo(pro.GetValue(info1, null).ToEmptyString());
  374. }
  375. else
  376. return pagination.sord.ToLower().Contains("asc") ?
  377. pro.GetValue(info1, null).ToInt().CompareTo(pro.GetValue(info2, null).ToInt()) :
  378. pro.GetValue(info2, null).ToInt().CompareTo(pro.GetValue(info1, null).ToInt());
  379. });
  380. //typeof(HourTaskDto).GetProperty( pagination.sidx.Replace("DESC", "").Replace("ASC", ""))).ToList();
  381. }
  382. HourTasks.PageIndex = 1;
  383. HourTasks.PageSize = HourTasks.Result.Count;
  384. HourTasks.TotalNum = HourTasks.Result.Count;
  385. return HourTasks;
  386. }
  387. /// <summary>
  388. /// 分拣码垛数
  389. /// </summary>
  390. /// <param name="pagination"></param>
  391. /// <param name="QueryDto"></param>
  392. /// <returns></returns>
  393. public PagedInfo<PalletizingReportDto> GetPalletizingReport(Pagination pagination, PalletizingReportQueryDto QueryDto)
  394. {
  395. if (!QueryDto.EndTimeBegin.HasValue)
  396. {
  397. QueryDto.EndTimeBegin = DateTime.Now.Date;
  398. }
  399. if (!QueryDto.EndTimeEnd.HasValue)
  400. {
  401. QueryDto.EndTimeEnd = DateTime.Now.AddHours(1);
  402. }
  403. var predicate = Expressionable.Create<WCS_TaskOld>();
  404. predicate = predicate.And(m => m.BusType == "码垛入库" && m.BarCode.Contains("TP"));
  405. predicate = predicate.AndIF(!string.IsNullOrEmpty(QueryDto.WarehouseCode), m => QueryDto.WarehouseCode.Equals(m.WarehouseCode));
  406. predicate = predicate.AndIF(QueryDto.EndTimeBegin.HasValue, m => m.AddTime >= QueryDto.EndTimeBegin.Value);
  407. predicate = predicate.AndIF(QueryDto.EndTimeEnd.HasValue, m => m.AddTime <= QueryDto.EndTimeEnd.Value);
  408. ISugarQueryable<PalletizingReportDto> sugarQueryable=null;
  409. //var sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3)).Select(it => new PalletizingReportDto { });
  410. if (QueryDto.GroupName == "Hour" && QueryDto.WarehouseGroupName== "Warehouse")
  411. {
  412. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  413. .GroupBy(it => new { it.WarehouseCode, it.EditTime.Year, it.EditTime.Month, it.EditTime.Day, it.EditTime.Hour })
  414. .Select(it => new PalletizingReportDto
  415. {
  416. WarehouseCode=it.WarehouseCode,
  417. Year = it.EditTime.Year.ToString(),
  418. Month = it.EditTime.Month.ToString(),
  419. Day = it.EditTime.Day.ToString(),
  420. Hour = it.EditTime.Hour.ToString(),
  421. Qty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1).Return(1).End<int>())
  422. })
  423. .OrderBy(o => new { o.Year, o.Month, o.Day, o.Hour });
  424. }
  425. else if (QueryDto.GroupName == "Hour" && QueryDto.WarehouseGroupName != "Warehouse")
  426. {
  427. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  428. .GroupBy(it => new { it.EditTime.Year, it.EditTime.Month, it.EditTime.Day, it.EditTime.Hour })
  429. .Select(it => new PalletizingReportDto
  430. {
  431. Year = it.EditTime.Year.ToString(),
  432. Month = it.EditTime.Month.ToString(),
  433. Day = it.EditTime.Day.ToString(),
  434. Hour = it.EditTime.Hour.ToString(),
  435. Qty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1).Return(1).End<int>())
  436. })
  437. .OrderBy(o => new { o.Year, o.Month, o.Day, o.Hour });
  438. }
  439. else if (QueryDto.GroupName == "Day" && QueryDto.WarehouseGroupName == "Warehouse")
  440. {
  441. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  442. .GroupBy(it => new { it.WarehouseCode, it.EditTime.Year, it.EditTime.Month, it.EditTime.Day })
  443. .Select(it => new PalletizingReportDto
  444. {
  445. WarehouseCode = it.WarehouseCode,
  446. Year = it.EditTime.Year.ToString(),
  447. Month = it.EditTime.Month.ToString(),
  448. Day = it.EditTime.Day.ToString(),
  449. Qty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1).Return(1).End<int>())
  450. })
  451. .OrderBy(o => new { o.Year, o.Month, o.Day, o.Hour });
  452. }
  453. else if (QueryDto.GroupName == "Day" && QueryDto.WarehouseGroupName != "Warehouse")
  454. {
  455. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  456. .GroupBy(it => new { it.EditTime.Year, it.EditTime.Month, it.EditTime.Day })
  457. .Select(it => new PalletizingReportDto
  458. {
  459. Year = it.EditTime.Year.ToString(),
  460. Month = it.EditTime.Month.ToString(),
  461. Day = it.EditTime.Day.ToString(),
  462. Qty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1).Return(1).End<int>())
  463. })
  464. .OrderBy(o => new { o.Year, o.Month, o.Day });
  465. }
  466. var lists = sugarQueryable?.ToList();
  467. if ( QueryDto.WarehouseGroupName == "Warehouse")
  468. {
  469. var warehouses = _baseWarehouseRepository.Queryable().Where(o => o.IsStop == 0).ToList();
  470. foreach (var item in lists)
  471. {
  472. item.WarehouseName = warehouses.FirstOrDefault(o => o.Code == item.WarehouseCode)?.Name ?? "";
  473. }
  474. }
  475. PagedInfo<PalletizingReportDto> PalletizingReports = new PagedInfo<PalletizingReportDto>()
  476. {
  477. Result = lists
  478. };
  479. if (!pagination.sidx.IsEmpty())
  480. {
  481. pagination.sidx = pagination.sidx.Replace("DESC", "").Replace("ASC", "");
  482. PalletizingReports.Result.Sort(
  483. delegate (PalletizingReportDto info1, PalletizingReportDto info2)
  484. {
  485. Type t = typeof(PalletizingReportDto);
  486. PropertyInfo pro = t.GetProperty(pagination.sidx);
  487. if (pagination.sidx == "WarehouseCode" || pagination.sidx == "WarehouseName")
  488. {
  489. return pagination.sord.ToLower().Contains("asc") ?
  490. pro.GetValue(info1, null).ToEmptyString().CompareTo(pro.GetValue(info2, null).ToEmptyString()) :
  491. pro.GetValue(info2, null).ToEmptyString().CompareTo(pro.GetValue(info1, null).ToEmptyString());
  492. }
  493. else
  494. return pagination.sord.ToLower().Contains("asc") ?
  495. pro.GetValue(info1, null).ToInt().CompareTo(pro.GetValue(info2, null).ToInt()) :
  496. pro.GetValue(info2, null).ToInt().CompareTo(pro.GetValue(info1, null).ToInt());
  497. });
  498. }
  499. PalletizingReports.PageIndex = 1;
  500. PalletizingReports.PageSize = PalletizingReports.Result.Count;
  501. PalletizingReports.TotalNum = PalletizingReports.Result.Count;
  502. PalletizingReports.Result.Add(new PalletizingReportDto
  503. {
  504. WarehouseName = "合计:",
  505. Qty = PalletizingReports.Result.Sum(o => o.Qty)
  506. });
  507. return PalletizingReports;
  508. }
  509. public PagedInfo<InOutReportDto> GetInOutReport(Pagination pagination, InOutReportQueryDto QueryDto)
  510. {
  511. if (!QueryDto.EndTimeBegin.HasValue)
  512. {
  513. QueryDto.EndTimeBegin = DateTime.Now.Date;
  514. }
  515. if (!QueryDto.EndTimeEnd.HasValue)
  516. {
  517. QueryDto.EndTimeEnd = DateTime.Now.AddHours(1);
  518. }
  519. var predicate = Expressionable.Create<WCS_TaskOld>();
  520. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  521. predicate = predicate.And(m =>m.Type==0);
  522. predicate = predicate.AndIF(!string.IsNullOrEmpty(QueryDto.WarehouseCode), m => QueryDto.WarehouseCode.Equals(m.WarehouseCode));
  523. predicate = predicate.AndIF(QueryDto.EndTimeBegin.HasValue, m => m.AddTime >= QueryDto.EndTimeBegin.Value);
  524. predicate = predicate.AndIF(QueryDto.EndTimeEnd.HasValue, m => m.AddTime <= QueryDto.EndTimeEnd.Value);
  525. ISugarQueryable<InOutReportDto> sugarQueryable = null;
  526. if (QueryDto.GroupName == "Hour" && QueryDto.WarehouseGroupName == "Warehouse")
  527. {
  528. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  529. .GroupBy(it => new { it.WarehouseCode, it.AddTime.Year, it.AddTime.Month, it.AddTime.Day, it.AddTime.Hour })
  530. .Select(it => new InOutReportDto
  531. {
  532. WarehouseCode = SqlFunc.IF(it.WarehouseCode == "1N").Return("一北桁架")
  533. .ElseIF(it.WarehouseCode == "1S").Return("一南桁架")
  534. .ElseIF(it.WarehouseCode == "1NR").Return("一北环库")
  535. .ElseIF(it.WarehouseCode == "1SR").Return("一南环库")
  536. .ElseIF(it.WarehouseCode == "2N").Return("二北桁架")
  537. .ElseIF(it.WarehouseCode == "2S").Return("二南桁架")
  538. .ElseIF(it.WarehouseCode == "2NR").Return("二北环库")
  539. .ElseIF(it.WarehouseCode == "2SR").Return("二南环库")
  540. .ElseIF(it.WarehouseCode == "3N").Return("三北桁架")
  541. .ElseIF(it.WarehouseCode == "3S").Return("三南桁架")
  542. .ElseIF(it.WarehouseCode == "3NR").Return("三北环库")
  543. .ElseIF(it.WarehouseCode == "3SR").Return("三南环库")
  544. .End<string>() ,
  545. Year = it.AddTime.Year.ToString(),
  546. Month = it.AddTime.Month.ToString(),
  547. Day = it.AddTime.Day.ToString(),
  548. Hour = it.AddTime.Hour.ToString(),
  549. GroupQty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 0).Return(1).End<int>())
  550. }).MergeTable();
  551. }
  552. else if (QueryDto.GroupName == "Hour" && QueryDto.WarehouseGroupName != "Warehouse")
  553. {
  554. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  555. .GroupBy(it => new { it.AddTime.Year, it.AddTime.Month, it.AddTime.Day, it.AddTime.Hour })
  556. .Select(it => new InOutReportDto
  557. {
  558. Year = it.AddTime.Year.ToString(),
  559. Month = it.AddTime.Month.ToString(),
  560. Day = it.AddTime.Day.ToString(),
  561. Hour = it.AddTime.Hour.ToString(),
  562. GroupQty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 0).Return(1).End<int>())
  563. }).MergeTable();
  564. if (pagination.sidx == "Warehouse")
  565. pagination.sidx = "";
  566. }
  567. else if (QueryDto.GroupName == "Day" && QueryDto.WarehouseGroupName == "Warehouse")
  568. {
  569. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  570. .GroupBy(it => new { it.WarehouseCode, it.AddTime.Year, it.AddTime.Month, it.AddTime.Day })
  571. .Select(it => new InOutReportDto
  572. {
  573. WarehouseCode = SqlFunc.IF(it.WarehouseCode == "1N").Return("一北桁架")
  574. .ElseIF(it.WarehouseCode == "1S").Return("一南桁架")
  575. .ElseIF(it.WarehouseCode == "1NR").Return("一北环库")
  576. .ElseIF(it.WarehouseCode == "1SR").Return("一南环库")
  577. .ElseIF(it.WarehouseCode == "2N").Return("二北桁架")
  578. .ElseIF(it.WarehouseCode == "2S").Return("二南桁架")
  579. .ElseIF(it.WarehouseCode == "2NR").Return("二北环库")
  580. .ElseIF(it.WarehouseCode == "2SR").Return("二南环库")
  581. .ElseIF(it.WarehouseCode == "3N").Return("三北桁架")
  582. .ElseIF(it.WarehouseCode == "3S").Return("三南桁架")
  583. .ElseIF(it.WarehouseCode == "3NR").Return("三北环库")
  584. .ElseIF(it.WarehouseCode == "3SR").Return("三南环库")
  585. .End<string>(),
  586. Year = it.AddTime.Year.ToString(),
  587. Month = it.AddTime.Month.ToString(),
  588. Day = it.AddTime.Day.ToString(),
  589. GroupQty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 0).Return(1).End<int>())
  590. }).MergeTable();
  591. if (pagination.sidx == "Hour")
  592. pagination.sidx = "Day";
  593. }
  594. else if (QueryDto.GroupName == "Day" && QueryDto.WarehouseGroupName != "Warehouse")
  595. {
  596. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  597. .GroupBy(it => new { it.AddTime.Year, it.AddTime.Month, it.AddTime.Day })
  598. .Select(it => new InOutReportDto
  599. {
  600. Year = it.AddTime.Year.ToString(),
  601. Month = it.AddTime.Month.ToString(),
  602. Day = it.AddTime.Day.ToString(),
  603. GroupQty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 0).Return(1).End<int>())
  604. }).MergeTable();
  605. if (pagination.sidx == "Warehouse" || pagination.sidx == "Hour")
  606. pagination.sidx = "Day";
  607. }
  608. var lists = sugarQueryable.ToPage(pagination);
  609. lists.Result.Add(new InOutReportDto
  610. {
  611. WarehouseCode = "合计:",
  612. GroupQty=lists.Result.Sum(o=>o.GroupQty)
  613. });
  614. return lists;
  615. }
  616. }
  617. }