diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index 83cdc73c..6510f47b 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -549,6 +549,7 @@ public class BalanceService : IBalanceService .LeftJoin((record, ga, department) => ga.DepartmentNo == department.No) .LeftJoin((record, ga, department, bplace) => record.BusinessPlaceCode == bplace.Code) .Where(record => record.Type == BalanceRecordTypeEnumType.Out) + .Where(record => record.Status == BalanceRecordStatusEnumType.Valid) .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true, record => record.CostDate >= request.SearchDateTimePeriod.Start) .WhereIF(request.SearchDateTimePeriod?.End.HasValue == true, record => record.CostDate <= request.SearchDateTimePeriod.End) .WhereIF(request.ApplicationType.HasValue, record => record.ApplicationType == request.ApplicationType) diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index e175df6d..bb4302de 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -241,27 +241,36 @@ public class OrderService : BaseOrderService, IOrderService { if (!allowNoBalance) { - var gainfoMeal = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); - if (gainfoMeal == null) + GainfoMealEntity gainfoMeal = null; + + using (var handler = await _redisCache.LockAsync($"gainfo:meal:{order.UserNo}", retryInterval: TimeSpan.FromSeconds(1))) { - gainfoMeal = new GainfoMealEntity + if (handler.Acquired) { - Balance = 0, - BalanceOfRecharge = 0, - BalanceOfSubsidies = 0, - Version = 0, - TenantId = gainfo.Factory, - UserNo = order.UserNo, - UserCode = order.UserCode, + gainfoMeal = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); + if (gainfoMeal == null) + { + gainfoMeal = new GainfoMealEntity + { + Balance = 0, + BalanceOfRecharge = 0, + BalanceOfSubsidies = 0, + Version = 0, + TenantId = gainfo.Factory, + UserNo = order.UserNo, + UserCode = order.UserCode, - CreatedBy = 1, - CreateTime = DateTime.Now, - ModifiedBy = 1, - ModifiedTime = DateTime.Now, - }; + CreatedBy = 1, + CreateTime = DateTime.Now, + ModifiedBy = 1, + ModifiedTime = DateTime.Now, + }; - await DbContext.InsertAsync(gainfoMeal); + await DbContext.InsertAsync(gainfoMeal); + } + } } + //金额+- gainfoMeal.Balance += order.Amount; diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs index da92712a..7ee84f62 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs @@ -84,27 +84,16 @@ public class AssignmentService : IAssignmentService where = where.Or(x => x.Id == p.TaskId && x.Version == p.Version && x.Status != DeviceTaskStatusEnumType.Success); }); - await _dbContext.Client.Ado.BeginTranAsync(); - try - { - var effecet = await _dbContext.Updateable() - .SetColumns(x => x.Version == x.Version + 1) - .SetColumns(x => x.Status == DeviceTaskStatusEnumType.Process) - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(where) - .ExecuteCommandAsync(); + var effecet = await _dbContext.Updateable() + .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.Status == DeviceTaskStatusEnumType.Process) + .SetColumns(x => x.ModifiedTime == DateTime.Now) + .Where(where) + .ExecuteCommandAsync(); - if (taskIdVs.Count != effecet) - { - throw new VersionExceptions("更新错误"); - } - - await _dbContext.Client.Ado.CommitTranAsync(); - } - catch + if (taskIdVs.Count != effecet) { - await _dbContext.Client.Ado.RollbackTranAsync(); - throw; + throw new VersionExceptions("更新错误"); } return page.Data;