using SqlSugar; using WMS.BZModels; using WMS.BZModels.Dto; using WMS.BZModels.Models.KLHC; using WMS.BZSqlSugar; using WMS.Info; namespace WMS.BZServices.KLHC { public class AdminDesktopHomeService { private readonly Repository _wcstaskoldrepository; private readonly Repository _baseWarehouseRepository; private readonly Repository _billInvnowrepository; public AdminDesktopHomeService(Repository wcstaskoldrepository, Repository billInvnowrepository, Repository baseWarehouseRepository) { _wcstaskoldrepository = wcstaskoldrepository; _billInvnowrepository = billInvnowrepository; _baseWarehouseRepository = baseWarehouseRepository; } /// /// 今日出入库统计 /// public TodayTaskInOutPieDto GetTodayTaskInOutPie(DateTime todaystart, DateTime todayend, string warehouse) { TodayTaskInOutPieDto todayTaskInOutPieDto = new TodayTaskInOutPieDto(); var valuenames = new List>(); var lists = TaskInOutQueryable(todaystart, todayend, warehouse).ToList(); //出库 入库 var outs = lists.Where(o => o.Type == 2).Sum(o => o.Count * o.FullQty); valuenames.Add(new ValueName() { Value = outs, Name = "出库" }); var ins = lists.Where(o => o.Type == 1).Sum(o => o.Count); valuenames.Add(new ValueName() { Value = ins, Name = "入库" }); todayTaskInOutPieDto.Total += valuenames.Sum(o => o.Value); todayTaskInOutPieDto.Tasks = valuenames; return todayTaskInOutPieDto; } /// /// 近七天任务动态 /// /// public Models Get7daysTaskBar(DateTime start, DateTime end, string warehouse) { Models models = new Models() { Series = new List() }; var lists = TaskInOutQueryable(start.Date, DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59"), warehouse).ToList(); models.XAxis = new string[7]; //lists.OrderBy(o => o.CreateTime).Select(o => o.CreateTime.ToString("M-dd")).Distinct().ToArray(); int[] Outints = new int[7]; int[] EnterDepots = new int[7]; int[] TransferDepots = new int[7]; int[] SetPlate = new int[7]; for (int i = 0; i < (end - start).TotalDays - 1; i++) { var date = start.AddDays(i); models.XAxis[i] = date.ToString("M-d"); //if (DateTime.Now.Hour <= 8) //{ // continue; //} var starttime = new DateTime(date.Year, date.Month, date.Day, 8, 0, 0); var endtime = starttime.AddDays(1); Outints[i] = lists.Where(o => o.Type == 2 && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count * o.FullQty); EnterDepots[i] = lists.Where(o => o.Type == 1 && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count); } models.Series.Add(new Series { Name = "出库", Data = Outints }); models.Series.Add(new Series { Name = "入库", Data = EnterDepots }); return models; } public ISugarQueryable TaskInOutQueryable(DateTime? start, DateTime? end, string warehouse) { string[] warehousecodes = GetWearhouseCodes(warehouse); var predicate = Expressionable.Create(); predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish); predicate = predicate.AndIF(start != null && start.HasValue && start.Value != DateTime.MinValue, m => m.EndTime >= start.Value); predicate = predicate.AndIF(end != null && end.HasValue && end.Value != DateTime.MinValue, m => m.EndTime <= end.Value); var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3)) .Select(it => new { Type = it.Type, CreateTime = it.EndTime.Value, FullQty = it.FullQty }) .MergeTable()//将查询结果转成一个表 .GroupBy(o => new { o.Type, o.CreateTime, o.FullQty }) .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, CreateTime = it.CreateTime, FullQty = it.FullQty }); var a = sugarQueryable.ToList(); return sugarQueryable; } private long[] GetWearhouseIds(string warehouse) { var list = _baseWarehouseRepository.Queryable().Where(o => o.IsStop == 0).ToArray(); if (warehouse == "fjall") { return list.Select(o => o.Id).ToArray(); } else { warehouse = warehouse.Replace("fj", ""); long[] warehouseIds = list.Where(o => o.Code.Contains(warehouse)).Select(o => o.Id).ToArray(); return warehouseIds; } } private string[] GetWearhouseCodes(string warehouse) { var list = _baseWarehouseRepository.Queryable().Where(o => o.IsStop == 0).Select(o => o.Code).ToArray(); if (warehouse == "fjall") { return list.ToArray(); } else { warehouse = warehouse.Replace("fj", ""); string[] warehousecodes = list.Where(o => o.Contains(warehouse)).ToArray(); return warehousecodes; } } /// /// 24小时内任务动态 /// /// /// /// public Models GettodaysHourTask(DateTime start, DateTime end, string warehouse) { Models models = new Models() { Series = new List() }; string[] warehousecodes = GetWearhouseCodes(warehouse); var predicate = Expressionable.Create(); predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish); predicate = predicate.AndIF(start != DateTime.MinValue, m => m.EndTime >= start.Date); predicate = predicate.AndIF(end != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59")); var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3)) .Select(it => new { Type = it.Type, FullQty = it.FullQty, Hour = it.EndTime.Value.Hour }) .MergeTable()//将查询结果转成一个表 .GroupBy(o => new { o.Type, o.FullQty, o.Hour }) .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), FullQty = it.FullQty, Type = it.Type, Hour = it.Hour }); var lists = sugarQueryable.ToList(); models.XAxis = new string[24]; //lists.OrderBy(o => o.Hour).Select(o => o.Hour.ToString()).Distinct().ToArray(); int[] Outints = new int[24]; int[] EnterDepots = new int[24]; int[] TransferDepots = new int[24]; int[] SetPlate = new int[24]; //for (int i = 0; i < models.XAxis.Length; i++) //{ // var Outqty = lists.Where(o => o.Type == (int)TaskType.OutDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0); // Outints[i] = Outqty; // var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0); // EnterDepots[i] = EnterDepotqty; // var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour.ToString() == models.XAxis[i]).Select(o => o.Count).FirstOrDefault(0); // TransferDepots[i] = TransferDepotqty; //} for (int i = 0; i < 24; i++) { models.XAxis[i] = i.ToString(); var Outqty = lists.Where(o => o.Type == 2 && o.Hour == i).Sum(o => o.Count * o.FullQty); Outints[i] = Outqty; var EnterDepotqty = lists.Where(o => o.Type == 1 && o.Hour == i).Sum(o => o.Count); EnterDepots[i] = EnterDepotqty; } models.Series.Add(new Series { Name = "出库", Data = Outints }); models.Series.Add(new Series { Name = "入库", Data = EnterDepots }); return models; } public Models GetHourTask(DateTime start, DateTime end, string warehouse) { Models models = new Models() { Series = new List() }; string[] warehousecodes = GetWearhouseCodes(warehouse); var predicate = Expressionable.Create(); predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish); predicate = predicate.AndIF(start != DateTime.MinValue, m => m.EndTime >= start.Date); predicate = predicate.AndIF(end != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Date.ToString("yyyy-MM-dd") + " 23:59:59")); var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3)) .Select(it => new { Type = it.Type, FullQty = it.FullQty, Hour = it.EndTime.Value.Hour, Day = it.EndTime.Value.Day, }) .MergeTable()//将查询结果转成一个表 .GroupBy(o => new { o.Type, o.FullQty, o.Hour, o.Day }) .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), FullQty = it.FullQty, Type = it.Type, Hour = it.Hour, Day = it.Day }); var lists = sugarQueryable.ToList(); //models.XAxis = new string[24]; //lists.OrderBy(o => o.Hour).Select(o => o.Hour.ToString()).Distinct().ToArray(); var XAxis = new List(); var Outints = new List(); var EnterDepots = new List(); var TransferDepots = new List(); var SetPlate = new List(); foreach (var item in new int[] { start.Day, end.Day }) { for (int i = 0; i < 24; i++) { //XAxis.Add(item+"-"+i.ToString()); XAxis.Add(i.ToString()); //models.XAxis[i] = i.ToString(); var Outqty = lists.Where(o => o.Type == 2 && o.Hour == i && o.Day == item).Sum(o => o.Count * o.FullQty); Outints.Add(Outqty); var EnterDepotqty = lists.Where(o => o.Type == 1 && o.Hour == i && o.Day == item).Sum(o => o.Count); EnterDepots.Add(EnterDepotqty); } } models.XAxis = XAxis.ToArray(); models.Series.Add(new Series { Name = "出库", Data = Outints.ToArray() }); models.Series.Add(new Series { Name = "入库", Data = EnterDepots.ToArray() }); return models; } public ISugarQueryable TaskGoodsTypeQueryable(DateTime? start, DateTime? end, string warehouse) { string[] warehousecodes = GetWearhouseCodes(warehouse); var predicate = Expressionable.Create(); predicate = predicate.And(m => m.Type == 1 || m.Type == 2); predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish); predicate = predicate.AndIF(start != null && start.HasValue && start.Value != DateTime.MinValue, m => m.EndTime >= start.Value); predicate = predicate.AndIF(end != null && end.HasValue && end.Value != DateTime.MinValue, m => m.EndTime <= end.Value); var sugarQueryable = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(2)) .Select(x => new TaskInOutDto { Type = x.Type, Count = x.Height, FullQty = x.FullQty }); return sugarQueryable; } public List> GetTaskGoodsTypes(DateTime todaystart, DateTime todayend, string warehouse) { var valuenames = new List>(); long[] warehouseIds = GetWearhouseIds(warehouse); var a = TaskGoodsTypeQueryable(todaystart, todayend, warehouse).ToList(); var lists = TaskGoodsTypeQueryable(todaystart, todayend, warehouse).ToList().GroupBy(x => x.Count).Select(x => { var count = 0; count += x.Where(x => x.Type == 1).Count(); count += x.Where(x => x.Type == 2).Sum(s => s.FullQty); return new TaskInOutDto { Type = x.Key, Count = count }; }).ToList(); decimal total = 0; for (int i = 0; i < lists.Count; i++) { if (i < 5) { valuenames.Add(new ValueName { Value = lists[i].Count, Name = lists[i].Type.ToString() }); } else { total += lists[i].Count; } } valuenames.Add(new ValueName { Value = total, Name = "其他" }); return valuenames; } public List> GetMatWeightCategory(string warehouse) { var valuenames = new List>(); long[] warehouseIds = GetWearhouseIds(warehouse); var lists = _billInvnowrepository.Queryable().Where(o => warehouseIds.Contains(o.WarehouseId)) .Select(it => new { matname = it.MatName, tolwqty = SqlFunc.AggregateSum(it.TolWQty) }) .GroupBy(o => o.matname).OrderByDescending(o => o.tolwqty).ToList(); decimal total = 0; for (int i = 0; i < lists.Count; i++) { if (i < 5) { valuenames.Add(new ValueName { Value = lists[i].tolwqty, Name = lists[i].matname }); } else { total += lists[i].tolwqty; } } valuenames.Add(new ValueName { Value = total, Name = "其他" }); return valuenames; } private string[] WarehouseNames = new string[] { "分拣一", "分拣二", "分拣三" }; public PagedInfo GetDailyStatistics(Pagination pagination, DateTime? start, DateTime? end) { var predicate = Expressionable.Create(); predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish); predicate = predicate.And(m => m.EndTime >= start); predicate = predicate.And(m => m.EndTime <= end); var TaskStatisticsLists = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(tabs => tabs.Take(3)) .GroupBy(o => new { o.WarehouseCode, o.BusType, o.Type }).Select(it => new TaskStatisticsDto { WarehouseCode = it.WarehouseCode, BusType = it.BusType, Type = it.Type, Count = SqlFunc.AggregateCount(it.WarehouseCode), }).ToList(); //满托异常 var taskErrorLists = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(m => m.Status == (int)BZModels.TaskStatus.Finish) .Where(m => m.EditTime >= start).Where(m => m.EditTime <= end).Where(m => m.MaterialCode.StartsWith("Error")) .SplitTable(tabs => tabs.Take(3)) .GroupBy(o => new { o.WarehouseCode }) .Select(it => new TaskStatisticsDto { WarehouseCode = it.WarehouseCode, Count = SqlFunc.AggregateCount(it.WarehouseCode), }).ToList(); var task = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).SplitTable(tabs => tabs.Take(3)); PagedInfo pagedInfos = new PagedInfo() { Result = new List() }; for (int i = 0; i < WarehouseNames.Length; i++) { var code = i + 1; var mod = new DailyStatisticsDto { WarehouseName = WarehouseNames[i], 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), 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), 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), 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), DailySummary = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.Type == 0).Sum(o => o.Count), FullNormalQty = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.BusType == "车间叫料").Sum(o => o.Count), EmptyAbnormalQty = taskErrorLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString())).Sum(o => o.Count), EmptyWarehouseQty = TaskStatisticsLists.Where(o => !string.IsNullOrEmpty(o.WarehouseCode) && o.WarehouseCode.Contains(code.ToString()) && o.BusType == "皮盘入库").Sum(o => o.Count), }; pagedInfos.Result.Add(mod); } return pagedInfos; } } }