| | |
| | | ) : |
| | | IRequestHandler<OpenEnterpriseWalletCommand, OpenEnterpriseWalletCommandResult>, |
| | | IRequestHandler<CloseEnterpriseWalletCommand, Guid>, |
| | | IRequestHandler<RechargeEnterpriseWalletCommand, RechargeEnterpriseWalletCommandResult>, |
| | | IRequestHandler<TransferEnterpriseWalletCommand, Guid> |
| | | IRequestHandler<RechargeEnterpriseWalletCommand, RechargeEnterpriseWalletCommandResult> |
| | | { |
| | | private readonly IRepository<EnterpriseWallet> rep = rep; |
| | | private readonly IRepository<Enterprise> repEnterprise = repEnterprise; |
| | |
| | | order.Remark = request.Remark ?? "充值"; |
| | | order.ProductCode = "FUND_ACCOUNT_BOOK"; |
| | | order.BizScene = "SATF_DEPOSIT"; |
| | | order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit; |
| | | order.TransactionStatus = EnumWalletTransactionStatus.WaitSubmit; |
| | | order.Balance = entity.Balance; |
| | | order.OperatorUserId = logier.Id; |
| | | order.OperatorTime = DateTime.Now; |
| | | await SetCode(order); |
| | | await repEnterpriseWalletTransaction.InsertAsync(order); |
| | | |
| | |
| | | }, |
| | | }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); |
| | | if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); |
| | | order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitPay; |
| | | order.TransactionStatus = EnumWalletTransactionStatus.WaitPay; |
| | | await repEnterpriseWalletTransaction.UpdateAsync(order); |
| | | return new RechargeEnterpriseWalletCommandResult |
| | | { |
| | | PayUrl = response.Body |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 企业钱包转账 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | [UnitOfWork(false)] |
| | | public async Task<Guid> Handle(TransferEnterpriseWalletCommand request, CancellationToken cancellationToken) |
| | | { |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var entity = await rep.AsQueryable() |
| | | .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == EnumEnterpriseWalletAccess.Alipay) |
| | | .FirstOrDefaultAsync(); |
| | | if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "企业钱包"); |
| | | if (entity.SignStatus != EnumEnterpriseWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "未签约"); |
| | | if (entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "未开通记账本"); |
| | | await GetBalance(entity); |
| | | |
| | | var order = new EnterpriseWalletTransaction(); |
| | | order.Type = EnumEnterpriseWalletTransactionType.Recharge; |
| | | order.WalletId = entity.Id; |
| | | order.Amount = request.Amount; |
| | | order.Remark = request.Remark; |
| | | order.ProductCode = "SINGLE_TRANSFER_NO_PWD"; |
| | | order.BizScene = "ENTRUST_TRANSFER"; |
| | | order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit; |
| | | order.Balance = entity.Balance; |
| | | await SetCode(order); |
| | | await repEnterpriseWalletTransaction.InsertAsync(order); |
| | | |
| | | var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel |
| | | { |
| | | OutBizNo = order.Code, |
| | | TransAmount = order.Amount.ToString(), |
| | | ProductCode = order.ProductCode, |
| | | BizScene = order.BizScene, |
| | | PayeeInfo = new Participant |
| | | { |
| | | IdentityType = "ALIPAY_LOGON_ID", |
| | | Identity = "13616515310", |
| | | Name = "杨振宇", |
| | | }, |
| | | PayerInfo = new Participant |
| | | { |
| | | IdentityType = "ACCOUNT_BOOK_ID", |
| | | Identity = entity.AccountBookId, |
| | | ExtInfo = new |
| | | { |
| | | agreement_no = entity.AgreementNo, |
| | | }.ToJson(), |
| | | }, |
| | | OrderTitle = order.Remark, |
| | | Remark = order.Remark, |
| | | BusinessParams = new |
| | | { |
| | | withdraw_timeliness = "T0" |
| | | }.ToJson() |
| | | }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); |
| | | if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); |
| | | order.OrderId = response.OrderId; |
| | | order.PayFundOrderId = response.PayFundOrderId; |
| | | order.SettleSerialNo = response.SettleSerialNo; |
| | | order.TransDate = response.TransDate.ToDateTime(); |
| | | order.Link = response.Link; |
| | | order.Status = response.Status; |
| | | order.SubStatus = response.SubStatus; |
| | | order.TransactionStatus = response.Status == "SUCCESS" |
| | | ? EnumEnterpriseWalletTransactionStatus.Success |
| | | : response.Status == "DEALING" |
| | | ? EnumEnterpriseWalletTransactionStatus.Dealing |
| | | : response.Status == "REFUND" |
| | | ? EnumEnterpriseWalletTransactionStatus.Refund |
| | | : response.Status == "FAIL" |
| | | ? EnumEnterpriseWalletTransactionStatus.Fail |
| | | : throw Oops.Oh(EnumErrorCodeType.s510, $"未识别的状态:{response.Status}"); |
| | | await repEnterpriseWalletTransaction.UpdateAsync(order); |
| | | if (order.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Success) |
| | | { |
| | | await GetBalance(entity); |
| | | } |
| | | return entity.Id; |
| | | } |
| | | |
| | | private async Task GetBalance(EnterpriseWallet entity) |