少年修仙传客户端代码仓库
client_Zxw
2018-08-20 04b3034c07f86aad4493f3be4bd26e2094c10d0c
System/FriendSystem/MailAllModel.cs
@@ -1,510 +1,510 @@
using Snxxz.UI;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Text;
using TableConfig;
using UnityEngine;
using System.Linq;
public class MailItemModel
{
    public uint ItemID;        //物品ID
    public int Count;        //数量
    public byte IsBind;        //是否绑定
    public string UserData;        //自定义数据
}
public class MailInfo
{
    public string GUID;        //补偿标识
    public string CreateTime;        //邮件接收时间
    public string Text;        //文字内容
    public byte Count;        //当前补偿物品数
    public byte IsRead;        //已读状态 0 未读取 1已读取
    public uint Gold;        //仙玉
    public uint GoldPaper;        //绑定仙玉
    public uint Silver;        //铜钱
    public bool isChoose = false;
    public DateTime mailGetTime;    //邮件接收时间
    public MailItemModel[] Items = null;        //补偿物品信息
}
public class MailAllModel
{
    public static MailAllModel _instance;
    public static MailAllModel Instance
    {
        get {
            if (_instance == null)
                _instance = new MailAllModel();
            return _instance;
        }
    }
    DailyQuestModel m_dailyModel;
    DailyQuestModel dailyModel
    {
        get { return m_dailyModel ?? (m_dailyModel = ModelCenter.Instance.GetModel<DailyQuestModel>()); }
    }
    public MailAllModel()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInit;
    }
    private void BeforePlayerDataInit()
    {
        funcType = MailFuncType.Mail;
        mailModelDict.Clear();
        timeOrderMailInfo.Clear();
        mailTitleStr = "";
        mailContentstr = "";
        mailSendPersonStr = "";
    }
    public MailFuncType funcType = MailFuncType.Mail;
    public event Action GetNewMailEvent;
    public event Action<string, int> CallBackReceiveEvent;
    public event Action DeleteMailEvent;
    public event Action MailCntChangeEvent;
    private Dictionary<string, MailInfo> mailModelDict = new Dictionary<string,MailInfo>();
    private List<MailInfo> timeOrderMailInfo = new List<MailInfo>();
    private Regex smatch = new Regex(@"<MailTemplate>([^>.\n]*)</MailTemplate>([^>.\n]*)", RegexOptions.Singleline);
    public string mailTitleStr = "";
    public string mailContentstr = "";
    public string mailSendPersonStr = "";
    public int addMailCnt { get; private set; }
    public void ReFreshModel(HA9A1_tagGCQueryCompensationResult mailModel)
    {
        DesignDebug.Log("刷新邮件数据" + mailModel.Count);
        if(mailModel.Count > 0)
        {
            int preMailCnt = mailModelDict.Count;
            for (int i = 0; i < mailModel.Count; i++)
            {
                if(!mailModelDict.ContainsKey(mailModel.PackList[i].GUID))
                {
                    MailInfo mailInfo = new MailInfo();
                    mailInfo.GUID = mailModel.PackList[i].GUID;
                    mailInfo.CreateTime = mailModel.PackList[i].CreateTime;
                    mailInfo.mailGetTime = Convert.ToDateTime(UIHelper.GetTime(mailInfo.CreateTime));
                    mailInfo.Text = mailModel.PackList[i].Text;
                    mailInfo.Count = mailModel.PackList[i].Count;
                    mailInfo.IsRead = mailModel.PackList[i].IsRead;
                    mailInfo.Gold = mailModel.PackList[i].Gold;
                    mailInfo.GoldPaper = mailModel.PackList[i].GoldPaper;
                    mailInfo.Silver = mailModel.PackList[i].Silver;
                    mailInfo.Items = new MailItemModel[mailInfo.Count];
                    if (mailInfo.Count > 0)
                    {
                        for (int j = 0; j < mailInfo.Count; j++)
                        {
                            mailInfo.Items[j] = new MailItemModel();
                            mailInfo.Items[j].ItemID = mailModel.PackList[i].Items[j].ItemID;
                            mailInfo.Items[j].Count = (int)mailModel.PackList[i].Items[j].Count;
                            mailInfo.Items[j].IsBind = mailModel.PackList[i].Items[j].IsBind;
                            mailInfo.Items[j].UserData = mailModel.PackList[i].Items[j].UserData;
                        }
                    }
                    mailModelDict.Add(mailInfo.GUID, mailInfo);
                    DeleteTodayDailyMail(mailInfo);
                }
                else
                {
                    MailInfo mailInfo = mailModelDict[mailModel.PackList[i].GUID];
                    mailInfo.GUID = mailModel.PackList[i].GUID;
                    mailInfo.CreateTime = mailModel.PackList[i].CreateTime;
                    mailInfo.mailGetTime = Convert.ToDateTime(UIHelper.GetTime(mailInfo.CreateTime));
                    mailInfo.Text = mailModel.PackList[i].Text;
                    mailInfo.Count = mailModel.PackList[i].Count;
                    mailInfo.IsRead = mailModel.PackList[i].IsRead;
                    mailInfo.Gold = mailModel.PackList[i].Gold;
                    mailInfo.GoldPaper = mailModel.PackList[i].GoldPaper;
                    mailInfo.Silver = mailModel.PackList[i].Silver;
                    mailInfo.Items = null;
                    mailInfo.Items = new MailItemModel[mailInfo.Count];
                    if (mailInfo.Count > 0)
                    {
                        for (int j = 0; j < mailInfo.Count; j++)
                        {
                            mailInfo.Items[j] = new MailItemModel();
                            mailInfo.Items[j].ItemID = mailModel.PackList[i].Items[j].ItemID;
                            mailInfo.Items[j].Count = (int)mailModel.PackList[i].Items[j].Count;
                            mailInfo.Items[j].IsBind = mailModel.PackList[i].Items[j].IsBind;
                            mailInfo.Items[j].UserData = mailModel.PackList[i].Items[j].UserData;
                        }
                    }
                }
                if (mailModelDict.ContainsKey(mailModel.PackList[i].GUID))
                {
                    MailInfo info = mailModelDict[mailModel.PackList[i].GUID];
                    switch(GetMailType(info))
                    {
                        case "CodeRewardMail":
                            WindowCenter.Instance.Open<ExchangeGetItemWin>();
                            break;
                    }
                }
            }
            addMailCnt = mailModelDict.Count - preMailCnt;
            MailRedPointCtrl();
            OnTimeOrderMailModel();
            if (GetNewMailEvent != null)
                GetNewMailEvent();
            if(MailCntChangeEvent != null)
            {
                MailCntChangeEvent();
            }
        }
    }
    #region 红点逻辑处理
    private void MailRedPointCtrl()
    {
        int sum = 0;
        foreach(var key in mailModelDict.Keys)
        {
            if(mailModelDict[key].IsRead == 0)
            {
                sum += 1;
            }
        }
        if(sum > 0)
        {
            MainRedDot.Instance.redpointMailFunc.count = sum;
            MainRedDot.Instance.redpointMainMail.count = sum;
            MainRedDot.Instance.redpointMailFunc.state = RedPointState.Quantity;
        }
        else
        {
            MainRedDot.Instance.redpointMailFunc.state = RedPointState.None;
        }
    }
    #endregion
    public void RecieveMail(HA31A_tagMCGiveCompensationResult receiveMail)
    {
        if (CallBackReceiveEvent != null)
            CallBackReceiveEvent(receiveMail.GUID,receiveMail.Result);
    }
    public void DeleteMail(HA9AA_tagGCDelCompensationResult deleteMail)
    {
        if(deleteMail.Result == 1)
        {
            DeleteMailData(deleteMail.GUID);
            if (DeleteMailEvent != null)
            {
                DeleteMailEvent();
            }
            if (MailCntChangeEvent != null)
            {
                MailCntChangeEvent();
            }
        }
    }
    //按时间给邮件数据排序
    public void OnTimeOrderMailModel()
    {
        timeOrderMailInfo.Clear();
        foreach(MailInfo info in mailModelDict.Values)
        {
            timeOrderMailInfo.Add(info);
        }
        if(timeOrderMailInfo.Count > 1)
        {
            timeOrderMailInfo.Sort(Compare);
        }
    }
     public  int Compare(MailInfo startTime, MailInfo nextTime)
    {
        int startRead = startTime.IsRead;
        int nextRead = nextTime.IsRead;
        if(startRead.CompareTo(nextRead) != 0) return startRead.CompareTo(nextRead);
        DateTime curtime = startTime.mailGetTime;
        DateTime nexttime = nextTime.mailGetTime;
        if (curtime.CompareTo(nexttime) != 0) return -curtime.CompareTo(nexttime);
        return 0;
    }
    public List<MailInfo> GetTimeOrderMaillist()
    {
        if (timeOrderMailInfo != null)
            return timeOrderMailInfo;
        else
            return null;
    }
    public void DeleteMailData(string id)
    {
        if (mailModelDict.ContainsKey(id))
            mailModelDict.Remove(id);
        for(int i = 0; i < timeOrderMailInfo.Count; i++)
        {
            if(timeOrderMailInfo[i].GUID == id)
            {
                timeOrderMailInfo.Remove(timeOrderMailInfo[i]);
                break;
            }
        }
        MailRedPointCtrl();
    }
    List<MailInfo> todayDailylist = new List<MailInfo>();
    List<MailInfo> orderTodayDailylist = new List<MailInfo>();
    public void DeleteTodayDailyMail(MailInfo curInfo)
    {
        if (!smatch.IsMatch(curInfo.Text)) return;
        Match curMatch = smatch.Match(curInfo.Text);
        MailConfig curMailModel = ConfigManager.Instance.GetTemplate<MailConfig>(curMatch.Groups[1].Value);
        if (curMailModel == null || curMailModel.MailType != "TodayDailyTask") return;
        todayDailylist.Clear();
        foreach (MailInfo info in mailModelDict.Values)
        {
            if (smatch.IsMatch(info.Text))
            {
                Match match = smatch.Match(info.Text);
                MailConfig _mailModel = ConfigManager.Instance.GetTemplate<MailConfig>(match.Groups[1].Value);
                if (_mailModel != null)
                {
                    if (_mailModel.MailType == "TodayDailyTask")
                    {
                        todayDailylist.Add(info);
                    }
                }
            }
        }
        orderTodayDailylist.Clear();
        orderTodayDailylist.AddRange(todayDailylist);
        orderTodayDailylist.Sort(CompareByTime);
        for(int i = 0; i < orderTodayDailylist.Count - 1; i++)
        {
            SendMailDelete(orderTodayDailylist[i].GUID);
            mailModelDict.Remove(orderTodayDailylist[i].GUID);
        }
    }
    public int CompareByTime(MailInfo start,MailInfo next)
    {
        DateTime startTime = start.mailGetTime;
        DateTime nextTime = next.mailGetTime;
        if (startTime.CompareTo(nextTime) != 0) return startTime.CompareTo(nextTime);
        int startIndex = todayDailylist.IndexOf(start);
        int nextIndex = todayDailylist.IndexOf(next);
        if (startIndex.CompareTo(nextIndex) != 0) return startIndex.CompareTo(nextIndex);
        return 0;
    }
    public void GetReciveMailContent(MailInfo info)
    {
        Debug.Log(info.Text);
        if (smatch.IsMatch(info.Text))
        {
            Match match = smatch.Match(info.Text);
            MailConfig _mailModel = ConfigManager.Instance.GetTemplate<MailConfig>(match.Groups[1].Value);
            List<string> _mailParalist = new List<string>();
            if (_mailModel != null)
            {
                mailTitleStr = _mailModel.Title;
                string strCont = "";
                if (match.Groups[2].Value != "")
                {
                    _mailParalist.Clear();
                    string paraStr = "";
                    paraStr = match.Groups[2].Value.Remove(0,1);
                    paraStr = paraStr.Remove(paraStr.Length-1, 1);
                    string[] paraArray = paraStr.Split(',');
                    for (int i = 0; i < paraArray.Length; i++)
                    {
                        string para = paraArray[i].Replace("'", "");
                        para = para.Trim();
                        _mailParalist.Add(para);
                    }
                    string[] mailCont = _mailModel.Content.Split(new string[] { "{0}" }, StringSplitOptions.None);
                    for (int i = 0; i < mailCont.Length; i++)
                    {
                        if (i < mailCont.Length - 1)
                        {
                            switch (_mailModel.MailType)
                            {
                                case "TodayDailyTask":
                                    strCont = StringUtility.Contact(strCont,mailCont[i],GetTodayDailyNotify(info.mailGetTime));
                                    break;
                                default:
                                    strCont = StringUtility.Contact(strCont, mailCont[i], _mailParalist[i]);
                                    break;
                            }
                        }
                        else
                        {
                            strCont = StringUtility.Contact(strCont,mailCont[i]);
                        }
                    }
                }
                mailContentstr = strCont;
                string[] mailContentArray = info.Text.Split(new string[] { "<$_$>" }, StringSplitOptions.RemoveEmptyEntries);
                if (mailContentArray.Length > 0)
                {
                    FuncConfigConfig funcMailModel = ConfigManager.Instance.GetTemplate<FuncConfigConfig>(mailContentArray[0]);
                    if (funcMailModel != null)
                        mailSendPersonStr = funcMailModel.Numerical1;
                    else
                        mailSendPersonStr = mailContentArray[0];
                }
            }
        }
        else
        {
            DesignDebug.Log("不需要解析模板邮件");
            string[] mailContentArray = info.Text.Split(new string[] { "<$_$>" }, StringSplitOptions.RemoveEmptyEntries);
            if (mailContentArray.Length > 0)
            {
                FuncConfigConfig funcMailModel = ConfigManager.Instance.GetTemplate<FuncConfigConfig>(mailContentArray[0]);
                if (funcMailModel != null)
                   mailSendPersonStr = funcMailModel.Numerical1;
                else
                    mailSendPersonStr = mailContentArray[0];
                mailTitleStr = mailContentArray[1];
                if(mailContentArray.Length > 2)
                {
                    string mailDes = Regex.Replace(mailContentArray[2], @"<[\\]+/r>", "</r>");
                    mailContentstr = mailDes;
                }
            }
            else
            {
                DesignDebug.LogError("服务端下发格式不正确");
            }
        }
    }
    public string GetMailType(MailInfo info)
    {
        if (smatch.IsMatch(info.Text))
        {
            Match match = smatch.Match(info.Text);
            MailConfig _mailModel = ConfigManager.Instance.GetTemplate<MailConfig>(match.Groups[1].Value);
            if (_mailModel != null)
            {
                return _mailModel.MailType;
            }
        }
        return string.Empty;
    }
    StringBuilder todayDailySB = new StringBuilder();
    public string GetTodayDailyNotify(DateTime getTime)
    {
        todayDailySB.Length = 0;
        var dayOfWeek = (int)getTime.DayOfWeek;
        var quests = dailyModel.GetQuestByWeekTime(dayOfWeek % 7);
        List<int> openTimelist = quests.Keys.ToList();
        openTimelist.Sort();
        for(int i = 0; i < openTimelist.Count; i++)
        {
            int openTime = openTimelist[i];
            for (int j = 0;j < quests[openTime].Count; j++)
            {
                DailyQuestOpenTime dailyQuestOpenTime;
                dailyModel.TryGetOpenTime(quests[openTime][j], out dailyQuestOpenTime);
                if (dailyQuestOpenTime.IsValidServerOpenTime())
                {
                    List<HourMinute> hourMinutelist = dailyQuestOpenTime.GetHourMinuteByWeek(dayOfWeek);
                    if (hourMinutelist != null)
                    {
                        for (int k = 0; k < hourMinutelist.Count; k++)
                        {
                            HourMinute hourMinute = hourMinutelist[k];
                            if (!hourMinute.wholeDay)
                            {
                                var config = ConfigManager.Instance.GetTemplate<DailyQuestConfig>(quests[openTime][j]);
                                string openTimeStr = StringUtility.Contact(hourMinute.hourBegin > 9 ? hourMinute.hourBegin.ToString() : "0" + hourMinute.hourBegin, ":", hourMinute.minuteBegin > 9 ? hourMinute.minuteBegin.ToString() : "0" + hourMinute.minuteBegin);
                                string endTimeStr = StringUtility.Contact(hourMinute.hourEnd > 9 ? hourMinute.hourEnd.ToString() : "0" + hourMinute.hourEnd, ":", hourMinute.minuteEnd > 9 ? hourMinute.minuteEnd.ToString() : "0" + hourMinute.minuteEnd);
                                todayDailySB.Append(StringUtility.Contact("【", config.Title, "】", openTimeStr, "-", endTimeStr, "\n"));
                            }
                        }
                    }
                }
            }
        }
        return todayDailySB.ToString();
    }
    public void SendReadMailQuest(string id)
    {
        CA9A6_tagCGReadCompensation readMail = new CA9A6_tagCGReadCompensation();
        readMail.GUID = id;
        GameNetSystem.Instance.SendInfo(readMail);
        MailRedPointCtrl();
    }
    public void SendMailDelete(string id)
    {
        CA9A7_tagCGDelCompensation askDelete = new CA9A7_tagCGDelCompensation();
        askDelete.GUID = id;
        GameNetSystem.Instance.SendInfo(askDelete);
    }
    public MailInfo GetMailInfo(string guid)
    {
        MailInfo mailInfo = null;
        mailModelDict.TryGetValue(guid,out mailInfo);
        return mailInfo;
    }
}
public enum MailFuncType
{
    Mail,
}
using Snxxz.UI;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Text;
using TableConfig;
using UnityEngine;
using System.Linq;
public class MailItemModel
{
    public uint ItemID;        //物品ID
    public int Count;        //数量
    public byte IsBind;        //是否绑定
    public string UserData;        //自定义数据
}
public class MailInfo
{
    public string GUID;        //补偿标识
    public string CreateTime;        //邮件接收时间
    public string Text;        //文字内容
    public byte Count;        //当前补偿物品数
    public byte IsRead;        //已读状态 0 未读取 1已读取
    public uint Gold;        //仙玉
    public uint GoldPaper;        //绑定仙玉
    public uint Silver;        //铜钱
    public bool isChoose = false;
    public DateTime mailGetTime;    //邮件接收时间
    public MailItemModel[] Items = null;        //补偿物品信息
}
public class MailAllModel
{
    public static MailAllModel _instance;
    public static MailAllModel Instance
    {
        get {
            if (_instance == null)
                _instance = new MailAllModel();
            return _instance;
        }
    }
    DailyQuestModel m_dailyModel;
    DailyQuestModel dailyModel
    {
        get { return m_dailyModel ?? (m_dailyModel = ModelCenter.Instance.GetModel<DailyQuestModel>()); }
    }
    public MailAllModel()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInit;
    }
    private void BeforePlayerDataInit()
    {
        funcType = MailFuncType.Mail;
        mailModelDict.Clear();
        timeOrderMailInfo.Clear();
        mailTitleStr = "";
        mailContentstr = "";
        mailSendPersonStr = "";
    }
    public MailFuncType funcType = MailFuncType.Mail;
    public event Action GetNewMailEvent;
    public event Action<string, int> CallBackReceiveEvent;
    public event Action DeleteMailEvent;
    public event Action MailCntChangeEvent;
    private Dictionary<string, MailInfo> mailModelDict = new Dictionary<string,MailInfo>();
    private List<MailInfo> timeOrderMailInfo = new List<MailInfo>();
    private Regex smatch = new Regex(@"<MailTemplate>([^>.\n]*)</MailTemplate>([^>.\n]*)", RegexOptions.Singleline);
    public string mailTitleStr = "";
    public string mailContentstr = "";
    public string mailSendPersonStr = "";
    public int addMailCnt { get; private set; }
    public void ReFreshModel(HA9A1_tagGCQueryCompensationResult mailModel)
    {
        DebugEx.Log("刷新邮件数据" + mailModel.Count);
        if(mailModel.Count > 0)
        {
            int preMailCnt = mailModelDict.Count;
            for (int i = 0; i < mailModel.Count; i++)
            {
                if(!mailModelDict.ContainsKey(mailModel.PackList[i].GUID))
                {
                    MailInfo mailInfo = new MailInfo();
                    mailInfo.GUID = mailModel.PackList[i].GUID;
                    mailInfo.CreateTime = mailModel.PackList[i].CreateTime;
                    mailInfo.mailGetTime = Convert.ToDateTime(UIHelper.GetTime(mailInfo.CreateTime));
                    mailInfo.Text = mailModel.PackList[i].Text;
                    mailInfo.Count = mailModel.PackList[i].Count;
                    mailInfo.IsRead = mailModel.PackList[i].IsRead;
                    mailInfo.Gold = mailModel.PackList[i].Gold;
                    mailInfo.GoldPaper = mailModel.PackList[i].GoldPaper;
                    mailInfo.Silver = mailModel.PackList[i].Silver;
                    mailInfo.Items = new MailItemModel[mailInfo.Count];
                    if (mailInfo.Count > 0)
                    {
                        for (int j = 0; j < mailInfo.Count; j++)
                        {
                            mailInfo.Items[j] = new MailItemModel();
                            mailInfo.Items[j].ItemID = mailModel.PackList[i].Items[j].ItemID;
                            mailInfo.Items[j].Count = (int)mailModel.PackList[i].Items[j].Count;
                            mailInfo.Items[j].IsBind = mailModel.PackList[i].Items[j].IsBind;
                            mailInfo.Items[j].UserData = mailModel.PackList[i].Items[j].UserData;
                        }
                    }
                    mailModelDict.Add(mailInfo.GUID, mailInfo);
                    DeleteTodayDailyMail(mailInfo);
                }
                else
                {
                    MailInfo mailInfo = mailModelDict[mailModel.PackList[i].GUID];
                    mailInfo.GUID = mailModel.PackList[i].GUID;
                    mailInfo.CreateTime = mailModel.PackList[i].CreateTime;
                    mailInfo.mailGetTime = Convert.ToDateTime(UIHelper.GetTime(mailInfo.CreateTime));
                    mailInfo.Text = mailModel.PackList[i].Text;
                    mailInfo.Count = mailModel.PackList[i].Count;
                    mailInfo.IsRead = mailModel.PackList[i].IsRead;
                    mailInfo.Gold = mailModel.PackList[i].Gold;
                    mailInfo.GoldPaper = mailModel.PackList[i].GoldPaper;
                    mailInfo.Silver = mailModel.PackList[i].Silver;
                    mailInfo.Items = null;
                    mailInfo.Items = new MailItemModel[mailInfo.Count];
                    if (mailInfo.Count > 0)
                    {
                        for (int j = 0; j < mailInfo.Count; j++)
                        {
                            mailInfo.Items[j] = new MailItemModel();
                            mailInfo.Items[j].ItemID = mailModel.PackList[i].Items[j].ItemID;
                            mailInfo.Items[j].Count = (int)mailModel.PackList[i].Items[j].Count;
                            mailInfo.Items[j].IsBind = mailModel.PackList[i].Items[j].IsBind;
                            mailInfo.Items[j].UserData = mailModel.PackList[i].Items[j].UserData;
                        }
                    }
                }
                if (mailModelDict.ContainsKey(mailModel.PackList[i].GUID))
                {
                    MailInfo info = mailModelDict[mailModel.PackList[i].GUID];
                    switch(GetMailType(info))
                    {
                        case "CodeRewardMail":
                            WindowCenter.Instance.Open<ExchangeGetItemWin>();
                            break;
                    }
                }
            }
            addMailCnt = mailModelDict.Count - preMailCnt;
            MailRedPointCtrl();
            OnTimeOrderMailModel();
            if (GetNewMailEvent != null)
                GetNewMailEvent();
            if(MailCntChangeEvent != null)
            {
                MailCntChangeEvent();
            }
        }
    }
    #region 红点逻辑处理
    private void MailRedPointCtrl()
    {
        int sum = 0;
        foreach(var key in mailModelDict.Keys)
        {
            if(mailModelDict[key].IsRead == 0)
            {
                sum += 1;
            }
        }
        if(sum > 0)
        {
            MainRedDot.Instance.redpointMailFunc.count = sum;
            MainRedDot.Instance.redpointMainMail.count = sum;
            MainRedDot.Instance.redpointMailFunc.state = RedPointState.Quantity;
        }
        else
        {
            MainRedDot.Instance.redpointMailFunc.state = RedPointState.None;
        }
    }
    #endregion
    public void RecieveMail(HA31A_tagMCGiveCompensationResult receiveMail)
    {
        if (CallBackReceiveEvent != null)
            CallBackReceiveEvent(receiveMail.GUID,receiveMail.Result);
    }
    public void DeleteMail(HA9AA_tagGCDelCompensationResult deleteMail)
    {
        if(deleteMail.Result == 1)
        {
            DeleteMailData(deleteMail.GUID);
            if (DeleteMailEvent != null)
            {
                DeleteMailEvent();
            }
            if (MailCntChangeEvent != null)
            {
                MailCntChangeEvent();
            }
        }
    }
    //按时间给邮件数据排序
    public void OnTimeOrderMailModel()
    {
        timeOrderMailInfo.Clear();
        foreach(MailInfo info in mailModelDict.Values)
        {
            timeOrderMailInfo.Add(info);
        }
        if(timeOrderMailInfo.Count > 1)
        {
            timeOrderMailInfo.Sort(Compare);
        }
    }
     public  int Compare(MailInfo startTime, MailInfo nextTime)
    {
        int startRead = startTime.IsRead;
        int nextRead = nextTime.IsRead;
        if(startRead.CompareTo(nextRead) != 0) return startRead.CompareTo(nextRead);
        DateTime curtime = startTime.mailGetTime;
        DateTime nexttime = nextTime.mailGetTime;
        if (curtime.CompareTo(nexttime) != 0) return -curtime.CompareTo(nexttime);
        return 0;
    }
    public List<MailInfo> GetTimeOrderMaillist()
    {
        if (timeOrderMailInfo != null)
            return timeOrderMailInfo;
        else
            return null;
    }
    public void DeleteMailData(string id)
    {
        if (mailModelDict.ContainsKey(id))
            mailModelDict.Remove(id);
        for(int i = 0; i < timeOrderMailInfo.Count; i++)
        {
            if(timeOrderMailInfo[i].GUID == id)
            {
                timeOrderMailInfo.Remove(timeOrderMailInfo[i]);
                break;
            }
        }
        MailRedPointCtrl();
    }
    List<MailInfo> todayDailylist = new List<MailInfo>();
    List<MailInfo> orderTodayDailylist = new List<MailInfo>();
    public void DeleteTodayDailyMail(MailInfo curInfo)
    {
        if (!smatch.IsMatch(curInfo.Text)) return;
        Match curMatch = smatch.Match(curInfo.Text);
        MailConfig curMailModel = ConfigManager.Instance.GetTemplate<MailConfig>(curMatch.Groups[1].Value);
        if (curMailModel == null || curMailModel.MailType != "TodayDailyTask") return;
        todayDailylist.Clear();
        foreach (MailInfo info in mailModelDict.Values)
        {
            if (smatch.IsMatch(info.Text))
            {
                Match match = smatch.Match(info.Text);
                MailConfig _mailModel = ConfigManager.Instance.GetTemplate<MailConfig>(match.Groups[1].Value);
                if (_mailModel != null)
                {
                    if (_mailModel.MailType == "TodayDailyTask")
                    {
                        todayDailylist.Add(info);
                    }
                }
            }
        }
        orderTodayDailylist.Clear();
        orderTodayDailylist.AddRange(todayDailylist);
        orderTodayDailylist.Sort(CompareByTime);
        for(int i = 0; i < orderTodayDailylist.Count - 1; i++)
        {
            SendMailDelete(orderTodayDailylist[i].GUID);
            mailModelDict.Remove(orderTodayDailylist[i].GUID);
        }
    }
    public int CompareByTime(MailInfo start,MailInfo next)
    {
        DateTime startTime = start.mailGetTime;
        DateTime nextTime = next.mailGetTime;
        if (startTime.CompareTo(nextTime) != 0) return startTime.CompareTo(nextTime);
        int startIndex = todayDailylist.IndexOf(start);
        int nextIndex = todayDailylist.IndexOf(next);
        if (startIndex.CompareTo(nextIndex) != 0) return startIndex.CompareTo(nextIndex);
        return 0;
    }
    public void GetReciveMailContent(MailInfo info)
    {
        Debug.Log(info.Text);
        if (smatch.IsMatch(info.Text))
        {
            Match match = smatch.Match(info.Text);
            MailConfig _mailModel = ConfigManager.Instance.GetTemplate<MailConfig>(match.Groups[1].Value);
            List<string> _mailParalist = new List<string>();
            if (_mailModel != null)
            {
                mailTitleStr = _mailModel.Title;
                string strCont = "";
                if (match.Groups[2].Value != "")
                {
                    _mailParalist.Clear();
                    string paraStr = "";
                    paraStr = match.Groups[2].Value.Remove(0,1);
                    paraStr = paraStr.Remove(paraStr.Length-1, 1);
                    string[] paraArray = paraStr.Split(',');
                    for (int i = 0; i < paraArray.Length; i++)
                    {
                        string para = paraArray[i].Replace("'", "");
                        para = para.Trim();
                        _mailParalist.Add(para);
                    }
                    string[] mailCont = _mailModel.Content.Split(new string[] { "{0}" }, StringSplitOptions.None);
                    for (int i = 0; i < mailCont.Length; i++)
                    {
                        if (i < mailCont.Length - 1)
                        {
                            switch (_mailModel.MailType)
                            {
                                case "TodayDailyTask":
                                    strCont = StringUtility.Contact(strCont,mailCont[i],GetTodayDailyNotify(info.mailGetTime));
                                    break;
                                default:
                                    strCont = StringUtility.Contact(strCont, mailCont[i], _mailParalist[i]);
                                    break;
                            }
                        }
                        else
                        {
                            strCont = StringUtility.Contact(strCont,mailCont[i]);
                        }
                    }
                }
                mailContentstr = strCont;
                string[] mailContentArray = info.Text.Split(new string[] { "<$_$>" }, StringSplitOptions.RemoveEmptyEntries);
                if (mailContentArray.Length > 0)
                {
                    FuncConfigConfig funcMailModel = ConfigManager.Instance.GetTemplate<FuncConfigConfig>(mailContentArray[0]);
                    if (funcMailModel != null)
                        mailSendPersonStr = funcMailModel.Numerical1;
                    else
                        mailSendPersonStr = mailContentArray[0];
                }
            }
        }
        else
        {
            DebugEx.Log("不需要解析模板邮件");
            string[] mailContentArray = info.Text.Split(new string[] { "<$_$>" }, StringSplitOptions.RemoveEmptyEntries);
            if (mailContentArray.Length > 0)
            {
                FuncConfigConfig funcMailModel = ConfigManager.Instance.GetTemplate<FuncConfigConfig>(mailContentArray[0]);
                if (funcMailModel != null)
                   mailSendPersonStr = funcMailModel.Numerical1;
                else
                    mailSendPersonStr = mailContentArray[0];
                mailTitleStr = mailContentArray[1];
                if(mailContentArray.Length > 2)
                {
                    string mailDes = Regex.Replace(mailContentArray[2], @"<[\\]+/r>", "</r>");
                    mailContentstr = mailDes;
                }
            }
            else
            {
                DebugEx.LogError("服务端下发格式不正确");
            }
        }
    }
    public string GetMailType(MailInfo info)
    {
        if (smatch.IsMatch(info.Text))
        {
            Match match = smatch.Match(info.Text);
            MailConfig _mailModel = ConfigManager.Instance.GetTemplate<MailConfig>(match.Groups[1].Value);
            if (_mailModel != null)
            {
                return _mailModel.MailType;
            }
        }
        return string.Empty;
    }
    StringBuilder todayDailySB = new StringBuilder();
    public string GetTodayDailyNotify(DateTime getTime)
    {
        todayDailySB.Length = 0;
        var dayOfWeek = (int)getTime.DayOfWeek;
        var quests = dailyModel.GetQuestByWeekTime(dayOfWeek % 7);
        List<int> openTimelist = quests.Keys.ToList();
        openTimelist.Sort();
        for(int i = 0; i < openTimelist.Count; i++)
        {
            int openTime = openTimelist[i];
            for (int j = 0;j < quests[openTime].Count; j++)
            {
                DailyQuestOpenTime dailyQuestOpenTime;
                dailyModel.TryGetOpenTime(quests[openTime][j], out dailyQuestOpenTime);
                if (dailyQuestOpenTime.IsValidServerOpenTime())
                {
                    List<HourMinute> hourMinutelist = dailyQuestOpenTime.GetHourMinuteByWeek(dayOfWeek);
                    if (hourMinutelist != null)
                    {
                        for (int k = 0; k < hourMinutelist.Count; k++)
                        {
                            HourMinute hourMinute = hourMinutelist[k];
                            if (!hourMinute.wholeDay)
                            {
                                var config = ConfigManager.Instance.GetTemplate<DailyQuestConfig>(quests[openTime][j]);
                                string openTimeStr = StringUtility.Contact(hourMinute.hourBegin > 9 ? hourMinute.hourBegin.ToString() : "0" + hourMinute.hourBegin, ":", hourMinute.minuteBegin > 9 ? hourMinute.minuteBegin.ToString() : "0" + hourMinute.minuteBegin);
                                string endTimeStr = StringUtility.Contact(hourMinute.hourEnd > 9 ? hourMinute.hourEnd.ToString() : "0" + hourMinute.hourEnd, ":", hourMinute.minuteEnd > 9 ? hourMinute.minuteEnd.ToString() : "0" + hourMinute.minuteEnd);
                                todayDailySB.Append(StringUtility.Contact("【", config.Title, "】", openTimeStr, "-", endTimeStr, "\n"));
                            }
                        }
                    }
                }
            }
        }
        return todayDailySB.ToString();
    }
    public void SendReadMailQuest(string id)
    {
        CA9A6_tagCGReadCompensation readMail = new CA9A6_tagCGReadCompensation();
        readMail.GUID = id;
        GameNetSystem.Instance.SendInfo(readMail);
        MailRedPointCtrl();
    }
    public void SendMailDelete(string id)
    {
        CA9A7_tagCGDelCompensation askDelete = new CA9A7_tagCGDelCompensation();
        askDelete.GUID = id;
        GameNetSystem.Instance.SendInfo(askDelete);
    }
    public MailInfo GetMailInfo(string guid)
    {
        MailInfo mailInfo = null;
        mailModelDict.TryGetValue(guid,out mailInfo);
        return mailInfo;
    }
}
public enum MailFuncType
{
    Mail,
}