From 376f3de70bfdd7905876123ba5a331c0aa176199 Mon Sep 17 00:00:00 2001
From: 小飞侠 <8277136+liaoxujun@user.noreply.gitee.com>
Date: 星期四, 25 九月 2025 09:10:29 +0800
Subject: [PATCH] 修改注册时可以多模块注册
---
Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs | 274 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 266 insertions(+), 8 deletions(-)
diff --git a/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
index b4f00fe..252f050 100644
--- a/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
+++ b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
@@ -1,10 +1,23 @@
-锘縰sing Furion.DynamicApiController;
+锘縰sing Admin.NET.Core;
+using Admin.NET.Core.Service;
+using cylsg.utility.Extend;
+using Furion;
+using Furion.DataEncryption;
+using Furion.DynamicApiController;
+using Furion.EventBus;
+using Furion.FriendlyException;
+using FZCTB.NET.API.Application.Auth.DTO;
+using FZCZTB.NET.MD.CutomerMd;
+using FZCZTB.NET.MD.CutomerMd.Extend;
+using FZCZTB.NET.SYSService.MSM;
+using Lazy.Captcha.Core;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using Microsoft.Extensions.Options;
+using NewLife;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
namespace FZCTB.NET.API.Application.Auth
{
@@ -12,7 +25,252 @@
/// 閴存潈鏈嶅姟
/// </summary>
[ApiDescriptionSettings("FZCAPISYS", Order = 149)]
- public class AuthService: IDynamicApiController
+ public class AuthService : IDynamicApiController
{
+ private readonly ICaptcha _captcha;
+ private readonly IEventPublisher _eventPublisher;
+ private readonly IHttpContextAccessor _httpContextAccessor;
+ private readonly SMSConfigOptions _smsOptions;
+ private readonly SysCacheService _sysCacheService;
+ private readonly SysConfigService _sysConfigService;
+ private readonly SqlSugarRepository<FBS_ExRole> _sysExRol;
+ private readonly SysLdapService _sysLdapService;
+ private readonly SysMenuService _sysMenuService;
+ private readonly SysOnlineUserService _sysOnlineUserService;
+ private readonly ZCSMSService _sysSmsService;
+ private readonly SqlSugarRepository<FBS_CoutomerExRole> _sysUserExRol;
+ private readonly SqlSugarRepository<FBS_CustormerUsers> _sysUserRep;
+ private readonly SysUserService _sysUserService;
+ public AuthService(
+ SqlSugarRepository<FBS_CustormerUsers> sysUserRep,
+ SqlSugarRepository<FBS_CoutomerExRole> sysUserExRol,
+ IHttpContextAccessor httpContextAccessor,
+ SysOnlineUserService sysOnlineUserService,
+ SysConfigService sysConfigService,
+ SysLdapService sysLdapService,
+ IEventPublisher eventPublisher,
+ ZCSMSService sysSmsService,
+ SysCacheService sysCacheService,
+ SysMenuService sysMenuService,
+ SysUserService sysUserService,
+ IOptions<SMSConfigOptions> smsConfigOptions,
+ SqlSugarRepository<FBS_ExRole> exrel,
+
+ ICaptcha captcha
+
+ )
+ {
+ _captcha = captcha;
+ _sysUserRep = sysUserRep;
+
+ _sysSmsService = sysSmsService;
+ _eventPublisher = eventPublisher;
+ _sysUserService = sysUserService;
+ _sysMenuService = sysMenuService;
+ _sysCacheService = sysCacheService;
+ _sysConfigService = sysConfigService;
+ _httpContextAccessor = httpContextAccessor;
+ _sysOnlineUserService = sysOnlineUserService;
+ _sysLdapService = sysLdapService;
+ _smsOptions = smsConfigOptions.Value;
+ _sysExRol = exrel;
+ _sysUserExRol = sysUserExRol;
+ }
+
+ /// <summary>
+ /// 鍒囨崲瑙掕壊 宸茬櫥褰曡繘鍘昏鑹叉垨鑰呭垏鎹㈣鑹叉槸璋冪敤锛岄渶瑕佹浛鎹oken,鐩稿綋浜庣櫥褰�
+ /// </summary>
+ [DisplayName("鍒囨崲瑙掕壊")]
+ public async Task<CustomerLoginOutput> ChangeLogoInExRule(string RuleCode)
+ {
+ var id = App.User.FindFirst(ClaimConst.UserId)?.Value.ToLong() ?? 0;
+ if (id == 0)
+ {
+ throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒");
+ }
+ var rols = await _sysExRol.GetFirstAsync(x => x.Code == RuleCode && x.Status == StatusEnum.Enable);
+ if (rols == null)
+ throw Oops.Oh("瑙掕壊宸茬粡涓嬬嚎");
+
+ // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
+ // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
+ var user = await _sysUserRep.AsQueryable().Where(x => x.Id == id).FirstAsync();
+ if (user == null)
+ {
+ throw Oops.Oh("璇ョ敤鎴锋病鏈夋敞鍐�");
+ }
+ if (user.IsEn == false)
+ {
+ throw Oops.Oh("鐢ㄥ紓甯�");
+ }
+ var exr = await _sysUserExRol.GetFirstAsync(x => x.CusExtendId == user.CusExtendId && x.ExRoleId == rols.Id);
+ if (exr == null)
+ throw Oops.Oh("娌℃湁鐢宠璇ヨ鑹�");
+
+ return await CreateToken(user, RuleCode);
+ }
+
+ /// <summary>
+ /// 鎵嬫満鍙风櫥褰� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [AllowAnonymous]
+ [DisplayName("鎵嬫満鍙风櫥褰�")]
+ public virtual async Task<CustomerLoginOutput> LoginPhone([Required] CustomerLoginPhoneInput input)
+ {
+ if (input.Id > 0)
+ {
+ //鏈�鍚庝竴娆$‘璁ょ櫥闄嗙姸鎬�
+ var verifyCode = _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
+ if (string.IsNullOrWhiteSpace(verifyCode)) throw Oops.Oh("楠岃瘉鐮佷笉瀛樺湪鎴栧凡澶辨晥锛岃閲嶆柊鑾峰彇锛�");
+
+ _sysCacheService.Remove($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
+ if (verifyCode != input.Code)
+ throw Oops.Oh("鐧诲綍鐮佸け鏁�");
+ var user = await _sysUserRep.AsQueryable().Where(x => x.Id == input.Id && x.IsEn == true).FirstAsync();
+ if (user == null)
+ throw Oops.Oh("娌℃湁鎵惧埌璇ユ墜鏈虹敤鎴�");
+ return await CreateToken(user, input.ExRuleCode ?? "");
+ }
+ if (input.Code != "TEST")
+ // 鏍¢獙鐭俊楠岃瘉鐮�
+ _sysSmsService.VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code });
+
+ // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
+ // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
+ var userList = await _sysUserRep.AsQueryable().Where(x => x.PhoneNumber == input.Phone && x.IsEn == true).Includes(x => x.CusExtend).ToListAsync();
+ if (userList == null)
+ {
+ throw Oops.Oh("娌℃湁鎵惧埌璇ユ墜鏈虹敤鎴�");
+ }
+ if (userList.Count > 1)
+ {
+ // 鐢熸垚闅忔満楠岃瘉鐮�
+ var random = new Random();
+ var verifyCode = random.Next(100000, 999999);
+ //闇�瑕佷簩娆$櫥闄�
+ var aRet = new CustomerLoginOutput
+ {
+ TheLastLogo = false,
+ CustomerExs = new List<CustomerExVm>(),
+ Code = verifyCode.ToString(),
+ };
+ _sysCacheService.Set($"{CacheConst.KeyPhoneVerCode}{input.Phone}", verifyCode.ToString(), TimeSpan.FromSeconds(_smsOptions.lingKai.VerifyTimeOut.ToInt()));
+ foreach (var item in userList)
+ {
+ aRet.CustomerExs.Add(new CustomerExVm
+ {
+ CustomerUserID = item.Id,
+ EnterpriseName = item.CusExtend.EnterpriseName,
+ UnifiedSocialCreditCode = item.CusExtend.UnifiedSocialCreditCode.MaskMiddle(),
+ IsManger = item.IsManager
+
+
+
+
+ });
+ }
+ return aRet;
+ }
+
+ return await CreateToken(userList[0], input.ExRuleCode ?? "");
+ }
+ /// <summary>
+ /// 鎵嬫満鍙风櫥褰� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [AllowAnonymous]
+ [DisplayName("寰俊鎵爜鐧诲綍")]
+ public virtual async Task<CustomerLoginOutput> WeiXinLoginPhone([Required] CustomerLoginPhoneInput input)
+ {
+ throw Oops.Oh("鏆傛椂涓嶆敮鎸佸井淇℃壂鐮佺櫥褰�");
+ // 鏍¢獙鐭俊楠岃瘉鐮�
+ //_sysSmsService.VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code });
+
+ //// 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴�
+ //var user = await _sysUserRep.AsQueryable().Where(x=>x.Account==input.Phone).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync();
+ //if(user==null)
+ //{
+ //}
+
+ //return await CreateToken(user, input.ExRuleCode );
+ }
+
+ /// <summary>
+ /// 鐢熸垚Token浠ょ墝 馃敄
+ /// </summary>
+ /// <param name="user"></param>\
+ /// <param name="sysUserEventTypeEnum"></param>\
+ /// <returns></returns>
+ [NonAction]
+ internal async Task<CustomerLoginOutput> CreateToken(FBS_CustormerUsers user, string ExRuleCode, SysUserEventTypeEnum sysUserEventTypeEnum = SysUserEventTypeEnum.Login)
+ {
+ // 鍗曠敤鎴风櫥褰�
+ await _sysOnlineUserService.SingleLogin(user.Id);
+
+ // 鐢熸垚Token浠ょ墝
+ var tokenExpire = await _sysConfigService.GetTokenExpire();
+ var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
+ {
+ { ClaimConst.UserId, user.Id },
+ { ClaimConst.TenantId, user.CusExtendId },
+ { ClaimConst.Account, user.PhoneNumber.PrivacyStr() },
+ { ClaimConst.RealName, user.Nickname??user.Name },
+
+ { ClaimConst.UserType, "Customer" },
+ { ClaimConst.CustomerExId, user.CusExtendId },
+ { ClaimConst.CustomerLogoinType, ExRuleCode },
+ }, tokenExpire);
+
+ // 鐢熸垚鍒锋柊Token浠ょ墝
+ var refreshTokenExpire = await _sysConfigService.GetRefreshTokenExpire();
+ var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, refreshTokenExpire);
+
+ // 璁剧疆鍝嶅簲鎶ユ枃澶�
+ _httpContextAccessor.HttpContext.SetTokensOfResponseHeaders(accessToken, refreshToken);
+
+ // Swagger Knife4UI-AfterScript鐧诲綍鑴氭湰
+ // ke.global.setAllHeader('Authorization', 'Bearer ' + ke.response.headers['access-token']);
+
+ // 鏇存柊鐢ㄦ埛鐧诲綍淇℃伅
+ user.LastLoginIp = _httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(true);
+ (user.LastLoginAddress, double? longitude, double? latitude) = CommonUtil.GetIpAddress(user.LastLoginIp);
+ user.LastLoginTime = DateTime.Now;
+ user.LastLoginDevice = CommonUtil.GetClientDeviceInfo(_httpContextAccessor.HttpContext?.Request?.Headers?.UserAgent);
+ await _sysUserRep.AsUpdateable(user).UpdateColumns(u => new
+ {
+ u.LastLoginIp,
+ u.LastLoginAddress,
+ u.LastLoginTime,
+ u.LastLoginDevice,
+ }).ExecuteCommandAsync();
+
+ var payload = new
+ {
+ Entity = user,
+ Output = new CustomerLoginOutput
+ {
+ AccessToken = accessToken,
+ RefreshToken = refreshToken,
+ TheLastLogo = true,
+ IsManager = user.IsManager
+ }
+ };
+ payload.Output.ExRoles = new List<CustomerExRoleVm>();
+
+ payload.Output.ExRoles = await _sysUserExRol.AsQueryable().Where(x => x.CusExtendId == user.CusExtendId).Includes(x => x.ExRole).Select(x => new CustomerExRoleVm
+ {
+ Code = x.ExRole.Code,
+ HasFlsh = x.steps == CusExtendStep.Pass,
+ Name = x.ExRole.Name
+ }).ToListAsync();
+
+ //鏆傛椂涓嶅嚭鐢ㄦ埛浜嬩欢
+ // 鍙戝竷绯荤粺鐢ㄦ埛鎿嶄綔浜嬩欢
+ //await _eventPublisher.PublishAsync(sysUserEventTypeEnum, payload);
+ return payload.Output;
+ }
}
-}
+}
\ No newline at end of file
--
Gitblit v1.9.1