using FlexJobApi.Core; using FlexJobApi.Core.Models.ElectronSignServer.Common; using FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals; using FlexJobApi.Core.Models.ElectronSignServer.Users; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.UserServer.Application { /// /// 个人实名 /// /// /// public class PersonalUserRealCommandHandler( IRepository repUser ) : IRequestHandler, IRequestHandler, IRequestHandler { private readonly IRepository repUser = repUser; /// /// 发送个人三要素实名短信 /// /// /// /// public async Task Handle(SendPersonalUserIdentity3RealSmsCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var user = await repUser.AsQueryable() .Include(it => it.UserAuth) .Where(it => it.Id == logier.Id) .FirstOrDefaultAsync(); if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "用户"); if (user.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "用户已实名,请勿重复申请"); if (user.UserAuth == null) { user.UserAuth = new UserAuth(); } if (user.UserAuth.ElectronSignUserId == null) { var result = await new RegOrUpdateUserInput { OutUserId = user.Id.ToString(), UserType = EnumElectronSignUserType.Personal, Name = request.Name, Identity = request.Identity, Mobile = request.PhoneNumber }.SendHttpAsync>(EnumResourceHttpProvider.ElectronSignServerCustomer); if (result?.Success == true) { user.UserAuth.ElectronSignUserId = result.Result; } else { throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "注册实名账号异常"); } } var sendRealSmsResult = await new SendRealSmsInput { UserType = EnumElectronSignUserType.Personal, OutUserId = user.Id.ToString(), RealMethod = EnumElectronSignPersonalRealMethod.Identity3, Name = request.Name, Identity = request.Identity, Mobile = request.PhoneNumber }.SendHttpAsync>(EnumResourceHttpProvider.ElectronSignServerCustomer); if (sendRealSmsResult?.Success != true) throw Oops.Oh(EnumErrorCodeType.s510, sendRealSmsResult?.Message ?? "发送实名短信异常"); PersonalReal( EnumPersonalUserRealStatus.Checking, EnumUserRealMethod.Identity3, user, new List(), request.Name, request.Identity, phoneNumber: request.PhoneNumber); return user.Id; } /// /// 个人三要素实名认证 /// /// /// /// public async Task Handle(PersonalUserIdentity3RealCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var user = await repUser.AsQueryable() .Include(it => it.UserAuth) .Where(it => it.Id == logier.Id) .FirstOrDefaultAsync(); if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "用户"); if (user.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "用户已实名,请勿重复申请"); if (user.UserAuth == null) { user.UserAuth = new UserAuth(); } if (user.UserAuth.ElectronSignUserId == null) { var resultRegOrUpdateUser = await new RegOrUpdateUserInput { OutUserId = user.Id.ToString(), UserType = EnumElectronSignUserType.Personal, Name = request.Name, Identity = request.Identity, Mobile = request.PhoneNumber }.SendHttpAsync>(EnumResourceHttpProvider.ElectronSignServerCustomer); if (resultRegOrUpdateUser?.Success == true) { user.UserAuth.ElectronSignUserId = resultRegOrUpdateUser.Result; } else { throw Oops.Oh(EnumErrorCodeType.s510, resultRegOrUpdateUser?.Message ?? "注册实名账号异常"); } } var result = await new RealPersonalInput { OutUserId = user.Id.ToString(), RealMethod = EnumElectronSignPersonalRealMethod.Identity3, Name = request.Name, Identity = request.Identity, IdentityImgUrl = request.IdentityImg, IdentityBackImgUrl = request.IdentityBackImg, Mobile = request.PhoneNumber, VCode = request.VerifyCode }.SendHttpAsync>(EnumResourceHttpProvider.ElectronSignServerCustomer); if (result?.Success != true || result.Result?.Status != EnumElectronSignRealStatus.Real) throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "实名异常"); var enterpriseEmployees = await repUser.Change().AsQueryable() .Where(it => it.UserId == user.Id) .ToListAsync(); PersonalReal( EnumPersonalUserRealStatus.Real, EnumUserRealMethod.Identity3, user, enterpriseEmployees, request.Name, request.Identity, request.IdentityImg, request.IdentityBackImg, request.PhoneNumber); await repUser.UpdateAsync(user); return user.Id; } /// /// 个人人脸实名认证 /// /// /// /// public async Task Handle(PersonalUserFaceRealCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var user = await repUser.AsQueryable() .Include(it => it.UserAuth) .Where(it => it.Id == logier.Id) .FirstOrDefaultAsync(); if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "用户"); if (user.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "用户已实名,请勿重复申请"); if (user.UserAuth == null) { user.UserAuth = new UserAuth(); } if (user.UserAuth.ElectronSignUserId == null) { var resultRegOrUpdateUser = await new RegOrUpdateUserInput { OutUserId = user.Id.ToString(), UserType = EnumElectronSignUserType.Personal, Name = request.Name, Identity = request.Identity, Mobile = user.PhoneNumber }.SendHttpAsync>(EnumResourceHttpProvider.ElectronSignServerCustomer); if (resultRegOrUpdateUser?.Success == true) { user.UserAuth.ElectronSignUserId = resultRegOrUpdateUser.Result; } else { throw Oops.Oh(EnumErrorCodeType.s510, resultRegOrUpdateUser?.Message ?? "注册实名账号异常"); } } var result = await new RealPersonalInput { OutUserId = user.Id.ToString(), RealMethod = EnumElectronSignPersonalRealMethod.Face, Name = request.Name, Identity = request.Identity, IdentityImgUrl = request.IdentityImg, IdentityBackImgUrl = request.IdentityBackImg, }.SendHttpAsync>(EnumResourceHttpProvider.ElectronSignServerCustomer); if (result?.Success != true || result.Result?.Status != EnumElectronSignRealStatus.Checking) throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "实名异常"); var enterpriseEmployees = await repUser.Change().AsQueryable() .Where(it => it.UserId == user.Id) .ToListAsync(); PersonalReal( EnumPersonalUserRealStatus.Checking, EnumUserRealMethod.Face, user, enterpriseEmployees, request.Name, request.Identity, request.IdentityImg, request.IdentityBackImg, faceRealUrl: result.Result.FaceUrl); await repUser.UpdateAsync(user); return result.Result.FaceUrl .Replace("https://h5-v2.kych5.com", "https://wx05.ssqian.com.cn") .Replace("https://openapi.bestsign.info:443", "https://wx115.bestsign.info") .Replace("https://openapi.bestsign.cn:443", "https://wx115.bestsign.cn"); ; } /// /// 个人实名 /// public static void PersonalReal( EnumPersonalUserRealStatus status, EnumUserRealMethod method, User user, List enterpriseEmployees, string name, string identity, string? identityImg = null, string? identityBackImg = null, string? phoneNumber = null, string? faceRealUrl = null) { user.UserAuth.Name = name; user.UserAuth.Identity = identity; user.UserAuth.Gender = user.UserAuth.Identity.GetGender(); user.UserAuth.Birthday = user.UserAuth.Identity.GetBirthday(); user.UserAuth.Age = user.UserAuth.Identity.GetAge(); user.UserAuth.IdentityImg = identityImg; user.UserAuth.IdentityBackImg = identityBackImg; user.UserAuth.RealAccess = EnumRealAccess.BestSign; user.UserAuth.RealStatus = status; user.RealMethod = method; if (user.RealMethod == EnumUserRealMethod.Identity3) { user.UserAuth.PhoneNumber = phoneNumber; } else { user.UserAuth.FaceRealUrl = faceRealUrl; } if (user.UserAuth.RealStatus == EnumPersonalUserRealStatus.Real) { user.IsReal = true; user.RealTime = DateTime.Now; user.Name = user.UserAuth.Name; if (user.PhoneNumber.IsNull()) { user.PhoneNumber = phoneNumber; user.IsCheckPhoneNumber = true; } if (user.ContactPhoneNumber.IsNull()) { user.PhoneNumber = phoneNumber; } user.Identity = user.UserAuth.Identity; user.Age = user.UserAuth.Age; user.Gender = user.UserAuth.Gender; user.Birthday = user.UserAuth.Birthday; foreach (var enterpriseEmployee in enterpriseEmployees) { enterpriseEmployee.Name = user.UserAuth.Name; enterpriseEmployee.Identity = user.UserAuth.Identity; enterpriseEmployee.IdentityImg = user.UserAuth.IdentityImg; enterpriseEmployee.IdentityBackImg = user.UserAuth.IdentityBackImg; enterpriseEmployee.Age = user.UserAuth.Age; enterpriseEmployee.Gender = user.UserAuth.Gender; enterpriseEmployee.Birthday = user.UserAuth.Birthday; } } } } }