| | |
| | | using Aop.Api.Domain; |
| | | using Furion; |
| | | using Furion.DatabaseAccessor; |
| | | using Furion.FriendlyException; |
| | | using Furion.Schedule; |
| | |
| | | |
| | | public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) |
| | | { |
| | | var entities = await rep.AsQueryable() |
| | | var env = App.GetConfig<string>("Environment"); |
| | | if (env != "Local") |
| | | { |
| | | var entities = await rep.AsQueryable() |
| | | .Where(it => |
| | | it.TransactionStatus == EnumEnterpriseWalletTransactionStatus.WaitPay |
| | | || it.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Dealing) |
| | | .ToListAsync(); |
| | | if (entities.IsNotNull()) |
| | | { |
| | | foreach (var entity in entities) |
| | | if (entities.IsNotNull()) |
| | | { |
| | | var response = alipayUtils.FundTransCommonQuery(new Aop.Api.Domain.AlipayFundTransCommonQueryModel |
| | | foreach (var entity in entities) |
| | | { |
| | | ProductCode = entity.ProductCode, |
| | | BizScene = entity.BizScene, |
| | | OutBizNo = entity.Code |
| | | }); |
| | | if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); |
| | | entity.OrderId = response.OrderId; |
| | | entity.InflowSettleSerialNo = response.InflowSettleSerialNo; |
| | | entity.SettleSerialNo = response.SettleSerialNo; |
| | | entity.ReceiverOpenId = response.ReceiverOpenId; |
| | | entity.ReceiverUserId = response.ReceiverUserId; |
| | | entity.PayFundOrderId = response.PayFundOrderId; |
| | | entity.ArrivalTimeEnd = response.ArrivalTimeEnd.ToDateTime(); |
| | | entity.OrderFee = response.OrderFee.ToDecimal(); |
| | | entity.ErrorCode = response.ErrorCode; |
| | | entity.FailReason = response.FailReason; |
| | | entity.FailInstReason = response.FailInstReason; |
| | | entity.FailInstName = response.FailInstName; |
| | | entity.FailInstErrorCode = response.FailInstErrorCode; |
| | | entity.SubStatus = response.SubStatus; |
| | | entity.TransDate = response.PayDate.ToDateTime(); |
| | | entity.Status = response.Status; |
| | | entity.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 rep.UpdateAsync(entity); |
| | | } |
| | | var walletIds = entities |
| | | .Where(it => it.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Success) |
| | | .Select(it => it.WalletId) |
| | | .Distinct() |
| | | .ToList(); |
| | | if (walletIds.IsNotNull()) |
| | | { |
| | | var wallets = await repEnterpriseWallet.AsQueryable() |
| | | .Where(it => walletIds.Contains(it.Id)) |
| | | .ToListAsync(); |
| | | foreach (var wallet in wallets) |
| | | { |
| | | var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel |
| | | var response = alipayUtils.FundTransCommonQuery(new Aop.Api.Domain.AlipayFundTransCommonQueryModel |
| | | { |
| | | AccountBookId = wallet.AccountBookId, |
| | | SceneCode = "SATF_FUND_BOOK", |
| | | MerchantUserId = wallet.Code, |
| | | ProductCode = entity.ProductCode, |
| | | BizScene = entity.BizScene, |
| | | OutBizNo = entity.Code |
| | | }); |
| | | if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); |
| | | wallet.Balance = response.AvailableAmount.ToDecimal() ?? 0; |
| | | await repEnterpriseWallet.UpdateAsync(wallet); |
| | | entity.OrderId = response.OrderId; |
| | | entity.InflowSettleSerialNo = response.InflowSettleSerialNo; |
| | | entity.SettleSerialNo = response.SettleSerialNo; |
| | | entity.ReceiverOpenId = response.ReceiverOpenId; |
| | | entity.ReceiverUserId = response.ReceiverUserId; |
| | | entity.PayFundOrderId = response.PayFundOrderId; |
| | | entity.ArrivalTimeEnd = response.ArrivalTimeEnd.ToDateTime(); |
| | | entity.OrderFee = response.OrderFee.ToDecimal(); |
| | | entity.ErrorCode = response.ErrorCode; |
| | | entity.FailReason = response.FailReason; |
| | | entity.FailInstReason = response.FailInstReason; |
| | | entity.FailInstName = response.FailInstName; |
| | | entity.FailInstErrorCode = response.FailInstErrorCode; |
| | | entity.SubStatus = response.SubStatus; |
| | | entity.TransDate = response.PayDate.ToDateTime(); |
| | | entity.Status = response.Status; |
| | | entity.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 rep.UpdateAsync(entity); |
| | | } |
| | | var walletIds = entities |
| | | .Where(it => it.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Success) |
| | | .Select(it => it.WalletId) |
| | | .Distinct() |
| | | .ToList(); |
| | | if (walletIds.IsNotNull()) |
| | | { |
| | | var wallets = await repEnterpriseWallet.AsQueryable() |
| | | .Where(it => walletIds.Contains(it.Id)) |
| | | .ToListAsync(); |
| | | foreach (var wallet in wallets) |
| | | { |
| | | var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel |
| | | { |
| | | AccountBookId = wallet.AccountBookId, |
| | | SceneCode = "SATF_FUND_BOOK", |
| | | MerchantUserId = wallet.Code, |
| | | }); |
| | | if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); |
| | | wallet.Balance = response.AvailableAmount.ToDecimal() ?? 0; |
| | | await repEnterpriseWallet.UpdateAsync(wallet); |
| | | } |
| | | } |
| | | } |
| | | } |