From 11e0c46d96a9de0c77cbc7509d34f470823bbc65 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期三, 03 九月 2025 13:48:35 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs | 96 +++++-- FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs | 79 +++++ FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs | 26 - FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs | 45 +++ FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs | 23 + FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs | 23 + FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs | 35 ++ FlexJobApi.Core/FlexJobApi.Core.xml | 198 ++++++++++++++++ FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs | 42 +++ FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml | 15 + FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs | 39 +++ FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs | 59 ++++ FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs | 5 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs | 27 ++ 14 files changed, 654 insertions(+), 58 deletions(-) diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs index d8bc453..8b23979 100644 --- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs +++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml.Serialization; namespace FlexJobApi.Core { @@ -25,6 +26,11 @@ /// 閫氶亾 /// </summary> public EnumEnterpriseWalletAccess Access { get; set; } + + /// <summary> + /// 浣欓 + /// </summary> + public decimal Balance { get; set; } /// <summary> /// 鍗忚浜у搧鐮侊紝鍟嗘埛鍜屾敮浠樺疂绛剧害鏃剁‘瀹氾紝涓嶅悓涓氬姟鍦烘櫙瀵瑰簲涓嶅悓鐨勭绾︿骇鍝佺爜銆� @@ -97,5 +103,38 @@ /// 鎺堜俊妯″紡锛岀洰鍓嶅彧鍦ㄨ姳鑺濅唬鎵o紙鍗宠姳鑺漡o锛夊崗璁椂鎵嶄細杩斿洖 /// </summary> public string CreditAuthMode { get; set; } + + /// <summary> + /// 璧勯噾璁拌处鏈琁d + /// </summary> + public string AccountBookId { get; set; } + /// <summary> + /// 璁拌处鐨勫鍗℃埛鍚� + /// </summary> + public string BankAccName { get; set; } + /// <summary> + /// 璁拌处鐨勫鍗″紑鎴疯 + /// </summary> + public string CardBank { get; set; } + /// <summary> + /// 璁拌处鐨勫鍗℃敮琛� + /// </summary> + public string CardBranch { get; set; } + /// <summary> + /// 璁拌处鐨勫鍗¤仈琛屽彿 + /// </summary> + public string CardDeposit { get; set; } + /// <summary> + /// 璁拌处鐨勫鍗″紑鎴峰湴鍧� + /// </summary> + public string CardLocation { get; set; } + /// <summary> + /// 璁拌处鐨勫鍗″崱鍙� + /// </summary> + public string CardNo { get; set; } + /// <summary> + /// 璁拌处鐨勫鍗$姸鎬�, A锛氭甯哥姸鎬�; 鍏朵粬锛氬紓甯� + /// </summary> + public EnumEnterpriseWalletAccountBookStatus? AccountBookStatus { get; set; } } } diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs new file mode 100644 index 0000000..43071e2 --- /dev/null +++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs @@ -0,0 +1,59 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 浼佷笟閽卞寘浜ゆ槗璁板綍 + /// </summary> + public class EnterpriseWalletTransaction : CommonEntity + { + /// <summary> + /// 浼佷笟閽卞寘Id + /// </summary> + public Guid WalletId { get; set; } + + /// <summary> + /// 閽卞寘 + /// </summary> + public EnterpriseWallet Wallet { get; set; } + + /// <summary> + /// 绫诲瀷 + /// </summary> + public EnumEnterpriseWalletTransactionType Type { get; set; } + + /// <summary> + /// 璁㈠崟鍙� + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 閲戦 + /// </summary> + public decimal Amount { get; set; } + + /// <summary> + /// 浣欓 + /// </summary> + public decimal Balance { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public string Remark { get; set; } + + /// <summary> + /// 璁㈠崟Id + /// </summary> + public string OrderId { get; set; } + + /// <summary> + /// 鐘舵�� + /// </summary> + public EnumEnterpriseWalletTransactionStatus Status { get; set; } + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs new file mode 100644 index 0000000..8a35418 --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 浼佷笟閽卞寘璁拌处鏈姸鎬� + /// </summary> + public enum EnumEnterpriseWalletAccountBookStatus + { + /// <summary> + /// 姝e父 + /// </summary> + Normal = 100, + /// <summary> + /// 寮傚父 + /// </summary> + Exception = 999 + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs new file mode 100644 index 0000000..ac081ce --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs @@ -0,0 +1,35 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 浼佷笟閽卞寘浜ゆ槗鐘舵�� + /// </summary> + public enum EnumEnterpriseWalletTransactionStatus + { + /// <summary> + /// 寰呮敮浠� + /// </summary> + WaitPay = 10, + /// <summary> + /// 澶勭悊涓� + /// </summary> + Dealing = 20, + /// <summary> + /// 鎴愬姛 + /// </summary> + Success = 30, + /// <summary> + /// 閫�绁� + /// </summary> + Refund = 40, + /// <summary> + /// 澶辫触 + /// </summary> + Fail = 50, + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs new file mode 100644 index 0000000..540d96b --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 浼佷笟閽卞寘浜ゆ槗绫诲瀷 + /// </summary> + public enum EnumEnterpriseWalletTransactionType + { + /// <summary> + /// 鍏呭�� + /// </summary> + Recharge = 10, + /// <summary> + /// 杞处 + /// </summary> + Transfer = 20 + } +} diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 3859be9..90b78ee 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -2055,6 +2055,11 @@ 閫氶亾 </summary> </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.Balance"> + <summary> + 浣欓 + </summary> + </member> <member name="P:FlexJobApi.Core.EnterpriseWallet.PersonalProductCode"> <summary> 鍗忚浜у搧鐮侊紝鍟嗘埛鍜屾敮浠樺疂绛剧害鏃剁‘瀹氾紝涓嶅悓涓氬姟鍦烘櫙瀵瑰簲涓嶅悓鐨勭绾︿骇鍝佺爜銆� @@ -2133,6 +2138,96 @@ <member name="P:FlexJobApi.Core.EnterpriseWallet.CreditAuthMode"> <summary> 鎺堜俊妯″紡锛岀洰鍓嶅彧鍦ㄨ姳鑺濅唬鎵o紙鍗宠姳鑺漡o锛夊崗璁椂鎵嶄細杩斿洖 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.AccountBookId"> + <summary> + 璧勯噾璁拌处鏈琁d + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.BankAccName"> + <summary> + 璁拌处鐨勫鍗℃埛鍚� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.CardBank"> + <summary> + 璁拌处鐨勫鍗″紑鎴疯 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.CardBranch"> + <summary> + 璁拌处鐨勫鍗℃敮琛� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.CardDeposit"> + <summary> + 璁拌处鐨勫鍗¤仈琛屽彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.CardLocation"> + <summary> + 璁拌处鐨勫鍗″紑鎴峰湴鍧� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.CardNo"> + <summary> + 璁拌处鐨勫鍗″崱鍙� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.AccountBookStatus"> + <summary> + 璁拌处鐨勫鍗$姸鎬�, A锛氭甯哥姸鎬�; 鍏朵粬锛氬紓甯� + </summary> + </member> + <member name="T:FlexJobApi.Core.EnterpriseWalletTransaction"> + <summary> + 浼佷笟閽卞寘浜ゆ槗璁板綍 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.WalletId"> + <summary> + 浼佷笟閽卞寘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Wallet"> + <summary> + 閽卞寘 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Type"> + <summary> + 绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Code"> + <summary> + 璁㈠崟鍙� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Amount"> + <summary> + 閲戦 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Balance"> + <summary> + 浣欓 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Remark"> + <summary> + 澶囨敞 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.OrderId"> + <summary> + 璁㈠崟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Status"> + <summary> + 鐘舵�� </summary> </member> <member name="T:FlexJobApi.Core.Menu"> @@ -3722,6 +3817,21 @@ 鏀粯瀹� </summary> </member> + <member name="T:FlexJobApi.Core.EnumEnterpriseWalletAccountBookStatus"> + <summary> + 浼佷笟閽卞寘璁拌处鏈姸鎬� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletAccountBookStatus.Normal"> + <summary> + 姝e父 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletAccountBookStatus.Exception"> + <summary> + 寮傚父 + </summary> + </member> <member name="T:FlexJobApi.Core.EnumEnterpriseWalletSignStatus"> <summary> 浼佷笟閽卞寘绛剧害鐘舵�� @@ -3740,6 +3850,51 @@ <member name="F:FlexJobApi.Core.EnumEnterpriseWalletSignStatus.Stop"> <summary> 缁堟 + </summary> + </member> + <member name="T:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus"> + <summary> + 浼佷笟閽卞寘浜ゆ槗鐘舵�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.WaitPay"> + <summary> + 寰呮敮浠� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Dealing"> + <summary> + 澶勭悊涓� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Success"> + <summary> + 鎴愬姛 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Refund"> + <summary> + 閫�绁� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Fail"> + <summary> + 澶辫触 + </summary> + </member> + <member name="T:FlexJobApi.Core.EnumEnterpriseWalletTransactionType"> + <summary> + 浼佷笟閽卞寘浜ゆ槗绫诲瀷 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionType.Recharge"> + <summary> + 鍏呭�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionType.Transfer"> + <summary> + 杞处 </summary> </member> <member name="T:FlexJobApi.Core.EnumMenuType"> @@ -9081,6 +9236,11 @@ 鏌ヨ涓汉鐢ㄦ埛绛剧害璇︽儏-缁撴灉 </summary> </member> + <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.Id"> + <summary> + 鐏靛伐Id + </summary> + </member> <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.ContractCode"> <summary> 鍚堝悓缂栧彿 @@ -9737,6 +9897,21 @@ 绛剧害鍦板潃 </summary> </member> + <member name="T:FlexJobApi.Core.RechargeEnterpriseWalletCommand"> + <summary> + 浼佷笟閽卞寘鍏呭�� + </summary> + </member> + <member name="P:FlexJobApi.Core.RechargeEnterpriseWalletCommand.Access"> + <summary> + 閫氶亾 + </summary> + </member> + <member name="P:FlexJobApi.Core.RechargeEnterpriseWalletCommand.Amount"> + <summary> + 閲戦 + </summary> + </member> <member name="T:FlexJobApi.Core.GetAlipayFundExpandindirectOrderQuery"> <summary> 鏌ヨ鏀粯瀹濊祫閲戜簩绾у晢鎴稫YB浠h繘浠跺崟璇︽儏 @@ -9850,6 +10025,11 @@ <member name="T:FlexJobApi.Core.GetEnterpriseWalletQuery"> <summary> 鏌ヨ浼佷笟閽卞寘璇︽儏 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseWalletQuery.EnterpriseId"> + <summary> + 浼佷笟Id </summary> </member> <member name="P:FlexJobApi.Core.GetEnterpriseWalletQuery.Access"> @@ -12537,6 +12717,24 @@ </summary> <param name="model"></param> </member> + <member name="M:FlexJobApi.Core.AlipayUtils.FundAccountbookCreate(Aop.Api.Domain.AlipayFundAccountbookCreateModel)"> + <summary> + 璧勯噾璁拌处鏈紑閫� + </summary> + <param name="model"></param> + </member> + <member name="M:FlexJobApi.Core.AlipayUtils.FundAccountbookQuery(Aop.Api.Domain.AlipayFundAccountbookQueryModel)"> + <summary> + 璧勯噾璁拌处鏈殑淇℃伅鏌ヨ + </summary> + <param name="model"></param> + </member> + <member name="M:FlexJobApi.Core.AlipayUtils.FundTransPagePay(Aop.Api.Domain.AlipayFundTransPagePayModel)"> + <summary> + 璧勯噾杞处椤甸潰鏀粯鎺ュ彛 + </summary> + <param name="model"></param> + </member> <member name="M:FlexJobApi.Core.AlipayUtils.FundTransUniTransfer(Aop.Api.Domain.AlipayFundTransUniTransferModel)"> <summary> 鍗曠瑪杞处鎺ュ彛 diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs new file mode 100644 index 0000000..9969fd7 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs @@ -0,0 +1,27 @@ +锘縰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.UserServerEnterpriseWallet])] + public class RechargeEnterpriseWalletCommand : IRequest<Guid> + { + /// <summary> + /// 閫氶亾 + /// </summary> + public EnumEnterpriseWalletAccess Access { get; set; } + + /// <summary> + /// 閲戦 + /// </summary> + public decimal Amount { get; set; } + + } +} diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs index 106e51b..b8bbe9e 100644 --- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs +++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs @@ -16,6 +16,11 @@ public class GetEnterpriseWalletQuery : IRequest<GetEnterpriseWalletQueryResult> { /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid? EnterpriseId { get; set; } + + /// <summary> /// 閫氶亾 /// </summary> public EnumEnterpriseWalletAccess Access { get; set; } diff --git a/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs b/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs index d88fc76..ff37a7a 100644 --- a/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs +++ b/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs @@ -102,6 +102,48 @@ } /// <summary> + /// 璧勯噾璁拌处鏈紑閫� + /// </summary> + /// <param name="model"></param> + public AlipayFundAccountbookCreateResponse FundAccountbookCreate(AlipayFundAccountbookCreateModel model) + { + logger.LogInformation($"姝e湪鎵ц璧勯噾璁拌处鏈紑閫氭帴鍙o細{model.ToJson()}"); + AlipayFundAccountbookCreateRequest request = new AlipayFundAccountbookCreateRequest(); + request.SetBizModel(model); + AlipayFundAccountbookCreateResponse response = alipayClient.CertificateExecute(request); + logger.LogInformation($"缁撴灉锛歿response.ToJson()}"); + return response; + } + + /// <summary> + /// 璧勯噾璁拌处鏈殑淇℃伅鏌ヨ + /// </summary> + /// <param name="model"></param> + public AlipayFundAccountbookQueryResponse FundAccountbookQuery(AlipayFundAccountbookQueryModel model) + { + logger.LogInformation($"姝e湪鎵ц璧勯噾璁拌处鏈殑淇℃伅鏌ヨ鎺ュ彛锛歿model.ToJson()}"); + AlipayFundAccountbookQueryRequest request = new AlipayFundAccountbookQueryRequest(); + request.SetBizModel(model); + AlipayFundAccountbookQueryResponse response = alipayClient.CertificateExecute(request); + logger.LogInformation($"缁撴灉锛歿response.ToJson()}"); + return response; + } + + /// <summary> + /// 璧勯噾杞处椤甸潰鏀粯鎺ュ彛 + /// </summary> + /// <param name="model"></param> + public AlipayFundTransPagePayResponse FundTransPagePay(AlipayFundTransPagePayModel model) + { + logger.LogInformation($"姝e湪鎵ц璧勯噾杞处椤甸潰鏀粯鎺ュ彛锛歿model.ToJson()}"); + AlipayFundTransPagePayRequest request = new AlipayFundTransPagePayRequest(); + request.SetBizModel(model); + AlipayFundTransPagePayResponse response = alipayClient.CertificateExecute(request); + logger.LogInformation($"缁撴灉锛歿response.ToJson()}"); + return response; + } + + /// <summary> /// 鍗曠瑪杞处鎺ュ彛 /// </summary> /// <param name="model"></param> diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs index 136ea3f..a75ed94 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs @@ -1,7 +1,10 @@ 锘縰sing FlexJobApi.Core; using Furion.DatabaseAccessor; +using Furion.DistributedIDGenerator; +using Furion.FriendlyException; using Mapster; using MediatR; +using Microsoft.AspNetCore.Components.Forms; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; @@ -15,7 +18,10 @@ /// 鐏靛伐鏌ヨ澶勭悊鍣� /// </summary> public class EnterpriseEmployeeQueryHandler( - IRepository<EnterpriseEmployee> rep + IRepository<EnterpriseEmployee> rep, + IRepository<ContractTemplate> repContractTemplate, + IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract, + IMediator mediator ) : IRequestHandler<GetEnterpriseEmployeesQuery, GetEnterpriseEmployeesQueryResult>, IRequestHandler<GetEnterpriseEmployeeQuery, GetEnterpriseEmployeeQueryResult>, @@ -23,6 +29,9 @@ IRequestHandler<GetPersonalUserElectronSignQuery, GetPersonalUserElectronSignQueryResult> { private readonly IRepository<EnterpriseEmployee> rep = rep; + private readonly IRepository<ContractTemplate> repContractTemplate = repContractTemplate; + private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract; + private readonly IMediator mediator = mediator; /// <summary> /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁 @@ -210,20 +219,70 @@ public async Task<GetPersonalUserElectronSignQueryResult> Handle(GetPersonalUserElectronSignQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); - var q = rep.AsQueryable().AsNoTracking() - .Where(it => it.UserId == logier.Id); if (request.Id.HasValue) { - q = q.Where(it => it.Id == request.Id); + var model = await rep.AsQueryable().AsNoTracking() + .Where(it => it.UserId == logier.Id && it.Id == request.Id) + .GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>(); + return model; } - - if (request.Code.IsNotNull()) + else if (request.Code.IsNotNull()) { - q = q.Where(it => it.ContractTemplate.Code == request.Code); - } + var contractTemplate = await repContractTemplate.AsQueryable().AsNoTracking() + .Where(it => it.Code == request.Code) + .FirstOrDefaultAsync(); + if (contractTemplate == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓"); - var model = await q.GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>(); - return model; + await mediator.Send(new CheckContractTemplateCommand + { + Id = contractTemplate.Id + }, cancellationToken); + + var entity = await rep.AsQueryable() + .Include(it => it.Enterprise) + .Where(it => + it.UserId == logier.Id + && it.ContractTemplateId == contractTemplate.Id) + .FirstOrDefaultAsync(); + if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐"); + if (entity.UserSignContractStatus == null) + { + entity.ContractTemplateId = contractTemplate.Id; + entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait; + entity.UserSignContractTime = null; + entity.EnterpriseSignContractStatus = null; + entity.EnterpriseSignContractTime = null; + entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}"; + entity.ContractUrl = null; + var contract = new EnterpriseEmployeeContract + { + EnterpriseEmployeeId = entity.Id, + ContractTemplateId = entity.ContractTemplateId, + ContractCode = entity.ContractCode, + UserSignContractStatus = entity.UserSignContractStatus, + }; + await repEnterpriseEmployeeContract.InsertAsync(contract); + await rep.UpdateAsync(entity); + } + return new GetPersonalUserElectronSignQueryResult + { + Id = entity.Id, + ContractCode = entity.ContractCode, + ContractTemplateAccess = contractTemplate.Access, + UserSignContractStatus = entity.UserSignContractStatus, + Name = entity.Name, + Identity = entity.Identity, + ContactPhoneNumber = entity.ContactPhoneNumber, + UserSignContractTime = entity.UserSignContractTime, + EnterpriseEnterpriseName = entity.Enterprise.EnterpriseName, + EnterpriseSignContractTime = entity.EnterpriseSignContractTime, + ContractUrl = entity.ContractUrl, + }; + } + else + { + throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欑伒宸d鎴栧悎鍚屾ā鏉跨紪鍙�"); + } } } } diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs index e34811a..8901516 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs @@ -24,6 +24,7 @@ ) : IRequestHandler<OpenEnterpriseWalletCommand, OpenEnterpriseWalletCommandResult>, IRequestHandler<CloseEnterpriseWalletCommand, Guid>, + IRequestHandler<RechargeEnterpriseWalletCommand, Guid>, IRequestHandler<AlipayTransferCommand, Guid> { private readonly IRepository<EnterpriseWallet> rep = rep; @@ -109,6 +110,50 @@ 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(); diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs index 5fb092c..f826fed 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs @@ -19,12 +19,14 @@ /// 鏀粯瀹濋�氱煡鍥炰紶 /// </summary> public class GetAlipayNotifyCommandHandler( - IRepository<EnterpriseWallet> rep + IRepository<EnterpriseWallet> rep, + IMediator mediator ) : IRequestHandler<GetAlipayNotifyCommand, bool>, IRequestHandler<AlipayUserAgreementPageSignNotifyCommand, bool> { private readonly IRepository<EnterpriseWallet> rep = rep; + private readonly IMediator mediator = mediator; /// <summary> /// 鏀粯瀹濋�氱煡鍥炰紶 @@ -49,23 +51,11 @@ .Where(it => it.Code == request.external_agreement_no) .FirstOrDefaultAsync(); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘"); - entity.AgreementNo = request.agreement_no; - entity.SignTime = request.sign_time.ToDateTime(); - entity.ValidTime = request.valid_time.ToDateTime(); - entity.InvalidTime = request.invalid_time.ToDateTime(); - entity.SignStatus = request.status == "TEMP" - ? EnumEnterpriseWalletSignStatus.Apply - : request.status == "NORMAL" - ? EnumEnterpriseWalletSignStatus.Normal - : request.status == "STOP" - ? EnumEnterpriseWalletSignStatus.Stop - : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�"); - entity.AlipayLogonId = request.alipay_logon_id; - entity.PrincipalId = request.alipay_user_id; - entity.PrincipalOpenId = request.alipay_open_id; - entity.ZmOpenId = request.zm_open_id; - entity.CreditAuthMode = request.credit_auth_mode; - await rep.UpdateAsync(entity); + await mediator.Send(new GetEnterpriseWalletQuery + { + EnterpriseId = entity.EnterpriseId, + Access = EnumEnterpriseWalletAccess.Alipay + }); return true; } } diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs index 140759f..5289323 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs @@ -17,11 +17,13 @@ /// </summary> public class EnterpriseWalletQueryHandler( IRepository<EnterpriseWallet> rep, + IRepository<Enterprise> repEnterprise, AlipayUtils alipayUtils ) : IRequestHandler<GetEnterpriseWalletQuery, GetEnterpriseWalletQueryResult> { private readonly IRepository<EnterpriseWallet> rep = rep; + private readonly IRepository<Enterprise> repEnterprise = repEnterprise; private readonly AlipayUtils alipayUtils = alipayUtils; /// <summary> @@ -30,42 +32,82 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> + [UnitOfWork(false)] public async Task<GetEnterpriseWalletQueryResult> Handle(GetEnterpriseWalletQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); + if (request.EnterpriseId == null || logier.Type == EnumUserType.Enterprise) + { + request.EnterpriseId = logier.EnterpriseId; + } + var enterprise = repEnterprise.AsQueryable().AsNoTracking() + .Where(it => it.Id == request.EnterpriseId) + .FirstOrDefault(); + if (enterprise == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟"); var entity = await rep.AsQueryable() - .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == request.Access) + .Where(it => it.EnterpriseId == request.EnterpriseId && it.Access == request.Access) .FirstOrDefaultAsync(); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘"); - if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Apply) + 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; - await rep.UpdateAsync(entity); + var response = alipayUtils.UserAgreementQuery(new Aop.Api.Domain.AlipayUserAgreementQueryModel + { + 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; + await rep.UpdateNowAsync(entity); + } + + if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Normal && entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal) + { + var accountBookResponse = 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 = enterprise.SocietyCreditCode + }.ToJson() + }); + if (accountBookResponse.IsError) throw Oops.Oh(EnumErrorCodeType.s510, accountBookResponse.SubMsg ?? accountBookResponse.Msg); + entity.AccountBookId = accountBookResponse.AccountBookId; + entity.BankAccName = accountBookResponse.ExtCardInfo.BankAccName; + entity.CardBank = accountBookResponse.ExtCardInfo.CardBank; + entity.CardBranch = accountBookResponse.ExtCardInfo.CardBranch; + entity.CardDeposit = accountBookResponse.ExtCardInfo.CardDeposit; + entity.CardLocation = accountBookResponse.ExtCardInfo.CardLocation; + entity.CardNo = accountBookResponse.ExtCardInfo.CardNo; + entity.AccountBookStatus = accountBookResponse.ExtCardInfo.Status == "A" + ? EnumEnterpriseWalletAccountBookStatus.Normal + : EnumEnterpriseWalletAccountBookStatus.Exception; + await rep.UpdateNowAsync(entity); + } } + var model = entity.Adapt<GetEnterpriseWalletQueryResult>(); return model; } diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml index 605d312..ba599e8 100644 --- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml +++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml @@ -432,7 +432,7 @@ 鐏靛伐鏌ヨ澶勭悊鍣� </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeeQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee})"> + <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeeQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},MediatR.IMediator)"> <summary> 鐏靛伐鏌ヨ澶勭悊鍣� </summary> @@ -633,12 +633,21 @@ <param name="cancellationToken"></param> <returns></returns> </member> + <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletCommandHandler.Handle(FlexJobApi.Core.RechargeEnterpriseWalletCommand,System.Threading.CancellationToken)"> + <summary> + 浼佷笟閽卞寘鍏呭�� + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + <exception cref="T:System.NotImplementedException"></exception> + </member> <member name="T:FlexJobApi.UserServer.Application.GetAlipayNotifyCommandHandler"> <summary> 鏀粯瀹濋�氱煡鍥炰紶 </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.GetAlipayNotifyCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet})"> + <member name="M:FlexJobApi.UserServer.Application.GetAlipayNotifyCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},MediatR.IMediator)"> <summary> 鏀粯瀹濋�氱煡鍥炰紶 </summary> @@ -682,7 +691,7 @@ 浼佷笟閽卞寘鏌ヨ澶勭悊鍣� </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},FlexJobApi.Core.AlipayUtils)"> + <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},FlexJobApi.Core.AlipayUtils)"> <summary> 浼佷笟閽卞寘鏌ヨ澶勭悊鍣� </summary> -- Gitblit v1.9.1