void Init()
        {
            var cache = new ShareCacheStruct<ShareRealItemCnt>();
            List<int> itemIds = GameConfigMgr.Instance().getHappyDataKeys();
            memoryRealInfoDataModel.HappyData hd = null;
            for(int i=0;i<itemIds.Count; ++i)
            {
               if( null ==  cache.FindKey(itemIds[i])) // first add
               {
                   ShareRealItemCnt sric = new ShareRealItemCnt();
                   hd = GameConfigMgr.Instance().getHappyData(itemIds[i]);
                   sric.itemID  = hd.itemID;
                   sric.num     = hd.RefleshNum;
                   cache.Add(sric);
               }
            }

            string timestr = GameConfigMgr.Instance().getString("timer_item_cnt", "600000,600000");
            string[] tt = timestr.Split(',');
            int b0 = int.Parse(tt[0]);
            int b1 = int.Parse(tt[1]);
            TimerMgr.Singleton().add(typeof(RealItemCntUpdate).ToString(), actionrealItemCnt,b0,b1);

            bool openDebug = GameConfigMgr.Instance().getInt("timer_open_debug",0)==1;
            if(openDebug)
            {
                timestr = GameConfigMgr.Instance().getString("time_hdm_cnt", "600000,600000");
                tt = timestr.Split(',');
                 b0 = int.Parse(tt[0]);
                 b1 = int.Parse(tt[1]);
                TimerMgr.Singleton().add("HappyModeData_EnterNum", action_HappyModeData_enterNum, b0, b1);
            }
            else
            {
                //每天05点执行
                try
                {
                    timestr = GameConfigMgr.Instance().getString("time_hdm_cnt_timming", "05:15");
                }
                catch
                {
                    timestr = "05:15";
                }
                TimeListener.Append(PlanConfig.EveryDayPlan(DoEveryDayExecute, "EveryDayTask", timestr));
                ConsoleLog.showNotifyInfo("HappyModeData_EnterNum begin:" + timestr);
            }
        }
        bool updateRealItemCnt(string s,ShareRealItemCnt sric)
        {
            memoryRealInfoDataModel.HappyData hd = GameConfigMgr.Instance().getHappyData(sric.itemID);
            if(hd!=null)
            {
                int MinuteForReflesh = hd.MinuteForReflesh;
                DateTime now = DateTime.Now;
                TimeSpan ts = now - sric.preUpdateTime;
                if (ts.TotalMinutes > MinuteForReflesh)
                {
                    sric.ModifyLocked(() =>
                    {
                        sric.preUpdateTime = now;
                        sric.num = hd.RefleshNum;
                    });
                }
            }
            else
            {
                ConsoleLog.showErrorInfo(0,"RealItemCntUpdate error."+sric.itemID);
                TraceLog.WriteError("RealItemCntUpdate error." + sric.itemID);
            }

            // todo
            return true;
        }