public static string BestWorstRequest_1(string from, string to) { if (from == null || from == string.Empty) { from = "01.01.1900"; } if (to == null || to == string.Empty) { to = DateTime.Now.ToShortDateString(); } using (SqlConnection conn = (SqlConnection)((SQLDataService)DataServiceProvider.DataService).GetConnection()) { string commandText = @"select ТипВелосипеда.Название, AVG(DATEDIFF(HOUR, ПрокатВелосипеда.ДатаНачала, ПрокатВелосипеда.ФактическаяДатаСдачи)) as Среднее from ТипВелосипеда inner join Велосипед on ТипВелосипеда.primaryKey = Велосипед.ТипВелосипеда inner join ПрокатВелосипеда on ПрокатВелосипеда.Велосипед_m0 = Велосипед.primaryKey where ПрокатВелосипеда.ДатаНачала is not null and ПрокатВелосипеда.ФактическаяДатаСдачи is not null and ПрокатВелосипеда.ДатаНачала between @DateFrom and @DateTo group by ТипВелосипеда.primaryKey, ТипВелосипеда.Название"; JSONStruct toJSON = new JSONStruct(); try { conn.Open(); SqlCommand com = new SqlCommand(commandText, conn); SqlParameter dateFromPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateFrom", Value = Convert.ToDateTime(from), }; SqlParameter dateToPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateTo", Value = Convert.ToDateTime(to), }; com.Parameters.AddRange (new SqlParameter[] { dateFromPar, dateToPar }); var reader = com.ExecuteReader(); toJSON.AddCol("Тип велосипеда", "string"); toJSON.AddCol("Средняя продолжительность проката в часах", "number"); while (reader.Read()) { string[] row = new string[2]; row[0] = reader.GetString(0); row[1] = reader.GetInt32(1).ToString(); toJSON.AddRow(row); } conn.Close(); } catch (Exception e) { throw new Exception("Ошибка при работе с БД: " + e.Message); } return(toJSON.ToString()); } }
public static string BestWorstRequest_1(string from, string to) { if (from == null || from == string.Empty) { from = "01.01.1900"; } if (to == null || to == string.Empty) { to = DateTime.Now.ToShortDateString(); } using (SqlConnection conn = (SqlConnection)((SQLDataService)DataServiceProvider.DataService).GetConnection()) { string commandText = @"select ТочкаПроката.Адрес, count(*) as Перевозки from ПеревозкаВелосипеда inner join ВелосипедВПеревозке on ПеревозкаВелосипеда.primaryKey = ВелосипедВПеревозке.ПеревозкаВелосипеда inner join ТочкаПроката on ТочкаПроката.primaryKey = ПеревозкаВелосипеда.НачальнаяТочка_m0 where ПеревозкаВелосипеда.ДатаНачала between @DateFrom and @DateTo group by ТочкаПроката.primaryKey, ТочкаПроката.Адрес"; JSONStruct toJSON = new JSONStruct(); try { conn.Open(); SqlCommand com = new SqlCommand(commandText, conn); SqlParameter dateFromPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateFrom", Value = Convert.ToDateTime(from), }; SqlParameter dateToPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateTo", Value = Convert.ToDateTime(to), }; com.Parameters.AddRange (new SqlParameter[] { dateFromPar, dateToPar }); var reader = com.ExecuteReader(); toJSON.AddCol("Точка проката", "string"); toJSON.AddCol("Перевезнно велосипедов", "number"); while (reader.Read()) { string[] row = new string[2]; row[0] = reader.GetString(0); row[1] = reader.GetInt32(1).ToString(); toJSON.AddRow(row); } conn.Close(); } catch (Exception e) { throw new Exception("Ошибка при работе с БД: " + e.Message); } return(toJSON.ToString()); } }
public static string BestWorstRequest_1(string from, string to) { if (from == null || from == string.Empty) { from = "01.01.1900"; } if (to == null || to == string.Empty) { to = DateTime.Now.ToShortDateString(); } using (SqlConnection conn = (SqlConnection)((SQLDataService)DataServiceProvider.DataService).GetConnection()) { string commandText = @"select (select count(*) from ИсторияСостояний inner join СостояниеВелосипеда on ИсторияСостояний.СостояниеВелосипеда = СостояниеВелосипеда.primaryKey where СостояниеВелосипеда.Название = 'Сломан' and ИсторияСостояний.ДатаНачала between @DateFrom and @DateTo ) as Сломано, (select count(*) as Украдено from ИсторияСостояний inner join СостояниеВелосипеда on ИсторияСостояний.СостояниеВелосипеда = СостояниеВелосипеда.primaryKey where СостояниеВелосипеда.Название = 'Украден' and ИсторияСостояний.ДатаНачала between @DateFrom and @DateTo) as Украдено"; JSONStruct toJSON = new JSONStruct(); try { conn.Open(); SqlCommand com = new SqlCommand(commandText, conn); SqlParameter dateFromPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateFrom", Value = Convert.ToDateTime(from), }; SqlParameter dateToPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateTo", Value = Convert.ToDateTime(to), }; com.Parameters.AddRange (new SqlParameter[] { dateFromPar, dateToPar }); var reader = com.ExecuteReader(); //toJSON.AddCol("Сломано", "number"); //toJSON.AddCol("Украдено", "number"); if (reader.Read()) { string[] row = new string[2]; row[0] = reader.GetInt32(0).ToString(); row[1] = reader.GetInt32(1).ToString(); toJSON.AddRow(row); } conn.Close(); } catch (Exception e) { throw new Exception("Ошибка при работе с БД: " + e.Message); } return(toJSON.ToString()); } }
public static string ProfitPerPoint(string from, string to) { if (from == null || from == string.Empty) { from = "01.01.1900"; } if (to == null || to == string.Empty) { to = DateTime.Now.ToShortDateString(); } var ds = DataServiceProvider.DataService; using (SqlConnection conn = (SqlConnection)((SQLDataService)DataServiceProvider.DataService).GetConnection()) { string commandCostsText = @"select ПеревозкаВелосипеда.НачальнаяТочка_m0,cast(ПеревозкаВелосипеда.ДатаНачала as date) as Дата, SUM(Стоимость) as Расход from ПеревозкаВелосипеда where ПеревозкаВелосипеда.ДатаНачала between @DateFrom and @DateTo GROUP BY ПеревозкаВелосипеда.НачальнаяТочка_m0, cast(ПеревозкаВелосипеда.ДатаНачала as date) order by Дата"; string commandProfitText = @"select ПрокатВелосипеда.ТочкаВыдачи as id ,cast(ПрокатВелосипеда.ДатаНачала as date) as Дата, SUM(ПрокатВелосипеда.ФактическаяСтоимость) as Доход from ПрокатВелосипеда where ПрокатВелосипеда.ДатаНачала between @DateFrom and @DateTo GROUP BY ПрокатВелосипеда.ТочкаВыдачи, cast(ПрокатВелосипеда.ДатаНачала as date) order by Дата"; List <TableRow> profitRows = new List <TableRow>(); List <TableRow> costRows = new List <TableRow>(); try { conn.Open(); SqlCommand getProfitCom = new SqlCommand(commandProfitText, conn); SqlCommand getCostsCom = new SqlCommand(commandCostsText, conn); //Хотя парметры в обоих запросах одинаковые, если один и тот же использовать в //нескольких запросах, то получим исключение. Поэтому генерируются одинаковые параметры. getProfitCom.Parameters.AddRange (new SqlParameter[] { GetParametr(DbType.DateTime, "@DateFrom", Convert.ToDateTime(from)), GetParametr(DbType.DateTime, "@DateTo", Convert.ToDateTime(to)) }); getCostsCom.Parameters.AddRange (new SqlParameter[] { GetParametr(DbType.DateTime, "@DateFrom", Convert.ToDateTime(from)), GetParametr(DbType.DateTime, "@DateTo", Convert.ToDateTime(to)) }); //Читаем прибыль. var profitReader = getProfitCom.ExecuteReader(); while (profitReader.Read()) { profitRows.Add(new TableRow { id = profitReader.GetGuid(0).ToString(), date = profitReader.GetDateTime(1), value = profitReader.GetDecimal(2) }); } profitReader.Close(); //Читаем расходы. var costsReader = getCostsCom.ExecuteReader(); while (costsReader.Read()) { costRows.Add(new TableRow { id = costsReader.GetGuid(0).ToString(), date = costsReader.GetDateTime(1), value = costsReader.GetDecimal(2) }); } conn.Close(); } catch (Exception e) { throw new Exception("Ошибка при работе с БД: " + e.Message); } //Теперь нужно собрать таблицу с датами для линейного графика. FillRows(profitRows, costRows); FillRows(costRows, profitRows); //После сортировки ожидается, что строки будут полностью сопоставимы по датам и точкам проката profitRows = profitRows.OrderBy(x => x.date).OrderBy(x => x.id).ToList(); costRows = costRows.OrderBy(x => x.date).OrderBy(x => x.id).ToList(); //Теперь собрать струкруту для json int nrows = profitRows.Count; var jsonStruct = new JSONStruct(); var rentPointsIds = profitRows.Select(x => x.id).Distinct(); jsonStruct.AddCol("Дата", "string"); foreach (var id in rentPointsIds) { jsonStruct.AddCol(id, "number"); } var dates = profitRows.Select(x => x.date).Distinct(); foreach (var date in dates) { List <string> row = new List <string> { date.ToShortDateString() }; foreach (var id in rentPointsIds) { decimal profit = profitRows .Where(x => x.date == date && x.id == id) .Select(x => x.value) .FirstOrDefault() - costRows .Where(x => x.date == date && x.id == id) .Select(x => x.value) .FirstOrDefault(); row.Add(profit.ToString()); } jsonStruct.AddRow(row); } return(jsonStruct.ToString()); } }
public static string BestWorstRequest_1(string from, string to) { if (from == null || from == string.Empty) { from = "01.01.1900"; } if (to == null || to == string.Empty) { to = DateTime.Now.ToShortDateString(); } using (SqlConnection conn = (SqlConnection)((SQLDataService)DataServiceProvider.DataService).GetConnection()) { string commandText = @"SELECT Название, COUNT(*) as КоличествоПрокатов FROM ( SELECT ТипВелосипеда.primaryKey, ТипВелосипеда.Название as Название, ПрокатВелосипеда.ДатаНачала as ДатаНачала FROM ТипВелосипеда INNER JOIN Велосипед ON ТипВелосипеда.primaryKey = Велосипед.ТипВелосипеда INNER JOIN ПрокатВелосипеда ON ПрокатВелосипеда.Велосипед_m0 = Велосипед.primaryKey )""SMTH"" WHERE ДатаНачала BETWEEN @DateFrom and @DateTo GROUP BY Название ORDER BY КоличествоПрокатов DESC"; //Сюда складываются данные для графика. JSONStruct toJSON = new JSONStruct(); try { conn.Open(); SqlCommand com = new SqlCommand(commandText, conn); SqlParameter dateFromPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateFrom", Value = Convert.ToDateTime(from), }; SqlParameter dateToPar = new SqlParameter { DbType = DbType.DateTime, ParameterName = "@DateTo", Value = Convert.ToDateTime(to), }; com.Parameters.AddRange (new SqlParameter[] { dateFromPar, dateToPar }); var reader = com.ExecuteReader(); toJSON.AddCol("Тип велосипеда", "string"); toJSON.AddCol("Количество прокатов", "number"); while (reader.Read()) { string[] row = new string[2]; row[0] = reader.GetString(0); row[1] = reader.GetInt32(1).ToString(); toJSON.AddRow(row); } conn.Close(); } catch (Exception e) { throw new Exception("Ошибка при работе с БД: " + e.Message); } return(toJSON.ToString()); } }