StatisticsreportService.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  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.hj;
  9. using WMS.BZSqlSugar;
  10. using WMS.BZModels.Dto.HJ.ReportDtos;
  11. using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource;
  12. using System.Reflection;
  13. using WMS.BZModels.Dto;
  14. using WMS.Util;
  15. namespace WMS.BZServices.HJ
  16. {
  17. public class StatisticsreportService
  18. {
  19. private readonly Repository<BillInvflow> _flowrepository;
  20. private readonly Repository<WCS_TaskOld> _taskoldrepository;
  21. public StatisticsreportService(Repository<BillInvflow> flowrepository, Repository<WCS_TaskOld> taskoldrepository)
  22. {
  23. _flowrepository = flowrepository;
  24. _taskoldrepository = taskoldrepository;
  25. }
  26. public PagedInfo<StatisticsDto> GetPageList(Pagination pagination, StatisticsQueryDto statisticsQueryDto)
  27. {
  28. //if (pagination.sord.ToUpper() != "ASC")
  29. //{
  30. // pagination.sidx = pagination.sidx + " DESC";
  31. //}
  32. //if (pagination.sidx.IsEmpty())
  33. //{
  34. // pagination.sidx = "AddTime DESC";
  35. //}
  36. //var predicate = Expressionable.Create<BillInvflow, WCS_TaskOld>();
  37. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.KeyWord), (flow, taskold) => flow.MatCode.Contains(statisticsQueryDto.KeyWord) || taskold.Floor.ToString() == statisticsQueryDto.KeyWord
  38. //|| taskold.Tunnel.Contains(statisticsQueryDto.KeyWord) || taskold.Device.Contains(statisticsQueryDto.KeyWord) || taskold.AddrTo.Contains(statisticsQueryDto.KeyWord) || taskold.AddrFrom.Contains(statisticsQueryDto.KeyWord));
  39. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.MatCode), (flow, taskold) => flow.MatCode.Contains(statisticsQueryDto.MatCode));
  40. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.Tunnel), (flow, taskold) => taskold.Tunnel.Contains(statisticsQueryDto.Tunnel));
  41. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.Floor), (flow, taskold) => taskold.Floor.ToString() == statisticsQueryDto.Floor);
  42. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.Device), (flow, taskold) => taskold.Device.Contains(statisticsQueryDto.Device));
  43. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.AddrFrom), (flow, taskold) => taskold.AddrFrom.Contains(statisticsQueryDto.AddrFrom));
  44. //predicate = predicate.AndIF(!string.IsNullOrEmpty(statisticsQueryDto?.AddrTo), (flow, taskold) => taskold.AddrTo.Contains(statisticsQueryDto.AddrTo));
  45. var list = GetQueryable(statisticsQueryDto).ToPage(pagination);
  46. list.Result.ForEach(o =>
  47. {
  48. o.NetWQty = Math.Round(Convert.ToDecimal(o.NetWQty), 2, MidpointRounding.AwayFromZero);
  49. });
  50. return list;
  51. }
  52. public IList<StatisticsDto> GetList(StatisticsQueryDto statisticsQueryDto)
  53. {
  54. ISugarQueryable<StatisticsDto> sugarQueryable = GetQueryable(statisticsQueryDto);
  55. var list = sugarQueryable.ToList();
  56. list.ForEach(o =>
  57. {
  58. o.NetWQty = Math.Round(Convert.ToDecimal(o.NetWQty), 3, MidpointRounding.AwayFromZero);
  59. });
  60. return list;
  61. }
  62. private ISugarQueryable<StatisticsDto> GetQueryable(StatisticsQueryDto statisticsQueryDto)
  63. {
  64. var sugarQueryable = _flowrepository.Context.Queryable<BillInvflow>()
  65. .LeftJoin<BaseMatinfo>((billInvflow, mater) => billInvflow.MatCode == mater.Code)
  66. .Where((billInvflow, mater) => billInvflow.Memo == "出库任务完成" || billInvflow.Memo == "入库任务完成")
  67. .WhereIF(!string.IsNullOrWhiteSpace(statisticsQueryDto.KeyWord), (billInvflow, mater) => mater.Code.Contains(statisticsQueryDto.KeyWord) || mater.Name.Contains(statisticsQueryDto.KeyWord))
  68. .WhereIF(!string.IsNullOrWhiteSpace(statisticsQueryDto.MatCode), (billInvflow, mater) => mater.Code.Contains(statisticsQueryDto.MatCode))
  69. .WhereIF(!string.IsNullOrWhiteSpace(statisticsQueryDto.MatName), (billInvflow, mater) => mater.Name.Contains(statisticsQueryDto.MatName))
  70. .WhereIF(statisticsQueryDto.AddTimeFrom != null && statisticsQueryDto.AddTimeFrom.HasValue, (billInvflow, mater) => billInvflow.AddTime >= statisticsQueryDto.AddTimeFrom)
  71. .WhereIF(statisticsQueryDto.AddTimeTo != null && statisticsQueryDto.AddTimeTo.HasValue, (billInvflow, mater) => billInvflow.AddTime <= statisticsQueryDto.AddTimeTo)
  72. .GroupBy((billInvflow, mater) => new { mater.Code, mater.Name, billInvflow.Floor, billInvflow.Memo })
  73. .Select((billInvflow, mater) => new StatisticsDto
  74. {
  75. MatCode = mater.Code,
  76. MatName = mater.Name,
  77. Floor = billInvflow.Floor,
  78. Type = billInvflow.Memo == "出库任务完成" ? 2 : (billInvflow.Memo == "入库任务完成" ? 1 : -1),
  79. NetWQty = SqlFunc.AggregateSum(billInvflow.NetWQty),
  80. Count = SqlFunc.AggregateDistinctCount(billInvflow.Id)
  81. }).MergeTable();
  82. //var sugarQueryable = _taskoldrepository.Context.Queryable<WCS_TaskOld>().SplitTable(p => p.Take(10))
  83. // .LeftJoin<BaseMatinfo>((taskold, mater) => taskold.MaterialCode == mater.Code)
  84. // .WhereIF(statisticsQueryDto != null && !string.IsNullOrWhiteSpace(statisticsQueryDto.Status), (taskold, mater) => taskold.Status.Equals(statisticsQueryDto.Status))
  85. // .WhereIF(!string.IsNullOrWhiteSpace(statisticsQueryDto.KeyWord), (taskold, mater) => mater.Code.Contains(statisticsQueryDto.KeyWord) || mater.Name.Contains(statisticsQueryDto.KeyWord))
  86. // .WhereIF(!string.IsNullOrWhiteSpace(statisticsQueryDto.MatCode), (taskold, mater) => mater.Code.Contains(statisticsQueryDto.MatCode))
  87. // .WhereIF(!string.IsNullOrWhiteSpace(statisticsQueryDto.MatName), (taskold, mater) => mater.Name.Contains(statisticsQueryDto.MatName))
  88. // .WhereIF(statisticsQueryDto.AddTimeFrom != null && statisticsQueryDto.AddTimeFrom.HasValue, (taskold, mater) => taskold.AddTime >= statisticsQueryDto.AddTimeFrom)
  89. // .WhereIF(statisticsQueryDto.AddTimeTo != null && statisticsQueryDto.AddTimeTo.HasValue, (taskold, mater) => taskold.AddTime <= statisticsQueryDto.AddTimeTo)
  90. // .WhereIF(statisticsQueryDto != null && statisticsQueryDto.StartTimeBegin.HasValue, (taskold, mater) => taskold.StartTime >= statisticsQueryDto.StartTimeBegin)
  91. // .WhereIF(statisticsQueryDto != null && statisticsQueryDto.StartTimeEnd.HasValue, (taskold, mater) => taskold.StartTime <= statisticsQueryDto.StartTimeEnd)
  92. // .WhereIF(statisticsQueryDto != null && statisticsQueryDto.EndTimeBegin.HasValue, (taskold, mater) => taskold.EndTime >= statisticsQueryDto.EndTimeBegin)
  93. // .WhereIF(statisticsQueryDto != null && statisticsQueryDto.EndTimeEnd.HasValue, (taskold, mater) => taskold.EndTime <= statisticsQueryDto.EndTimeEnd)
  94. // .GroupBy((taskold, mater) => new { mater.Code, mater.Name, taskold.Floor, taskold.Type })
  95. // .Select((taskold, mater) => new StatisticsDto
  96. // {
  97. // MatCode = mater.Code,
  98. // MatName = mater.Name,
  99. // Floor = taskold.Floor,
  100. // Type = taskold.Type,
  101. // NetWQty = SqlFunc.AggregateSum(Convert.ToDecimal( taskold.Weight??0.0)),
  102. // Count = SqlFunc.AggregateDistinctCount(taskold.ID)
  103. // }).MergeTable();
  104. return sugarQueryable;
  105. }
  106. /// <summary>
  107. /// 24小时内任务动态
  108. /// </summary>
  109. /// <param name="start"></param>
  110. /// <param name="end"></param>
  111. /// <returns></returns>
  112. public PagedInfo<HourTaskDto> GetHourTask(Pagination pagination, HourTaskQueryDto hourTaskQueryDto)
  113. {
  114. if (!hourTaskQueryDto.EndTimeBegin.HasValue)
  115. {
  116. hourTaskQueryDto.EndTimeBegin = DateTime.Now.Date;
  117. }
  118. if (!hourTaskQueryDto.EndTimeEnd.HasValue)
  119. {
  120. hourTaskQueryDto.EndTimeEnd = DateTime.Now.AddHours(1);
  121. }
  122. if ((hourTaskQueryDto.EndTimeEnd.Value - hourTaskQueryDto.EndTimeBegin.Value).Days > 60)
  123. {
  124. throw BZSysExCore.ThrowFailException("查询日期范围不能超过60天!");
  125. }
  126. var predicate = Expressionable.Create<WCS_TaskOld>();
  127. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  128. predicate = predicate.AndIF(!string.IsNullOrEmpty(hourTaskQueryDto.WarehouseCode), m => hourTaskQueryDto.WarehouseCode.Equals(m.WarehouseCode));
  129. predicate = predicate.AndIF(hourTaskQueryDto.EndTimeBegin.HasValue, m => m.EndTime >= hourTaskQueryDto.EndTimeBegin.Value);
  130. predicate = predicate.AndIF(hourTaskQueryDto.EndTimeEnd.HasValue, m => m.EndTime <= hourTaskQueryDto.EndTimeEnd.Value);
  131. predicate = predicate.AndIF(!string.IsNullOrEmpty(hourTaskQueryDto.TaskType) && (new string[] { "1", "2", "3", "5" }.Any(o => o.Equals(hourTaskQueryDto.TaskType))), m => m.Type.Equals(hourTaskQueryDto.TaskType));
  132. predicate = predicate.AndIF(!string.IsNullOrEmpty(hourTaskQueryDto.BusType), m => m.BusType.Equals(hourTaskQueryDto.BusType));
  133. var sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Select(it => new TaskInOutDto { });
  134. if (!string.IsNullOrEmpty(hourTaskQueryDto.TaskType) && (hourTaskQueryDto.TaskType == "100" || hourTaskQueryDto.TaskType == "101"))
  135. {
  136. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  137. .Select(it => new
  138. {
  139. EditTime = it.EndTime.Value.Date,
  140. Hour = it.EndTime.Value.Hour
  141. })
  142. .MergeTable()//将查询结果转成一个表
  143. .GroupBy(o => new { o.Hour, o.EditTime })
  144. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Hour), Hour = it.Hour, CreateTime = it.EditTime })
  145. .OrderBy(o => o.CreateTime);
  146. }
  147. else
  148. {
  149. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  150. .Select(it => new
  151. {
  152. Type = it.Type,
  153. EditTime = it.EndTime.Value.Date,
  154. Hour = it.EndTime.Value.Hour
  155. })
  156. .MergeTable()//将查询结果转成一个表
  157. .GroupBy(o => new { o.Type, o.Hour, o.EditTime })
  158. .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, Hour = it.Hour, CreateTime = it.EditTime })
  159. .OrderBy(o => o.CreateTime);
  160. }
  161. var lists = sugarQueryable.ToList();
  162. PagedInfo<HourTaskDto> HourTasks = new PagedInfo<HourTaskDto>()
  163. {
  164. Result = new List<HourTaskDto>()
  165. };
  166. var plist = typeof(HourTaskDto);
  167. var types = lists.Select(o => o.Type).Distinct().OrderBy(o => o).ToList();
  168. var dates = lists.Select(o => o.CreateTime).Distinct().OrderBy(o => o).ToList();
  169. foreach (var p in dates)
  170. {
  171. if (!string.IsNullOrEmpty(hourTaskQueryDto.TaskType) && (hourTaskQueryDto.TaskType == "100" || hourTaskQueryDto.TaskType == "101"))
  172. {
  173. if (!lists.Any(o => o.CreateTime == p))
  174. {
  175. continue;
  176. }
  177. HourTaskDto s = Activator.CreateInstance<HourTaskDto>();
  178. var TaskDate = plist.GetProperty("TaskDate");
  179. if (TaskDate != null)
  180. TaskDate.SetValue(s, p.ToString("yyyy-MM-dd"), null);
  181. var TaskType = plist.GetProperty("TaskType");
  182. if (TaskType != null)
  183. TaskType.SetValue(s, -1, null);
  184. for (int i = 0; i < 24; i++)
  185. {
  186. PropertyInfo info = plist.GetProperty("A" + i.ToString());
  187. if (info != null)
  188. {
  189. var first = lists.FirstOrDefault(o => o.CreateTime == p && o.Hour == i);
  190. if (first != null)
  191. {
  192. info.SetValue(s, first.Count, null);
  193. }
  194. }
  195. }
  196. HourTasks.Result.Add(s);
  197. }
  198. else
  199. {
  200. foreach (var t in types)
  201. {
  202. if (!lists.Any(o => o.CreateTime == p && o.Type == t))
  203. {
  204. continue;
  205. }
  206. HourTaskDto s = Activator.CreateInstance<HourTaskDto>();
  207. var TaskType = plist.GetProperty("TaskType");
  208. if (TaskType != null)
  209. TaskType.SetValue(s, (TaskType)t, null);
  210. var TaskDate = plist.GetProperty("TaskDate");
  211. if (TaskDate != null)
  212. TaskDate.SetValue(s, p.ToString("yyyy-MM-dd"), null);
  213. for (int i = 0; i < 24; i++)
  214. {
  215. PropertyInfo info = plist.GetProperty("A" + i.ToString());
  216. if (info != null)
  217. {
  218. var first = lists.FirstOrDefault(o => o.Type == t && o.CreateTime == p && o.Hour == i);
  219. if (first != null)
  220. {
  221. info.SetValue(s, first.Count, null);
  222. }
  223. }
  224. }
  225. HourTasks.Result.Add(s);
  226. }
  227. }
  228. }
  229. if (!pagination.sidx.IsEmpty())
  230. {
  231. pagination.sidx = pagination.sidx.Replace("DESC", "").Replace("ASC", "");
  232. HourTasks.Result.Sort(
  233. delegate (HourTaskDto info1, HourTaskDto info2)
  234. {
  235. Type t = typeof(HourTaskDto);
  236. PropertyInfo pro = t.GetProperty(pagination.sidx);
  237. if (pagination.sidx == "TaskDate" || pagination.sidx == "TypeName")
  238. {
  239. return pagination.sord.ToLower().Contains("asc") ?
  240. pro.GetValue(info1, null).ToString().CompareTo(pro.GetValue(info2, null).ToString()) :
  241. pro.GetValue(info2, null).ToString().CompareTo(pro.GetValue(info1, null).ToString());
  242. }
  243. else
  244. return pagination.sord.ToLower().Contains("asc") ?
  245. pro.GetValue(info1, null).ToInt().CompareTo(pro.GetValue(info2, null).ToInt()) :
  246. pro.GetValue(info2, null).ToInt().CompareTo(pro.GetValue(info1, null).ToInt());
  247. });
  248. //typeof(HourTaskDto).GetProperty( pagination.sidx.Replace("DESC", "").Replace("ASC", ""))).ToList();
  249. }
  250. HourTasks.PageIndex = 1;
  251. HourTasks.PageSize = HourTasks.Result.Count;
  252. HourTasks.TotalNum = HourTasks.Result.Count;
  253. return HourTasks;
  254. }
  255. public PagedInfo<InOutReportDto> GetInOutReport(Pagination pagination, InOutReportQueryDto queryDto)
  256. {
  257. if (!queryDto.EndTimeBegin.HasValue)
  258. {
  259. queryDto.EndTimeBegin = DateTime.Now.Date;
  260. }
  261. if (!queryDto.EndTimeEnd.HasValue)
  262. {
  263. queryDto.EndTimeEnd = DateTime.Now.AddHours(1);
  264. }
  265. var predicate = Expressionable.Create<WCS_TaskOld>();
  266. predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
  267. predicate = predicate.And(m => new string[] { "1", "2", "3", "5" }.Contains(m.Type.ToString()));
  268. predicate = predicate.AndIF(queryDto.EndTimeBegin.HasValue, m => m.EndTime >= queryDto.EndTimeBegin.Value);
  269. predicate = predicate.AndIF(queryDto.EndTimeEnd.HasValue, m => m.EndTime <= queryDto.EndTimeEnd.Value);
  270. ISugarQueryable<InOutReportDto> sugarQueryable;
  271. if (queryDto.GroupName == "Hour")
  272. {
  273. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  274. .GroupBy(it => new { it.EndTime.Value.Year, it.EndTime.Value.Month, it.EndTime.Value.Day, it.EndTime.Value.Hour })
  275. .Select(it => new InOutReportDto
  276. {
  277. Year = it.EndTime.Value.Year.ToString(),
  278. Month = it.EndTime.Value.Month.ToString(),
  279. Day = it.EndTime.Value.Day.ToString(),
  280. Hour = it.EndTime.Value.Hour.ToString(),
  281. FirstFloorFullIn = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && it.BusType == "镀铜一楼取满" && it.ProdLine != 1).Return(1).End<int>() ),
  282. ProdLine = SqlFunc.AggregateCount(SqlFunc.IF(it.ProdLine == 1).Return(1).End<int>()),
  283. CopperPlated = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 5 && it.BusType == "镀铜线补空轮").Return(1).End<int>()),
  284. TotalFirstFloorEmpty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "一楼立库出空轮" ).Return(1).End<int>()) + SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && new string[] { "1012", "1014", "1016", "1118", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1139" }.Contains(it.AddrTo) ).Return(1).End<int>()),
  285. SecondFloorEmpty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && it.BusType == "二楼湿拉空轮回立库" && !new string[] { "1012", "1014", "1016", "1118", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1139" }.Contains(it.AddrTo) ).Return(1).End<int>()),
  286. SecondFloorReturn = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && new string[] { "二楼湿拉线退料回立库", "二楼湿拉线余料回立库" }.Contains(it.BusType) ).Return(1).End<int>()),
  287. SecondFloorDeliveryTask = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "二楼湿拉自动叫料出库" ).Return(1).End<int>()),
  288. FirstFloorOutTask = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "一楼立库出空轮" ).Return(1).End<int>()),
  289. FirstFloorFullOut = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "一楼出满轮" ).Return(1).End<int>()),
  290. SecondFloorToFirstFloor = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && new string[] { "1012", "1014", "1016", "1118", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1139" }.Contains(it.AddrTo) ).Return(1).End<int>()),
  291. Relocation = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 3 ).Return(1).End<int>()),
  292. TotalInOut = SqlFunc.AggregateCount(SqlFunc.IF(new string[] { "1", "2" }.Contains(it.Type.ToString()) ).Return(1).End<int>()),
  293. TotalTask = SqlFunc.AggregateCount(SqlFunc.IF(new string[] { "1", "2", "3" }.Contains(it.Type.ToString()) ).Return(1).End<int>()),
  294. }).MergeTable();//.OrderBy(o => new { o.Year, o.Month, o.Day, o.Hour })
  295. }
  296. else
  297. {
  298. sugarQueryable = _taskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3))
  299. .GroupBy(it => new { it.EndTime.Value.Year, it.EndTime.Value.Month, it.EndTime.Value.Day })
  300. .Select(it => new InOutReportDto
  301. {
  302. Year = it.EndTime.Value.Year.ToString(),
  303. Month = it.EndTime.Value.Month.ToString(),
  304. Day = it.EndTime.Value.Day.ToString(),
  305. FirstFloorFullIn = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && it.BusType == "镀铜一楼取满" && it.ProdLine != 1).Return(1).End<int>() ),
  306. ProdLine = SqlFunc.AggregateCount(SqlFunc.IF( it.ProdLine == 1).Return(1).End<int>()),
  307. CopperPlated = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 5 && it.BusType == "镀铜线补空轮" ).Return(1).End<int>()),
  308. TotalFirstFloorEmpty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "一楼立库出空轮" ).Return(1).End<int>()) + SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && new string[] { "1012", "1014", "1016", "1118", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1139" }.Contains(it.AddrTo) ).Return(1).End<int>()),
  309. SecondFloorEmpty = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && it.BusType == "二楼湿拉空轮回立库" && !new string[] { "1012", "1014", "1016" , "1118", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1139" }.Contains(it.AddrTo) ).Return(1).End<int>()),
  310. SecondFloorReturn = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && new string[] { "二楼湿拉线退料回立库", "二楼湿拉线余料回立库" }.Contains(it.BusType) ).Return(1).End<int>()),
  311. SecondFloorDeliveryTask = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "二楼湿拉自动叫料出库" ).Return(1).End<int>()),
  312. FirstFloorOutTask = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "一楼立库出空轮" ).Return(1).End<int>()),
  313. FirstFloorFullOut = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 2 && it.BusType == "一楼出满轮" ).Return(1).End<int>()),
  314. SecondFloorToFirstFloor = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 1 && new string[] { "1012", "1014", "1016", "1118", "1131", "1132", "1133", "1134", "1135", "1136", "1137", "1139" }.Contains(it.AddrTo) ).Return(1).End<int>()),
  315. Relocation = SqlFunc.AggregateCount(SqlFunc.IF(it.Type == 3 ).Return(1).End<int>()),
  316. TotalInOut = SqlFunc.AggregateCount(SqlFunc.IF(new string[] { "1", "2" }.Contains(it.Type.ToString()) ).Return(1).End<int>()),
  317. TotalTask = SqlFunc.AggregateCount(SqlFunc.IF(new string[] { "1", "2", "3" }.Contains(it.Type.ToString())).Return(1).End<int>()),
  318. }).MergeTable(); //.OrderBy(o => new { o.Year, o.Month, o.Day })
  319. if (pagination.sidx == "Hour")
  320. pagination.sidx = "Day";
  321. }
  322. var lists = sugarQueryable.ToPage(pagination);
  323. lists.Result.Add(new InOutReportDto
  324. {
  325. Year = "合计:",
  326. FirstFloorFullIn = lists.Result.Sum(o => o.FirstFloorFullIn),
  327. ProdLine = lists.Result.Sum(o => o.ProdLine),
  328. CopperPlated = lists.Result.Sum(o => o.CopperPlated),
  329. TotalFirstFloorEmpty = lists.Result.Sum(o => o.TotalFirstFloorEmpty),
  330. SecondFloorEmpty = lists.Result.Sum(o => o.SecondFloorEmpty),
  331. SecondFloorReturn = lists.Result.Sum(o => o.SecondFloorReturn),
  332. SecondFloorDeliveryTask = lists.Result.Sum(o => o.SecondFloorDeliveryTask),
  333. FirstFloorOutTask = lists.Result.Sum(o => o.FirstFloorOutTask),
  334. FirstFloorFullOut = lists.Result.Sum(o => o.FirstFloorFullOut),
  335. SecondFloorToFirstFloor = lists.Result.Sum(o => o.SecondFloorToFirstFloor),
  336. Relocation = lists.Result.Sum(o => o.Relocation),
  337. TotalInOut = lists.Result.Sum(o => o.TotalInOut),
  338. TotalTask = lists.Result.Sum(o => o.TotalTask),
  339. });
  340. return lists;
  341. }
  342. }
  343. }