From 096bc211e02f3e010ada28ad5b67a687307382b7 Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期三, 21 十一月 2018 16:54:19 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/OpenServerActivity/MysticalPurchaseModel.cs |  479 +++++++++++++----------------------------------------------
 1 files changed, 108 insertions(+), 371 deletions(-)

diff --git a/System/OpenServerActivity/MysticalPurchaseModel.cs b/System/OpenServerActivity/MysticalPurchaseModel.cs
index 5830adc..9d33e00 100644
--- a/System/OpenServerActivity/MysticalPurchaseModel.cs
+++ b/System/OpenServerActivity/MysticalPurchaseModel.cs
@@ -3,436 +3,173 @@
 using System.Linq;
 using System.Text;
 using UnityEngine;
+using TableConfig;
 
 namespace Snxxz.UI
 {
     [XLua.LuaCallCSharp]
-	public class MysticalPurchaseModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk,IOpenServerActivity
+    public class MysticalPurchaseModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk,IOpenServerActivity
     {
+        public event Action UpdateMysticalShopEvent;
+        public event Action<int> onStateUpate;
+
         StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
+
         public override void Init()
         {
-            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
-            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
-            OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
             OpenServerActivityCenter.Instance.Register((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase, this);
         }
 
         public void OnBeforePlayerDataInitialize()
         {
-            fullSeverBuyInfoDict.Clear();
+            storeModel.RefreshBuyShopLimitEvent -= UpdateBuyTimes;
+            mysticalShopDict.Clear();
         }
 
         public void OnPlayerLoginOk()
         {
-            UpdateRedpoint();
+            storeModel.RefreshBuyShopLimitEvent += UpdateBuyTimes;
         }
 
         public override void UnInit()
         {
-            OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
-            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
-            OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent;
+
         }
 
         public bool IsOpen
         {
             get
             {
-                var operation = GetOperationFlashRushToBuy();
-                if (operation != null)
+                List<MysticalShop> mysticalShops = null;
+                return TryGetCurSellShop(out mysticalShops);
+            }
+        }
+
+        public bool IsAdvance { get { return false; } }
+
+        public bool priorityOpen { get { return false; } }
+
+        /// <summary>
+        /// 鏇存柊鐗╁搧璐拱娆℃暟
+        /// </summary>
+        private void UpdateBuyTimes()
+        {
+            if (UpdateMysticalShopEvent != null)
+            {
+                UpdateMysticalShopEvent();
+            }
+
+            if (onStateUpate != null)
+            {
+                onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
+            }
+        }
+
+        public void UpdateSellTimeEnd()
+        {
+            if (UpdateMysticalShopEvent != null)
+            {
+                UpdateMysticalShopEvent();
+            }
+
+            if (onStateUpate != null)
+            {
+                onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
+            }
+        }
+
+        public bool TryGetCurSellShop(out List<MysticalShop> mysticals)
+        {
+            mysticals = new List<MysticalShop>();
+            var mysticalShops = mysticalShopDict.Values.ToList();
+            mysticalShops.Sort(CompareBySellTime);
+            for(int i = 0; i < mysticalShops.Count; i++)
+            {
+                var mystical = mysticalShops[i];
+                if (!mystical.IsSellOut() && mystical.GetRemainSellTime() > 0)
                 {
-                    return operation.SatisfyOpenCondition();
-                }
-                return false;
-            }
-        }
-
-        public bool priorityOpen
-        {
-            get
-            {
-                return flashRushToBuyRedpoint.state == RedPointState.Simple;
-            }
-        }
-
-        public bool IsAdvance
-        {
-            get
-            {
-                return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.MysticalPurchase);
-            }
-        }
-
-        public void SetDefaultSelectSaleTime()
-        {
-            OperationFlashRushToBuy operation = GetOperationFlashRushToBuy();
-            int seconds = 0;
-            if (presentFlashShop != null)
-            {
-                int buyState = operation.GetBuyTimeState(TimeUtility.ServerNow,presentFlashShop.dayIndex,presentFlashShop.timeIndex, out seconds);
-                if(buyState != 1)
-                {
-                    return;
+                    mysticals.Add(mystical);
                 }
             }
-            OperationTime operationTime;
-            OperationFlashRushToBuy.FlashSaleShop saleShop = null;
-            var flashRushToBuySate = GetActivityState(out seconds, out operationTime, out saleShop);
-            if(flashRushToBuySate != FlashRushToBuySate.End)
-            {
-                presentFlashShop = saleShop;
-            }
-            else
-            {
-                presentFlashShop = null;
-            }
+            return mysticals.Count > 0;
         }
 
-        public event Action UpdatePresentFlashShopCloseEvent;
-        public void PresentFlashShopActivityClose()
+        public int CompareBySellTime(MysticalShop start, MysticalShop end)
         {
-            SetDefaultSelectSaleTime();
-            if (UpdatePresentFlashShopCloseEvent != null)
-            {
-                UpdatePresentFlashShopCloseEvent();
-            }
+            int x = start.GetRemainSellTime();
+            int y = end.GetRemainSellTime();
+            if (x.CompareTo(y) != 0) return x.CompareTo(y);
+
+            return 0;
         }
-
-        public void ResetFlashShop()
-        {
-            presentFlashShop = null;
-        }
-
-        #region 鏈湴鏁版嵁澶勭悊
-        public OperationFlashRushToBuy.FlashSaleShop presentFlashShop { get; private set; }
-        public event Action UpdateSelectSaleTimeEvent;
-        public void UpdateSelectFlashSaleTime(int dayIndex,int timeIndex)
-        {
-            presentFlashShop = null;
-            OperationFlashRushToBuy operation = GetOperationFlashRushToBuy();
-            if(operation != null)
-            {
-                OperationFlashRushToBuy.FlashSaleShop flashShop;
-                operation.TryGetFlashShop(dayIndex, timeIndex, out flashShop);
-                presentFlashShop = flashShop;
-                if(UpdateSelectSaleTimeEvent != null)
-                {
-                    UpdateSelectSaleTimeEvent();
-                }
-            }
-        }
-
-        public OperationFlashRushToBuy GetOperationFlashRushToBuy()
-        {
-            OperationBase operationBase;
-            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MysticalPurchase, out operationBase))
-            {
-                return operationBase as OperationFlashRushToBuy;
-            }
-
-            return null;
-        }
-        #endregion
-
         #region 鍗忚
