Exemplo n.º 1
0
        /// <summary>
        /// Список данных инсоляций для проекта
        /// </summary>
        /// <param name="projectId">Проект</param>
        /// <returns>Список данных инсоляций проекта</returns>
        public static List <InsData> Load(int projectId)
        {
            if (projectId == 0)
            {
                return(null);
            }
            var resDatas = new List <InsData>();

            using (var ent = GetEntities())
            {
                // Объекты домов для проекта
                var housesDb = MDMService.GetHouses(projectId);
                if (housesDb == null || !housesDb.Any())
                {
                    return(null);
                }

                // Найти данные инс связанные с этими домами
                // Все объекты инс для домов проекта
                var insObjectsDb = ent.Insolation_Object.ToList().Where(w => housesDb.Any(h => h.Id == w.Object_id)).ToList();
                // данные объектов инсоляции для каждого объекта (InsVer-версия инс, данные объекта)
                var objectsData = new List <Tuple <Insolation_version, InsObject> >();
                foreach (var objDb in insObjectsDb)
                {
                    var pts = new List <InsPoint>();
                    foreach (var ptDb in objDb.Insolation_Object_Point)
                    {
                        pts.Add(new InsPoint
                        {
                            InsValue = ptDb.Insolation_type.Insolation_type1,
                            Row      = ptDb.Point_row.Value,
                            Column   = ptDb.Point_column.Value,
                        });
                    }
                    var objData = new InsObject {
                        Id = objDb.Object_id, Points = pts
                    };
                    objectsData.Add(new Tuple <Insolation_version, InsObject>(objDb.Insolation_version, objData));
                }
                // группировка по версии инсоляции
                var versionsInsObjects = objectsData.GroupBy(g => g.Item1.Insolation_version_id);
                foreach (var verInsObjects in versionsInsObjects)
                {
                    var insVer  = verInsObjects.First().Item1;
                    var insData = new InsData {
                        Date    = insVer.Insolation_version_datetime.Value,
                        Name    = insVer.Insolation_version1,
                        Objects = verInsObjects.Select(s => s.Item2).ToList()
                    };
                    resDatas.Add(insData);
                }
            }
            // Сортировка по дате
            resDatas.Sort((d1, d2) => DateTime.Compare(d1.Date, d2.Date));
            return(resDatas);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Сохранение данных инсоляции - одного расчета (группы)
        /// </summary>
        /// <param name="data">Даннын</param>
        public static void Save(InsData data)
        {
            if (data == null)
            {
                return;
            }
            using (var ent = GetEntities())
            {
                Init(ent);
                // Запись версии
                var insVer = ent.Insolation_version.Add(new Insolation_version {
                    Insolation_version1         = data.Name,
                    Insolation_version_datetime = data.Date
                });

                // Запись объектов инсоляции
                if (data.Objects == null || !data.Objects.Any() ||
                    data.Objects.All(a => a.Points == null || !a.Points.Any()))
                {
                    // Нет данных!?
                    return;
                }

                foreach (var itemObj in data.Objects)
                {
                    // Запись объекта
                    var obj = ent.Insolation_Object.Add(new Insolation_Object {
                        Insolation_version = insVer,
                        Object_id          = itemObj.Id
                    });
                    // Запись точек инс
                    foreach (var itemPt in itemObj.Points)
                    {
                        var pt = ent.Insolation_Object_Point.Add(new Insolation_Object_Point
                        {
                            Insolation_Object  = obj,
                            Point_row          = itemPt.Row,
                            Point_column       = itemPt.Column,
                            Insolation_type_id = GetInsValueId(itemPt.InsValue)
                        });
                    }
                }
                ent.SaveChanges();
            }
        }