fix 数据赋值,增加餐补数据修复处理
This commit is contained in:
@@ -37,6 +37,18 @@ public class BalancesController : ControllerBase
|
||||
return await _balanceService.GetPageAsync(request);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修补餐补明细
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Authorize(Roles = "admin,tenant-admin")]
|
||||
[HttpPost("supplementBalance")]
|
||||
public async Task SupplementBalanceAsync(BalanceSupplementRequest request)
|
||||
{
|
||||
await _balanceService.SupplementBalanceAsync(request);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 消费明细
|
||||
|
||||
@@ -23,12 +23,6 @@ public class BalanceRecordPageRequest : PageDto, IValidatableObject
|
||||
/// </summary>
|
||||
public string Factory { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 查询日期范围类型 DateTimeSearchEnumType
|
||||
/// </summary>
|
||||
[EnumDataType(typeof(DateTimeSearchEnumType))]
|
||||
public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 日期范围查询
|
||||
/// </summary>
|
||||
@@ -36,54 +30,11 @@ public class BalanceRecordPageRequest : PageDto, IValidatableObject
|
||||
|
||||
public IEnumerable<ValidationResult> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,12 +7,6 @@ namespace Dlhis.Canteen.Order.Request;
|
||||
|
||||
public class BalanceRecordUserPageRequest : PageDto, IValidatableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// 查询日期范围类型 DateTimeSearchEnumType
|
||||
/// </summary>
|
||||
[EnumDataType(typeof(DateTimeSearchEnumType))]
|
||||
public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 消费应用类型
|
||||
/// </summary>
|
||||
@@ -26,54 +20,11 @@ public class BalanceRecordUserPageRequest : PageDto, IValidatableObject
|
||||
|
||||
public IEnumerable<ValidationResult> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
31
Src/Dlhis.Canteen/Order/Request/BalanceSupplementRequest.cs
Normal file
31
Src/Dlhis.Canteen/Order/Request/BalanceSupplementRequest.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Dlhis.Canteen.Order.Request;
|
||||
|
||||
public class BalanceSupplementRequest : IValidatableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// 流水号
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "流水号")]
|
||||
public string No { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 事由
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "事由")]
|
||||
public string Reason { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 补金额数
|
||||
/// </summary>
|
||||
public decimal Amount { get; set; }
|
||||
|
||||
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||
{
|
||||
if (Amount == 0)
|
||||
{
|
||||
yield return new ValidationResult("金额不可为0元", new[] { nameof(Amount) });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,8 @@ public interface IBalanceService : IScopeDependency
|
||||
|
||||
Task<BalanceRecordUserResultResponse> GetPageByUserAsync(BalanceRecordUserPageRequest request);
|
||||
|
||||
Task SupplementBalanceAsync(BalanceSupplementRequest request);
|
||||
|
||||
Task ObsoluteAsync(BalanceRecordObsoluteRequest request);
|
||||
|
||||
Task<Pagination<BalanceRecordCostIdResponse>> RecordByCostIdAsync(BalanceRecordPageByCostIdRequest request);
|
||||
|
||||
@@ -160,6 +160,38 @@ public class BalanceService : IBalanceService
|
||||
}
|
||||
|
||||
|
||||
public async Task SupplementBalanceAsync(BalanceSupplementRequest request)
|
||||
{
|
||||
var balanceInfo = await _dbContext.Queryable<BalanceRecordEntity>().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<GainfoMealEntity>().Where(x => x.UserCode == balanceInfo.UserCode).SingleAsync();
|
||||
var balance = gainfoMeal.Balance + balanceInfo.Amount + request.Amount;
|
||||
|
||||
await _dbContext.Updateable<GainfoMealEntity>()
|
||||
.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<BalanceRecordEntity>();
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据成本中心
|
||||
@@ -561,6 +593,7 @@ public class BalanceService : IBalanceService
|
||||
await _dbContext.Updateable<GainfoMealEntity>()
|
||||
.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();
|
||||
|
||||
|
||||
@@ -109,6 +109,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
|
||||
await DbContext.Updateable<GainfoMealEntity>()
|
||||
.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<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
|
||||
var setBalance = mealInfo.Balance + Math.Abs(order.Amount);
|
||||
await DbContext.Updateable<GainfoMealEntity>()
|
||||
.SetColumns(x => x.Version == x.Version + 1)
|
||||
.SetColumns(x => x.Balance == setBalance)
|
||||
.SetColumns(x => x.ModifiedTime == now)
|
||||
.SetColumns(x => x.ModifiedBy == userId)
|
||||
|
||||
@@ -268,6 +268,7 @@ public class OrderService : BaseOrderService, IOrderService
|
||||
await DbContext.Updateable<GainfoMealEntity>()
|
||||
.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<GainfoMealEntity>()
|
||||
.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<GainfoMealEntity>()
|
||||
.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<GainfoMealEntity>()
|
||||
.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();
|
||||
//写入记录
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Dlhis.Entity.Canteen.Enums;
|
||||
|
||||
[Description("日期查询范围类型")]
|
||||
public enum DateTimeSearchEnumType
|
||||
{
|
||||
/// <summary>
|
||||
/// 当天
|
||||
/// </summary>
|
||||
[Description("当天")]
|
||||
Day = 1,
|
||||
|
||||
/// <summary>
|
||||
/// 本周
|
||||
/// </summary>
|
||||
[Description("本周")]
|
||||
Week,
|
||||
|
||||
/// <summary>
|
||||
/// 本月
|
||||
/// </summary>
|
||||
[Description("本月")]
|
||||
Month,
|
||||
|
||||
/// <summary>
|
||||
/// 本季度
|
||||
/// </summary>
|
||||
[Description("本季度")]
|
||||
Season,
|
||||
|
||||
/// <summary>
|
||||
/// 过去半年
|
||||
/// </summary>
|
||||
[Description("过去半年")]
|
||||
HalfOfYear,
|
||||
|
||||
/// <summary>
|
||||
/// 今年
|
||||
/// </summary>
|
||||
[Description("今年")]
|
||||
Year
|
||||
}
|
||||
@@ -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
|
||||
/// </summary>
|
||||
public bool? Sync { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询日期范围类型 DateTimeSearchEnumType
|
||||
/// </summary>
|
||||
[EnumDataType(typeof(DateTimeSearchEnumType))]
|
||||
public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 日期范围查询
|
||||
/// </summary>
|
||||
@@ -33,54 +25,11 @@ public class DeviceUploadLogPageRequest : PageDto, IValidatableObject
|
||||
|
||||
public IEnumerable<ValidationResult> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -136,6 +136,7 @@ public class MealSupplementHandlerJob : BaseJob
|
||||
var b = mealUser.Balance += mealSupplement.Amount;
|
||||
|
||||
await DbContext.Updateable<GainfoMealEntity>()
|
||||
.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)
|
||||
|
||||
Reference in New Issue
Block a user