fix 数据赋值,增加餐补数据修复处理

This commit is contained in:
2024-04-10 17:32:14 +08:00
parent c867dd2533
commit 2bc76b4ce5
13 changed files with 96 additions and 205 deletions

View File

@@ -37,6 +37,18 @@ public class BalancesController : ControllerBase
return await _balanceService.GetPageAsync(request); 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> /// <summary>
/// 消费明细 /// 消费明细

View File

@@ -23,12 +23,6 @@ public class BalanceRecordPageRequest : PageDto, IValidatableObject
/// </summary> /// </summary>
public string Factory { get; set; } public string Factory { get; set; }
/// <summary>
/// 查询日期范围类型 DateTimeSearchEnumType
/// </summary>
[EnumDataType(typeof(DateTimeSearchEnumType))]
public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
/// <summary> /// <summary>
/// 日期范围查询 /// 日期范围查询
/// </summary> /// </summary>
@@ -36,54 +30,11 @@ public class BalanceRecordPageRequest : PageDto, IValidatableObject
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{ {
var today = DateTime.Today; if (SearchDateTimePeriod != null)
if (SearchDateTimeDimension.HasValue)
{ {
//重新赋值 if (SearchDateTimePeriod.End.HasValue)
SearchDateTimePeriod = new DateTimePeriod();
if (SearchDateTimeDimension == DateTimeSearchEnumType.Day)
{ {
SearchDateTimePeriod.Start = today; SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1);
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);
}
} }
} }

View File

@@ -7,12 +7,6 @@ namespace Dlhis.Canteen.Order.Request;
public class BalanceRecordUserPageRequest : PageDto, IValidatableObject public class BalanceRecordUserPageRequest : PageDto, IValidatableObject
{ {
/// <summary>
/// 查询日期范围类型 DateTimeSearchEnumType
/// </summary>
[EnumDataType(typeof(DateTimeSearchEnumType))]
public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
/// <summary> /// <summary>
/// 消费应用类型 /// 消费应用类型
/// </summary> /// </summary>
@@ -26,54 +20,11 @@ public class BalanceRecordUserPageRequest : PageDto, IValidatableObject
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{ {
var now = DateTime.Now; if (SearchDateTimePeriod != null)
if (SearchDateTimeDimension.HasValue)
{ {
//重新赋值 if (SearchDateTimePeriod.End != null)
SearchDateTimePeriod = new DateTimePeriod();
if (SearchDateTimeDimension == DateTimeSearchEnumType.Day)
{ {
SearchDateTimePeriod.Start = DateTime.Today; SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1);
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);
}
} }
} }

View 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) });
}
}
}

View File

@@ -13,6 +13,8 @@ public interface IBalanceService : IScopeDependency
Task<BalanceRecordUserResultResponse> GetPageByUserAsync(BalanceRecordUserPageRequest request); Task<BalanceRecordUserResultResponse> GetPageByUserAsync(BalanceRecordUserPageRequest request);
Task SupplementBalanceAsync(BalanceSupplementRequest request);
Task ObsoluteAsync(BalanceRecordObsoluteRequest request); Task ObsoluteAsync(BalanceRecordObsoluteRequest request);
Task<Pagination<BalanceRecordCostIdResponse>> RecordByCostIdAsync(BalanceRecordPageByCostIdRequest request); Task<Pagination<BalanceRecordCostIdResponse>> RecordByCostIdAsync(BalanceRecordPageByCostIdRequest request);

View File

@@ -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> /// <summary>
/// 根据成本中心 /// 根据成本中心
@@ -561,6 +593,7 @@ public class BalanceService : IBalanceService
await _dbContext.Updateable<GainfoMealEntity>() await _dbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Balance == canteenUser.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserNo == balanceRecord.UserNo && x.Version == canteenUser.Version) .Where(x => x.UserNo == balanceRecord.UserNo && x.Version == canteenUser.Version)
.ExecuteCommandThrowVersionAsync(); .ExecuteCommandThrowVersionAsync();

View File

