From 2bc76b4ce55f98de4617e59d0c5e9832cd435f5e Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 10 Apr 2024 17:32:14 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=95=B0=E6=8D=AE=E8=B5=8B=E5=80=BC,?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A4=90=E8=A1=A5=E6=95=B0=E6=8D=AE=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Order/Controllers/BalancesController.cs | 12 ++++ .../Order/Request/BalanceRecordPageRequest.cs | 55 +---------------- .../Request/BalanceRecordUserPageRequest.cs | 55 +---------------- .../Order/Request/BalanceSupplementRequest.cs | 31 ++++++++++ .../Order/Services/IBalanceService.cs | 2 + .../Services/Implements/BalanceService.cs | 33 +++++++++++ .../Implements/BookingOrderService.cs | 2 + .../Order/Services/Implements/OrderService.cs | 4 ++ .../Canteen/Entities/BalanceRecordEntity.cs | 1 - .../Canteen/Enums/DateTimeSearchEnumType.cs | 43 -------------- .../Request/DeviceUploadLogPageRequest.cs | 59 ++----------------- .../Implements/DeviceUploadLogService.cs | 3 +- .../Jobs/MealSupplementHandlerJob.cs | 1 + 13 files changed, 96 insertions(+), 205 deletions(-) create mode 100644 Src/Dlhis.Canteen/Order/Request/BalanceSupplementRequest.cs delete mode 100644 Src/Dlhis.Entity/Canteen/Enums/DateTimeSearchEnumType.cs diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index feca8352..df02e776 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -37,6 +37,18 @@ public class BalancesController : ControllerBase return await _balanceService.GetPageAsync(request); } + /// + /// 修补餐补明细 + /// + /// + /// + [Authorize(Roles = "admin,tenant-admin")] + [HttpPost("supplementBalance")] + public async Task SupplementBalanceAsync(BalanceSupplementRequest request) + { + await _balanceService.SupplementBalanceAsync(request); + } + /// /// 消费明细 diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordPageRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordPageRequest.cs index 4ee465ae..34887930 100644 --- a/Src/Dlhis.Canteen/Order/Request/BalanceRecordPageRequest.cs +++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordPageRequest.cs @@ -23,12 +23,6 @@ public class BalanceRecordPageRequest : PageDto, IValidatableObject /// public string Factory { get; set; } - /// - /// 查询日期范围类型 DateTimeSearchEnumType - /// - [EnumDataType(typeof(DateTimeSearchEnumType))] - public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; } - /// /// 日期范围查询 /// @@ -36,54 +30,11 @@ public class BalanceRecordPageRequest : PageDto, IValidatableObject public IEnumerable Validate(ValidationContext validationContext) { - var today = DateTime.Today; - if (SearchDateTimeDimension.HasValue) + if (SearchDateTimePeriod != null) { - //重新赋值 - SearchDateTimePeriod = new DateTimePeriod(); - - if (SearchDateTimeDimension == DateTimeSearchEnumType.Day) + if (SearchDateTimePeriod.End.HasValue) { - SearchDateTimePeriod.Start = today; - SearchDateTimePeriod.End = today.AddDays(1).AddSeconds(-1); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Week) - { - SearchDateTimePeriod.Start = today.AddDays(1 - (int)today.DayOfWeek); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddDays(6); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Month) - { - SearchDateTimePeriod.Start = new DateTime(today.Year, today.Month, 1); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddMonths(1).AddDays(-1); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Season) - { - SearchDateTimePeriod.Start = new DateTime(today.Year, today.Month, 1).AddMonths(2 - ((today.Month - 1) % 3)); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddMonths(2); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.HalfOfYear) - { - SearchDateTimePeriod.Start = today.AddDays(-180); - SearchDateTimePeriod.End = today; - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Year) - { - SearchDateTimePeriod.Start = new DateTime(today.Year, 1, 1); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddYears(1).AddDays(-1); - } - - SearchDateTimePeriod.Start = SearchDateTimePeriod.Start.Value; - SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value; - } - else - { - if (SearchDateTimePeriod != null) - { - if (SearchDateTimePeriod.End.HasValue) - { - SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); - } + SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); } } diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs index 99e8cd66..b83296f2 100644 --- a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs +++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs @@ -7,12 +7,6 @@ namespace Dlhis.Canteen.Order.Request; public class BalanceRecordUserPageRequest : PageDto, IValidatableObject { - /// - /// 查询日期范围类型 DateTimeSearchEnumType - /// - [EnumDataType(typeof(DateTimeSearchEnumType))] - public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; } - /// /// 消费应用类型 /// @@ -26,54 +20,11 @@ public class BalanceRecordUserPageRequest : PageDto, IValidatableObject public IEnumerable Validate(ValidationContext validationContext) { - var now = DateTime.Now; - if (SearchDateTimeDimension.HasValue) + if (SearchDateTimePeriod != null) { - //重新赋值 - SearchDateTimePeriod = new DateTimePeriod(); - - if (SearchDateTimeDimension == DateTimeSearchEnumType.Day) + if (SearchDateTimePeriod.End != null) { - SearchDateTimePeriod.Start = DateTime.Today; - SearchDateTimePeriod.End = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Week) - { - SearchDateTimePeriod.Start = now.AddDays(1 - (int)now.DayOfWeek); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddDays(6); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Month) - { - SearchDateTimePeriod.Start = new DateTime(now.Year, now.Month, 1); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddMonths(1).AddDays(-1); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Season) - { - SearchDateTimePeriod.Start = now.AddMonths(0 - (now.Month - 1) % 3); - SearchDateTimePeriod.End = now.AddMonths(3 - (now.Month - 1) % 3).AddMonths(1).AddDays(-1); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.HalfOfYear) - { - SearchDateTimePeriod.Start = now.AddDays(-180); - SearchDateTimePeriod.End = now; - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Year) - { - SearchDateTimePeriod.Start = new DateTime(now.Year, 1, 1); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddYears(1).AddDays(-1); - } - - SearchDateTimePeriod.Start = SearchDateTimePeriod.Start.Value.Date; - SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.Date; - } - else - { - if (SearchDateTimePeriod != null) - { - if (SearchDateTimePeriod.End != null) - { - SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); - } + SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); } } diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceSupplementRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceSupplementRequest.cs new file mode 100644 index 00000000..1a2351b9 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Request/BalanceSupplementRequest.cs @@ -0,0 +1,31 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Canteen.Order.Request; + +public class BalanceSupplementRequest : IValidatableObject +{ + /// + /// 流水号 + /// + [Required(ErrorMessage = "流水号")] + public string No { get; set; } + + /// + /// 事由 + /// + [Required(ErrorMessage = "事由")] + public string Reason { get; set; } + + /// + /// 补金额数 + /// + public decimal Amount { get; set; } + + public IEnumerable Validate(ValidationContext validationContext) + { + if (Amount == 0) + { + yield return new ValidationResult("金额不可为0元", new[] { nameof(Amount) }); + } + } +} diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs index 1556f3ea..e15573a5 100644 --- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs @@ -13,6 +13,8 @@ public interface IBalanceService : IScopeDependency Task GetPageByUserAsync(BalanceRecordUserPageRequest request); + Task SupplementBalanceAsync(BalanceSupplementRequest request); + Task ObsoluteAsync(BalanceRecordObsoluteRequest request); Task> RecordByCostIdAsync(BalanceRecordPageByCostIdRequest request); diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index 8510f382..cc7ceab7 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -160,6 +160,38 @@ public class BalanceService : IBalanceService } + public async Task SupplementBalanceAsync(BalanceSupplementRequest request) + { + var balanceInfo = await _dbContext.Queryable().Where(x => x.No == request.No).SingleAsync(); + (balanceInfo.Status != BalanceRecordStatusEnumType.Valid).ThrowIfTrue("消费明细状态有误"); + + balanceInfo.Status = BalanceRecordStatusEnumType.Obsolute; + + await CommonHelper.RetryAsync(async () => + { + var gainfoMeal = await _dbContext.Queryable().Where(x => x.UserCode == balanceInfo.UserCode).SingleAsync(); + var balance = gainfoMeal.Balance + balanceInfo.Amount + request.Amount; + + await _dbContext.Updateable() + .SetColumns(x => x.Balance == balance) + .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == DateTime.Now) + .Where(x => x.UserCode == balanceInfo.UserCode && x.Version == gainfoMeal.Version) + .ExecuteCommandThrowVersionAsync(); + }); + + var newBalanceRecord = balanceInfo.Adapt(); + newBalanceRecord.Id = 0; + newBalanceRecord.No = SnowFlakeHelper.Instance.NextId().ToString(); + newBalanceRecord.Amount = request.Amount; + newBalanceRecord.Remark = balanceInfo.No; + newBalanceRecord.Status = BalanceRecordStatusEnumType.Valid; + + await _dbContext.UpdateAsync(balanceInfo); + await _dbContext.InsertAsync(newBalanceRecord); + + } + /// /// 根据成本中心 @@ -561,6 +593,7 @@ public class BalanceService : IBalanceService await _dbContext.Updateable() .SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserNo == balanceRecord.UserNo && x.Version == canteenUser.Version) .ExecuteCommandThrowVersionAsync(); diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs index e1d6ed97..6b963f16 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs @@ -109,6 +109,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService await DbContext.Updateable() .SetColumns(x => x.Balance == mealInfo.Balance) .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致 .ExecuteCommandThrowVersionAsync(); } @@ -258,6 +259,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService var mealInfo = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); var setBalance = mealInfo.Balance + Math.Abs(order.Amount); await DbContext.Updateable() + .SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Balance == setBalance) .SetColumns(x => x.ModifiedTime == now) .SetColumns(x => x.ModifiedBy == userId) diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index 065fd80f..e175df6d 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -268,6 +268,7 @@ public class OrderService : BaseOrderService, IOrderService await DbContext.Updateable() .SetColumns(x => x.Balance == gainfoMeal.Balance) .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致 .ExecuteCommandThrowVersionAsync(); } @@ -617,6 +618,7 @@ public class OrderService : BaseOrderService, IOrderService await DbContext.Updateable() .SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version) .ExecuteCommandThrowVersionAsync(); @@ -659,6 +661,7 @@ public class OrderService : BaseOrderService, IOrderService await DbContext.Updateable() .SetColumns(x => x.Balance == gainfoMeal.Balance) .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致 .ExecuteCommandThrowVersionAsync(); } @@ -715,6 +718,7 @@ public class OrderService : BaseOrderService, IOrderService await DbContext.Updateable() .SetColumns(x => x.Balance == gainfoMeal.Balance) .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致 .ExecuteCommandThrowVersionAsync(); //写入记录 diff --git a/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs index 3e091cfe..5f2ef274 100644 --- a/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs +++ b/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs @@ -145,7 +145,6 @@ public class BalanceRecordEntity : SugarBaseEntity, ISoftDeleted, ITenantId [SugarColumn(ColumnDescription = "餐饮应用类型", ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))] public CanteenApplicaitonTypeEnumType ApplicationType { get; set; } - public string TenantId { get; set; } diff --git a/Src/Dlhis.Entity/Canteen/Enums/DateTimeSearchEnumType.cs b/Src/Dlhis.Entity/Canteen/Enums/DateTimeSearchEnumType.cs deleted file mode 100644 index 6bcf868d..00000000 --- a/Src/Dlhis.Entity/Canteen/Enums/DateTimeSearchEnumType.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.ComponentModel; - -namespace Dlhis.Entity.Canteen.Enums; - -[Description("日期查询范围类型")] -public enum DateTimeSearchEnumType -{ - /// - /// 当天 - /// - [Description("当天")] - Day = 1, - - /// - /// 本周 - /// - [Description("本周")] - Week, - - /// - /// 本月 - /// - [Description("本月")] - Month, - - /// - /// 本季度 - /// - [Description("本季度")] - Season, - - /// - /// 过去半年 - /// - [Description("过去半年")] - HalfOfYear, - - /// - /// 今年 - /// - [Description("今年")] - Year -} diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Request/DeviceUploadLogPageRequest.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Request/DeviceUploadLogPageRequest.cs index cfea2a15..8d7797ea 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Request/DeviceUploadLogPageRequest.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Request/DeviceUploadLogPageRequest.cs @@ -1,5 +1,4 @@ -using Dlhis.Entity.Canteen.Enums; -using Kurisu.Core.CustomClass; +using Kurisu.Core.CustomClass; using System.ComponentModel.DataAnnotations; using Kurisu.Core.DataAccess.Dto; using Dlhis.Entity.Device.Enums; @@ -19,13 +18,6 @@ public class DeviceUploadLogPageRequest : PageDto, IValidatableObject /// public bool? Sync { get; set; } - - /// - /// 查询日期范围类型 DateTimeSearchEnumType - /// - [EnumDataType(typeof(DateTimeSearchEnumType))] - public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; } - /// /// 日期范围查询 /// @@ -33,54 +25,11 @@ public class DeviceUploadLogPageRequest : PageDto, IValidatableObject public IEnumerable Validate(ValidationContext validationContext) { - var today = DateTime.Today; - if (SearchDateTimeDimension.HasValue) + if (SearchDateTimePeriod != null) { - //重新赋值 - SearchDateTimePeriod = new DateTimePeriod(); - - if (SearchDateTimeDimension == DateTimeSearchEnumType.Day) + if (SearchDateTimePeriod.End.HasValue) { - SearchDateTimePeriod.Start = today; - SearchDateTimePeriod.End = today.AddDays(1).AddSeconds(-1); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Week) - { - SearchDateTimePeriod.Start = today.AddDays(1 - (int)today.DayOfWeek); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddDays(6); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Month) - { - SearchDateTimePeriod.Start = new DateTime(today.Year, today.Month, 1); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddMonths(1).AddDays(-1); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Season) - { - SearchDateTimePeriod.Start = new DateTime(today.Year, today.Month, 1).AddMonths(2 - ((today.Month - 1) % 3)); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddMonths(2); - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.HalfOfYear) - { - SearchDateTimePeriod.Start = today.AddDays(-180); - SearchDateTimePeriod.End = today; - } - else if (SearchDateTimeDimension == DateTimeSearchEnumType.Year) - { - SearchDateTimePeriod.Start = new DateTime(today.Year, 1, 1); - SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddYears(1).AddDays(-1); - } - - SearchDateTimePeriod.Start = SearchDateTimePeriod.Start.Value; - SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value; - } - else - { - if (SearchDateTimePeriod != null) - { - if (SearchDateTimePeriod.End.HasValue) - { - SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); - } + SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); } } diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs index b556a304..e7882425 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs @@ -1,5 +1,4 @@ -using System.Diagnostics; -using System.Linq.Expressions; +using System.Linq.Expressions; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; diff --git a/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs b/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs index 38b9f6d7..55b3a905 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs @@ -136,6 +136,7 @@ public class MealSupplementHandlerJob : BaseJob var b = mealUser.Balance += mealSupplement.Amount; await DbContext.Updateable() + .SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Balance == b) .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserCode == mealUser.UserCode && x.Version == mealUser.Version)