sunpengfei
9 天以前 10760c944ad47ef9e27aebd88c45bebf23521792
FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
@@ -23,7 +23,9 @@
            AlipayUtils alipayUtils
        ) :
        IRequestHandler<OpenEnterpriseWalletCommand, OpenEnterpriseWalletCommandResult>,
        IRequestHandler<CloseEnterpriseWalletCommand, Guid>
        IRequestHandler<CloseEnterpriseWalletCommand, Guid>,
        IRequestHandler<RechargeEnterpriseWalletCommand, Guid>,
        IRequestHandler<AlipayTransferCommand, Guid>
    {
        private readonly IRepository<EnterpriseWallet> rep = rep;
        private readonly IRepository<Enterprise> repEnterprise = repEnterprise;
@@ -79,7 +81,7 @@
            var response = alipayUtils.UserAgreementPageSign(model, $"/api/user/enterpriseWallet/alipayUserAgreementPageSignNotify");
            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
            var result = new OpenEnterpriseWalletCommandResult();
            result.SignUrl =  response.Body;
            result.SignUrl = response.Body;
            return result;
        }
@@ -108,6 +110,87 @@
            return entity.Id;
        }
        /// <summary>
        /// 企业钱包充值
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public async Task<Guid> Handle(RechargeEnterpriseWalletCommand request, CancellationToken cancellationToken)
        {
            var logier = JwtUtils.GetCurrentLogier();
            var entity = await rep.AsQueryable()
                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == request.Access)
                .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, "未开通记账本");
            var order = new EnterpriseWalletTransaction();
            order.Code = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
            order.WalletId = entity.Id;
            order.Amount = request.Amount;
            var response = alipayUtils.FundTransPagePay(new AlipayFundTransPagePayModel
            {
                OutBizNo = order.Code,
                TransAmount = order.Amount.ToString(),
                ProductCode = "FUND_ACCOUNT_BOOK",
                BizScene = "SATF_DEPOSIT",
                Remark = "记账本充值",
                OrderTitle = "记账本充值",
                TimeExpire = DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"),
                PayeeInfo = new Participant
                {
                    IdentityType = "ACCOUNT_BOOK_ID",
                    Identity = entity.AccountBookId,
                    ExtInfo = new
                    {
                        agreement_no = entity.AgreementNo,
                    }.ToJson(),
                },
            });
            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
            order.OrderId = response.OrderId;
            return order.Id;
        }
        public async Task<Guid> Handle(AlipayTransferCommand 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, "企业钱包");
            var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel
            {
                OutBizNo = $"Test{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}",
                TransAmount = "0.01",
                ProductCode = "TRANS_ACCOUNT_NO_PWD",
                PayeeInfo = new Participant
                {
                    IdentityType = "BANKCARD_ACCOUNT",
                    Identity = "6214180000016351382",
                    Name = "孙鹏飞",
                    BankcardExtInfo = new BankcardExtInfo
                    {
                        AccountType = "2",
                        InstName = "宁波银行"
                    }
                },
                PayerInfo = new Participant
                {
                    IdentityType = "ALIPAY_OPEN_ID",
                    Identity = entity.PrincipalOpenId,
                    Name = "孙鹏飞"
                },
                BizScene = "CAE_TRANSFER",
                OrderTitle = "测试代扣",
                Remark = "测试代扣备注"
            });
            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
            return entity.Id;
        }
        private async Task SetCode(EnterpriseWallet entity)
        {
            entity.Code = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";