From 345de08ba60e93aa448083cf70ccccbd4cfdd0e3 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 08 八月 2025 17:08:27 +0800 Subject: [PATCH] pref:优化 --- FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs | 77 +++++++++++++++++++++++++++++++++++++- 1 files changed, 75 insertions(+), 2 deletions(-) diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs index dad1665..11c64e3 100644 --- a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs @@ -19,12 +19,16 @@ /// </summary> public class LoginCommandHandler( IRepository<User> rep, - SmsUtils smsUtils) : + SmsUtils smsUtils, + WxmpUtils wxmpUtils) : IRequestHandler<PasswordLoginCommand, LoginCommandCallback>, - IRequestHandler<SmsLoginCommand, LoginCommandCallback> + IRequestHandler<SmsLoginCommand, LoginCommandCallback>, + IRequestHandler<WxmpLoginCommand, LoginCommandCallback>, + IRequestHandler<BindPhoneNumberCommand, bool> { private readonly IRepository<User> rep = rep; private readonly SmsUtils smsUtils = smsUtils; + private readonly WxmpUtils wxmpUtils = wxmpUtils; /// <summary> /// 瀵嗙爜鐧诲綍 @@ -62,6 +66,19 @@ var user = await rep.AsQueryable().AsNoTracking() .Where(it => it.UserName == request.PhoneNumber && it.Type == request.Type) .FirstOrDefaultAsync(cancellationToken); + if (user == null && request.Type == EnumUserType.Personal) + { + user = new User + { + Type = request.Type, + UserName = request.PhoneNumber, + PhoneNumber = request.PhoneNumber, + IsCheckPhoneNumber = true, + Level = 1, + Status = EnumUserStatus.Normal + }; + await rep.InsertAsync(user); + } if (user == null) throw Oops.Oh(EnumUserErrorCodeType.u1000); if (user.Status == EnumUserStatus.Disabled) @@ -70,6 +87,62 @@ } /// <summary> + /// 寰俊灏忕▼搴忕櫥褰� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<LoginCommandCallback> Handle(WxmpLoginCommand request, CancellationToken cancellationToken) + { + var snsJscode2session = await wxmpUtils.SnsJscode2sessionAsync(request.Type, request.Code, cancellationToken); + var user = await rep.AsQueryable().AsNoTracking() + .Where(it => it.WxmpOpenId == snsJscode2session.openid && it.Type == request.Type) + .FirstOrDefaultAsync(cancellationToken); + if (user == null && request.Type == EnumUserType.Personal) + { + user = new User + { + Type = request.Type, + UserName = snsJscode2session.openid, + WxmpOpenId = snsJscode2session.openid, + Level = 1, + Status = EnumUserStatus.Normal + }; + await rep.InsertAsync(user); + } + if (user == null) + throw Oops.Oh(EnumUserErrorCodeType.u1000); + if (user.Status == EnumUserStatus.Disabled) + throw Oops.Oh(EnumUserErrorCodeType.u1001); + return GetCurrentLogier(user, EnumClientType.Wxmp); + } + + /// <summary> + /// 缁戝畾鎵嬫満鍙� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<bool> Handle(BindPhoneNumberCommand request, CancellationToken cancellationToken) + { + await smsUtils.CheckVerifyCode(new CheckVerifyCodeModel + { + PhoneNumber = request.PhoneNumber, + VerifyCode = request.VerifyCode, + TemplateCode = EnumSmsTemplateCode.LoginOrRegister + }); + var logier = JwtUtils.GetCurrentLogier(); + var user = await rep.AsQueryable() + .FirstOrDefaultAsync(it => it.Id == logier.Id); + if (user == null) + throw Oops.Oh(EnumErrorCodeType.s404, "褰撳墠璐﹀彿涓嶅瓨鍦�"); + user.UserName = request.PhoneNumber; + user.PhoneNumber = request.PhoneNumber; + user.IsCheckPhoneNumber = true; + return true; + } + + /// <summary> /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 /// </summary> /// <param name="user"></param> -- Gitblit v1.9.1