public async Task <HttpResponseMessage> SyncWithTextyOrgUaWaterService() { var service = new TextyOrgUaWaterService(); var data = await service.GetData(); using (var transaction = _dbContext.BeginTransaction()) { try { //characteristics var characteristicsNames = data.Select(i => i.Key).Distinct(StringComparer.InvariantCultureIgnoreCase); var serviceDescription = "Synced by TextyOrgUaWaterService"; var characteristicMap = await MapCharateristicsNamesAndCreateWhetherDoesNotExist(characteristicsNames, serviceDescription); //objects var objects = data.GroupBy(i => i.River, StringComparer.InvariantCultureIgnoreCase) .Select(group => new { Points = group.GroupBy(p => p.Name, StringComparer.InvariantCultureIgnoreCase) .Select(group2 => new { Name = group2.Key, Info = new { Code = group2.FirstOrDefault().Code, Laboratory = group2.FirstOrDefault().Laboratory }, Values = group2.Select(v => new { Id = v.Id, Date = v.Date, Key = v.Key, Value = v.Value }) }), River = group.Key }); var rootObject = await _dbContext.HierarchyObjectContext.Entities.SingleAsync(o => o.Level == 0); foreach (var river in objects) { Guid riverId = await GetObjectIdAndCreateWhetherDoesNotExist(river.River, serviceDescription, rootObject); var riverObject = await _dbContext.HierarchyObjectContext.Entities.FirstOrDefaultAsync(o => o.Id == riverId); foreach (var point in river.Points) { Guid pointId = await GetObjectIdAndCreateWhetherDoesNotExist(point.Name, serviceDescription, riverObject); foreach (var value in point.Values) { var entity = new NumberCharacteristicValue { CharacteristicId = characteristicMap[value.Key], HierarchyObjectId = pointId, CreationDate = value.Date, Value = value.Value, OwnerId = User.Identity.Name, SubjectOfMonitoring = SubjectOfMonitoringConstants.CLEAR_WATER }; await _dbContext.CharacteristicValueDbSetManager.CreateAsync(entity); } } } transaction.Commit(); } catch { transaction.Rollback(); } } return(Request.CreateResponse(HttpStatusCode.Created)); }
public async Task GetReport() { var service = new TextyOrgUaWaterService(); var data = await service.GetData(); }