From 8ffda541b48cbf619f8493196da4fb44d4f3ddc5 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 05 九月 2025 10:22:55 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs | 201 +++++++++++++++++++++++++------------------------- 1 files changed, 101 insertions(+), 100 deletions(-) diff --git a/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs b/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs index 52742c1..032363c 100644 --- a/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs +++ b/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs @@ -34,115 +34,116 @@ [UnitOfWork(false)] public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { - var now = DateTime.Now; var env = App.GetConfig<string>("Environment"); - var q = rep.AsQueryable() - .Where(it => it.SettlementStatus == EnumTaskSettlementStatus.InProcess); - var minTime = env == "Local" - ? now.AddMinutes(-1) - : env == "Test" - ? now.AddMinutes(-5) - : now.AddDays(-1); - q = q.Where(it => it.SettlementStartTime.HasValue && it.SettlementStartTime < minTime); - var tasks = await q.ToListAsync(); - var enterpriseIds = tasks.DistinctSelect(it => it.EnterpriseId); - var taskIds = tasks.DistinctSelect(it => it.Id); - var taskUsers = await repTaskInfoUser - .Where(it => taskIds.Contains(it.TaskInfoId) && it.SettlementStatus == EnumTaskSettlementStatus.InProcess) - .ToListAsync(); - var wallets = await repEnterpriseWallet.AsQueryable() - .Where(it => enterpriseIds.Contains(it.EnterpriseId) && it.Access == EnumEnterpriseWalletAccess.Alipay) - .ToListAsync(); - foreach (var wallet in wallets) + if (env != "Local") { - var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel + var now = DateTime.Now; + var q = rep.AsQueryable() + .Where(it => it.SettlementStatus == EnumTaskSettlementStatus.InProcess); + var minTime = env == "Test" + ? now.AddMinutes(-5) + : now.AddDays(-1); + q = q.Where(it => it.SettlementStartTime.HasValue && it.SettlementStartTime < minTime); + var tasks = await q.ToListAsync(); + var enterpriseIds = tasks.DistinctSelect(it => it.EnterpriseId); + var taskIds = tasks.DistinctSelect(it => it.Id); + var taskUsers = await repTaskInfoUser + .Where(it => taskIds.Contains(it.TaskInfoId) && it.SettlementStatus == EnumTaskSettlementStatus.InProcess) + .ToListAsync(); + var wallets = await repEnterpriseWallet.AsQueryable() + .Where(it => enterpriseIds.Contains(it.EnterpriseId) && it.Access == EnumEnterpriseWalletAccess.Alipay) + .ToListAsync(); + foreach (var wallet in wallets) { - 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.UpdateNowAsync(wallet); - } - if (tasks.IsNotNull()) - { - foreach (var task in tasks) - { - var wallet = wallets.FirstOrDefault(it => it.EnterpriseId == task.EnterpriseId); - task.SettlementStatus = EnumTaskSettlementStatus.Completed; - task.SettlementTime = DateTime.Now; - await rep.UpdateNowAsync(task); - - var users = taskUsers.Where(it => it.TaskInfoId == task.Id).ToList(); - foreach (var user in users) + var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel { - user.SettlementStatus = EnumTaskSettlementStatus.Completed; - user.SettlementTime = DateTime.Now; - await repTaskInfoUser.UpdateNowAsync(user); + 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.UpdateNowAsync(wallet); + } + if (tasks.IsNotNull()) + { + foreach (var task in tasks) + { + var wallet = wallets.FirstOrDefault(it => it.EnterpriseId == task.EnterpriseId); + task.SettlementStatus = EnumTaskSettlementStatus.Completed; + task.SettlementTime = DateTime.Now; + await rep.UpdateNowAsync(task); - var order = new EnterpriseWalletTransaction(); - order.Type = EnumEnterpriseWalletTransactionType.Recharge; - order.WalletId = wallet.Id; - order.Amount = user.ActualSettlementAmount ?? 0; - order.Remark = user.SettlementRemark; - order.ProductCode = "SINGLE_TRANSFER_NO_PWD"; - order.BizScene = "ENTRUST_TRANSFER"; - order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit; - order.Balance = wallet.Balance; - await SetCode(order); - await repEnterpriseWalletTransaction.InsertNowAsync(order); - - var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel + var users = taskUsers.Where(it => it.TaskInfoId == task.Id).ToList(); + foreach (var user in users) { - OutBizNo = order.Code, - TransAmount = order.Amount.ToString(), - ProductCode = order.ProductCode, - BizScene = order.BizScene, - PayeeInfo = new Participant + user.SettlementStatus = EnumTaskSettlementStatus.Completed; + user.SettlementTime = DateTime.Now; + await repTaskInfoUser.UpdateNowAsync(user); + + var order = new EnterpriseWalletTransaction(); + order.Type = EnumEnterpriseWalletTransactionType.Recharge; + order.WalletId = wallet.Id; + order.Amount = user.ActualSettlementAmount ?? 0; + order.Remark = user.SettlementRemark; + order.ProductCode = "SINGLE_TRANSFER_NO_PWD"; + order.BizScene = "ENTRUST_TRANSFER"; + order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit; + order.Balance = wallet.Balance; + await SetCode(order); + await repEnterpriseWalletTransaction.InsertNowAsync(order); + + var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel { - IdentityType = "ALIPAY_LOGON_ID", - Identity = user.ReceiveAccount, - Name = user.ReceiveName, - }, - PayerInfo = new Participant - { - IdentityType = "ACCOUNT_BOOK_ID", - Identity = wallet.AccountBookId, - ExtInfo = new + OutBizNo = order.Code, + TransAmount = order.Amount.ToString(), + ProductCode = order.ProductCode, + BizScene = order.BizScene, + PayeeInfo = new Participant { - agreement_no = wallet.AgreementNo, - }.ToJson(), - }, - OrderTitle = order.Remark, - Remark = order.Remark, - BusinessParams = new + IdentityType = "ALIPAY_LOGON_ID", + Identity = user.ReceiveAccount, + Name = user.ReceiveName, + }, + PayerInfo = new Participant + { + IdentityType = "ACCOUNT_BOOK_ID", + Identity = wallet.AccountBookId, + ExtInfo = new + { + agreement_no = wallet.AgreementNo, + }.ToJson(), + }, + OrderTitle = order.Remark, + Remark = order.Remark, + BusinessParams = new + { + withdraw_timeliness = "T0" + }.ToJson() + }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); + if (response.IsError) { - withdraw_timeliness = "T0" - }.ToJson() - }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); - if (response.IsError) - { - order.ErrorCode = response.Code; - order.FailReason = response.SubMsg ?? response.Msg; - } - else - { - 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 - : EnumEnterpriseWalletTransactionStatus.Fail; - await repEnterpriseWalletTransaction.UpdateNowAsync(order); + order.ErrorCode = response.Code; + order.FailReason = response.SubMsg ?? response.Msg; + } + else + { + 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 + : EnumEnterpriseWalletTransactionStatus.Fail; + await repEnterpriseWalletTransaction.UpdateNowAsync(order); + } } } } -- Gitblit v1.9.1