diff --git a/AsbCloudApp/Services/IDetectedOperationService.cs b/AsbCloudApp/Services/IDetectedOperationService.cs
index 9ab9189e..262b193f 100644
--- a/AsbCloudApp/Services/IDetectedOperationService.cs
+++ b/AsbCloudApp/Services/IDetectedOperationService.cs
@@ -72,6 +72,7 @@ namespace AsbCloudApp.Services
///
///
///
+ [Obsolete]
Task> GetOperationsStatAsync(DetectedOperationByWellRequest request, CancellationToken token);
///
diff --git a/AsbCloudInfrastructure/Repository/CrudRepositoryBase.cs b/AsbCloudInfrastructure/Repository/CrudRepositoryBase.cs
index 944dabd5..80bc3a99 100644
--- a/AsbCloudInfrastructure/Repository/CrudRepositoryBase.cs
+++ b/AsbCloudInfrastructure/Repository/CrudRepositoryBase.cs
@@ -133,18 +133,22 @@ namespace AsbCloudInfrastructure.Repository
if (ids.Length != dtos.Count())
throw new ArgumentInvalidException(nameof(dtos), "Все записи должны иметь уникальные Id");
- var dbSet = dbContext.Set();
-
- var existingEntitiesCount = await dbSet
+ var existingEntitiesCount = await dbContext.Set()
.Where(o => ids.Contains(o.Id))
.CountAsync(token);
if (ids.Length != existingEntitiesCount)
throw new ArgumentInvalidException(nameof(dtos), "Все записи должны существовать в БД");
+
+ var entities = dtos.Select(Convert);
- var entities = dbContext.Set().Where(e => ids.Contains(e.Id));
- dbContext.Set().UpdateRange(entities);
- return await dbContext.SaveChangesAsync(token);
+ var entries = entities.Select(entity => dbContext.Set().Update(entity)).ToList();
+
+ var affected = await dbContext.SaveChangesAsync(token);
+
+ entries.ForEach(entry => entry.State = EntityState.Detached);
+
+ return affected;
}
///
diff --git a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs
index 167dc4de..0cac62b2 100644
--- a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs
+++ b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs
@@ -143,6 +143,7 @@ public class DetectedOperationService : IDetectedOperationService
}
}
+ [Obsolete]
public async Task> GetOperationsStatAsync(DetectedOperationByWellRequest request, CancellationToken token)
{
var well = await wellService.GetOrDefaultAsync(request.IdWell, token);
diff --git a/AsbCloudInfrastructure/Services/SAUB/SetpointsService.cs b/AsbCloudInfrastructure/Services/SAUB/SetpointsService.cs
index e68eeef3..d91c893d 100644
--- a/AsbCloudInfrastructure/Services/SAUB/SetpointsService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/SetpointsService.cs
@@ -96,7 +96,7 @@ namespace AsbCloudInfrastructure.Services.SAUB
return 0;
entity.IdState = setpointsRequestDto.IdState;
- var affected = await setpointsRepository.UpdateAsync(entity, token);
+ var affected = await setpointsRepository.UpdateRangeAsync(new[] { entity }, token);
return affected;
}
diff --git a/AsbCloudInfrastructure/Services/WellService.cs b/AsbCloudInfrastructure/Services/WellService.cs
index 795d944b..a10ff824 100644
--- a/AsbCloudInfrastructure/Services/WellService.cs
+++ b/AsbCloudInfrastructure/Services/WellService.cs
@@ -274,6 +274,7 @@ namespace AsbCloudInfrastructure.Services
dto.Timezone = GetTimezone(entity.Id);
dto.StartDate = dbContext.WellOperations.Where(e => e.IdType == WellOperation.IdOperationTypeFact)
+ .AsNoTracking()
.MinOrDefault(e => e.DateStart)?.ToRemoteDateTime(dto.Timezone.Hours);
dto.WellType = entity.WellType.Caption;
dto.Cluster = entity.Cluster.Caption;
diff --git a/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs b/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs
index 11d7451d..fe5f289e 100644
--- a/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs
+++ b/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs
@@ -1,4 +1,5 @@
-using AsbCloudApp.Data.DetectedOperation;
+using System;
+using AsbCloudApp.Data.DetectedOperation;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
using Microsoft.AspNetCore.Authorization;
@@ -110,7 +111,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
}
///
- /// Получить фильтрованный список операций по телеметрии САУБ
+ /// Получить список автоопределенных операций для редактирования
///
///
///
@@ -118,7 +119,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
///
[HttpGet]
[ProducesResponseType(typeof(PaginationContainer), StatusCodes.Status200OK)]
- public async Task GetAsync(int idWell, [FromQuery] DetectedOperationRequest request,
+ public async Task GetPageAsync(int idWell, [FromQuery] DetectedOperationRequest request,
CancellationToken token)
{
await AssertUserHasAccessToWellAsync(idWell, token);
@@ -133,24 +134,23 @@ namespace AsbCloudWebApi.Controllers.SAUB
var result = await detectedOperationRepository.GetPageAsync(requestToService, token);
return Ok(result);
}
-
+
///
- /// Получить статистику по фильтрованному списку операций по телеметрии САУБ
+ /// Получить статистику по автоопределенным операциям
///
///
///
///
///
[HttpGet("stat")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task GetStatAsync(int idWell, [FromQuery] DetectedOperationRequest request,
- CancellationToken token)
+ [ProducesResponseType(typeof(DetectedOperationListDto), StatusCodes.Status200OK)]
+ public async Task GetAsync(int idWell, [FromQuery] DetectedOperationRequest request, CancellationToken token)
{
await AssertUserHasAccessToWellAsync(idWell, token);
-
+
var requestToService = new DetectedOperationByWellRequest(idWell, request);
- var result = await detectedOperationService.GetOperationsStatAsync(requestToService, token);
+ var result = await detectedOperationService.GetAsync(requestToService, token);
return Ok(result);
}