From 4008c7e22c9c01eb653b04f934990486df622654 Mon Sep 17 00:00:00 2001
From: username@email.com <yzy2002yzy@163.com>
Date: 星期一, 14 七月 2025 12:21:35 +0800
Subject: [PATCH] Merge branch 'master' of http://47.108.235.38:8080/r/FZCZTB

---
 Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs |  240 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 240 insertions(+), 0 deletions(-)

diff --git a/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
new file mode 100644
index 0000000..4c6b98e
--- /dev/null
+++ b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs
@@ -0,0 +1,240 @@
+锘縰sing Admin.NET.Core.Service;
+using Admin.NET.Core;
+using Furion.DataEncryption;
+using Furion.DynamicApiController;
+using Furion.EventBus;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Lazy.Captcha.Core;
+using Microsoft.AspNetCore.Http;
+using FZCZTB.NET.MD.CutomerMd;
+using Microsoft.AspNetCore.Authorization;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel;
+using FZCZTB.NET.SYSService.MSM;
+using FZCTB.NET.API.Application.Auth.DTO;
+using Furion.FriendlyException;
+using FZCZTB.NET.SYSService.CustomerSYS;
+using Furion;
+using NewLife;
+
+namespace FZCTB.NET.API.Application.Auth
+{
+    /// <summary>
+    /// 閴存潈鏈嶅姟
+    /// </summary>
+    [ApiDescriptionSettings("FZCAPISYS", Order = 149)]
+    public class AuthService: IDynamicApiController
+    {
+
+
+        private readonly UserManager _userManager;
+        private readonly SqlSugarRepository<FBS_Customer> _sysUserRep;
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        private readonly SysMenuService _sysMenuService;
+        private readonly SysOnlineUserService _sysOnlineUserService;
+        private readonly SysConfigService _sysConfigService;
+        private readonly SysUserService _sysUserService;
+        private readonly ZCSMSService _sysSmsService;
+        private readonly SysLdapService _sysLdapService;
+        private readonly ICaptcha _captcha;
+        private readonly IEventPublisher _eventPublisher;
+        private readonly SysCacheService _sysCacheService;
+
+        public AuthService(
+            SqlSugarRepository<FBS_Customer> sysUserRep,
+            IHttpContextAccessor httpContextAccessor,
+            SysOnlineUserService sysOnlineUserService,
+            SysConfigService sysConfigService,
+            SysLdapService sysLdapService,
+            IEventPublisher eventPublisher,
+            ZCSMSService sysSmsService,
+            SysCacheService sysCacheService,
+            SysMenuService sysMenuService,
+            SysUserService sysUserService,
+            UserManager userManager,
+            ICaptcha captcha)
+        {
+            _captcha = captcha;
+            _sysUserRep = sysUserRep;
+            _userManager = userManager;
+            _sysSmsService = sysSmsService;
+            _eventPublisher = eventPublisher;
+            _sysUserService = sysUserService;
+            _sysMenuService = sysMenuService;
+            _sysCacheService = sysCacheService;
+            _sysConfigService = sysConfigService;
+            _httpContextAccessor = httpContextAccessor;
+            _sysOnlineUserService = sysOnlineUserService;
+            _sysLdapService = sysLdapService;
+        }
+
+        /// <summary>
+        /// 鎵嬫満鍙风櫥褰� 馃敄
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [DisplayName("鎵嬫満鍙风櫥褰�")]
+        public virtual async Task<CustomerLoginOutput> LoginPhone([Required] CustomerLoginPhoneInput input)
+        {
+            if(input.Code!="TEST")
+            // 鏍¢獙鐭俊楠岃瘉鐮�
+            _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)
+            {
+              throw    Oops.Oh("璇ョ敤鎴锋病鏈夋敞鍐�");
+            }
+           if(user.Status== StatusEnum.Disable)
+            {
+                throw Oops.Oh("鐢ㄥ紓甯�");
+            }
+
+
+            return await CreateToken(user, input.ExRuleCode??"");
+        }
+
+        /// <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 user = await _sysUserRep.AsQueryable().Where(x => x.Id == id).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync();
+            if (user == null)
+            {
+                throw Oops.Oh("璇ョ敤鎴锋病鏈夋敞鍐�");
+            }
+            if (user.Status == StatusEnum.Disable)
+            {
+                throw Oops.Oh("鐢ㄥ紓甯�");
+            }
+
+            return await CreateToken(user, RuleCode);
+
+        }
+
+        /// <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_Customer 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.TenantId },
+            { ClaimConst.Account, user.Account },
+            { ClaimConst.RealName, user.RealName },        
+         
+            { ClaimConst.UserType, "Customer" },
+                { 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,
+
+                     
+                     
+
+
+
+                }
+            };
+            payload.Output.ExRoles = new List<CustomerExRoleVm>();
+
+            foreach (var item in user.CoutomerExRols)
+            {
+
+                payload.Output.ExRoles.Add(new CustomerExRoleVm
+                {
+                    Code = item.ExRole.Code,
+                    Name = item.ExRole.Name,
+                    HasFlsh = item.HasFlsh
+                });
+            }
+
+            //鏆傛椂涓嶅嚭鐢ㄦ埛浜嬩欢
+            // 鍙戝竷绯荤粺鐢ㄦ埛鎿嶄綔浜嬩欢
+            //await _eventPublisher.PublishAsync(sysUserEventTypeEnum, payload);
+            return payload.Output;
+        }
+    }
+}

--
Gitblit v1.9.1