@@ -109,6 +109,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == mealInfo.Balance) .SetColumns(x => x.Balance == mealInfo.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致 .Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致
.ExecuteCommandThrowVersionAsync(); .ExecuteCommandThrowVersionAsync();
} }
@@ -258,6 +259,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
var mealInfo = await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync(); var mealInfo = await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
var setBalance = mealInfo.Balance + Math.Abs(order.Amount); var setBalance = mealInfo.Balance + Math.Abs(order.Amount);
await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.Balance == setBalance) .SetColumns(x => x.Balance == setBalance)
.SetColumns(x => x.ModifiedTime == now) .SetColumns(x => x.ModifiedTime == now)
.SetColumns(x => x.ModifiedBy == userId) .SetColumns(x => x.ModifiedBy == userId)

View File

@@ -268,6 +268,7 @@ public class OrderService : BaseOrderService, IOrderService
await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == gainfoMeal.Balance) .SetColumns(x => x.Balance == gainfoMeal.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致 .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
.ExecuteCommandThrowVersionAsync(); .ExecuteCommandThrowVersionAsync();
} }
@@ -617,6 +618,7 @@ public class OrderService : BaseOrderService, IOrderService
await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Balance == canteenUser.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version) .Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version)
.ExecuteCommandThrowVersionAsync(); .ExecuteCommandThrowVersionAsync();
@@ -659,6 +661,7 @@ public class OrderService : BaseOrderService, IOrderService
await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == gainfoMeal.Balance) .SetColumns(x => x.Balance == gainfoMeal.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致 .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
.ExecuteCommandThrowVersionAsync(); .ExecuteCommandThrowVersionAsync();
} }
@@ -715,6 +718,7 @@ public class OrderService : BaseOrderService, IOrderService
await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == gainfoMeal.Balance) .SetColumns(x => x.Balance == gainfoMeal.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致 .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
.ExecuteCommandThrowVersionAsync(); .ExecuteCommandThrowVersionAsync();
//写入记录 //写入记录

View File

@@ -145,7 +145,6 @@ public class BalanceRecordEntity : SugarBaseEntity, ISoftDeleted, ITenantId
[SugarColumn(ColumnDescription = "餐饮应用类型", ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))] [SugarColumn(ColumnDescription = "餐饮应用类型", ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))]
public CanteenApplicaitonTypeEnumType ApplicationType { get; set; } public CanteenApplicaitonTypeEnumType ApplicationType { get; set; }
public string TenantId { get; set; } public string TenantId { get; set; }

View File

@@ -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
}

View File

@@ -1,5 +1,4 @@
using Dlhis.Entity.Canteen.Enums; using Kurisu.Core.CustomClass;
using Kurisu.Core.CustomClass;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Dto;
using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Device.Enums;
@@ -19,13 +18,6 @@ public class DeviceUploadLogPageRequest : PageDto, IValidatableObject
/// </summary> /// </summary>
public bool? Sync { get; set; } public bool? Sync { get; set; }
/// <summary>
/// 查询日期范围类型 DateTimeSearchEnumType
/// </summary>
[EnumDataType(typeof(DateTimeSearchEnumType))]
public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
/// <summary> /// <summary>
/// 日期范围查询 /// 日期范围查询
/// </summary> /// </summary>
@@ -33,54 +25,11 @@ public class DeviceUploadLogPageRequest : PageDto, IValidatableObject
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{ {
var today = DateTime.Today; if (SearchDateTimePeriod != null)
if (SearchDateTimeDimension.HasValue)
{ {
//重新赋值 if (SearchDateTimePeriod.End.HasValue)
SearchDateTimePeriod = new DateTimePeriod();
if (SearchDateTimeDimension == DateTimeSearchEnumType.Day)
{ {
SearchDateTimePeriod.Start = today; SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1);
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);
}
} }
} }

View File

@@ -1,5 +1,4 @@
using System.Diagnostics; using System.Linq.Expressions;
using System.Linq.Expressions;
using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Device.Enums;

View File

@@ -136,6 +136,7 @@ public class MealSupplementHandlerJob : BaseJob
var b = mealUser.Balance += mealSupplement.Amount; var b = mealUser.Balance += mealSupplement.Amount;
await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.Balance == b) .SetColumns(x => x.Balance == b)
.SetColumns(x => x.ModifiedTime == DateTime.Now) .SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserCode == mealUser.UserCode && x.Version == mealUser.Version) .Where(x => x.UserCode == mealUser.UserCode && x.Version == mealUser.Version)