diff --git a/AsbCloudApp/Data/User/ContactDto.cs b/AsbCloudApp/Data/User/ContactDto.cs index dd6b3212..8445d801 100644 --- a/AsbCloudApp/Data/User/ContactDto.cs +++ b/AsbCloudApp/Data/User/ContactDto.cs @@ -35,7 +35,7 @@ public class ContactDto : IId /// /// Email /// - [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Некорректный email")] + [RegularExpression(@"^[a-zA-Z0-9_\-\.]{3,128}@[a-zA-Z0-9_\-\.]{2,128}\.[a-zA-Z]{1,32}$", ErrorMessage = "Некорректный email")] public string? Email { get; set; } /// diff --git a/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs b/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs index 157b204d..c47ebd05 100644 --- a/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs +++ b/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs @@ -117,6 +117,22 @@ public abstract class ChangeLogRepositoryAbstract : ICh } public async Task InsertRange(int idUser, IEnumerable dtos, CancellationToken token) + { + using var transaction = db.Database.BeginTransaction(); + try + { + var result = await InsertRangeWithoutTransaction(idUser, dtos, token); + await transaction.CommitAsync(token); + return result; + } + catch + { + await transaction.RollbackAsync(token); + throw; + } + } + + private async Task InsertRangeWithoutTransaction(int idUser, IEnumerable dtos, CancellationToken token) { var result = 0; if (dtos.Any()) @@ -138,7 +154,8 @@ public abstract class ChangeLogRepositoryAbstract : ICh result += await SaveChangesWithExceptionHandling(token); } - return result; + + return result; } public async Task UpdateRange(int idUser, IEnumerable dtos, CancellationToken token) @@ -248,7 +265,7 @@ public abstract class ChangeLogRepositoryAbstract : ICh try { result += await Clear(idUser, request, token); - result += await InsertRange(idUser, dtos, token); + result += await InsertRangeWithoutTransaction(idUser, dtos, token); await transaction.CommitAsync(token); return result; diff --git a/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs b/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs index 07146882..b1756101 100644 --- a/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs +++ b/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs @@ -431,6 +431,10 @@ public class OperationsStatService : IOperationsStatService int? iLastMatch = null; int iLastFact = 0; var nptHours = 0d; + + DateTimeOffset? firstDateStartFact = Fact!.DateStart; + DateTimeOffset? firstDateStartPlan = Plan?.DateStart; + for (int i = 0; i < wellOperations.Length; i++) { var item = wellOperations[i]; @@ -441,7 +445,13 @@ public class OperationsStatService : IOperationsStatService if (plan is not null) { planFactPredict.Plan = Convert(plan, tzOffsetHours); - planFactPredict.Plan.Day = (planFactPredict.Plan.DateStart - dateStart).TotalDays; + + if (!firstDateStartPlan.HasValue) { + firstDateStartPlan = planFactPredict.Plan.DateStart; + } + + planFactPredict.Plan.Day = (planFactPredict.Plan.DateStart - firstDateStartPlan.Value).TotalDays; + if (fact is not null) iLastMatch = i; } @@ -451,8 +461,9 @@ public class OperationsStatService : IOperationsStatService if(WellOperationCategory.NonProductiveTimeSubIds.Contains(fact.IdCategory)) nptHours += fact.DurationHours; - planFactPredict.Fact = Convert(fact, tzOffsetHours); - planFactPredict.Fact.Day = (planFactPredict.Fact.DateStart - dateStart).TotalDays; + planFactPredict.Fact = Convert(fact, tzOffsetHours); + planFactPredict.Fact.Day = (planFactPredict.Fact.DateStart - firstDateStartFact.Value).TotalDays; + planFactPredict.Fact.NptHours = nptHours; iLastFact = i; }