Пример #1
0
        public async Task <List <GroupDataModel> > GetGroupChart(GroupModel model)
        {
            try
            {
                var result = new List <GroupDataModel>();
                var total  = 0.0;
                switch (model.period)
                {
                case PiePeriod.Day:
                    model.From = CleanDateTime(DateTime.Now).AddHours(-24);
                    model.To   = DateTime.Now;
                    break;

                case PiePeriod.Week:
                    model.From = CleanDateTime(DateTime.Now).AddDays(-7);
                    model.To   = DateTime.Now;
                    break;

                case PiePeriod.Month:
                    model.From = CleanDateTime(DateTime.Now).AddMonths(-1);
                    model.To   = DateTime.Now;
                    break;

                case PiePeriod.Year:
                    model.From = CleanDateTime(DateTime.Now).AddYears(-1);
                    model.To   = DateTime.Now;
                    break;

                case PiePeriod.Custom:
                    break;

                default:
                    break;
                }
                foreach (var groupId in model.Ids)
                {
                    var group = new GroupDataModel();
                    var ids   = new List <int>();
                    using (SqlConnection connection = new SqlConnection(_groupConnectionString))
                    {
                        var command = new SqlCommand();
                        command.Connection  = connection;
                        command.CommandType = System.Data.CommandType.Text;
                        command.CommandText = "SELECT EntityId FROM Meters Where GroupId = @Id";
                        command.Parameters.Add(new SqlParameter("@Id", groupId));
                        await connection.OpenAsync();

                        using (SqlDataReader reader = await command.ExecuteReaderAsync())
                        {
                            while (await reader.ReadAsync())
                            {
                                ids.Add(Convert.ToInt16(reader["EntityId"]));
                            }
                        }
                        using (SqlConnection connection2 = new SqlConnection(_groupConnectionString))
                        {
                            var command2 = new SqlCommand();
                            command2.Connection  = connection2;
                            command2.CommandType = System.Data.CommandType.Text;
                            command2.CommandText = "SELECT Name FROM Groups WHERE Id = @Id";
                            command2.Parameters.Add(new SqlParameter("@Id", groupId));
                            await connection2.OpenAsync();

                            using (SqlDataReader reader2 = await command2.ExecuteReaderAsync())
                            {
                                if (await reader2.ReadAsync())
                                {
                                    group.name = group.drilldown = reader2["Name"].ToString();
                                }
                            }
                        }
                        connection.Close();
                    }
                    await GetGroupDrillDown(group, ids, model.From, model.To);

                    result.Add(group);
                    total += group.y;
                }
                foreach (var group in result)
                {
                    group.y  = group.y / total;
                    group.y *= 100;
                }
                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }