From a7f4c5ecc5268c49f6a6caf769b3ebee6f237662 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 04 六月 2025 18:52:55 +0800
Subject: [PATCH] 目录迁移 整理

---
 Main/System/Mail/MailManager.cs |  666 +++++++++++++++++++++++++++---------------------------
 1 files changed, 333 insertions(+), 333 deletions(-)

diff --git a/Main/Manager/GameSystemManager/MailManager.cs b/Main/System/Mail/MailManager.cs
similarity index 99%
rename from Main/Manager/GameSystemManager/MailManager.cs
rename to Main/System/Mail/MailManager.cs
index bf933e8..74b5968 100644
--- a/Main/Manager/GameSystemManager/MailManager.cs
+++ b/Main/System/Mail/MailManager.cs
@@ -1,334 +1,334 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-
-namespace vnxbqy.UI
-{
-    public class MailManager : GameSystemManager<MailManager>
-    {
-        /// <summary>
-        /// 閭欢鏁版嵁瀛楀吀锛屽瓨鍌ㄦ墍鏈夐偖浠惰鎯�
-        /// Key: 閭欢GUID(鍞竴鏍囪瘑)
-        /// Value: 閭欢璇︾粏鏁版嵁(MailData缁撴瀯浣�)
-        /// </summary>
-        Dictionary<string, MailData> mailDataDict = new Dictionary<string, MailData>();
-        public MailCategory nowMailCategory = MailCategory.Personal;
-        public Redpoint parentRedpoint = new Redpoint(MainRedDot.MailRepoint);
-        public Redpoint tabRedpoint0;
-        public Redpoint tabRedpoint1;
-        public event Action OnUpdateMailListEvent;// 鏇存柊閭欢鍒楄〃鏁版嵁
-        public event Action OnUpdateMailStateChangeEvent;// 鏇存柊閭欢鐘舵�佸彉鏇�
-        public readonly string dateFormat = "yyyy-MM-dd";
-        public string nowUuid = string.Empty;
-        public override void Init()
-        {
-            tabRedpoint0 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Personal));
-            tabRedpoint1 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Global));
-            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
-        }
-
-        public override void Release()
-        {
-            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
-        }
-
-        public void OnBeforePlayerDataInitializeEvent()
-        {
-            mailDataDict.Clear();
-        }
-
-        public bool HasNoReadMail(MailCategory category)
-        {
-            var list = GetMailList(category);
-            if (list.IsNullOrEmpty())
-                return false;
-
-            foreach (var guid in list)
-            {
-                if (mailDataDict.TryGetValue(guid, out var mailData) && mailData.MailState == 1)
-                    return true;
-            }
-            return false;
-        }
-
-        public int GetTabRedpointId(MailCategory type)
-        {
-            return MainRedDot.MailRepoint * 10 + (int)type;
-        }
-
-        public void UpdatePersonalRedPoint()
-        {
-            if (tabRedpoint0 == null)
-                return;
-            tabRedpoint0.state = RedPointState.None;
-            if (HasNoReadMail(MailCategory.Personal))
-            {
-                tabRedpoint0.state = RedPointState.Simple;
-            }
-        }
-
-        public void UpdateGlobalRedPoint()
-        {
-            if (tabRedpoint1 == null) return;
-            tabRedpoint1.state = RedPointState.None;
-            if (HasNoReadMail(MailCategory.Global))
-            {
-                tabRedpoint1.state = RedPointState.Simple;
-            }
-        }
-
-        /// <summary>
-        /// 鏇存柊閭欢绾㈢偣鎻愮ず鐘舵��
-        /// </summary>
-        public void UpdateRedPoint()
-        {
-            UpdatePersonalRedPoint();
-            UpdateGlobalRedPoint();
-        }
-
-        public bool TryGetMailData(string uuid, out MailData mailData)
-        {
-            return mailDataDict.TryGetValue(uuid, out mailData);
-        }
-        public string FormatCreateMailTime(DateTime createDateTime)
-        {
-            TimeSpan diff = TimeUtility.ServerNow - createDateTime;
-            if (diff.TotalHours <= 24)
-            {
-                int hours = (int)Math.Floor(diff.TotalHours);
-                return Language.Get("Mail05", hours);
-            }
-            else
-            {
-                return createDateTime.ToString(dateFormat);
-            }
-        }
-
-        //杩斿洖鏈夋晥鏈熷ぉ鏁�(姝f暟=宸茶繃鏈熷ぉ鏁帮紝璐熸暟=鍓╀綑澶╂暟)
-        public int GetMailExpiryDays(DateTime createDateTime, int limitDays)
-        {
-            DateTime expiryDate = createDateTime.AddDays(limitDays);
-            return (int)(TimeUtility.ServerNow - expiryDate).TotalDays;
-        }
-
-
-        public List<string> GetMailList(MailCategory mailCategory)
-        {
-            var result = new List<string>();
-            foreach (var kvp in mailDataDict)
-            {
-                if (kvp.Value.Category == mailCategory)
-                {
-                    result.Add(kvp.Key);
-                }
-            }
-            return result;
-        }
-
-        public List<string> GetSortMailScrList(MailCategory mailCategory)
-        {
-            List<string> resList = GetMailList(mailCategory);
-            return resList.OrderByDescending(guid => mailDataDict[guid].CreateDateTime).ToList();
-        }
-
-        /// <summary>
-        /// 鏇存柊閭欢鍒楄〃鏁版嵁
-        /// </summary>
-        /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠跺垪琛ㄦ暟鎹寘</param>
-        public void UpdateMailList(HA362_tagMCMailList vNetData)
-        {
-            if (vNetData == null) return;
-
-            // 鏇存柊閭欢鏁版嵁瀛楀吀
-            foreach (var mail in vNetData.MailList)
-            {
-                var category = vNetData.IsServerMail == 1 ? MailCategory.Global : MailCategory.Personal;
-                var mailData = new MailData();
-
-                mailData.Category = category;
-                mailData.GUID = mail.GUID;
-                mailData.Type = mail.Type;
-                mailData.CreateTime = mail.CreateTime;
-                mailData.CreateDateTime = Convert.ToDateTime(UIHelper.GetTime(mail.CreateTime));
-                mailData.LimitDays = mail.LimitDays;
-                mailData.Title = mail.Title;
-                mailData.Text = mail.Text;
-                mailData.MailState = mail.MailState;
-
-                mailData.Items = mail.Items?.Select(i => new MailItemData
-                {
-                    ItemID = i.ItemID,
-                    Count = i.Count,
-                    IsBind = i.IsBind,
-                    UserData = i.UserData
-                }).ToList();
-                mailDataDict[mail.GUID] = mailData;
-            }
-
-            UpdateRedPoint();
-            OnUpdateMailListEvent?.Invoke();
-        }
-
-        /// <summary>
-        /// 鏇存柊閭欢鐘舵�佸彉鏇�
-        /// </summary>
-        /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠剁姸鎬佸彉鏇存暟鎹寘</param>
-        public void UpdateMailStateChange(HA363_tagMCMailStateChange vNetData)
-        {
-            if (vNetData == null || vNetData.MailList == null) return;
-
-            foreach (var stateChange in vNetData.MailList)
-            {
-                if (mailDataDict.TryGetValue(stateChange.GUID, out var mailData))
-                {
-                    if (stateChange.MailState == 4)
-                    {
-                        mailDataDict.Remove(stateChange.GUID);
-                        continue;
-                    }
-                    mailData.MailState = stateChange.MailState;
-                    mailDataDict[stateChange.GUID] = mailData;
-                }
-            }
-
-            UpdateRedPoint();
-            OnUpdateMailStateChangeEvent?.Invoke();
-        }
-
-
-        /// <summary>
-        /// 闃呰閭欢
-        /// </summary>
-        /// <param name="GUID">閭欢GUID</param>
-        public void ReadMail(string GUID)
-        {
-            if (string.IsNullOrEmpty(GUID))
-            {
-                Debug.LogError("闃呰閭欢GUID涓嶈兘涓虹┖");
-                return;
-            }
-            SendRequestMail(GUID, 0);
-        }
-
-        /// <summary>
-        /// 棰嗗彇閭欢
-        /// </summary>
-        /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺棰嗗彇鎵�鏈夐偖浠�</param>
-        public void ClaimMail(string GUID = null)
-        {
-            SendRequestMail(GUID, 1);
-        }
-
-        /// <summary>
-        /// 鍒犻櫎閭欢
-        /// </summary>
-        /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺鍒犻櫎宸查鍙栨垨鏃犵墿鍝佺殑宸茶閭欢</param>
-        public void DeleteMail(string GUID = null)
-        {
-            SendRequestMail(GUID, 2);
-        }
-
-        /// <summary>
-        /// 鍙戦�侀偖浠惰姹傚埌鏈嶅姟鍣�
-        /// </summary>
-        /// <param name="GUID">閭欢GUID</param>
-        /// <param name="ReqType">璇锋眰绫诲瀷 0-璁剧疆宸茶锛�1-棰嗗彇閭欢锛�2-鍒犻櫎閭欢</param>
-        public void SendRequestMail(string GUID, byte ReqType)
-        {
-            CA537_tagCMRequestMail pack = new CA537_tagCMRequestMail();
-            pack.GUID = GUID;
-            pack.ReqType = ReqType;
-            GameNetSystem.Instance.SendInfo(pack);
-        }
-        
-        //娌℃湁涓�涓彲棰嗗彇鐨勪釜浜洪偖浠�
-        public bool IsCanHaveMail()
-        {
-            var personalMails = GetMailList(MailCategory.Personal);
-            return personalMails.Any(guid =>
-                mailDataDict.TryGetValue(guid, out var mail) &&
-                mail.MailState != 3 &&
-                mail.Items != null &&
-                mail.Items.Count > 0
-            );
-        }
-    }
-
-    public enum MailCategory
-    {
-        Personal = 0,  // 涓汉閭欢
-        Global = 1     // 鍏ㄦ湇閭欢
-    }
-
-    public class MailItemData
-    {
-        public uint ItemID;        //鐗╁搧ID
-        public uint Count;        //鏁伴噺
-        public byte IsBind;        //鏄惁缁戝畾
-        public string UserData;        //鑷畾涔夋暟鎹�	
-    }
-
-    public class MailData
-    {
-        public MailCategory Category;
-        public string GUID;        //閭欢GUID
-        public byte Type;        //閭欢绫诲瀷锛屾殏鏃堕粯璁�0
-        public string CreateTime;        //鍒涘缓鏃堕棿
-        public DateTime CreateDateTime;
-        public byte LimitDays;        //鏈夋晥澶╂暟
-        public string Title;        //鏍囬
-        public string Text;        //鍐呭
-        public byte MailState;        //閭欢鐘舵�侊細 0-鏈煡锛�1-鏈锛�2-宸茶锛�3-宸查锛�
-        public List<MailItemData> Items;        //鐗╁搧淇℃伅
-
-        /// <summary>
-        /// 鍒ゆ柇鏄惁涓烘ā鏉跨被鍨嬮偖浠�
-        /// </summary>
-        /// <returns>true-妯℃澘閭欢, false-鏅�氶偖浠�</returns>
-        public bool IsTemplateMail()
-        {
-            if (string.IsNullOrEmpty(Title))
-                return false;
-
-            return Title.StartsWith("<T>") && Title.EndsWith("</T>");
-        }
-
-        /// <summary>
-        /// 鑾峰彇妯℃澘閭欢鐨勬ā鏉縦ey
-        /// </summary>
-        /// <returns>妯℃澘key锛屽鏋滀笉鏄ā鏉块偖浠惰繑鍥炵┖瀛楃涓�</returns>
-        public string GetTemplateKey()
-        {
-            if (!IsTemplateMail())
-                return string.Empty;
-
-            // 妯℃澘鏍煎紡: <T>key</T>
-            // 璺宠繃寮�澶寸殑"<T>" (3瀛楃)
-            // 鍙栦腑闂撮儴鍒嗭紝鎬婚暱搴﹀噺鍘�"<T>"鍜�"</T>"鍏�7瀛楃
-            const int prefixLength = 3; // "<T>"闀垮害
-            const int suffixLength = 4; // "</T>"闀垮害
-            return Title.Substring(prefixLength, Title.Length - (prefixLength + suffixLength));
-        }
-
-        /// <summary>
-        /// 鑾峰彇妯℃澘閭欢鐨勫弬鏁板垪琛�
-        /// </summary>
-        /// <returns>鍙傛暟鍒楄〃锛屽鏋滀笉鏄ā鏉块偖浠舵垨鍙傛暟涓虹┖鍒欒繑鍥炵┖鍒楄〃</returns>
-        public List<string> GetTemplateParams()
-        {
-            if (!IsTemplateMail() || string.IsNullOrEmpty(Text))
-                return new List<string>();
-
-            try
-            {
-                // 鍙傛暟鏍煎紡涓篔SON鏁扮粍锛歔鍙傛暟1, 鍙傛暟2, ...]
-                return JsonUtility.FromJson<List<string>>(Text);
-            }
-            catch
-            {
-                return new List<string>();
-            }
-        }
-    }
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+namespace vnxbqy.UI
+{
+    public class MailManager : GameSystemManager<MailManager>
+    {
+        /// <summary>
+        /// 閭欢鏁版嵁瀛楀吀锛屽瓨鍌ㄦ墍鏈夐偖浠惰鎯�
+        /// Key: 閭欢GUID(鍞竴鏍囪瘑)
+        /// Value: 閭欢璇︾粏鏁版嵁(MailData缁撴瀯浣�)
+        /// </summary>
+        Dictionary<string, MailData> mailDataDict = new Dictionary<string, MailData>();
+        public MailCategory nowMailCategory = MailCategory.Personal;
+        public Redpoint parentRedpoint = new Redpoint(MainRedDot.MailRepoint);
+        public Redpoint tabRedpoint0;
+        public Redpoint tabRedpoint1;
+        public event Action OnUpdateMailListEvent;// 鏇存柊閭欢鍒楄〃鏁版嵁
+        public event Action OnUpdateMailStateChangeEvent;// 鏇存柊閭欢鐘舵�佸彉鏇�
+        public readonly string dateFormat = "yyyy-MM-dd";
+        public string nowUuid = string.Empty;
+        public override void Init()
+        {
+            tabRedpoint0 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Personal));
+            tabRedpoint1 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Global));
+            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
+        }
+
+        public override void Release()
+        {
+            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
+        }
+
+        public void OnBeforePlayerDataInitializeEvent()
+        {
+            mailDataDict.Clear();
+        }
+
+        public bool HasNoReadMail(MailCategory category)
+        {
+            var list = GetMailList(category);
+            if (list.IsNullOrEmpty())
+                return false;
+
+            foreach (var guid in list)
+            {
+                if (mailDataDict.TryGetValue(guid, out var mailData) && mailData.MailState == 1)
+                    return true;
+            }
+            return false;
+        }
+
+        public int GetTabRedpointId(MailCategory type)
+        {
+            return MainRedDot.MailRepoint * 10 + (int)type;
+        }
+
+        public void UpdatePersonalRedPoint()
+        {
+            if (tabRedpoint0 == null)
+                return;
+            tabRedpoint0.state = RedPointState.None;
+            if (HasNoReadMail(MailCategory.Personal))
+            {
+                tabRedpoint0.state = RedPointState.Simple;
+            }
+        }
+
+        public void UpdateGlobalRedPoint()
+        {
+            if (tabRedpoint1 == null) return;
+            tabRedpoint1.state = RedPointState.None;
+            if (HasNoReadMail(MailCategory.Global))
+            {
+                tabRedpoint1.state = RedPointState.Simple;
+            }
+        }
+
+        /// <summary>
+        /// 鏇存柊閭欢绾㈢偣鎻愮ず鐘舵��
+        /// </summary>
+        public void UpdateRedPoint()
+        {
+            UpdatePersonalRedPoint();
+            UpdateGlobalRedPoint();
+        }
+
+        public bool TryGetMailData(string uuid, out MailData mailData)
+        {
+            return mailDataDict.TryGetValue(uuid, out mailData);
+        }
+        public string FormatCreateMailTime(DateTime createDateTime)
+        {
+            TimeSpan diff = TimeUtility.ServerNow - createDateTime;
+            if (diff.TotalHours <= 24)
+            {
+                int hours = (int)Math.Floor(diff.TotalHours);
+                return Language.Get("Mail05", hours);
+            }
+            else
+            {
+                return createDateTime.ToString(dateFormat);
+            }
+        }
+
+        //杩斿洖鏈夋晥鏈熷ぉ鏁�(姝f暟=宸茶繃鏈熷ぉ鏁帮紝璐熸暟=鍓╀綑澶╂暟)
+        public int GetMailExpiryDays(DateTime createDateTime, int limitDays)
+        {
+            DateTime expiryDate = createDateTime.AddDays(limitDays);
+            return (int)(TimeUtility.ServerNow - expiryDate).TotalDays;
+        }
+
+
+        public List<string> GetMailList(MailCategory mailCategory)
+        {
+            var result = new List<string>();
+            foreach (var kvp in mailDataDict)
+            {
+                if (kvp.Value.Category == mailCategory)
+                {
+                    result.Add(kvp.Key);
+                }
+            }
+            return result;
+        }
+
+        public List<string> GetSortMailScrList(MailCategory mailCategory)
+        {
+            List<string> resList = GetMailList(mailCategory);
+            return resList.OrderByDescending(guid => mailDataDict[guid].CreateDateTime).ToList();
+        }
+
+        /// <summary>
+        /// 鏇存柊閭欢鍒楄〃鏁版嵁
+        /// </summary>
+        /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠跺垪琛ㄦ暟鎹寘</param>
+        public void UpdateMailList(HA362_tagMCMailList vNetData)
+        {
+            if (vNetData == null) return;
+
+            // 鏇存柊閭欢鏁版嵁瀛楀吀
+            foreach (var mail in vNetData.MailList)
+            {
+                var category = vNetData.IsServerMail == 1 ? MailCategory.Global : MailCategory.Personal;
+                var mailData = new MailData();
+
+                mailData.Category = category;
+                mailData.GUID = mail.GUID;
+                mailData.Type = mail.Type;
+                mailData.CreateTime = mail.CreateTime;
+                mailData.CreateDateTime = Convert.ToDateTime(UIHelper.GetTime(mail.CreateTime));
+                mailData.LimitDays = mail.LimitDays;
+                mailData.Title = mail.Title;
+                mailData.Text = mail.Text;
+                mailData.MailState = mail.MailState;
+
+                mailData.Items = mail.Items?.Select(i => new MailItemData
+                {
+                    ItemID = i.ItemID,
+                    Count = i.Count,
+                    IsBind = i.IsBind,
+                    UserData = i.UserData
+                }).ToList();
+                mailDataDict[mail.GUID] = mailData;
+            }
+
+            UpdateRedPoint();
+            OnUpdateMailListEvent?.Invoke();
+        }
+
+        /// <summary>
+        /// 鏇存柊閭欢鐘舵�佸彉鏇�
+        /// </summary>
+        /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠剁姸鎬佸彉鏇存暟鎹寘</param>
+        public void UpdateMailStateChange(HA363_tagMCMailStateChange vNetData)
+        {
+            if (vNetData == null || vNetData.MailList == null) return;
+
+            foreach (var stateChange in vNetData.MailList)
+            {
+                if (mailDataDict.TryGetValue(stateChange.GUID, out var mailData))
+                {
+                    if (stateChange.MailState == 4)
+                    {
+                        mailDataDict.Remove(stateChange.GUID);
+                        continue;
+                    }
+                    mailData.MailState = stateChange.MailState;
+                    mailDataDict[stateChange.GUID] = mailData;
+                }
+            }
+
+            UpdateRedPoint();
+            OnUpdateMailStateChangeEvent?.Invoke();
+        }
+
+
+        /// <summary>
+        /// 闃呰閭欢
+        /// </summary>
+        /// <param name="GUID">閭欢GUID</param>
+        public void ReadMail(string GUID)
+        {
+            if (string.IsNullOrEmpty(GUID))
+            {
+                Debug.LogError("闃呰閭欢GUID涓嶈兘涓虹┖");
+                return;
+            }
+            SendRequestMail(GUID, 0);
+        }
+
+        /// <summary>
+        /// 棰嗗彇閭欢
+        /// </summary>
+        /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺棰嗗彇鎵�鏈夐偖浠�</param>
+        public void ClaimMail(string GUID = null)
+        {
+            SendRequestMail(GUID, 1);
+        }
+
+        /// <summary>
+        /// 鍒犻櫎閭欢
+        /// </summary>
+        /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺鍒犻櫎宸查鍙栨垨鏃犵墿鍝佺殑宸茶閭欢</param>
+        public void DeleteMail(string GUID = null)
+        {
+            SendRequestMail(GUID, 2);
+        }
+
+        /// <summary>
+        /// 鍙戦�侀偖浠惰姹傚埌鏈嶅姟鍣�
+        /// </summary>
+        /// <param name="GUID">閭欢GUID</param>
+        /// <param name="ReqType">璇锋眰绫诲瀷 0-璁剧疆宸茶锛�1-棰嗗彇閭欢锛�2-鍒犻櫎閭欢</param>
+        public void SendRequestMail(string GUID, byte ReqType)
+        {
+            CA537_tagCMRequestMail pack = new CA537_tagCMRequestMail();
+            pack.GUID = GUID;
+            pack.ReqType = ReqType;
+            GameNetSystem.Instance.SendInfo(pack);
+        }
+        
+        //娌℃湁涓�涓彲棰嗗彇鐨勪釜浜洪偖浠�
+        public bool IsCanHaveMail()
+        {
+            var personalMails = GetMailList(MailCategory.Personal);
+            return personalMails.Any(guid =>
+                mailDataDict.TryGetValue(guid, out var mail) &&
+                mail.MailState != 3 &&
+                mail.Items != null &&
+                mail.Items.Count > 0
+            );
+        }
+    }
+
+    public enum MailCategory
+    {
+        Personal = 0,  // 涓汉閭欢
+        Global = 1     // 鍏ㄦ湇閭欢
+    }
+
+    public class MailItemData
+    {
+        public uint ItemID;        //鐗╁搧ID
+        public uint Count;        //鏁伴噺
+        public byte IsBind;        //鏄惁缁戝畾
+        public string UserData;        //鑷畾涔夋暟鎹�	
+    }
+
+    public class MailData
+    {
+        public MailCategory Category;
+        public string GUID;        //閭欢GUID
+        public byte Type;        //閭欢绫诲瀷锛屾殏鏃堕粯璁�0
+        public string CreateTime;        //鍒涘缓鏃堕棿
+        public DateTime CreateDateTime;
+        public byte LimitDays;        //鏈夋晥澶╂暟
+        public string Title;        //鏍囬
+        public string Text;        //鍐呭
+        public byte MailState;        //閭欢鐘舵�侊細 0-鏈煡锛�1-鏈锛�2-宸茶锛�3-宸查锛�
+        public List<MailItemData> Items;        //鐗╁搧淇℃伅
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁涓烘ā鏉跨被鍨嬮偖浠�
+        /// </summary>
+        /// <returns>true-妯℃澘閭欢, false-鏅�氶偖浠�</returns>
+        public bool IsTemplateMail()
+        {
+            if (string.IsNullOrEmpty(Title))
+                return false;
+
+            return Title.StartsWith("<T>") && Title.EndsWith("</T>");
+        }
+
+        /// <summary>
+        /// 鑾峰彇妯℃澘閭欢鐨勬ā鏉縦ey
+        /// </summary>
+        /// <returns>妯℃澘key锛屽鏋滀笉鏄ā鏉块偖浠惰繑鍥炵┖瀛楃涓�</returns>
+        public string GetTemplateKey()
+        {
+            if (!IsTemplateMail())
+                return string.Empty;
+
+            // 妯℃澘鏍煎紡: <T>key</T>
+            // 璺宠繃寮�澶寸殑"<T>" (3瀛楃)
+            // 鍙栦腑闂撮儴鍒嗭紝鎬婚暱搴﹀噺鍘�"<T>"鍜�"</T>"鍏�7瀛楃
+            const int prefixLength = 3; // "<T>"闀垮害
+            const int suffixLength = 4; // "</T>"闀垮害
+            return Title.Substring(prefixLength, Title.Length - (prefixLength + suffixLength));
+        }
+
+        /// <summary>
+        /// 鑾峰彇妯℃澘閭欢鐨勫弬鏁板垪琛�
+        /// </summary>
+        /// <returns>鍙傛暟鍒楄〃锛屽鏋滀笉鏄ā鏉块偖浠舵垨鍙傛暟涓虹┖鍒欒繑鍥炵┖鍒楄〃</returns>
+        public List<string> GetTemplateParams()
+        {
+            if (!IsTemplateMail() || string.IsNullOrEmpty(Text))
+                return new List<string>();
+
+            try
+            {
+                // 鍙傛暟鏍煎紡涓篔SON鏁扮粍锛歔鍙傛暟1, 鍙傛暟2, ...]
+                return JsonUtility.FromJson<List<string>>(Text);
+            }
+            catch
+            {
+                return new List<string>();
+            }
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0