//-------------------------------Вспомогательные методы---------------------------------------- //Проверка, входит ли дата в указанный период private bool dateIsSuitable(string date, StatisticsPeriod period) { //Разбиваем строку с датой на день, месяц и год string[] sep_date = date.Split(new char[] { '.' }); //Вычисляем текущую дату DateTime now = DateTime.Now; //Разбиваем now на дату и время string[] date_time = now.ToString("dd.MM.yyyy H:mm:ss").Split(new char[] { ' ' }); //Разбиваем дату на день, месяц и год string[] cur_date = date_time[0].Split(new char[] { '.' }); switch (period) { case StatisticsPeriod.Week: return(periodNoMoreThanWeek(sep_date, cur_date)); case StatisticsPeriod.Month: return(periodNoMoreThanMonth(sep_date, cur_date)); default: return(periodNoMoreThanYear(sep_date, cur_date)); } }
public async Task <IEnumerable <Statistics> > Get( StatisticsPeriod period, Int32Parameter cycle, Int32Parameter level, TimestampParameter timestamp, DateTimeParameter date, SortParameter sort, OffsetParameter offset, int limit, Symbols quote) { var sql = new SqlBuilder(@"SELECT * FROM ""Statistics"""); if (period == StatisticsPeriod.Cyclic) { sql.Filter(@"""Cycle"" IS NOT NULL"); } else if (period == StatisticsPeriod.Daily) { sql.Filter(@"""Date"" IS NOT NULL"); } sql.Filter("Cycle", cycle) .Filter("Level", level) .Filter("Level", timestamp) .Filter("Date", date) .Take(sort, offset, limit, x => x switch { "level" => ("Level", "Level"), "cycle" => ("Cycle", "Cycle"), "date" => ("Date", "Date"), _ => ("Id", "Id") });
private void setStatistics(StatisticsPeriod period) { if (_history.Count == 0) //Если операций нет { return; //То показывать нечего } _chart_source.Clear(); ch_statistics.Series["series"].Points.Clear(); //Заполняем источник данных для диаграммы foreach (Label label in _history) { //Разбиваем текст каждой записи на массив слов string[] label_text = label.Content.ToString().Split(new char[] { ' ' }); //Проверка, совпадает ли критерий "Получено/Потрачено" if (((ComboBoxItem)cb_expenses_income.SelectedItem).Content.ToString().ToLower() == "расходы" && label_text[2] == "получено" || ((ComboBoxItem)cb_expenses_income.SelectedItem).Content.ToString().ToLower() == "доходы" && label_text[2] == "потрачено") { continue; } //Проверяем, входит ли дата операции в нужный периодW if (!dateIsSuitable(label_text[0], period)) { break; } //Проверяем, добавлена ли текущая категория в диаграмму if (categoryExists(_chart_source, label_text)) //Если категория уже есть в диаграмме { //То обновляем существующее значение string key = label_text[6]; //Собираем в одну строку название категории for (int i = 7; i < label_text.Length; ++i) { key += " " + label_text[i]; } _chart_source[key] += Int32.Parse(label_text[3]); } else { //Иначе - добавляем новый элемент string key = label_text[6]; //Собираем в одну строку название категории for (int i = 7; i < label_text.Length; ++i) { key += " " + label_text[i]; } _chart_source.Add(key, Int32.Parse(label_text[3])); } } if (_chart_source.Count == 0) //Если не нашлось подходящих записей { lb_statistics.Text = String.Empty; return; //нечего рисовать на диаграмме } Dictionary <string, int> .KeyCollection key_coll = _chart_source.Keys; foreach (string key in key_coll) { ch_statistics.Series["series"].Points.AddXY(key, _chart_source[key]); } //Настройка текста под графиком setStatisticsText(_chart_source); }
public async Task <AjaxResult> TrendStatisticsAnalysis(DateTime startDate, DateTime endDate, StatisticsPeriod period) { return(await AjaxResult.Business(async result => { if (startDate >= endDate) { throw new BussinessException("此时间段不受支持"); } var(amountColumn, quantityColumn) = await _statisticsContract.TrendStatisticsAnalysisAsync(startDate, endDate, period); result.Success(new { amountColumn, quantityColumn }); })); }
public async Task <ValueTuple <ColumnChartDto, ColumnChartDto> > TrendStatisticsAnalysisAsync(DateTime startDate, DateTime endDate, StatisticsPeriod period) { var datas = await _saleOrderRepo.Query() .Where(po => po.DateTime != null && po.DateTime >= startDate && po.DateTime <= endDate) .Select(po => new { X = period == StatisticsPeriod.Month ? po.DateTime.Value.Month : po.DateTime.Value.Year, Amount = po.TotalAmount, Quantity = po.TotalQuantity }) .GroupBy(o => o.X) .OrderBy(o => o.Key) .ToListAsync(); var amountColumn = new ColumnChartDto { Data = datas.Select(d => new ColumnDto { Xpos = d.Key.ToString(), Ypos = d.Sum(t => t.Amount) }).ToList() }; var quantityColumn = new ColumnChartDto { Data = datas.Select(d => new ColumnDto { Xpos = d.Key.ToString(), Ypos = d.Sum(t => t.Quantity) }) .ToList() }; return(amountColumn, quantityColumn); }