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 @@ /// 授信模式,目前只在花芝代扣(即花芝go)协议时才会返回 /// </summary> public string CreditAuthMode { get; set; } /// <summary> /// 资金记账本Id /// </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; } } } FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs
New file @@ -0,0 +1,59 @@ using 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; } } } FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs
New file @@ -0,0 +1,23 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 企业钱包记账本状态 /// </summary> public enum EnumEnterpriseWalletAccountBookStatus { /// <summary> /// 正常 /// </summary> Normal = 100, /// <summary> /// 异常 /// </summary> Exception = 999 } } FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs
New file @@ -0,0 +1,35 @@ using 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, } } FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs
New file @@ -0,0 +1,23 @@ using 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 } } 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> 授信模式,目前只在花芝代扣(即花芝go)协议时才会返回 </summary> </member> <member name="P:FlexJobApi.Core.EnterpriseWallet.AccountBookId"> <summary> 资金记账本Id </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> 正常 </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> 查询支付宝资金二级商户KYB代进件单详情 @@ -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> 单笔转账接口 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs
New file @@ -0,0 +1,27 @@ using 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; } } } 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; } FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs
@@ -102,6 +102,48 @@ } /// <summary> /// 资金记账本开通 /// </summary> /// <param name="model"></param> public AlipayFundAccountbookCreateResponse FundAccountbookCreate(AlipayFundAccountbookCreateModel model) { logger.LogInformation($"正在执行资金记账本开通接口:{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($"正在执行资金记账本的信息查询接口:{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($"正在执行资金转账页面支付接口:{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> FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
@@ -1,7 +1,10 @@ using 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, "请填写灵工Id或合同模板编号"); } } } } 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(); 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; } } 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; } 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>