123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- using SqlSugar;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using wms.sqlsugar.model.pt;
- using WMS.BZModels;
- using WMS.BZModels.Dto;
- using WMS.BZSqlSugar;
- namespace WMS.BZServices.PT
- {
- public class AdminDesktopHomeService
- {
- private readonly Repository<WCS_TaskOld> _wcstaskoldrepository;
- private readonly Repository<BillInvnow> _billInvnowrepository;
- public AdminDesktopHomeService(Repository<WCS_TaskOld> wcstaskoldrepository, Repository<BillInvnow> billInvnowrepository)
- {
- _wcstaskoldrepository = wcstaskoldrepository;
- _billInvnowrepository = billInvnowrepository;
- }
- /// <summary>
- /// 今日出入库统计
- /// </summary>
- public TodayTaskInOutPieDto GetTodayTaskInOutPie(DateTime todaystart, DateTime todayend)
- {
- TodayTaskInOutPieDto todayTaskInOutPieDto = new TodayTaskInOutPieDto();
- var valuenames = new List<ValueName<int>>();
- var lists = TaskInOutQueryable(todaystart, todayend).ToList();
- foreach (var item in BZModels.Extensions.EnumToList<TaskType>().Where(o => new int[] { 2, 1, 5 }.Contains(o.id)))
- {
- var task = lists.FirstOrDefault(o => o.Type == item.id);
- if (task != null)
- {
- valuenames.Add(new ValueName<int>() { Value = task.Count, Name = item.text });
- todayTaskInOutPieDto.Total += task.Count;
- }
- else
- {
- valuenames.Add(new ValueName<int>() { Value = 0, Name = item.text });
- }
- }
- todayTaskInOutPieDto.Tasks = valuenames;
- return todayTaskInOutPieDto;
- }
- /// <summary>
- /// 近七天任务动态
- /// </summary>
- /// <returns></returns>
- public Models Get7daysTaskBar(DateTime start, DateTime end)
- {
- Models models = new Models() { Series = new List<Series>() };
- var lists = TaskInOutQueryable(start, end).ToList();
- //models.XAxis = lists.OrderBy(o => o.CreateTime).Select(o => o.CreateTime.ToString("M-dd")).Distinct().ToArray();
- //models.Series.Add(new Series { Name = "出库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.OutDepot).Select(o => o.Count).ToArray() });
- //models.Series.Add(new Series { Name = "入库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.EnterDepot).Select(o => o.Count).ToArray() });
- //models.Series.Add(new Series { Name = "移库", Data = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.TransferDepot).Select(o => o.Count).ToArray() });
- 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];
- for (int i = 0; i < (end - start).TotalDays; i++)
- {
- var date = start.AddDays(i);
- models.XAxis[i] = date.ToString("M-d");
- Outints[i] = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.OutDepot && o.CreateTime.Date == date.Date).Select(o => o.Count).FirstOrDefault(0);
- EnterDepots[i] = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.EnterDepot && o.CreateTime.Date == date.Date).Select(o => o.Count).FirstOrDefault(0);
- TransferDepots[i] = lists.OrderBy(o => o.CreateTime).Where(o => o.Type == (int)TaskType.Delivery && o.CreateTime.Date == date.Date).Select(o => o.Count).FirstOrDefault(0);
- }
- models.Series.Add(new Series { Name = "出库", Data = Outints });
- models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
- models.Series.Add(new Series { Name = "移动", Data = TransferDepots });
- return models;
- }
- public ISugarQueryable<TaskInOutDto> TaskInOutQueryable(DateTime? start, DateTime? end)
- {
- var predicate = Expressionable.Create<WCS_TaskOld>();
- predicate = predicate.And(m => m.Status == (int)BZModels.TaskStatus.Finish);
- predicate = predicate.AndIF(start.HasValue && start.Value != DateTime.MinValue, m => m.EndTime >= start.Value.Date);
- predicate = predicate.AndIF(end.HasValue && end.Value != DateTime.MinValue, m => m.EndTime <= DateTime.Parse(end.Value.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,
- CreateTime = it.EndTime.Value.Date
- })
- .MergeTable()//将查询结果转成一个表
- .GroupBy(o => new { o.Type, o.CreateTime })
- .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), Type = it.Type, CreateTime = it.CreateTime });
- return sugarQueryable;
- }
- /// <summary>
- /// 24小时内任务动态
- /// </summary>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <returns></returns>
- public Models GettodaysHourTask(DateTime start, DateTime end)
- {
- Models models = new Models() { Series = new List<Series>() };
- var predicate = Expressionable.Create<WCS_TaskOld>();
- 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,
- Hour = it.EndTime.Value.Hour
- })
- .MergeTable()//将查询结果转成一个表
- .GroupBy(o => new { o.Type, o.Hour })
- .Select(it => new TaskInOutDto { Count = SqlFunc.AggregateCount(it.Type), 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];
- //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 == (int)TaskType.OutDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
- Outints[i] = Outqty;
- var EnterDepotqty = lists.Where(o => o.Type == (int)TaskType.EnterDepot && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
- EnterDepots[i] = EnterDepotqty;
- var TransferDepotqty = lists.Where(o => o.Type == (int)TaskType.Delivery && o.Hour == i).Select(o => o.Count).FirstOrDefault(0);
- TransferDepots[i] = TransferDepotqty;
- }
- models.Series.Add(new Series { Name = "出库", Data = Outints });
- models.Series.Add(new Series { Name = "入库", Data = EnterDepots });
- models.Series.Add(new Series { Name = "移动", Data = TransferDepots });
- return models;
- }
- public List<ValueName<decimal>> GetMatWeightCategory()
- {
- var valuenames = new List<ValueName<decimal>>();
- var lists = _billInvnowrepository.Queryable()
- .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;
- }
- }
- }
|