diff --git a/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs b/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs index 1528806e..254b6c06 100644 --- a/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs +++ b/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs @@ -93,7 +93,7 @@ public class MealSupplementRecordService : IMealSupplementRecordService var data = await _dbContext.Queryable() .Where(x => x.CostDateTime >= request.SearchDateTimePeriod.Start && x.CostDateTime <= request.SearchDateTimePeriod.End) .Where(x => x.Status == BalanceRecordStatusEnumType.Valid) - .Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.MealSupplement) + .Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.MealSupplement || x.ApplicationType == CanteenApplicationTypeEnumType.Manually) .Where(x => x.UserCode == code) .OrderBy(x => x.CostDateTime) .Select(x => new MealSupplementRecordItemResponse diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index 333780f2..deeae21e 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -9,6 +9,7 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using SqlSugar; namespace Dlhis.Canteen.Order.Controllers; @@ -216,10 +217,14 @@ public class BalancesController : ControllerBase using (var scope = _serviceProvider.CreateScope()) { var db = scope.ServiceProvider.GetService(); - var codes = await db.Queryable().Where(x => x.Amount < 0 && x.Workplace == "5").Select(x => x.Code).Distinct().ToListAsync(); - foreach (var code in codes) + var middleService = scope.ServiceProvider.GetService(); + var others = await db.Queryable().AS("LocalBalanceRecordEntity") + .Where(x => SqlFunc.Subqueryable().Where(p => p.No == x.No).NotAny()) + .ToListAsync(); + + foreach (var item in others) { - await _balanceService.ReCalcAsync(code); + await middleService.MiddleUploadAsync(item); } } } diff --git a/Src/Dlhis.Canteen/Order/Request/OrderAddRequest.cs b/Src/Dlhis.Canteen/Order/Request/OrderAddRequest.cs index 5328d7fd..9b05f371 100644 --- a/Src/Dlhis.Canteen/Order/Request/OrderAddRequest.cs +++ b/Src/Dlhis.Canteen/Order/Request/OrderAddRequest.cs @@ -44,7 +44,7 @@ public class OrderAddRequest : IValidatableObject /// public DateTime? CostDateTime { get; set; } - + public bool IsUserId { get; set; } @@ -58,9 +58,14 @@ public class OrderAddRequest : IValidatableObject CostDateTime ??= DateTime.Now; + if (!IsOffline) + { + (CostDateTime.Value.AddMinutes(5) < DateTime.Now).ThrowIfTrue("非法请求,时差超出允许范围"); + } + if (DeviceUniqueNo.IsEmpty()) { yield return new ValidationResult("设备号不能为空", new[] { nameof(DeviceUniqueNo) }); } } -} +} \ No newline at end of file diff --git a/Src/Dlhis.ScheduledTask/Jobs/MealChunengSupplementHandlerJob.cs b/Src/Dlhis.ScheduledTask/Jobs/MealChunengSupplementHandlerJob.cs index 88a0a9ad..c703e856 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/MealChunengSupplementHandlerJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/MealChunengSupplementHandlerJob.cs @@ -1,164 +1,164 @@ -using Dlhis.Canteen.Api; -using Dlhis.Canteen.Api.Request; -using Dlhis.Entity.Basic.Entity; -using Dlhis.Entity.Basic.Enums; -using Dlhis.Entity.Canteen.Entities; -using Dlhis.Entity.Canteen.Enums; -using Dlhis.ScheduledTask.Attributes; -using Dlhis.ScheduledTask.Common.Request; -using Dlhis.ScheduledTask.Common.Services; -using Hangfire; -using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; -using Kurisu.AspNetCore.Utils; -using Kurisu.AspNetCore.Utils.Extensions; - -namespace Dlhis.ScheduledTask.Jobs; - -/// -/// 餐补核算 -/// -[RecurringJob(nameof(MealChunengSupplementHandlerJob), "0 0/30 * * * ?", Name = "储能餐补核算")] -public class MealChunengSupplementHandlerJob : BaseJob -{ - private readonly IHainingMealSupplementApi _hainingMealSupplementApi; - private readonly IJinkoJIPService _jinkoJIPService; - - public MealChunengSupplementHandlerJob(IServiceProvider serviceProvider, - IHainingMealSupplementApi hainingMealSupplementApi, - IJinkoJIPService jinkoJIPService) : base(serviceProvider) - { - _hainingMealSupplementApi = hainingMealSupplementApi; - _jinkoJIPService = jinkoJIPService; - } - - protected override async Task RunAsync(IServiceProvider serviceProvider) - { - //查询待处理餐补 - var mealSupplements = await DbContext.Queryable() - .Where(x => x.Status == MealSupplementStatusEnumtype.Wait || x.Status == MealSupplementStatusEnumtype.Error) - .Where(x => x.Workplace == "5" && x.Factory == "501")//储能 - .Where(x => !x.Sync) - .ToListAsync(); - - foreach (var item in mealSupplements) - { - var gainfo = await DbContext.Queryable().Where(x => x.Code == item.Code).SingleAsync(); - if (gainfo == null) - { - gainfo = await DbContext.Queryable().AS("GainfoLeave").Where(x => x.Code == item.Code).SingleAsync(); - - if (gainfo == null) - { - await DbContext.Updateable() - .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Error) - .SetColumns(x => x.Result == "人员档案不存在") - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(x => x.UniqueId == item.UniqueId) - .ExecuteCommandAsync(); - - //后台任务获取人员 - BackgroundJob.Enqueue(x => x.TodoByCodeAsync(item.Code)); - - continue; - } - else if (gainfo.ResignationDate < item.Date) - { - try - { - var r = await _jinkoJIPService.SyncMealSupplementRecordsAsync(new List - { - new() - { - UniqueId = item.UniqueId, - Status = "FAIL", - Msg = "人员离职" - } - }); - - await DbContext.Updateable() - .SetColumns(x => x.Result == r) - .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Success) - .SetColumns(x => x.Sync == true) - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(x => x.UniqueId == item.UniqueId) - .ExecuteCommandAsync(); - } - catch - { - } - - continue; - } - } - - - //创建余额数据 - var mealUser = await DbContext.Queryable().Where(x => x.UserCode == gainfo.Code).SingleAsync(); - if (mealUser == null) - { - mealUser = new GainfoMealEntity - { - Balance = 0, - BalanceOfRecharge = 0, - BalanceOfSubsidies = 0, - UserCode = gainfo.Code, - Version = 0, - }; - - await DbContext.InsertAsync(mealUser); - } - - await SetHainingMealSupplementAsync(item); - } - } - - private async Task SetHainingMealSupplementAsync(MealSupplementRecordEntity mealSupplement) - { - await DbContext.Client.Ado.BeginTranAsync(); - try - { - var hnResponse = await _hainingMealSupplementApi.AddHsChuNengMealSupplementAsync(new AddHainingMealSupplementRequest - { - Code = mealSupplement.Code, - Amount = mealSupplement.Amount, - Date = mealSupplement.Date.Date, - Remark = mealSupplement.Remark, - UniqueId = mealSupplement.UniqueId - }); - - (hnResponse == null || hnResponse.Code != 200).ThrowIfTrue("海宁餐补写入失败:" + hnResponse?.Message); - - var r = await _jinkoJIPService.SyncMealSupplementRecordsAsync(new List - { - new() - { - UniqueId = mealSupplement.UniqueId, - Status = "SUCCESS", - Msg = "操作成功" - } - }); - - //更新餐补信息为成功(同步成功) - await DbContext.Updateable() - .SetColumns(x => x.Result == r) - .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Success) - .SetColumns(x => x.Sync == true) - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(x => x.UniqueId == mealSupplement.UniqueId) - .ExecuteCommandAsync(); - - await DbContext.Client.Ado.CommitTranAsync(); - } - catch (Exception ex) - { - await DbContext.Client.Ado.RollbackTranAsync(); - - await DbContext.Updateable() - .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Error) - .SetColumns(x => x.Result == ex.Message + " " + ex.StackTrace) - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(x => x.UniqueId == mealSupplement.UniqueId) - .ExecuteCommandAsync(); - } - } -} \ No newline at end of file +// using Dlhis.Canteen.Api; +// using Dlhis.Canteen.Api.Request; +// using Dlhis.Entity.Basic.Entity; +// using Dlhis.Entity.Basic.Enums; +// using Dlhis.Entity.Canteen.Entities; +// using Dlhis.Entity.Canteen.Enums; +// using Dlhis.ScheduledTask.Attributes; +// using Dlhis.ScheduledTask.Common.Request; +// using Dlhis.ScheduledTask.Common.Services; +// using Hangfire; +// using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; +// using Kurisu.AspNetCore.Utils; +// using Kurisu.AspNetCore.Utils.Extensions; +// +// namespace Dlhis.ScheduledTask.Jobs; +// +// /// +// /// 餐补核算 +// /// +// [RecurringJob(nameof(MealChunengSupplementHandlerJob), "0 0/30 * * * ?", Name = "储能餐补核算")] +// public class MealChunengSupplementHandlerJob : BaseJob +// { +// private readonly IHainingMealSupplementApi _hainingMealSupplementApi; +// private readonly IJinkoJIPService _jinkoJIPService; +// +// public MealChunengSupplementHandlerJob(IServiceProvider serviceProvider, +// IHainingMealSupplementApi hainingMealSupplementApi, +// IJinkoJIPService jinkoJIPService) : base(serviceProvider) +// { +// _hainingMealSupplementApi = hainingMealSupplementApi; +// _jinkoJIPService = jinkoJIPService; +// } +// +// protected override async Task RunAsync(IServiceProvider serviceProvider) +// { +// //查询待处理餐补 +// var mealSupplements = await DbContext.Queryable() +// .Where(x => x.Status == MealSupplementStatusEnumtype.Wait || x.Status == MealSupplementStatusEnumtype.Error) +// .Where(x => x.Workplace == "5" && x.Factory == "501")//储能 +// .Where(x => !x.Sync) +// .ToListAsync(); +// +// foreach (var item in mealSupplements) +// { +// var gainfo = await DbContext.Queryable().Where(x => x.Code == item.Code).SingleAsync(); +// if (gainfo == null) +// { +// gainfo = await DbContext.Queryable().AS("GainfoLeave").Where(x => x.Code == item.Code).SingleAsync(); +// +// if (gainfo == null) +// { +// await DbContext.Updateable() +// .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Error) +// .SetColumns(x => x.Result == "人员档案不存在") +// .SetColumns(x => x.ModifiedTime == DateTime.Now) +// .Where(x => x.UniqueId == item.UniqueId) +// .ExecuteCommandAsync(); +// +// //后台任务获取人员 +// BackgroundJob.Enqueue(x => x.TodoByCodeAsync(item.Code)); +// +// continue; +// } +// else if (gainfo.ResignationDate < item.Date) +// { +// try +// { +// var r = await _jinkoJIPService.SyncMealSupplementRecordsAsync(new List +// { +// new() +// { +// UniqueId = item.UniqueId, +// Status = "FAIL", +// Msg = "人员离职" +// } +// }); +// +// await DbContext.Updateable() +// .SetColumns(x => x.Result == r) +// .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Success) +// .SetColumns(x => x.Sync == true) +// .SetColumns(x => x.ModifiedTime == DateTime.Now) +// .Where(x => x.UniqueId == item.UniqueId) +// .ExecuteCommandAsync(); +// } +// catch +// { +// } +// +// continue; +// } +// } +// +// +// //创建余额数据 +// var mealUser = await DbContext.Queryable().Where(x => x.UserCode == gainfo.Code).SingleAsync(); +// if (mealUser == null) +// { +// mealUser = new GainfoMealEntity +// { +// Balance = 0, +// BalanceOfRecharge = 0, +// BalanceOfSubsidies = 0, +// UserCode = gainfo.Code, +// Version = 0, +// }; +// +// await DbContext.InsertAsync(mealUser); +// } +// +// await SetHainingMealSupplementAsync(item); +// } +// } +// +// private async Task SetHainingMealSupplementAsync(MealSupplementRecordEntity mealSupplement) +// { +// await DbContext.Client.Ado.BeginTranAsync(); +// try +// { +// var hnResponse = await _hainingMealSupplementApi.AddHsChuNengMealSupplementAsync(new AddHainingMealSupplementRequest +// { +// Code = mealSupplement.Code, +// Amount = mealSupplement.Amount, +// Date = mealSupplement.Date.Date, +// Remark = mealSupplement.Remark, +// UniqueId = mealSupplement.UniqueId +// }); +// +// (hnResponse == null || hnResponse.Code != 200).ThrowIfTrue("海宁餐补写入失败:" + hnResponse?.Message); +// +// var r = await _jinkoJIPService.SyncMealSupplementRecordsAsync(new List +// { +// new() +// { +// UniqueId = mealSupplement.UniqueId, +// Status = "SUCCESS", +// Msg = "操作成功" +// } +// }); +// +// //更新餐补信息为成功(同步成功) +// await DbContext.Updateable() +// .SetColumns(x => x.Result == r) +// .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Success) +// .SetColumns(x => x.Sync == true) +// .SetColumns(x => x.ModifiedTime == DateTime.Now) +// .Where(x => x.UniqueId == mealSupplement.UniqueId) +// .ExecuteCommandAsync(); +// +// await DbContext.Client.Ado.CommitTranAsync(); +// } +// catch (Exception ex) +// { +// await DbContext.Client.Ado.RollbackTranAsync(); +// +// await DbContext.Updateable() +// .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Error) +// .SetColumns(x => x.Result == ex.Message + " " + ex.StackTrace) +// .SetColumns(x => x.ModifiedTime == DateTime.Now) +// .Where(x => x.UniqueId == mealSupplement.UniqueId) +// .ExecuteCommandAsync(); +// } +// } +// } \ No newline at end of file diff --git a/Src/Dlhis.ScheduledTask/Jobs/MealHainingSupplementHandlerJob.cs b/Src/Dlhis.ScheduledTask/Jobs/MealHainingSupplementHandlerJob.cs index c405fe81..9d4f987d 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/MealHainingSupplementHandlerJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/MealHainingSupplementHandlerJob.cs @@ -61,7 +61,8 @@ public class MealHainingSupplementHandlerJob : BaseJob continue; } - else if (gainfo.ResignationDate < item.Date) + + if (gainfo.ResignationDate < item.Date) { try { diff --git a/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs b/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs index 078428fc..e3f97db9 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs @@ -1,6 +1,4 @@ -using Dlhis.Canteen.Api; -using Dlhis.Canteen.Api.Request; -using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; @@ -10,7 +8,6 @@ using Dlhis.ScheduledTask.Common.Services; using Hangfire; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.Utils; -using Kurisu.AspNetCore.Utils.Extensions; namespace Dlhis.ScheduledTask.Jobs; @@ -20,23 +17,22 @@ namespace Dlhis.ScheduledTask.Jobs; [RecurringJob(nameof(MealSupplementHandlerJob), "0 0/30 * * * ?", Name = "餐补核算")] public class MealSupplementHandlerJob : BaseJob { - private readonly IHainingMealSupplementApi _hainingMealSupplementApi; private readonly IJinkoJIPService _jinkoJIPService; public MealSupplementHandlerJob(IServiceProvider serviceProvider, - IHainingMealSupplementApi hainingMealSupplementApi, IJinkoJIPService jinkoJIPService) : base(serviceProvider) { - _hainingMealSupplementApi = hainingMealSupplementApi; _jinkoJIPService = jinkoJIPService; } protected override async Task RunAsync(IServiceProvider serviceProvider) { + var others = new[] { "502", "503", "504", "505" }; + //查询待处理餐补 var mealSupplements = await DbContext.Queryable() .Where(x => x.Status == MealSupplementStatusEnumtype.Wait || x.Status == MealSupplementStatusEnumtype.Error) - .Where(x => x.Workplace != "5") + .Where(x => !others.Contains(x.Factory)) .Where(x => !x.Sync) .ToListAsync(); @@ -61,7 +57,8 @@ public class MealSupplementHandlerJob : BaseJob continue; } - else if (gainfo.ResignationDate < item.Date) + + if (gainfo.ResignationDate < item.Date) { try { @@ -108,14 +105,7 @@ public class MealSupplementHandlerJob : BaseJob await DbContext.InsertAsync(mealUser); } - if (item.Workplace == "5") - { - await SetHainingMealSupplementAsync(item); - } - else - { - await SetMealSupplementAsync(gainfo, item); - } + await SetMealSupplementAsync(gainfo, item); } } @@ -198,63 +188,4 @@ public class MealSupplementHandlerJob : BaseJob .ExecuteCommandAsync(); } } - - private async Task SetHainingMealSupplementAsync(MealSupplementRecordEntity mealSupplement) - { - await DbContext.Client.Ado.BeginTranAsync(); - try - { - var hnResponse = mealSupplement.Factory == "501" - ? await _hainingMealSupplementApi.AddHsChuNengMealSupplementAsync(new AddHainingMealSupplementRequest - { - Code = mealSupplement.Code, - Amount = mealSupplement.Amount, - Date = mealSupplement.Date.Date, - Remark = mealSupplement.Remark, - UniqueId = mealSupplement.UniqueId - }) - : await _hainingMealSupplementApi.AddMealSupplementAsync(new AddHainingMealSupplementRequest - { - Code = mealSupplement.Code, - Amount = mealSupplement.Amount, - Date = mealSupplement.Date.Date, - Remark = mealSupplement.Remark, - UniqueId = mealSupplement.UniqueId - }); - - (hnResponse == null || hnResponse.Code != 200).ThrowIfTrue("海宁餐补写入失败:" + hnResponse?.Message); - - var r = await _jinkoJIPService.SyncMealSupplementRecordsAsync(new List - { - new() - { - UniqueId = mealSupplement.UniqueId, - Status = "SUCCESS", - Msg = "操作成功" - } - }); - - //更新餐补信息为成功(同步成功) - await DbContext.Updateable() - .SetColumns(x => x.Result == r) - .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Success) - .SetColumns(x => x.Sync == true) - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(x => x.UniqueId == mealSupplement.UniqueId) - .ExecuteCommandAsync(); - - await DbContext.Client.Ado.CommitTranAsync(); - } - catch (Exception ex) - { - await DbContext.Client.Ado.RollbackTranAsync(); - - await DbContext.Updateable() - .SetColumns(x => x.Status == MealSupplementStatusEnumtype.Error) - .SetColumns(x => x.Result == ex.Message + " " + ex.StackTrace) - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(x => x.UniqueId == mealSupplement.UniqueId) - .ExecuteCommandAsync(); - } - } } \ No newline at end of file