-        public event Action UpdateAllAppointmentEvent;
-        public event Action<int> UpdateAppointmentEvent;
-        public void UpdateFlashSaleAppointmentInfo(HAA18_tagMCFlashSaleAppointmentInfo appointmentInfo)
+        private Dictionary<int, MysticalShop> mysticalShopDict = new Dictionary<int, MysticalShop>();
+        public void UpdateMysticalShopInfo(HA806_tagMCMysticalShopTimeInfo info)
         {
-            var operation = GetOperationFlashRushToBuy();
-            if (operation == null) return;
-
-            if (appointmentInfo.IsAll == 1)
+            mysticalShopDict.Clear();
+            for (int i = 0; i < info.Count; i++)
             {
-                for (int j = 0; j < operation.flashShops.Count; j++)
+                var shopInfo = info.ShopTimeList[i];
+                MysticalShop mystical = new MysticalShop((int)shopInfo.GoodsID,(int)shopInfo.StartTime);
+                if(!mysticalShopDict.ContainsKey((int)shopInfo.GoodsID))
                 {
-                    var saleItems = operation.flashShops[j].items;
-                    for (int k = 0; k < saleItems.Length; k++)
-                    {
-                        saleItems[k].isAppointment = 0;
-                    }
-                }
-            }
-  
-            for (int i = 0; i < appointmentInfo.GoodsCount; i++)
-            {
-                var saleItemInfo = appointmentInfo.GoodsList[i];
-                if (appointmentInfo.GoodsCount < 2 && saleItemInfo.State == 1)
-                {
-                    SysNotifyMgr.Instance.ShowTip("FlashRushToBuy1");
-                }
-                for (int j = 0; j < operation.flashShops.Count; j++)
-                {
-                    var saleItems = operation.flashShops[j].items;
-                    for (int k = 0; k < saleItems.Length; k++)
-                    {
-                       if (saleItems[k].shopGuid == saleItemInfo.GoodsMark)
-                        {
-
-                            if(saleItems[k].isAppointment != saleItemInfo.State)
-                            {
-                                saleItems[k].isAppointment = saleItemInfo.State;
-                                if(UpdateAppointmentEvent != null && appointmentInfo.IsAll != 1)
-                                {
-                                    UpdateAppointmentEvent((int)saleItemInfo.GoodsMark);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            if(appointmentInfo.IsAll == 1)
-            {
-                if (UpdateAllAppointmentEvent != null)
-                {
-                    UpdateAllAppointmentEvent();
-                }
-            }
-
-        }
-
-        public event Action<int>UpdateFullSeverBuyEvent;
-        private Dictionary<int, int> fullSeverBuyInfoDict = new Dictionary<int, int>();
-        public void UpdateFullSeverBuyInfo(HA906_tagGCStoreServerBuyCntInfo buyCntInfo)
-        {
-            for(int i = 0; i < buyCntInfo.Count; i++)
-            {
-                var info = buyCntInfo.InfoList[i];
-                if(!fullSeverBuyInfoDict.ContainsKey((int)info.GoodsID))
-                {
-                    fullSeverBuyInfoDict.Add((int)info.GoodsID,(int)info.BuyCnt);
+                    mysticalShopDict.Add((int)shopInfo.GoodsID,mystical);
                 }
                 else
                 {
-                    fullSeverBuyInfoDict[(int)info.GoodsID] = (int)info.BuyCnt;
-                }
-                if (UpdateFullSeverBuyEvent != null)
-                {
-                    UpdateFullSeverBuyEvent((int)info.GoodsID);
+                    mysticalShopDict[(int)shopInfo.GoodsID] = mystical;
                 }
             }
-        }
-        public int GetFullServerBuyCntById(int goodsId)
-        {
-            int buyCnt = 0;
-            fullSeverBuyInfoDict.TryGetValue(goodsId,out buyCnt);
-            return buyCnt;
+            if(UpdateMysticalShopEvent != null)
+            {
+                UpdateMysticalShopEvent();
+            }
+            if (onStateUpate != null)
+            {
+                onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
+            }
         }
 
-        /// <summary>
-        ///  闄愭椂鎶㈣喘棰勭害
-        /// </summary>
-        public void SendFlashSaleAppointment(int shopGuid,int state)
+        public MysticalShop GetMysticalShop(int shopId)
         {
-            CAA05_tagCMFlashSaleAppointment appointment = new CAA05_tagCMFlashSaleAppointment();
-            appointment.GoodsID = (uint)shopGuid;
-            appointment.State = (byte)state;
-            GameNetSystem.Instance.SendInfo(appointment);
+            MysticalShop mystical = null;
+            mysticalShopDict.TryGetValue(shopId,out mystical);
+            return mystical;
         }
+
         #endregion
 
-        /// <summary>
-        /// 鑾峰緱闄愭椂鎶㈣喘娲诲姩鐘舵��
-        /// </summary>
-        /// <param name="seconds"></param>
-        /// <returns></returns>
-        public FlashRushToBuySate GetActivityState(out int seconds,out OperationTime operationTime,out OperationFlashRushToBuy.FlashSaleShop saleShop)
+        public class MysticalShop
         {
-            seconds = 0;
-            saleShop = null;
-            operationTime = default(OperationTime);
-            var operation = GetOperationFlashRushToBuy();
-            if (!IsOpen || operation == null) return FlashRushToBuySate.NoOpen;
+            public int shopdId;
+            public int sellTime;
+            public StoreConfig storeConfig;
+            StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
 
-            int openState = 0;
-            int endState = 0;
-            int openSeconds = 0;
-            int endSeconds = 0;
-            for(int i = 0; i < operation.flashShops.Count;i++)
+            public MysticalShop(int id,int sellTime)
             {
-                OperationFlashRushToBuy.FlashSaleShop openSaleShop = operation.flashShops[i];
-                operationTime = operation.times[openSaleShop.timeIndex];
-                openState = operation.GetBuyTimeState(TimeUtility.ServerNow, openSaleShop.dayIndex, openSaleShop.timeIndex, out openSeconds);
-                if(openState != 1)
-                {
-                    saleShop = openSaleShop;
-                    break;
-                }
-            }
-            if(operation.flashShops.Count > 0)
-            {
-                OperationFlashRushToBuy.FlashSaleShop endSaleShop = operation.flashShops[operation.flashShops.Count - 1];
-                endState = operation.GetBuyTimeState(TimeUtility.ServerNow, endSaleShop.dayIndex, endSaleShop.timeIndex, out endSeconds);
+                this.shopdId = id;
+                this.sellTime = sellTime;
+                this.storeConfig = Config.Instance.Get<StoreConfig>(shopdId);
             }
             
-            switch(openState)
+            /// <summary>
+            ///鏄惁鍗栧厜
+            /// </summary>
+            /// <returns></returns>
+            public bool IsSellOut()
             {
-                case -1:
-                    seconds = openSeconds;
-                    return FlashRushToBuySate.InAdvance;
-                case 0:
-                    return FlashRushToBuySate.Begining;
+                int remainNum = 0;
+                return  storeModel.TryGetIsSellOut(storeConfig,out remainNum);
             }
 
-            switch(endState)
+            public int GetRemainSellTime()
             {
-                case -1:
-                    return FlashRushToBuySate.Begining;
-                case 0:
-                    return FlashRushToBuySate.Begining;
-                case 1:
-                    return FlashRushToBuySate.End;
-                default:
-                    return FlashRushToBuySate.NoOpen;
+                int seconds = sellTime + storeConfig.LimitValue;
+                DateTime endTime = TimeUtility.GetTime((uint)seconds);
+                int endSec = Mathf.CeilToInt((float)(endTime - TimeUtility.ServerNow).TotalSeconds);
+                return endSec > 0 ? endSec : 0;
             }
-        }
-
-        public bool CheckIsPush(out OperationFlashRushToBuy.FlashSaleShop saleShop)
-        {
-            int seconds = 0;
-            OperationTime operationTime;
-            saleShop = null;
-            var buyState = GetActivityState(out seconds,out operationTime,out saleShop);
-            switch (buyState)
-            {
-                case FlashRushToBuySate.NoOpen:
-                    break;
-                case FlashRushToBuySate.InAdvance:
-                    if(saleShop != null && seconds <= 180)
-                    {
-                       for(int i = 0; i < saleShop.items.Length; i++)
-                        {
-                            if(saleShop.items[i].isAppointment == 1)
-                            {
-                                return true;
-                            }
-                        }
-                    }
-                    break;
-                case FlashRushToBuySate.Begining:
-                    if (saleShop != null)
-                    {
-                        for (int i = 0; i < saleShop.items.Length; i++)
-                        {
-                            var saleItem = saleShop.items[i];
-                            if(GetSellSate(saleItem) == 0)
-                            {
-                                return true;
-                            }
-                        }
-                    }
-                    break;
-                case FlashRushToBuySate.End:
-                    break;
-            }
-            return false;
-        }
-
-        /// <summary>
-        /// 0 绉掓潃 1 宸蹭拱鍒� 2 宸叉姠鍏�
-        /// </summary>
-        /// <returns></returns>
-        private int GetSellSate(OperationFlashRushToBuy.FlashSaleItem saleItem)
-        {
-            var buyInfo = storeModel.GetBuyShopLimit((uint)saleItem.shopId);
-            var buyCount = 0;
-            int fullRemainNum = saleItem.fullServerLimitNum - GetFullServerBuyCntById(saleItem.shopId);
-            if (buyInfo != null)
-            {
-                buyCount = buyInfo.BuyCnt;
-            }
-            if (buyCount >= saleItem.limitNum)
-            {
-                return 1;
-            }
-
-            if (fullRemainNum <= 0)
-            {
-                return 2;
-            }
-            return 0;
-        }
-
-        private void OperationEndEvent(Operation type, int state)
-        {
-            if (type == Operation.MysticalPurchase && state == 0)
-            {
-                UpdateRedpoint();
-                if (onStateUpate != null)
-                {
-                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
-                }
-            }
-        }
-
-        private void OperationAdvanceEvent(Operation type)
-        {
-            if (type == Operation.MysticalPurchase)
-            {
-                if (onStateUpate != null)
-                {
-                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
-                }
-            }
-        }
-
-        private void OperationStartEvent(Operation type, int state)
-        {
-            if (type == Operation.MysticalPurchase && state == 0)
-            {
-                UpdateRedpoint();
-                if (onStateUpate != null)
-                {
-                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
-                }
-            }
-        }
-
-        public void SetDayRemind()
-        {
-            if (flashRushToBuyRedpoint.state == RedPointState.Simple)
-            {
-                SetAlreadyOpenSaleTime();
-                UpdateRedpoint();
-            }
-        }
-       
-        public Redpoint flashRushToBuyRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20914);
-
-        public event Action<int> onStateUpate;
-        public void SetAlreadyOpenSaleTime()
-        {
-            int seconds = 0;
-            OperationTime operationTime;
-            OperationFlashRushToBuy.FlashSaleShop saleShop = null;
-            var buyState = GetActivityState(out seconds, out operationTime, out saleShop);
-            if(buyState == FlashRushToBuySate.Begining)
-            {
-                int key = saleShop.dayIndex * 100 + saleShop.timeIndex;
-            }
-        }
-
-        private void UpdateRedpoint()
-        {
-            flashRushToBuyRedpoint.state = RedPointState.None;
-            int seconds = 0;
-            OperationTime operationTime;
-            OperationFlashRushToBuy.FlashSaleShop saleShop = null;
-            var buyState = GetActivityState(out seconds, out operationTime, out saleShop);
-            if(buyState == FlashRushToBuySate.Begining)
-            {
-                int key = saleShop.dayIndex * 100 + saleShop.timeIndex;
-            }
-           
-        }
-
-        public enum FlashRushToBuySate
-        {
-            NoOpen, //娲诲姩鏈紑鍚�
-            InAdvance,//鎻愬墠
-            Begining, //娲诲姩涓�
-            End, //缁撴潫
         }
     }
 }

--
Gitblit v1.8.0