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)