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.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs | 25 + FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs | 16 FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/SendInviteElectronSignSmsCommand.cs | 26 + FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs | 51 +++ FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletExpandindirectOrderStatus.cs | 6 FlexJobApi.Core/Jobs/RefreshEnterpriseWalletStatusJob.cs | 151 +++++----- FlexJobApi.Core/Utils/SmsUtils/SendSmsModel.cs | 28 ++ FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs | 201 +++++++------- FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs | 4 FlexJobApi.Web.Entry/appsettings.json | 5 FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs | 13 FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs | 13 FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs | 11 FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs | 115 ++++--- FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs | 9 FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletSignStatus.cs | 4 FlexJobApi.Core/FlexJobApi.Core.xml | 94 ++++++ FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml | 12 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs | 10 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs | 17 + FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs | 2 21 files changed, 551 insertions(+), 262 deletions(-) diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs index 8b23979..48ec371 100644 --- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs +++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs @@ -28,6 +28,16 @@ public EnumEnterpriseWalletAccess Access { get; set; } /// <summary> + /// 璐﹀彿 + /// </summary> + public string Account { get; set; } + + /// <summary> + /// 鍟嗘埛Id + /// </summary> + public string MerchantId { get; set; } + + /// <summary> /// 浣欓 /// </summary> public decimal Balance { get; set; } diff --git a/FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs b/FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs index ea2f72a..4e12fcd 100644 --- a/FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs +++ b/FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs @@ -90,6 +90,17 @@ /// 818閽卞寘寮�閫� /// 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙伴挶鍖呭紑閫氾紝璇ラ獙璇佺爜5鍒嗛挓鍐呮湁鏁堬紝璇峰嬁娉勯湶浜庝粬浜恒�� /// </summary> - BankWalletAccountOpen + BankWalletAccountOpen, + + /// <summary> + /// 鐢靛瓙绛鹃個绾� + /// ${name}璇锋偍鐐瑰嚮绛剧害http://testwww.81812333.com/sg/${code} + /// </summary> + InviteElectronSign, + /// <summary> + /// 绛剧害鍦板潃 + /// ${name}璇锋偍鐐瑰嚮绛剧害https://testwww.81812333.com/sgu/${code} + /// </summary> + ElectronSignUrl, } } diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletExpandindirectOrderStatus.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletExpandindirectOrderStatus.cs index d2827cd..51e1cb6 100644 --- a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletExpandindirectOrderStatus.cs +++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletExpandindirectOrderStatus.cs @@ -12,11 +12,15 @@ public enum EnumEnterpriseWalletExpandindirectOrderStatus { /// <summary> + /// 鏈繘浠� + /// </summary> + Wait = 1, + /// <summary> /// 瀹℃壒涓� /// </summary> PROCESSING = 10, /// <summary> - /// 宸茬敓鏁� + /// 宸茶繘浠� /// </summary> VALID = 20, /// <summary> diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletSignStatus.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletSignStatus.cs index 122c239..bf4d430 100644 --- a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletSignStatus.cs +++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletSignStatus.cs @@ -12,6 +12,10 @@ public enum EnumEnterpriseWalletSignStatus { /// <summary> + /// 鏈绾� + /// </summary> + Wait = 1, + /// <summary> /// 鐢宠涓� /// </summary> Apply = 10, diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index e374924..b647fd6 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -2050,6 +2050,16 @@ 閫氶亾 </summary> </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.Account"> + <summary> + 璐﹀彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.MerchantId"> + <summary> + 鍟嗘埛Id + </summary> + </member> <member name="P:FlexJobApi.Core.EnterpriseWallet.Balance"> <summary> 浣欓 @@ -3697,6 +3707,18 @@ 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙伴挶鍖呭紑閫氾紝璇ラ獙璇佺爜5鍒嗛挓鍐呮湁鏁堬紝璇峰嬁娉勯湶浜庝粬浜恒�� </summary> </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.InviteElectronSign"> + <summary> + 鐢靛瓙绛鹃個绾� + ${name}璇锋偍鐐瑰嚮绛剧害http://testwww.81812333.com/sg/${code} + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.ElectronSignUrl"> + <summary> + 绛剧害鍦板潃 + ${name}璇锋偍鐐瑰嚮绛剧害https://testwww.81812333.com/sgu/${code} + </summary> + </member> <member name="T:FlexJobApi.Core.EnumValidationTypes"> <summary> 楠岃瘉绫诲瀷 @@ -4142,6 +4164,11 @@ 浼佷笟閽卞寘浠h繘浠跺崟鐘舵�� </summary> </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletExpandindirectOrderStatus.Wait"> + <summary> + 鏈繘浠� + </summary> + </member> <member name="F:FlexJobApi.Core.EnumEnterpriseWalletExpandindirectOrderStatus.PROCESSING"> <summary> 瀹℃壒涓� @@ -4149,7 +4176,7 @@ </member> <member name="F:FlexJobApi.Core.EnumEnterpriseWalletExpandindirectOrderStatus.VALID"> <summary> - 宸茬敓鏁� + 宸茶繘浠� </summary> </member> <member name="F:FlexJobApi.Core.EnumEnterpriseWalletExpandindirectOrderStatus.INVALID"> @@ -4170,6 +4197,11 @@ <member name="T:FlexJobApi.Core.EnumEnterpriseWalletSignStatus"> <summary> 浼佷笟閽卞寘绛剧害鐘舵�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletSignStatus.Wait"> + <summary> + 鏈绾� </summary> </member> <member name="F:FlexJobApi.Core.EnumEnterpriseWalletSignStatus.Apply"> @@ -8201,11 +8233,6 @@ 浠诲姟Id </summary> </member> - <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQuery.Keywords"> - <summary> - 鍏抽敭瀛� - </summary> - </member> <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQuery.SettlementOrderUrl"> <summary> 缁撶畻鍗曞湴鍧� @@ -8214,6 +8241,11 @@ <member name="T:FlexJobApi.Core.GetSettlementTaskUsersQueryResult"> <summary> 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResult.Data"> + <summary> + 缁撶畻鍚嶅崟 </summary> </member> <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResult.Errors"> @@ -9670,6 +9702,16 @@ 绛剧讲鍚堝悓闀块摼鎺� </summary> </member> + <member name="T:FlexJobApi.Core.SendInviteElectronSignSmsCommand"> + <summary> + 鍙戦�侀個璇风绾︾煭淇� + </summary> + </member> + <member name="P:FlexJobApi.Core.SendInviteElectronSignSmsCommand.Ids"> + <summary> + Id + </summary> + </member> <member name="T:FlexJobApi.Core.StopElectronSignCommand"> <summary> 鐏靛伐瑙g害 @@ -10633,6 +10675,16 @@ 閫氶亾 </summary> </member> + <member name="P:FlexJobApi.Core.OpenEnterpriseWalletCommand.Account"> + <summary> + 璐﹀彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.OpenEnterpriseWalletCommand.MerchantId"> + <summary> + 鍟嗘埛Id + </summary> + </member> <member name="T:FlexJobApi.Core.OpenEnterpriseWalletCommandResult"> <summary> 寮�閫氫紒涓氶挶鍖� @@ -10843,6 +10895,16 @@ 閫氶亾 </summary> </member> + <member name="P:FlexJobApi.Core.GetEnterpriseWalletQueryResult.Account"> + <summary> + 璐﹀彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseWalletQueryResult.MerchantId"> + <summary> + 鍟嗘埛Id + </summary> + </member> <member name="P:FlexJobApi.Core.GetEnterpriseWalletQueryResult.Code"> <summary> 鍗忚鍙� @@ -10871,6 +10933,11 @@ <member name="P:FlexJobApi.Core.GetEnterpriseWalletQueryResult.SignStatus"> <summary> 绛剧害鐘舵�� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseWalletQueryResult.ExpandindirectOrderStatus"> + <summary> + 寰呰繘浠剁姸鎬� </summary> </member> <member name="T:FlexJobApi.Core.GetEnterpriseWalletTransactionQuery"> @@ -15208,6 +15275,21 @@ 楠岃瘉鐮� </summary> </member> + <member name="T:FlexJobApi.Core.SendSmsModel"> + <summary> + 鍙戦�佺煭淇� + </summary> + </member> + <member name="P:FlexJobApi.Core.SendSmsModel.PhoneNumber"> + <summary> + 鎵嬫満鍙风爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.SendSmsModel.TemplateCode"> + <summary> + 鐭俊妯℃澘缂栧彿 + </summary> + </member> <member name="T:FlexJobApi.Core.SendVerifyCodeModel"> <summary> 鍙戦�侀獙璇佺爜 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); + } } } } diff --git a/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletStatusJob.cs b/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletStatusJob.cs index bc174a2..7a2b393 100644 --- a/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletStatusJob.cs +++ b/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletStatusJob.cs @@ -1,4 +1,5 @@ 锘縰sing Aop.Api.Domain; +using Furion; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Furion.Schedule; @@ -24,92 +25,96 @@ [UnitOfWork(false)] 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() .Include(it => it.Enterprise) .Where(it => it.Access == EnumEnterpriseWalletAccess.Alipay && (it.SignStatus == EnumEnterpriseWalletSignStatus.Apply || it.AccountBookStatus == null)) .ToListAsync(); - foreach (var entity in entities) - { - var update = false; - if (entity.Access == EnumEnterpriseWalletAccess.Alipay) + foreach (var entity in entities) { - if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Apply) + var update = false; + if (entity.Access == EnumEnterpriseWalletAccess.Alipay) { - var response = alipayUtils.UserAgreementQuery(new Aop.Api.Domain.AlipayUserAgreementQueryModel + if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Apply) { - PersonalProductCode = entity.PersonalProductCode, - SignScene = entity.SignScene, - ExternalAgreementNo = entity.Code, - ThirdPartyType = entity.ThirdPartyType, - }); - if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); - entity.AgreementNo = response.AgreementNo; - entity.SignTime = response.SignTime.ToDateTime(); - entity.ValidTime = response.ValidTime.ToDateTime(); - entity.InvalidTime = response.InvalidTime.ToDateTime(); - entity.SignStatus = response.Status == "TEMP" - ? EnumEnterpriseWalletSignStatus.Apply - : response.Status == "NORMAL" - ? EnumEnterpriseWalletSignStatus.Normal - : response.Status == "STOP" - ? EnumEnterpriseWalletSignStatus.Stop - : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�"); - entity.PricipalType = response.PricipalType; - entity.AlipayLogonId = response.AlipayLogonId; - entity.PrincipalId = response.PrincipalId; - entity.PrincipalOpenId = response.PrincipalOpenId; - entity.ZmOpenId = response.ZmOpenId; - entity.CreditAuthMode = response.CreditAuthMode; - update = true; - } - - if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Normal && entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal) - { - var response = alipayUtils.FundAccountbookCreate(new Aop.Api.Domain.AlipayFundAccountbookCreateModel - { - MerchantUserId = entity.Code, - MerchantUserType = "BUSINESS_ORGANIZATION", - SceneCode = "SATF_FUND_BOOK", - ExtInfo = new + var response = alipayUtils.UserAgreementQuery(new Aop.Api.Domain.AlipayUserAgreementQueryModel { - agreement_no = entity.AgreementNo, - cert_no = entity.Enterprise.SocietyCreditCode - }.ToJson() - }); - if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); - entity.AccountBookId = response.AccountBookId; - entity.BankAccName = response.ExtCardInfo.BankAccName; - entity.CardBank = response.ExtCardInfo.CardBank; - entity.CardBranch = response.ExtCardInfo.CardBranch; - entity.CardDeposit = response.ExtCardInfo.CardDeposit; - entity.CardLocation = response.ExtCardInfo.CardLocation; - entity.CardNo = response.ExtCardInfo.CardNo; - entity.AccountBookStatus = response.ExtCardInfo.Status == "A" - ? EnumEnterpriseWalletAccountBookStatus.Normal - : EnumEnterpriseWalletAccountBookStatus.Exception; - update = true; - } + PersonalProductCode = entity.PersonalProductCode, + SignScene = entity.SignScene, + ExternalAgreementNo = entity.Code, + ThirdPartyType = entity.ThirdPartyType, + }); + if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); + entity.AgreementNo = response.AgreementNo; + entity.SignTime = response.SignTime.ToDateTime(); + entity.ValidTime = response.ValidTime.ToDateTime(); + entity.InvalidTime = response.InvalidTime.ToDateTime(); + entity.SignStatus = response.Status == "TEMP" + ? EnumEnterpriseWalletSignStatus.Apply + : response.Status == "NORMAL" + ? EnumEnterpriseWalletSignStatus.Normal + : response.Status == "STOP" + ? EnumEnterpriseWalletSignStatus.Stop + : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�"); + entity.PricipalType = response.PricipalType; + entity.AlipayLogonId = response.AlipayLogonId; + entity.PrincipalId = response.PrincipalId; + entity.PrincipalOpenId = response.PrincipalOpenId; + entity.ZmOpenId = response.ZmOpenId; + entity.CreditAuthMode = response.CreditAuthMode; + update = true; + } - if (entity.AccountBookStatus == EnumEnterpriseWalletAccountBookStatus.Normal) - { - var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel + if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Normal && entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal) { - AccountBookId = entity.AccountBookId, - SceneCode = "SATF_FUND_BOOK", - MerchantUserId = entity.Code, - }); - if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); - entity.Balance = response.AvailableAmount.ToDecimal() ?? 0; - update = true; - } - } + var response = alipayUtils.FundAccountbookCreate(new Aop.Api.Domain.AlipayFundAccountbookCreateModel + { + MerchantUserId = entity.Code, + MerchantUserType = "BUSINESS_ORGANIZATION", + SceneCode = "SATF_FUND_BOOK", + ExtInfo = new + { + agreement_no = entity.AgreementNo, + cert_no = entity.Enterprise.SocietyCreditCode + }.ToJson() + }); + if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); + entity.AccountBookId = response.AccountBookId; + entity.BankAccName = response.ExtCardInfo.BankAccName; + entity.CardBank = response.ExtCardInfo.CardBank; + entity.CardBranch = response.ExtCardInfo.CardBranch; + entity.CardDeposit = response.ExtCardInfo.CardDeposit; + entity.CardLocation = response.ExtCardInfo.CardLocation; + entity.CardNo = response.ExtCardInfo.CardNo; + entity.AccountBookStatus = response.ExtCardInfo.Status == "A" + ? EnumEnterpriseWalletAccountBookStatus.Normal + : EnumEnterpriseWalletAccountBookStatus.Exception; + update = true; + } - if (update) - { - await rep.UpdateAsync(entity); + if (entity.AccountBookStatus == EnumEnterpriseWalletAccountBookStatus.Normal) + { + var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel + { + AccountBookId = entity.AccountBookId, + SceneCode = "SATF_FUND_BOOK", + MerchantUserId = entity.Code, + }); + if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); + entity.Balance = response.AvailableAmount.ToDecimal() ?? 0; + update = true; + } + } + + if (update) + { + await rep.UpdateAsync(entity); + } } } } diff --git a/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs b/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs index bfa894c..19c6efc 100644 --- a/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs +++ b/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs @@ -1,4 +1,5 @@ 锘縰sing 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); + } } } } diff --git a/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs index ccdd30a..2e4e2d1 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs @@ -12,17 +12,12 @@ /// 鏌ヨ缁撶畻鍚嶅崟鍒嗛〉鍒楄〃鏁版嵁 /// </summary> [Resource([EnumResourceController.FlexJobServerTaskUser])] - public class GetSettlementTaskUsersQuery : PagedListQuery<GetSettlementTaskUsersQueryResult, GetSettlementTaskUsersQueryResultItem> + public class GetSettlementTaskUsersQuery : IRequest<GetSettlementTaskUsersQueryResult> { /// <summary> /// 浠诲姟Id /// </summary> public Guid TaskInfoId { get; set; } - - /// <summary> - /// 鍏抽敭瀛� - /// </summary> - public string Keywords { get; set; } /// <summary> /// 缁撶畻鍗曞湴鍧� @@ -33,9 +28,13 @@ /// <summary> /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁 /// </summary> - public class GetSettlementTaskUsersQueryResult : PagedListQueryResult<GetSettlementTaskUsersQueryResultItem> + public class GetSettlementTaskUsersQueryResult { /// <summary> + /// 缁撶畻鍚嶅崟 + /// </summary> + public List<GetSettlementTaskUsersQueryResultItem> Data { get; set; } + /// <summary> /// 閿欒淇℃伅 /// </summary> public List<GetSettlementTaskUsersQueryResultError> Errors { get; set; } diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/SendInviteElectronSignSmsCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/SendInviteElectronSignSmsCommand.cs new file mode 100644 index 0000000..efd653f --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/SendInviteElectronSignSmsCommand.cs @@ -0,0 +1,26 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍙戦�侀個璇风绾︾煭淇� + /// </summary> + [Resource([EnumResourceController.UserServerEnterpriseEmployee])] + public class SendInviteElectronSignSmsCommand : IRequest<int> + { + public SendInviteElectronSignSmsCommand() + { + Ids = []; + } + + /// <summary> + /// Id + /// </summary> + public List<Guid> Ids { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs index c0dda74..48051cf 100644 --- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs @@ -22,6 +22,15 @@ /// </summary> public EnumEnterpriseWalletAccess Access { get; set; } + /// <summary> + /// 璐﹀彿 + /// </summary> + public string Account { get; set; } + + /// <summary> + /// 鍟嗘埛Id + /// </summary> + public string MerchantId { get; set; } } /// <summary> diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs index b8bbe9e..2986898 100644 --- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs +++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs @@ -34,12 +34,22 @@ /// <summary> /// 閽卞寘Id /// </summary> - public Guid Id { get; set; } + public Guid? Id { get; set; } /// <summary> /// 閫氶亾 /// </summary> public EnumEnterpriseWalletAccess Access { get; set; } + + /// <summary> + /// 璐﹀彿 + /// </summary> + public string Account { get; set; } + + /// <summary> + /// 鍟嗘埛Id + /// </summary> + public string MerchantId { get; set; } /// <summary> /// 鍗忚鍙� @@ -70,5 +80,10 @@ /// 绛剧害鐘舵�� /// </summary> public EnumEnterpriseWalletSignStatus SignStatus { get; set; } + + /// <summary> + /// 寰呰繘浠剁姸鎬� + /// </summary> + public EnumEnterpriseWalletExpandindirectOrderStatus ExpandindirectOrderStatus { get; set; } } } diff --git a/FlexJobApi.Core/Utils/SmsUtils/SendSmsModel.cs b/FlexJobApi.Core/Utils/SmsUtils/SendSmsModel.cs new file mode 100644 index 0000000..5968363 --- /dev/null +++ b/FlexJobApi.Core/Utils/SmsUtils/SendSmsModel.cs @@ -0,0 +1,28 @@ +锘縰sing Furion.DataValidation; +using MediatR; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍙戦�佺煭淇� + /// </summary> + public class SendSmsModel + { + /// <summary> + /// 鎵嬫満鍙风爜 + /// </summary> + [Required, DataValidation(ValidationTypes.PhoneNumber)] + public string PhoneNumber { get; set; } + + /// <summary> + /// 鐭俊妯℃澘缂栧彿 + /// </summary> + public EnumSmsTemplateCode TemplateCode { get; set; } + } +} diff --git a/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs b/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs index a54090b..fe1f343 100644 --- a/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs +++ b/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs @@ -36,6 +36,17 @@ this.aliyunSmsUtils = aliyunSmsUtils; } + public async Task<Guid> Send(SendSmsModel model, object templateParam, CancellationToken cancellationToken = default) + { + var entity = new SmsLog(); + model.Adapt(entity); + entity.Expiry = DateTime.Now.AddMinutes(10); + entity.TemplateParam = templateParam.ToJson(); + await aliyunSmsUtils.SendAsync(model.PhoneNumber, model.TemplateCode, entity.TemplateParam, cancellationToken); + await rep.InsertAsync(entity); + return entity.Id; + } + public async Task<Guid> SendVerifyCode(SendVerifyCodeModel model, CancellationToken cancellationToken = default) { var code = new Random().Next(100000, 999999).ToString(); diff --git a/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs index e051adb..e9e64e6 100644 --- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs @@ -168,9 +168,10 @@ public async Task<GetSettlementTaskUsersQueryResult> Handle(GetSettlementTaskUsersQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); + var list = new GetSettlementTaskUsersQueryResult(); var q = rep.AsQueryable().AsNoTracking() .Where(it => it.TaskInfoId == request.TaskInfoId); - var s = q + list.Data = q .Select(it => new GetSettlementTaskUsersQueryResultItem { Id = it.Id, @@ -184,8 +185,8 @@ SettlementAmount = it.SettlementAmount, ActualSettlementAmount = it.ActualSettlementAmount, SettlementTime = it.SettlementTime - }); - var list = await request.PageModel.GetPagedListAsync<GetSettlementTaskUsersQueryResult, GetSettlementTaskUsersQueryResultItem>(s, cancellationToken); + }) + .ToList(); var successList = new List<GetSettlementTaskUsersQueryResultExcelRow>(); if (request.SettlementOrderUrl.IsNotNull()) @@ -270,14 +271,9 @@ } } - var pagedList = await list.Data + list.Data = list.Data .Where(it => successList.Any(s => s.Identity == it.Identity)) - .AsQueryable() - .ToPagedListAsync(request.PageModel.Page, request.PageModel.Rows, cancellationToken); - list.PageModel = request.PageModel.Adapt<PagedListQueryResultPageModel>(); - list.PageModel.TotalCount = pagedList.TotalCount; - list.PageModel.TotalPage = pagedList.TotalPages; - list.Data = pagedList.Items.ToList(); + .ToList(); return list; } diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs index 5d05d63..3c04111 100644 --- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs @@ -191,7 +191,7 @@ faceRealUrl: result.Result.FaceUrl); await repUser.UpdateAsync(user); - return result.Result.FaceUrl; + return result.Result.FaceUrl.Replace("https://h5-v2.kych5.com", "https://wx05.ssqian.com.cn"); } /// <summary> diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs index 26a0f07..e807a1b 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs @@ -30,6 +30,7 @@ /// 鐏靛伐鍛戒护澶勭悊鍣� /// </summary> public class EnterpriseEmployeesCommandHandler( + SmsUtils smsUtils, IMediator mediator, IRepository<EnterpriseEmployee> rep, IRepository<User> repUser, @@ -45,8 +46,10 @@ IRequestHandler<InviteElectronSignCommand, int>, IRequestHandler<PersonalUserElectronSignCommand, PersonalUserElectronSignCommandResult>, IRequestHandler<EnterpriseUserElectronSignCommand, EnterpriseUserElectronSignCommandResult>, - IRequestHandler<StopElectronSignCommand, int> + IRequestHandler<StopElectronSignCommand, int>, + IRequestHandler<SendInviteElectronSignSmsCommand, int> { + private readonly SmsUtils smsUtils = smsUtils; private readonly IMediator mediator = mediator; private readonly IRepository<EnterpriseEmployee> rep = rep; private readonly IRepository<User> repUser = repUser; @@ -266,6 +269,39 @@ } /// <summary> + /// 鍙戦�侀個璇风绾︾煭淇� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<int> Handle(SendInviteElectronSignSmsCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var entities = await rep.AsQueryable() + .Include(it => it.Enterprise) + .Include(it => it.ContractTemplate) + .Where(it => + it.EnterpriseId == logier.EnterpriseId + && request.Ids.Contains(it.Id) + && it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) + .ToListAsync(); + foreach (var entity in entities) + { + await smsUtils.Send(new SendSmsModel + { + PhoneNumber = entity.ContactPhoneNumber, + TemplateCode = EnumSmsTemplateCode.InviteElectronSign, + }, + new + { + name = entity.Enterprise.EnterpriseName, + code = entity.ContractTemplate.Code + }); + } + return entities.Count; + } + + /// <summary> /// 涓汉鐢ㄦ埛绛剧害 /// </summary> /// <param name="request"></param> @@ -332,7 +368,11 @@ { throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "绛剧害澶辫触"); } - return result.Result.Adapt<PersonalUserElectronSignCommandResult>(); + var model = result.Result.Adapt<PersonalUserElectronSignCommandResult>(); + model.SignContractLongUrl = model.SignContractLongUrl + .Replace("https://openapi.bestsign.info:443", "https://wx115.bestsign.info") + .Replace("https://openapi.bestsign.cn:443", "https://wx115.bestsign.cn"); + return model; } /// <summary> @@ -383,7 +423,11 @@ { throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "绛剧害澶辫触"); } - return result.Result.Adapt<EnterpriseUserElectronSignCommandResult>(); + var model = result.Result.Adapt<EnterpriseUserElectronSignCommandResult>(); + model.SignContractLongUrl = model.SignContractLongUrl + .Replace("https://openapi.bestsign.info:443", "https://wx115.bestsign.info") + .Replace("https://openapi.bestsign.cn:443", "https://wx115.bestsign.cn"); + return model; } /// <summary> @@ -433,5 +477,6 @@ return entities.Count; } + } } diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs index d40fbc0..6dac49a 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs @@ -59,6 +59,8 @@ entity = new EnterpriseWallet(); entity.EnterpriseId = request.EnterpriseId!.Value; entity.Access = EnumEnterpriseWalletAccess.Alipay; + entity.Account = request.Account; + entity.MerchantId = request.MerchantId; entity.PersonalProductCode = "FUND_SAFT_SIGN_WITHHOLDING_P"; entity.SignScene = "INDUSTRY|SATF_ACC"; entity.ThirdPartyType = "PARTNER"; @@ -70,6 +72,8 @@ else { if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬绾�"); + entity.Account = request.Account; + entity.MerchantId = request.MerchantId; entity.SignStatus = EnumEnterpriseWalletSignStatus.Apply; await rep.UpdateAsync(entity); } diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs index aacd13c..05d4624 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs @@ -21,6 +21,7 @@ public class EnterpriseWalletQueryHandler( IRepository<EnterpriseWallet> rep, IRepository<EnterpriseWalletTransaction> repEnterpriseWalletTransaction, + IRepository<EnterpriseWalletExpandindirectOrder> repEnterpriseWalletExpandindirectOrder, IRepository<Enterprise> repEnterprise, AlipayUtils alipayUtils ) : @@ -29,6 +30,7 @@ { private readonly IRepository<EnterpriseWallet> rep = rep; private readonly IRepository<EnterpriseWalletTransaction> repEnterpriseWalletTransaction = repEnterpriseWalletTransaction; + private readonly IRepository<EnterpriseWalletExpandindirectOrder> repEnterpriseWalletExpandindirectOrder = repEnterpriseWalletExpandindirectOrder; private readonly IRepository<Enterprise> repEnterprise = repEnterprise; private readonly AlipayUtils alipayUtils = alipayUtils; @@ -53,7 +55,15 @@ var entity = await rep.AsQueryable() .Where(it => it.EnterpriseId == request.EnterpriseId && it.Access == request.Access) .FirstOrDefaultAsync(); - if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘"); + if (entity == null) + { + return new GetEnterpriseWalletQueryResult + { + Access = request.Access, + SignStatus = EnumEnterpriseWalletSignStatus.Wait, + ExpandindirectOrderStatus = EnumEnterpriseWalletExpandindirectOrderStatus.Wait + }; + } var update = false; if (entity.Access == EnumEnterpriseWalletAccess.Alipay) { @@ -134,6 +144,19 @@ } var model = entity.Adapt<GetEnterpriseWalletQueryResult>(); + + var expandindirectOrder = await repEnterpriseWalletExpandindirectOrder.AsQueryable().AsNoTracking() + .OrderByDescending(it => it.CreatedTime) + .Where(it => it.WalletId == model.Id) + .Select(it => new + { + it.OrderStatus + }) + .FirstOrDefaultAsync(); + model.ExpandindirectOrderStatus = expandindirectOrder == null + ? EnumEnterpriseWalletExpandindirectOrderStatus.Wait + : expandindirectOrder.OrderStatus; + return model; } diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml index 66d3a15..5693cf0 100644 --- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml +++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml @@ -374,7 +374,7 @@ 鐏靛伐鍛戒护澶勭悊鍣� </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.#ctor(MediatR.IMediator,Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ElectronSignSetting},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseCost},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser})"> + <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.#ctor(FlexJobApi.Core.SmsUtils,MediatR.IMediator,Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ElectronSignSetting},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseCost},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser})"> <summary> 鐏靛伐鍛戒护澶勭悊鍣� </summary> @@ -398,6 +398,14 @@ <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.Handle(FlexJobApi.Core.InviteElectronSignCommand,System.Threading.CancellationToken)"> <summary> 閭�璇风伒宸ョ绾� + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.Handle(FlexJobApi.Core.SendInviteElectronSignSmsCommand,System.Threading.CancellationToken)"> + <summary> + 鍙戦�侀個璇风绾︾煭淇� </summary> <param name="request"></param> <param name="cancellationToken"></param> @@ -699,7 +707,7 @@ 浼佷笟閽卞寘鏌ヨ澶勭悊鍣� </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWalletTransaction},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},FlexJobApi.Core.AlipayUtils)"> + <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWalletTransaction},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWalletExpandindirectOrder},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},FlexJobApi.Core.AlipayUtils)"> <summary> 浼佷笟閽卞寘鏌ヨ澶勭悊鍣� </summary> diff --git a/FlexJobApi.Web.Entry/appsettings.json b/FlexJobApi.Web.Entry/appsettings.json index 6623cbc..4defa19 100644 --- a/FlexJobApi.Web.Entry/appsettings.json +++ b/FlexJobApi.Web.Entry/appsettings.json @@ -117,7 +117,10 @@ "UserElectronSign": "SMS_476485061", //818閽卞寘寮�閫� 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙伴挶鍖呭紑閫氾紝璇ラ獙璇佺爜5鍒嗛挓鍐呮湁鏁堬紝璇峰嬁娉勯湶浜庝粬浜恒�� - "BankWalletAccountOpen": "SMS_473860301" + "BankWalletAccountOpen": "SMS_473860301", + + "InviteElectronSign": "SMS_493755029", + "ElectronSignUrl": "SMS_493715033" } } }, -- Gitblit v1.9.1