sunpengfei
6 天以前 8ffda541b48cbf619f8493196da4fb44d4f3ddc5
FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs
@@ -1,4 +1,5 @@
using Aop.Api.Domain;
using Furion;
using Furion.DatabaseAccessor;
using Furion.FriendlyException;
using Furion.Schedule;
@@ -25,70 +26,74 @@
        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);
                        }
                    }
                }
            }