sunpengfei
2 天以前 8f87da840cc16936e77402cf229237023098382b
FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
@@ -25,8 +25,7 @@
        ) :
        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;
@@ -155,8 +154,10 @@
            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);
@@ -180,95 +181,12 @@
                },
            }, "/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)