Files
juipnet/Services/Hncore.Pass.BaseInfo/Service/UserChargeOrderService.cs
“wanyongkang” b562aba2b1 忽略dll文件git
2023-07-29 10:19:42 +08:00

116 lines
4.0 KiB
C#

using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Vpn.Service
{
public partial class UserChargeOrderService : ServiceBase<UserChargeOrderEntity>, IFindService
{
UserDbContext m_DbContext;
UserService m_UserService;
public UserChargeOrderService(UserDbContext dbContext
, UserService _UserService
, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_DbContext = dbContext;
m_UserService = _UserService;
}
public async Task<ApiResult<UserChargeOrderEntity>> CreateOrder(CreateOrderRequest request, int userId)
{
if (request.ChargeAmount <= 0)
{
BusinessException.Throw("充值金额不正确");
}
var userEntity = await m_UserService.GetById(userId);
if (userEntity == null)
{
BusinessException.Throw("用户不存在");
}
var order = new UserChargeOrderEntity()
{
OrderName = $"充值{request.ChargeAmount}",
OrderNo = GeneratOrderNO(userId),
OrderState = UOrderStatus.NoPay,
UserId = userId,
UserName = userEntity.LoginCode,
PayChannel = request.PayChannel,
Channel = request.Channel,
OrderAmount = request.ChargeAmount,
PaymentAmount = request.ChargeAmount,
};
await this.Add(order);
return new ApiResult<UserChargeOrderEntity>(order);
}
private string GeneratOrderNO(int userId)
{
var code = ValidateCodeHelper.MakeNumCode(6);
var userStr = userId.ToString().PadRight(6, '0');
var str = $"{DateTime.Now.ToString("yyyyMMdd")}{userStr}{code}";
var pre = "cz";
return pre + str;
}
public async Task<UserChargeOrderEntity> GetOrderByNo(string no, UOrderStatus status = 0)
{
var order = await this.Query(m => m.OrderNo == no && (status == 0 || m.OrderState == status)).FirstOrDefaultAsync();
return order;
}
public async Task<List<UserChargeOrderEntity>> GetOrders(UOrderStatus status = 0, int top = 100)
{
var orders = await this.Query(m => m.OrderState == status).OrderByDescending(m => m.Id).Take(top).ToListAsync();
return orders;
}
/// <summary>
/// 处理成功的订单
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
public async Task<bool> ProcessOrderAccount(UserChargeOrderEntity order)
{
if (order.OrderState != UOrderStatus.PayOk) return false;
var request = new UpdateAmountRequest()
{
Amount = order.OrderAmount,
AttchInfo = order.OrderNo,
OpAmountType = ScoreType.UserCharge,
OperateUserName = order.UserName,
UserId = order.UserId
};
try
{
var ret = await m_UserService.UpdateAmount(request);
if (ret.Code == ResultCode.C_SUCCESS)
{
order.OrderState = UOrderStatus.Complete;
await this.Update(order);
}
return true;
}
catch (Exception ex)
{
LogHelper.Error("处理充值订单", ex);
return false;
}
}
}
}