sunpengfei
7 天以前 8ffda541b48cbf619f8493196da4fb44d4f3ddc5
FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs
@@ -2,11 +2,14 @@
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;
@@ -22,15 +25,19 @@
    /// 同步用户命令处理器
    /// </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>
@@ -43,15 +50,33 @@
        {
            var enterprise = await repEnterprise.AsQueryable()
                .Include(it => it.EnterpriseAuth)
                .Include(it => it.ElectronSignSettings)
                .Where(it => it.SocietyCreditCode == request.Enterprise.SocietyCreditCode)
                .FirstOrDefaultAsync(cancellationToken);
            var add = false;
            if (enterprise == null)
            {
                add = true;
                enterprise = new Enterprise();
                enterprise.Id = IDGen.NextID();
                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();
            }
            if (enterprise.EnterpriseAuth == null)
            if (request.Enterprise.EnterpriseAuth == null)
            {
                enterprise.EnterpriseAuth = new EnterpriseAuth();
                request.Enterprise.EnterpriseAuth = new SyncEnterpriseUserCommandEnterpriseAuth();
            }
            request.Enterprise.Adapt(enterprise);
            enterprise.LicenseImage = GetOssUrl(enterprise.LicenseImage, request.Enterprise.LicenseImage);
@@ -60,27 +85,39 @@
                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)
            {
                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 (request.Enterprise.EnterpriseAuth != null)
            {
                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.EnterpriseAuth.ElectronSignEnterpriseId == null)
            {
                var resultRegOrUpdateUser = await new RegOrUpdateUserInput
                {
                    OutUserId = enterprise.Id.ToString(),
                    UserType = EnumElectronSignUserType.Personal,
                    UserType = EnumElectronSignUserType.Company,
                    EnterpriseName = enterprise.EnterpriseName,
                    SocietyCreditCode = enterprise.SocietyCreditCode,
                    Name = enterprise.EnterpriseAuth.Name,
                    Name = enterprise.EnterpriseAuth.Name ?? enterprise.Contacts,
                    Identity = enterprise.EnterpriseAuth.Identity,
                    Mobile = enterprise.EnterpriseAuth.PhoneNumber,
                    CertAccount = enterprise.EnterpriseAuth.CertAccount
@@ -88,7 +125,7 @@
                if (resultRegOrUpdateUser?.Success == true)
                {
                    enterprise!.EnterpriseAuth!.ElectronSignEnterpriseId = resultRegOrUpdateUser.Result;
                    enterprise.EnterpriseAuth.ElectronSignEnterpriseId = resultRegOrUpdateUser.Result;
                }
                else
                {
@@ -96,10 +133,39 @@
                }
            }
            if (enterprise.Id == Guid.Empty)
                await repEnterprise.InsertAsync(enterprise);
            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;
            }
            if (add)
                await repEnterprise.InsertNowAsync(enterprise);
            else
                await repEnterprise.UpdateAsync(enterprise);
                await repEnterprise.UpdateNowAsync(enterprise);
            var user = await repUser.AsQueryable()
                    .Include(it => it.UserRoles)