/// <summary> /// 月消费趋势 /// </summary> /// <param name="expression"></param> /// <returns></returns> public async Task <List <ChartsColumnModel> > LoadMonthColumn(Expression <Func <ConsumeEntity, bool> > expression) { DateTime now = DateTime.Now; var data = await Where(expression).GroupBy(x => new { x.Classify, Day = x.LogTime.Day }, (x, y) => new { Total = y.Sum(p => p.Amount), Classify = x.Classify, x.Day }).Select(x => x).ToListAsync(); var classifyGroup = data.GroupBy(x => x.Classify).Select(x => x.Key).ToList(); List <ChartsColumnModel> charts = new(); charts.Add(new ChartsColumnModel("总消费")); classifyGroup.ForEach(x => { ChartsColumnModel classifyColumn = new ChartsColumnModel(Enum.GetName(x)); charts.Add(classifyColumn); }); int count = 1; int day = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(DateTime.Now.Year, DateTime.Now.Month); while (count <= day) { var dayAmount = data.Where(x => x.Day == count).ToList(); charts.FirstOrDefault(x => x.name == "总消费").data.Add(dayAmount.Sum(x => x.Total)); classifyGroup.ForEach(x => { var classifyInfo = data.FirstOrDefault(p => p.Day == count && p.Classify == x)?.Total ?? 0; charts.FirstOrDefault(p => p.name == Enum.GetName(x)).data.Add(classifyInfo); }); count++; } return(charts); }
public async Task <List <ChartsColumnModel> > LoadColumn(Expression <Func <ConsumeEntity, bool> > expression) { var data = await Where(expression).GroupBy(x => new { x.Classify, Month = x.LogTime.Month }, (x, y) => new { Total = y.Sum(p => p.Amount), Classify = x.Classify, x.Month }).Select(x => x).ToListAsync(); var classifyGroup = data.GroupBy(x => x.Classify).Select(x => new { x.Key, monthDatas = x }).ToList(); List <ChartsColumnModel> charts = new(); classifyGroup.ForEach(x => { ChartsColumnModel chartsColumn = new ChartsColumnModel(Enum.GetName(x.Key)); int month = 1; while (month < 13) { if (x.monthDatas.Any(p => p.Month == month)) { chartsColumn.data.Add(x.monthDatas.FirstOrDefault(p => p.Month == month).Total); } else { chartsColumn.data.Add(0); } month++; } charts.Add(chartsColumn); }); var monthTotal = data.GroupBy(x => x.Month, (x, y) => new { Month = x, Total = y.Sum(p => p.Total) }).Select(x => x).ToList(); ChartsColumnModel chartsColumn = new ChartsColumnModel("总消费"); int month = 1; while (month < 13) { if (monthTotal.Any(p => p.Month == month)) { chartsColumn.data.Add(monthTotal.FirstOrDefault(p => p.Month == month).Total); } else { chartsColumn.data.Add(0); } month++; } charts.Insert(0, chartsColumn); return(charts); }