diff --git a/Src/Dlhis.Canteen/Order/Controllers/MiddleController.cs b/Src/Dlhis.Canteen/Order/Controllers/MiddleController.cs new file mode 100644 index 00000000..27092678 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Controllers/MiddleController.cs @@ -0,0 +1,32 @@ +using Dlhis.Canteen.Order.Response; +using Dlhis.Canteen.Order.Services; +using Dlhis.Entity.Canteen.Entities; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.Canteen.Order.Controllers; + +[Authorize] +[Route("api/[controller]")] +[ApiController] +public class MiddleController : ControllerBase +{ + private readonly IMiddleService _middleService; + + public MiddleController(IMiddleService middleService) + { + _middleService = middleService; + } + + /// + /// 跳板机离线数据上传 + /// + /// + [IgnoreTenant] + [HttpPost("upload")] + public async Task MiddleUpload(BalanceRecordEntity entity) + { + return await _middleService.MiddleUploadAsync(entity); + } +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/IMiddleService.cs b/Src/Dlhis.Canteen/Order/Services/IMiddleService.cs new file mode 100644 index 00000000..871c807f --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Services/IMiddleService.cs @@ -0,0 +1,9 @@ +using Dlhis.Canteen.Order.Response; +using Dlhis.Entity.Canteen.Entities; + +namespace Dlhis.Canteen.Order.Services; + +public interface IMiddleService : IScopeDependency +{ + Task MiddleUploadAsync(BalanceRecordEntity entity); +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/MiddleService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/MiddleService.cs new file mode 100644 index 00000000..bf94a18a --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Services/Implements/MiddleService.cs @@ -0,0 +1,73 @@ +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; + 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.No) + .Select((x, ga, department) => new OrderResultResponse + { + UserCode = ga.Code, + UserName = ga.Name, + DepartmentNo = ga.DepartmentNo, + DepartmentName = department.Name, + CurrentBalance = x.Balance + }) + .SingleAsync(); + } +} \ No newline at end of file