123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- using SqlSugar;
- using wms.sqlsugar.model.fj;
- using WMS.BZModels;
- using WMS.BZModels.Dto;
- using WMS.BZSqlSugar;
- using WMS.Info;
- namespace WMS.BZServices.FJ
- {
- public class AdminDesktopHomeService
- {
- private readonly Repository<WCS_TaskOld> _wcstaskoldrepository;
- private readonly Repository<BaseWarehouse> _baseWarehouseRepository;
- private readonly Repository<BillInvnow> _billInvnowrepository;
- private readonly Repository<WCS_AgvTaskInfo> _agvtaskrepository;
- public AdminDesktopHomeService(Repository<WCS_TaskOld> wcstaskoldrepository, Repository<BillInvnow> billInvnowrepository,
- Repository<BaseWarehouse> baseWarehouseRepository, Repository<WCS_AgvTaskInfo> agvtaskrepository)
- {
- _wcstaskoldrepository = wcstaskoldrepository;
- _billInvnowrepository = billInvnowrepository;
- _baseWarehouseRepository = baseWarehouseRepository;
- _agvtaskrepository = agvtaskrepository;
- }
- /// <summary>
- /// 今日出入库统计
- /// </summary>
- public TodayTaskInOutPieDto GetTodayTaskInOutPie(DateTime todaystart, DateTime todayend, string warehouse)
- {
- TodayTaskInOutPieDto todayTaskInOutPieDto = new TodayTaskInOutPieDto();
- var valuenames = new List<ValueName<int>>();
- var lists = TaskInOutQueryable(todaystart, todayend, warehouse).ToList();
- //出库 入库
- var outs = lists.Where(o => o.BusType == "车间叫料").Sum(o => o.Count);
- valuenames.Add(new ValueName<int>() { Value = outs, Name = "出库" });
- var ins = lists.Where(o => o.BusType == "码垛入库").Sum(o => o.Count);
- valuenames.Add(new ValueName<int>() { Value = ins, Name = "入库" });
- // 移库 组盘
- foreach (var item in BZModels.Extensions.EnumToList<TaskType>().Where(o => new int[] { 3, 0 }.Contains(o.id)))
- {
- var task = lists.Where(o => o.Type == item.id).Sum(o => o.Count);
- valuenames.Add(new ValueName<int>() { Value = task, Name = item.text });
- }
- todayTaskInOutPieDto.Total += valuenames.Sum(o => o.Value);
- todayTaskInOutPieDto.Tasks = valuenames;
- return todayTaskInOutPieDto;
- }
- /// <summary>
- /// 近七天任务动态
- /// </summary>
- /// <returns></returns>
- public Models Get7daysTaskBar(DateTime start, DateTime end, string warehouse)
- {
- Models models = new Models() { Series = new List<Series>() };
- 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.BusType == "车间叫料" && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count);
- EnterDepots[i] = lists.Where(o => o.BusType == "码垛入库" && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count);
- TransferDepots[i] = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.CreateTime >= starttime && o.CreateTime <= endtime).Sum(o => o.Count);
- SetPlate[i] = lists.Where(o => o.Type == (int)TaskType.SetPlate && 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 });
- models.Series.Add(new Series { Name = "移库", Data = TransferDepots });
- models.Series.Add(new Series { Name = "组盘", Data = SetPlate });
- return models;
- }
- public ISugarQueryable<TaskInOutDto> TaskInOutQueryable(DateTime? start, DateTime? end, string warehouse)
- {
- string[] warehousecodes = GetWearhouseCodes(warehouse);
- var predicate = Expressionable.Create<WCS_TaskOld>();
- predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
- predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
- 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,
- BusType = it.BusType,
- CreateTime = it.EndTime.Value
- })
- .MergeTable()//将查询结果转成一个表
- .GroupBy(o => new { o.Type, o.BusType, o.CreateTime })
- .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, BusType = it.BusType, CreateTime = it.CreateTime });
- 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;
- }
- }
- /// <summary>
- /// 24小时内任务动态
- /// </summary>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <returns></returns>
- public Models GettodaysHourTask(DateTime start, DateTime end, string warehouse)
- {
- Models models = new Models() { Series = new List<Series>() };
- string[] warehousecodes = GetWearhouseCodes(warehouse);
- var predicate = Expressionable.Create<WCS_TaskOld>();
- predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
- predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
- 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,
- BusType = it.BusType,
- Hour = it.EndTime.Value.Hour
- })
- .MergeTable()//将查询结果转成一个表
- .GroupBy(o => new { o.Type, o.BusType, o.Hour })
- .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), BusType = it.BusType, 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.BusType == "车间叫料" && o.Hour == i).Sum(o => o.Count);
- Outints[i] = Outqty;
- var EnterDepotqty = lists.Where(o => o.BusType == "码垛入库" && o.Hour == i).Sum(o => o.Count);
- EnterDepots[i] = EnterDepotqty;
- var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour == i).Sum(o => o.Count);
- TransferDepots[i] = TransferDepotqty;
- var SetPlateQty = lists.Where(o => o.Type == (int)TaskType.SetPlate && o.Hour == i).Sum(o => o.Count);
- SetPlate[i] = SetPlateQty;
- }
- models.Series.Add(new Series { Name = "出库", Data = Outints });
- models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
- models.Series.Add(new Series { Name = "移库", Data = TransferDepots });
- models.Series.Add(new Series { Name = "组盘", Data = SetPlate });
- return models;
- }
- public Models GetHourTask(DateTime start, DateTime end, string warehouse)
- {
- Models models = new Models() { Series = new List<Series>() };
- string[] warehousecodes = GetWearhouseCodes(warehouse);
- var predicate = Expressionable.Create<WCS_TaskOld>();
- predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
- predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
- 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,
- BusType = it.BusType,
- Hour = it.EndTime.Value.Hour,
- Day = it.EndTime.Value.Day,
- })
- .MergeTable()//将查询结果转成一个表
- .GroupBy(o => new { o.Type, o.BusType, o.Hour, o.Day })
- .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), BusType = it.BusType, 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<string>();
- var Outints = new List<int>();
- var EnterDepots = new List<int>();
- var TransferDepots = new List<int>();
- var SetPlate = new List<int>();
- 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.BusType == "车间叫料" && o.Hour == i && o.Day == item).Sum(o => o.Count);
- Outints.Add(Outqty);
- var EnterDepotqty = lists.Where(o => o.BusType == "码垛入库" && o.Hour == i && o.Day == item).Sum(o => o.Count);
- EnterDepots.Add(EnterDepotqty);
- var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.TransferDepot && o.Hour == i && o.Day == item).Sum(o => o.Count);
- TransferDepots.Add(TransferDepotqty);
- var SetPlateQty = lists.Where(o => o.Type == (int)TaskType.SetPlate && o.Hour == i && o.Day == item).Sum(o => o.Count);
- SetPlate.Add(SetPlateQty);
- }
- }
- models.XAxis = XAxis.ToArray();
- models.Series.Add(new Series { Name = "出库", Data = Outints.ToArray() });
- models.Series.Add(new Series { Name = "入库", Data = EnterDepots.ToArray() });
- models.Series.Add(new Series { Name = "移库", Data = TransferDepots.ToArray() });
- models.Series.Add(new Series { Name = "组盘", Data = SetPlate.ToArray() });
- return models;
- }
- public ISugarQueryable<TaskInOutDto> TaskGoodsTypeQueryable(DateTime? start, DateTime? end, string warehouse)
- {
- string[] warehousecodes = GetWearhouseCodes(warehouse);
- var predicate = Expressionable.Create<WCS_TaskOld>();
- predicate = predicate.And(m => m.Type == 0);
- predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
- predicate = predicate.And(m => warehousecodes.Contains(m.WarehouseCode));
- 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))
- .GroupBy(o => new { o.GoodsType })
- .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.GoodsType), Type = it.GoodsType });
- return sugarQueryable;
- }
- public List<ValueName<decimal>> GetTaskGoodsTypes(DateTime todaystart, DateTime todayend, string warehouse)
- {
- var valuenames = new List<ValueName<decimal>>();
- long[] warehouseIds = GetWearhouseIds(warehouse);
- var lists = TaskGoodsTypeQueryable(todaystart, todayend, warehouse).ToList();
- decimal total = 0;
- for (int i = 0; i < lists.Count; i++)
- {
- if (i < 5)
- {
- valuenames.Add(new ValueName<decimal> { Value = lists[i].Count, Name = lists[i].Type.ToString() });
- }
- else
- {
- total += lists[i].Count;
- }
- }
- valuenames.Add(new ValueName<decimal> { Value = total, Name = "其他" });
- return valuenames;
- }
- public List<ValueName<decimal>> GetMatWeightCategory(string warehouse)
- {
- var valuenames = new List<ValueName<decimal>>();
- 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<decimal> { Value = lists[i].tolwqty, Name = lists[i].matname });
- }
- else
- {
- total += lists[i].tolwqty;
- }
- }
- valuenames.Add(new ValueName<decimal> { Value = total, Name = "其他" });
- return valuenames;
- }
- private string[] WarehouseNames = new string[] { "分拣一", "分拣二", "分拣三" };
- public PagedInfo<DailyStatisticsDto> GetDailyStatistics(Pagination pagination, DateTime? start, DateTime? end)
- {
- var predicate = Expressionable.Create<WCS_TaskOld>();
- 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 agv = _agvtaskrepository.Queryable().With(SqlWith.NoLock).SplitTable(tabs => tabs.Take(3));
- var task = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).SplitTable(tabs => tabs.Take(3));
- var agvTaskLists = agv.LeftJoin(task, (agvTaskInfo, taskOld) => agvTaskInfo.TaskId == taskOld.ID)
- .Where((agvTaskInfo, taskOld) => agvTaskInfo.TaskType == 1 && agvTaskInfo.Status == (int)BZModels.TaskStatus.Finish)
- .Where((agvTaskInfo, taskOld) => agvTaskInfo.EditTime >= start && agvTaskInfo.EditTime <= end)
- .GroupBy((agvTaskInfo, taskOld) => new { taskOld.WarehouseCode })
- .Select((agvTaskInfo, taskOld) => new TaskStatisticsDto
- {
- WarehouseCode = taskOld.WarehouseCode,
- Count = SqlFunc.AggregateCount(taskOld.WarehouseCode)
- }).ToList();
- PagedInfo<DailyStatisticsDto> pagedInfos = new PagedInfo<DailyStatisticsDto>()
- {
- Result = new List<DailyStatisticsDto>()
- };
- 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),
- 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),
- 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;
- }
- }
- }
|