using Dlhis.Canteen.Order.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils; namespace Dlhis.Canteen.Order.Services.Implements; public class MiddleService : IMiddleService { private readonly IDbContext _dbContext; public MiddleService(IDbContext dbContext) { _dbContext = dbContext; } /// public async Task MiddleUploadAsync(BalanceRecordEntity entity) { entity.Id = 0; entity.Amount = -Math.Abs(entity.Amount); entity.Remark = "离线消费提交"; if (!await _dbContext.Queryable().AnyAsync(x => x.No == entity.No)) { await _dbContext.InsertAsync(entity); await CommonHelper.RetryAsync(async () => { var mealUser = await _dbContext.Queryable().Where(x => x.UserCode == entity.UserCode).FirstAsync(); if (mealUser == null) { mealUser = new GainfoMealEntity { UserNo = entity.No, UserCode = entity.UserCode, Balance = 0, BalanceOfRecharge = 0, BalanceOfSubsidies = 0, Version = 0 }; await _dbContext.InsertAsync(mealUser); } //重新核算 var balance = await _dbContext.Queryable() .Where(x => x.UserCode == entity.UserCode) .Where(x => x.Status == BalanceRecordStatusEnumType.Valid) .SumAsync(x => x.Amount); await _dbContext.Updateable() .SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Balance == balance) .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserCode == mealUser.UserCode && x.Version == mealUser.Version) .ExecuteCommandThrowVersionAsync(); }, 5); } //获取人员余额 return await _dbContext.Queryable() .LeftJoin((x, ga) => x.UserNo == ga.No) .LeftJoin((x, ga, department) => ga.DepartmentNo == department.No) .Where(x => x.UserNo == entity.UserNo) .Select((x, ga, department) => new OrderResultResponse { UserCode = ga.Code, UserName = ga.Name, DepartmentNo = ga.DepartmentNo, DepartmentName = department.Name, CurrentBalance = x.Balance }) .SingleAsync(); } }