| | |
| | | using FlexJobApi.Core; |
| | | using FlexJobApi.Core.Models.ElectronSignServer.Common; |
| | | using FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals; |
| | | using FlexJobApi.Core.Models.ElectronSignServer.Users; |
| | | using Furion; |
| | | using Furion.DatabaseAccessor; |
| | | using Furion.DataEncryption; |
| | | using Furion.DistributedIDGenerator; |
| | | using Furion.FriendlyException; |
| | | using Mapster; |
| | | using MediatR; |
| | | using Microsoft.AspNetCore.Components.Forms; |
| | | using Microsoft.AspNetCore.Identity; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using System; |
| | |
| | | /// 同步用户命令处理器 |
| | | /// </summary> |
| | | public class SyncUserCommandHandler( |
| | | IMediator mediator, |
| | | IRepository<User> repUser, |
| | | IRepository<Enterprise> repEnterprise, |
| | | IRepository<ElectronSignSetting> repElectronSignSetting, |
| | | IRepository<Role> repRole |
| | | ) : |
| | | IRequestHandler<SyncEnterpriseUserCommand, Guid>, |
| | | IRequestHandler<SyncOperationUserCommand, Guid> |
| | | { |
| | | private readonly IMediator mediator = mediator; |
| | | private readonly IRepository<User> repUser = repUser; |
| | | private readonly IRepository<Enterprise> repEnterprise = repEnterprise; |
| | | private readonly IRepository<ElectronSignSetting> repElectronSignSetting = repElectronSignSetting; |
| | | private readonly IRepository<Role> repRole = repRole; |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | var enterprise = await repEnterprise.AsQueryable() |
| | | .Include(it => it.EnterpriseAuth) |
| | | .Include(it => it.ElectronSignSettings) |
| | | .Where(it => it.SocietyCreditCode == request.Enterprise.SocietyCreditCode) |
| | | .FirstOrDefaultAsync(cancellationToken); |
| | | |
| | | if (enterprise == null) |
| | | { |
| | | enterprise = new Enterprise(); |
| | | if (request.Enterprise.ElectronSignAccesses.IsNotNull()) |
| | | { |
| | | request.Enterprise.ElectronSignAccesses = await repElectronSignSetting.AsQueryable().AsNoTracking() |
| | | .Where(it => request.Enterprise.ElectronSignAccesses.Contains(it.Access) && !it.IsDisabled) |
| | | .Select(it => it.Access) |
| | | .ToListAsync(); |
| | | } |
| | | enterprise.ElectronSignSettings = request.Enterprise.ElectronSignAccesses |
| | | .Select(it => new EnterpriseElectronSignSetting |
| | | { |
| | | ElectronSignAccess = it |
| | | }) |
| | | .ToList(); |
| | | } |
| | | request.Enterprise.Adapt(enterprise); |
| | | enterprise.LicenseImage = GetOssUrl(enterprise.LicenseImage, request.Enterprise.LicenseImage); |
| | |
| | | var result = await BaiduOcrUtils.OcrBusinessLicense(enterprise.LicenseImage); |
| | | if (result?.Model != null) |
| | | { |
| | | result.Model.Adapt(enterprise); |
| | | enterprise.EnterpriseType = result.Model.EnterpriseType; |
| | | enterprise.RegisteredCapital = result.Model.RegisteredCapital; |
| | | enterprise.EstablishmentDate = result.Model.EstablishmentDate; |
| | | enterprise.Address = result.Model.Address; |
| | | enterprise.MainBusiness = result.Model.MainBusiness; |
| | | } |
| | | } |
| | | if (enterprise.EnterpriseAuth != null) |
| | | |
| | | if (enterprise.EnterpriseAuth == null) |
| | | { |
| | | enterprise.EnterpriseAuth.EnterpriseName = enterprise.EnterpriseName; |
| | | enterprise.EnterpriseAuth.SocietyCreditCode = enterprise.SocietyCreditCode; |
| | | enterprise.EnterpriseAuth.LicenseImage = enterprise.LicenseImage; |
| | | enterprise.EnterpriseAuth.LegalPerson = enterprise.LegalPerson; |
| | | enterprise.EnterpriseAuth.LegalIdentity = enterprise.LegalIdentity; |
| | | enterprise.EnterpriseAuth.IdentityImg = GetOssUrl(enterprise.EnterpriseAuth.IdentityImg, request.Enterprise.EnterpriseAuth.IdentityImg); |
| | | enterprise.EnterpriseAuth.IdentityBackImg = GetOssUrl(enterprise.EnterpriseAuth.IdentityBackImg, request.Enterprise.EnterpriseAuth.IdentityBackImg); |
| | | enterprise.EnterpriseAuth.BankCardImg = GetOssUrl(enterprise.EnterpriseAuth.BankCardImg, request.Enterprise.EnterpriseAuth.BankCardImg); |
| | | enterprise.EnterpriseAuth = new EnterpriseAuth(); |
| | | } |
| | | enterprise.EnterpriseAuth.EnterpriseName = enterprise.EnterpriseName; |
| | | enterprise.EnterpriseAuth.SocietyCreditCode = enterprise.SocietyCreditCode; |
| | | enterprise.EnterpriseAuth.LicenseImage = enterprise.LicenseImage; |
| | | enterprise.EnterpriseAuth.LegalPerson = enterprise.LegalPerson; |
| | | enterprise.EnterpriseAuth.LegalIdentity = enterprise.LegalIdentity; |
| | | enterprise.EnterpriseAuth.IdentityImg = GetOssUrl(enterprise.EnterpriseAuth.IdentityImg, request.Enterprise.EnterpriseAuth.IdentityImg); |
| | | enterprise.EnterpriseAuth.IdentityBackImg = GetOssUrl(enterprise.EnterpriseAuth.IdentityBackImg, request.Enterprise.EnterpriseAuth.IdentityBackImg); |
| | | enterprise.EnterpriseAuth.BankCardImg = GetOssUrl(enterprise.EnterpriseAuth.BankCardImg, request.Enterprise.EnterpriseAuth.BankCardImg); |
| | | |
| | | if (enterprise.Id == Guid.Empty) |
| | | await repEnterprise.InsertAsync(enterprise); |
| | | else |
| | | await repEnterprise.UpdateAsync(enterprise); |
| | | |
| | | if (enterprise.EnterpriseAuth.ElectronSignEnterpriseId == null) |
| | | { |
| | | var resultRegOrUpdateUser = await new RegOrUpdateUserInput |
| | | { |
| | | OutUserId = enterprise.Id.ToString(), |
| | | UserType = EnumElectronSignUserType.Personal, |
| | | EnterpriseName = enterprise.EnterpriseName, |
| | | SocietyCreditCode = enterprise.SocietyCreditCode, |
| | | Name = enterprise.EnterpriseAuth.Name ?? enterprise.Contacts, |
| | | Identity = enterprise.EnterpriseAuth.Identity, |
| | | Mobile = enterprise.EnterpriseAuth.PhoneNumber, |
| | | CertAccount = enterprise.EnterpriseAuth.CertAccount |
| | | }.SendHttpAsync<RegOrUpdateUserInput, ElectronSignServerResult<Guid?>>(EnumResourceHttpProvider.ElectronSignServerCustomer); |
| | | |
| | | if (resultRegOrUpdateUser?.Success == true) |
| | | { |
| | | enterprise.EnterpriseAuth.ElectronSignEnterpriseId = resultRegOrUpdateUser.Result; |
| | | } |
| | | else |
| | | { |
| | | throw Oops.Oh(EnumErrorCodeType.s510, resultRegOrUpdateUser?.Message ?? "注册电子签账号异常"); |
| | | } |
| | | } |
| | | |
| | | if (enterprise.IsReal) |
| | | { |
| | | var resultReal = await new RealEnterpriseInputByCertAccountInput |
| | | { |
| | | CustomerId = App.GetConfig<Guid>("ElectronSignServer:AppId"), |
| | | OutUserId = enterprise.Id.ToString(), |
| | | EnterpriseName = enterprise.EnterpriseName, |
| | | SocietyCreditCode = enterprise.SocietyCreditCode, |
| | | Name = enterprise.EnterpriseAuth.Name ?? enterprise.Contacts, |
| | | Identity = enterprise.EnterpriseAuth.Identity, |
| | | Mobile = enterprise.EnterpriseAuth.PhoneNumber, |
| | | BankCard = enterprise.EnterpriseAuth.BankCard, |
| | | BankCardImgUrl = enterprise.EnterpriseAuth.BankCardImg, |
| | | LicenseUrl = enterprise.EnterpriseAuth.LicenseImage, |
| | | IdentityImgUrl = enterprise.EnterpriseAuth.IdentityImg, |
| | | IdentityBackImgUrl = enterprise.EnterpriseAuth.IdentityBackImg, |
| | | ProxyPowerAttorneyUrl = enterprise.EnterpriseAuth.ProxyPowerAttorneyUrl, |
| | | LegalPerson = enterprise.EnterpriseAuth.LegalPerson, |
| | | Proxy = enterprise.EnterpriseAuth.Proxy ?? false, |
| | | RealMethod = (EnumElectronSignPersonalRealMethod)enterprise.EnterpriseAuth.EnterpriseRealMethod!.Value, |
| | | CertAccount = enterprise.EnterpriseAuth.CertAccount |
| | | }.SendHttpAsync<RealEnterpriseInputByCertAccountInput, ElectronSignServerResult<RealEnterpriseInputByCertAccountOutput>>(EnumResourceHttpProvider.ElectronSignServerCustomer); |
| | | if (resultReal?.Success != true || resultReal?.Result.Status != EnumElectronSignRealStatus.Real) |
| | | { |
| | | throw Oops.Oh(EnumErrorCodeType.s510, resultReal?.Message ?? "账号实名异常"); |
| | | } |
| | | enterprise.EnterpriseAuth.CertAccount = resultReal.Result.CertAccount; |
| | | } |
| | | |
| | | var user = await repUser.AsQueryable() |
| | | .Include(it => it.UserRoles) |
| | |
| | | await repUser.InsertAsync(user); |
| | | else |
| | | await repUser.UpdateAsync(user); |
| | | |
| | | |
| | | |
| | | return user.Id; |
| | | } |
| | | |