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());
            }
        }
Exemple #4
0
        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());
            }
        }