From cde56aae50adc11ff8db84e424d873843c566bfd Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期一, 24 二月 2025 23:40:41 +0800
Subject: [PATCH] 优化WCS移库逻辑

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs |  121 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 121 insertions(+), 0 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs"
new file mode 100644
index 0000000..2ac124b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs"
@@ -0,0 +1,121 @@
+锘縰sing Microsoft.IdentityModel.Tokens;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HttpContextUser;
+
+namespace WIDESEA_Core.Authorization
+{
+    public class JwtHelper
+    {
+
+        /// <summary>
+        /// 鐢熸垚JWT
+        /// </summary>
+        /// <param name="serInfo"></param>
+        /// <returns></returns>
+        public static string IssueJwt(TokenModelJwt tokenModel)
+        {
+            string exp = $"{new DateTimeOffset(DateTime.Now.AddMinutes(/*tokenModel.UserId == 1 ? 43200 : */AppSettings.app("ExpMinutes").ObjToInt())).ToUnixTimeSeconds()}";
+            List<Claim> claims = new List<Claim>
+                {
+                    new Claim(JwtRegisteredClaimNames.Jti, tokenModel.UserId.ToString()),
+                    new Claim(JwtRegisteredClaimNames.Iat,  $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"),
+                    new Claim(JwtRegisteredClaimNames.Nbf, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") ,
+                    //JWT杩囨湡鏃堕棿
+                    //榛樿璁剧疆jwt杩囨湡鏃堕棿120鍒嗛挓
+                    new Claim (JwtRegisteredClaimNames.Exp, exp),
+                    new Claim(JwtRegisteredClaimNames.Iss, AppSecret.Issuer),
+                    new Claim(JwtRegisteredClaimNames.Aud, AppSecret.Audience),
+                    new Claim(ClaimTypes.Role, tokenModel.RoleId.ToString()),
+                    new Claim(ClaimTypes.Name, tokenModel.UserName),
+                    new Claim(nameof(TokenModelJwt.TenantId), tokenModel.TenantId.ToString())
+               };
+
+            // 鍙互灏嗕竴涓敤鎴风殑澶氫釜瑙掕壊鍏ㄩ儴璧嬩簣锛�
+            // 浣滆�咃細DX 鎻愪緵鎶�鏈敮鎸侊紱
+            //绉橀挜16浣�
+            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSecret.JWT));
+            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
+            JwtSecurityToken securityToken = new JwtSecurityToken(issuer: AppSecret.Issuer, claims: claims, signingCredentials: creds);
+            string jwt = new JwtSecurityTokenHandler().WriteToken(securityToken);
+            return jwt;
+        }
+
+        /// <summary>
+        /// 瑙f瀽
+        /// </summary>
+        /// <param name="jwtStr"></param>
+        /// <returns></returns>
+        public static UserInfo SerializeJwt(string jwtStr)
+        {
+            var jwtHandler = new JwtSecurityTokenHandler();
+            JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr);
+            UserInfo userInfo = new UserInfo
+            {
+                UserId = Convert.ToInt32(jwtToken.Id),
+                RoleId = (jwtToken.Payload[ClaimTypes.Role] ?? 0).ObjToInt(),
+            };
+            return userInfo;
+        }
+        /// <summary>
+        /// 鑾峰彇杩囨湡鏃堕棿
+        /// </summary>
+        /// <param name="jwtStr"></param>
+        /// <returns></returns>
+        public static DateTime GetExp(string jwtStr)
+        {
+            var jwtHandler = new JwtSecurityTokenHandler();
+            JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr);
+
+            DateTime expDate = (jwtToken.Payload[JwtRegisteredClaimNames.Exp] ?? 0).ObjToInt().GetTimeSpmpToDate();
+            return expDate;
+        }
+        public static bool IsExp(string jwtStr)
+        {
+            return GetExp(jwtStr) < DateTime.Now;
+        }
+
+        public static int GetUserId(string jwtStr)
+        {
+            try
+            {
+                if (jwtStr.IsNullOrEmpty()) return 0;
+                jwtStr = jwtStr.Replace("Bearer ", "");
+                return new JwtSecurityTokenHandler().ReadJwtToken(jwtStr).Id.ObjToInt();
+            }
+            catch
+            {
+                return 0;
+            }
+        }
+    }
+
+    /// <summary>
+    /// 浠ょ墝
+    /// </summary>
+    public class TokenModelJwt
+    {
+        /// <summary>
+        /// UserId
+        /// </summary>
+        public long UserId { get; set; }
+        /// <summary>
+        /// 瑙掕壊
+        /// </summary>
+        public int RoleId { get; set; }
+        /// <summary>
+        /// 鑱岃兘
+        /// </summary>
+        public string UserName { get; set; }
+
+        public long TenantId { get; set; }
+
+    }
+}

--
Gitblit v1.9.3