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, 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> 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(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 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> 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; } /// /// 处理成功的订单 /// /// /// public async Task 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; } } } }