refactor 代码优化

This commit is contained in:
2024-08-14 15:43:37 +08:00
parent 4f7b984dfc
commit dfa5cc4bfe
2 changed files with 68 additions and 120 deletions

View File

@@ -1,5 +1,4 @@
using System.Diagnostics;
using Dlhis.Canteen.Order.Dto;
using Dlhis.Canteen.Order.Dto;
using Dlhis.Canteen.Setting.Services;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Canteen.Entities;
@@ -24,8 +23,6 @@ namespace Dlhis.Canteen.Order.Services.Implements;
public class OrderService : BaseOrderService, IOrderService
{
private readonly IServiceProvider _serviceProvider;
private Stopwatch _sw;
private readonly List<string> _logs = new();
public OrderService(ICanteenSettingService canteenSettingService,
IDbContext dbContext,
@@ -54,44 +51,11 @@ public class OrderService : BaseOrderService, IOrderService
/// <returns></returns>
public async Task<OrderResultResponseWithLogs> AddAsync(OrderAddRequest request)
{
_sw = new Stopwatch();
var gainfo = await GetUserAsync(request);
_logs.Add("获取人员耗时:" + _sw.ElapsedMilliseconds);
_sw.Restart();
var message = await ToDoAsync(request, gainfo);
//获取人员余额
var data = await DbContext.Queryable<GainfoMealEntity>()
.LeftJoin<GainfoEntity>((x, ga) => x.UserNo == ga.No)
.LeftJoin<DepartmentEntity>((x, ga, department) => ga.DepartmentNo == department.No)
.Where(x => x.UserNo == gainfo.No)
.Select((x, ga, department) => new OrderResultResponse
{
UserCode = ga.Code,
UserName = ga.Name,
DepartmentNo = ga.DepartmentNo,
DepartmentName = department.Name,
CurrentBalance = x.Balance
})
.SingleAsync();
var result = new DefaultApiResult<OrderResultResponse>
{
Code = message.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
Data = data,
Msg = message
};
_logs.Add("获取余额:" + _sw.ElapsedMilliseconds);
_sw.Restart();
return new OrderResultResponseWithLogs
{
Response = result,
Logs = _logs
Response = await ToDoAsync(request, gainfo)
};
}
@@ -306,8 +270,6 @@ public class OrderService : BaseOrderService, IOrderService
var order = await DbContext.Queryable<CanteenOrderEntity>().Where(x => x.Id == orderId).SingleAsync();
//校验
await Verify(order);
_logs.Add("消费请求校验:" + _sw.ElapsedMilliseconds);
_sw.Restart();
await CommonHelper.RetryAsync(async () =>
{
@@ -327,9 +289,6 @@ public class OrderService : BaseOrderService, IOrderService
var balanceRecord = order.Adapt<BalanceRecordEntity>();
await DbContext.InsertAsync(balanceRecord);
}, 5);
_logs.Add("消费写入:" + _sw.ElapsedMilliseconds);
_sw.Restart();
}
/// <summary>
@@ -482,9 +441,6 @@ public class OrderService : BaseOrderService, IOrderService
}.IsPresent(request.CostDateTime));
shift.ThrowIfNull("非就餐时间,无法消费");
_logs.Add("检验设备和营业点参数:" + _sw.ElapsedMilliseconds);
_sw.Restart();
var costDate = await GetCostDateAsync(shift, request.CostDateTime);
(request.Source == BalanceRecordSourceEnumType.QrCode && businessPlaceInfo.TenantId != gainfo.Factory).ThrowIfTrue("禁止跨厂区消费");
@@ -527,8 +483,6 @@ public class OrderService : BaseOrderService, IOrderService
};
var orderId = await DbContext.InsertReturnIdentityAsync(order);
_logs.Add("临时order写入:" + _sw.ElapsedMilliseconds);
_sw.Restart();
try
{
@@ -549,9 +503,6 @@ public class OrderService : BaseOrderService, IOrderService
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.Id == orderId)
.ExecuteCommandAsync();
_logs.Add("更新image和订单信息:" + _sw.ElapsedMilliseconds);
_sw.Restart();
}
catch (Exception ex)
{
@@ -573,20 +524,55 @@ public class OrderService : BaseOrderService, IOrderService
/// <param name="request"></param>
/// <param name="gainfo"></param>
/// <returns></returns>
private async Task<string> ToDoAsync(OrderAddRequest request, GainfoEntity gainfo)
private async Task<DefaultApiResult<OrderResultResponse>> ToDoAsync(OrderAddRequest request, GainfoEntity gainfo)
{
var message = string.Empty;
if (request.Source == BalanceRecordSourceEnumType.EMealVoucher)
{
var eMealVoucherQrCode = await DbContext.Queryable<EMealVoucherDetailQrCodeEntity>().Where(x => x.QrCode == request.UserUniqueNo).SingleAsync();
if (eMealVoucherQrCode == null)
{
message = "无法识别";
return new DefaultApiResult<OrderResultResponse>
{
Code = ApiStateCode.Error,
Data = null,
Msg = message
};
}
var originData = eMealVoucherQrCode.OriginData.Split(':');
var no = originData[0];
var ts = originData[1];
var idNo = originData[3];
try
{
await EMealVoucherConsumeAsync(request.Adapt<ConsumeRequest>(), gainfo);
await EMealVoucherConsumeAsync(request.Adapt<ConsumeRequest>(), gainfo, eMealVoucherQrCode.OriginData, no, ts, idNo);
}
catch (Exception ex)
{
message = ex.Message;
}
//获取餐券余额
var data = await DbContext.Queryable<EMealVoucherEntity>()
.LeftJoin<EMealVoucherDetailEntity>((x, d) => x.No == d.No)
.Where((x, d) => d.IdNo == idNo)
.Select((x, d) => new OrderResultResponse
{
CurrentBalance = d.Balance
})
.SingleAsync();
return new DefaultApiResult<OrderResultResponse>
{
Code = message.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
Data = data,
Msg = message
};
}
else
{
@@ -633,9 +619,29 @@ public class OrderService : BaseOrderService, IOrderService
message = ex.Message;
}
}
}
return message;
//获取人员余额
var data = await DbContext.Queryable<GainfoMealEntity>()
.LeftJoin<GainfoEntity>((x, ga) => x.UserNo == ga.No)
.LeftJoin<DepartmentEntity>((x, ga, department) => ga.DepartmentNo == department.No)
.Where(x => x.UserNo == gainfo.No)
.Select((x, ga, department) => new OrderResultResponse
{
UserCode = ga.Code,
UserName = ga.Name,
DepartmentNo = ga.DepartmentNo,
DepartmentName = department.Name,
CurrentBalance = x.Balance
})
.SingleAsync();
return new DefaultApiResult<OrderResultResponse>
{
Code = message.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
Data = data,
Msg = message
};
}
async Task<bool> ToCheckAbleOfflineConsumeAsync(string thirdNo)
{
@@ -669,19 +675,14 @@ public class OrderService : BaseOrderService, IOrderService
}
private async Task EMealVoucherConsumeAsync(ConsumeRequest request, GainfoEntity gainfo)
private async Task EMealVoucherConsumeAsync(ConsumeRequest request, GainfoEntity gainfo, string originData, string no, string ts, string idNo)
{
var eMealVoucherQrCode = await DbContext.Queryable<EMealVoucherDetailQrCodeEntity>().Where(x => x.QrCode == request.UserUniqueNo).SingleAsync();
var originData = eMealVoucherQrCode.OriginData.Split(':');
var no = originData[0];
var idNo = originData[3];
var nowDate = DateTime.Now.Date;
var current = await DbContext.Queryable<EMealVoucherDetailEntity>()
.Where(x => x.No == no && x.IdNo == idNo).SingleAsync();
(nowDate >= current.Start && nowDate <= current.End).ThrowIfFalse("餐券已过期");
var time = DateTimeOffset.FromUnixTimeMilliseconds(Convert.ToInt64(originData[1].Reverse().Join(string.Empty))).ToLocalTime().DateTime;
var time = DateTimeOffset.FromUnixTimeMilliseconds(Convert.ToInt64(ts.Reverse().Join(string.Empty))).ToLocalTime().DateTime;
(time.AddMinutes(60) >= DateTime.Now).ThrowIfFalse("二维码已过期");
var eMealVoucher = await DbContext.Queryable<EMealVoucherEntity>().Where(x => x.No == no).SingleAsync();
@@ -689,9 +690,6 @@ public class OrderService : BaseOrderService, IOrderService
var checkData = await PreCheckAsync(request.DeviceUniqueNo, request.CostDateTime);
eMealVoucher.Factories.Contains(checkData.BusinessPlaceTenantId).ThrowIfFalse("禁止在当前厂区消费");
_logs.Add("检验设备和营业点参数:" + _sw.ElapsedMilliseconds);
_sw.Restart();
var order = new CanteenOrderEntity
{
RequestJson = request.ToJson(),
@@ -700,7 +698,7 @@ public class OrderService : BaseOrderService, IOrderService
ApplicationType = CanteenApplicationTypeEnumType.Device,
Name = gainfo.Name,
Source = request.Source,
UserNo = eMealVoucherQrCode.OriginData, //记录为当前消费券
UserNo = originData, //记录为当前消费券
UserCode = gainfo.Code,
Amount = request.Amount,
BusinessPlaceCode = checkData.BusinessPlaceCode,
@@ -725,8 +723,6 @@ public class OrderService : BaseOrderService, IOrderService
};
var orderId = await DbContext.InsertReturnIdentityAsync(order);
_logs.Add("临时order写入:" + _sw.ElapsedMilliseconds);
_sw.Restart();
try
{
@@ -749,17 +745,11 @@ public class OrderService : BaseOrderService, IOrderService
await DbContext.InsertAsync(balanceRecord);
}, 5);
_logs.Add("消费写入:" + _sw.ElapsedMilliseconds);
_sw.Restart();
await DbContext.Updateable<CanteenOrderEntity>()
.SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Success)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.Id == orderId)
.ExecuteCommandAsync();
_logs.Add("更新image和订单信息:" + _sw.ElapsedMilliseconds);
_sw.Restart();
}
catch (Exception ex)
{