fix 多钱包调整

This commit is contained in:
2024-11-08 16:36:10 +08:00
parent 36bfd2e8f6
commit 1a0ba28249
36 changed files with 418 additions and 434 deletions

View File

@@ -1,19 +1,20 @@
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.UnifyResultAndValidation;
namespace Dlhis.Canteen.Order.Services;
public interface IOrderService : IScopeDependency
{
Task<OrderResultResponseWithLogs> AddAsync(OrderAddRequest request);
Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request);
/// <summary>
/// 设备消费
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<OrderResultResponseWithLogs> DeviceConsume(OrderAddRequest request);
Task<DefaultApiResult<OrderResultResponse>> DeviceConsume(OrderAddRequest request);
Task<Pagination<OrderAggregationResponse>> GetOrdersAggregationAsync(PageDto page);
}

View File

@@ -57,7 +57,7 @@ public class OrderService : IOrderService
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<OrderResultResponseWithLogs> DeviceConsume(OrderAddRequest request)
public async Task<DefaultApiResult<OrderResultResponse>> DeviceConsume(OrderAddRequest request)
{
return await AddAsync(request);
}
@@ -67,7 +67,7 @@ public class OrderService : IOrderService
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<OrderResultResponseWithLogs> AddAsync(OrderAddRequest request)
public async Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request)
{
await SetDeviceIpInfoAsync(request.DeviceUniqueNo);
@@ -75,10 +75,7 @@ public class OrderService : IOrderService
handler.Acquired.ThrowIfFalse("请勿频繁消费");
var gainfo = await GetUserAsync(request);
return new OrderResultResponseWithLogs
{
Response = await ToDoAsync(request, gainfo)
};
return await ToDoAsync(request, gainfo);
}
@@ -256,7 +253,7 @@ public class OrderService : IOrderService
/// </summary>
/// <param name="request"></param>
/// <param name="gainfo"></param>
private async Task HandleOfflineAsync(ConsumeRequest request, GainfoEntity gainfo)
private async Task OfflineHandleAsync(ConsumeRequest request, GainfoEntity gainfo)
{
var bindingInfo = await _dbContext.Queryable<DeviceRegistryEntity>()
.LeftJoin<BusinessPlaceEntity>((x, b) => x.BusinessPlaceCode == b.Code)
@@ -273,11 +270,13 @@ public class OrderService : IOrderService
var shifts = await _dbContext.Queryable<BusinessShiftMealRelationshipEntity>()
.Where(x => x.ShiftCode == bindingInfo.ShiftCode).ToListAsync();
var shift = shifts.FirstOrDefault(x => new TimePeriod
{
Start = x.Start,
End = x.End
}.IsPresent(request.CostDateTime));
var shift = shifts.FirstOrDefault(x =>
new TimePeriod
{
Start = x.Start,
End = x.End
}.IsPresent(request.CostDateTime)
);
var costDate = await _canteenSettingService.GetCostDateAsync(bindingInfo.Factory, request.CostDateTime);
@@ -317,7 +316,7 @@ public class OrderService : IOrderService
TenantId = bindingInfo.Factory,
};
await _dbContext.InsertReturnIdentityAsync(order);
await _dbContext.InsertAsync(order);
var balanceRecord = order.Adapt<BalanceRecordEntity>();
await _dbContext.InsertAsync(balanceRecord);
}
@@ -391,16 +390,36 @@ public class OrderService : IOrderService
//获取餐券余额
var data = await _dbContext.Queryable<EMealVoucherEntity>()
.LeftJoin<EMealVoucherDetailEntity>((x, d) => x.No == d.No)
.LeftJoin<GainfoEntity>((x, d, u) => u.IdNo == d.IdNo)
.Where((x, d) => x.No == no && d.IdNo == idNo)
.Select((x, d, u) => new OrderResultResponse
.Select((x, d) => new OrderResultResponse
{
UserCode = u.Code,
UserName = u.Name,
UserCode = d.IdNo,
UserName = d.Name,
CurrentBalance = d.Balance
})
.SingleAsync();
try
{
var v = data.UserCode ?? string.Empty;
var vc = v.ToCharArray().Reverse().ToList();
for (int i = 0; i < vc.Count; i++)
{
if (i + 1 > 4)
{
vc[i] = '*';
}
}
vc.Reverse();
data.UserCode = string.Join("", vc);
}
catch (Exception e)
{
//ignore
}
return new DefaultApiResult<OrderResultResponse>
{
Code = msg.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
@@ -409,6 +428,30 @@ public class OrderService : IOrderService
};
}
private async Task OfflineConsumeAsync(OrderAddRequest request, GainfoEntity gainfo)
{
try
{
if (request.ThirdNo.IsPresent() && await ToCheckAbleOfflineConsumeAsync(request.ThirdNo))
{
await using var handler = await _redisCache.LockAsync($"consume:device-offline:{request.ThirdNo}");
if (handler.Acquired)
{
await OfflineHandleAsync(request.Adapt<ConsumeRequest>(), gainfo);
}
}
else
{
await OfflineHandleAsync(request.Adapt<ConsumeRequest>(), gainfo);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "离线入库错误: 订单号:{no} .{message}", request.ThirdNo, ex.Message);
}
}
/// <summary>
/// 分支处理在线/离线消费
/// </summary>
@@ -423,27 +466,7 @@ public class OrderService : IOrderService
return await EMealVoucherConsumeAsync(request, gainfo);
if (request.IsOffline)
{
try
{
if (request.ThirdNo.IsPresent() && await ToCheckAbleOfflineConsumeAsync(request.ThirdNo))
{
await using var handler = await _redisCache.LockAsync($"consume:device-offline:{request.ThirdNo}");
if (handler.Acquired)
{
await HandleOfflineAsync(request.Adapt<ConsumeRequest>(), gainfo);
}
}
else
{
await HandleOfflineAsync(request.Adapt<ConsumeRequest>(), gainfo);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "离线入库错误: 订单号:{no} .{message}", request.ThirdNo, ex.Message);
}
}
await OfflineConsumeAsync(request, gainfo);
else
{
try
@@ -454,52 +477,17 @@ public class OrderService : IOrderService
{
message = ex.Message;
}
//获取餐券余额
var data = await DbContext.Queryable<EMealVoucherEntity>()
.LeftJoin<EMealVoucherDetailEntity>((x, d) => x.No == d.No)
.Where((x, d) => x.No == no && d.IdNo == idNo)
.Select((x, d) => new OrderResultResponse
{
UserCode = d.IdNo,
UserName = d.Name,
CurrentBalance = d.Balance
})
.SingleAsync();
try
{
var v = data.UserCode ?? string.Empty;
var vc = v.ToCharArray().Reverse().ToList();
for (int i = 0; i < vc.Count; i++)
{
if (i + 1 > 4)
{
vc[i] = '*';
}
}
vc.Reverse();
data.UserCode = string.Join("", vc);
}
catch (Exception e)
{
}
return new DefaultApiResult<OrderResultResponse>
{
Code = message.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
Data = data,
Msg = message
};
}
var currentFactory = await _dbContext.Queryable<DeviceEntity>().Where(x => x.UniqueNo == request.DeviceUniqueNo).Select(x => x.TenantId).SingleAsync();
var balance = await _balanceRepository.GetBalanceAsync(gainfo.Code, currentFactory);
//获取人员信息
var currentFactory = await _dbContext.Queryable<DeviceEntity>()
.Where(x => x.UniqueNo == request.DeviceUniqueNo)
.Select(x => x.TenantId)
.SingleAsync();
var balance = await _balanceRepository.GetBalanceAsync(gainfo.Code, currentFactory);
var totalBalance = await _balanceRepository.GetBalanceAsync(gainfo.Code, string.Empty);
//获取人员余额
var data = await _dbContext.Queryable<GainfoEntity>()
.LeftJoin<DepartmentEntity>((x, department) => x.DepartmentNo == department.No)
.Where(x => x.Code == gainfo.Code)
@@ -509,7 +497,9 @@ public class OrderService : IOrderService
UserName = x.Name,
DepartmentNo = x.DepartmentNo,
DepartmentName = department.Name,
CurrentBalance = balance
CurrentBalance = balance,
CurrentTotalBalance = totalBalance
})
.SingleAsync();
@@ -555,6 +545,7 @@ public class OrderService : IOrderService
(nowDate >= current.Start && nowDate <= current.End).ThrowIfFalse("餐券已过期");
var eMealVoucher = await _dbContext.Queryable<EMealVoucherEntity>().Where(x => x.No == no).SingleAsync();
var checkData = await PreCheckAsync(request.DeviceUniqueNo, request.CostDateTime);