Exemplo n.º 1
0
        CrosscrowdManagerResponse doAction(string siteId, Guid managerId, EnumConsumeSourceType mallDirectType, bool isClearCd)
        {
            var crowd = CrossCrowdManager.Instance.GetCurrent(siteId);

            if (crowd == null || crowd.Status != 1)
            {
                return(ResponseHelper.Create <CrosscrowdManagerResponse>(MessageCode.CrowdNoData));
            }
            DateTime curTime = DateTime.Now;
            CrosscrowdManagerEntity crowdManager = InnerGetManager(siteId, managerId, crowd.Idx, curTime);

            if (isClearCd)
            {
                var cd = MatchCdHandler.GetCdSecondsInt(managerId, EnumMatchType.CrossCrowd);
                if (cd <= 0)
                {
                    return(GetManagerInfo(siteId, managerId, crowd.Idx, DateTime.Now));
                }
                crowdManager.ClearCdCount++;
            }
            else
            {
                if (crowdManager.Morale <= 0)
                {
                    crowdManager.Morale = _initMorale;
                    crowdManager.ResurrectionCount++;
                    //crowdManager.NextMatchTime = ShareUtil.BaseTime;
                }
                else
                {
                    return(ResponseHelper.Create <CrosscrowdManagerResponse>(MessageCode.CrowdHasMorale));
                }
            }
            var mallDirect = new CrossMallDirectFrame(siteId, managerId, mallDirectType, 0);// crowdManager.ClearCdCount);
            var checkCode  = mallDirect.Check();

            if (checkCode != MessageCode.Success)
            {
                return(ResponseHelper.Create <CrosscrowdManagerResponse>(checkCode));
            }
            crowdManager.UpdateTime = curTime;
            if (!CrosscrowdManagerMgr.Update(crowdManager))
            {
                return(ResponseHelper.Create <CrosscrowdManagerResponse>(MessageCode.NbUpdateFail));
            }

            MatchCdHandler.Delete(managerId, EnumMatchType.CrossCrowd);
            checkCode = mallDirect.Save(Guid.NewGuid().ToString());
            if (checkCode != MessageCode.Success)
            {
                SystemlogMgr.Error("CrossCrowd-doaction", string.Format("action:{0}", mallDirectType.ToString()));
            }
            return(GetManagerInfo(siteId, managerId, crowd.Idx, DateTime.Now, mallDirect.RemainPoint, false));
        }
Exemplo n.º 2
0
        CrosscrowdManagerEntity InnerGetManager(string siteId, Guid managerId, int crowdId, DateTime curTime)
        {
            var crowdManager = CrosscrowdManagerMgr.GetById(managerId);
            int domainId     = 1;

            if (crowdManager == null)
            {
                var manager = NbManagerMgr.GetById(managerId, siteId);
                if (manager == null)
                {
                    return(null);
                }
                //if (!ManagerUtil.CheckFunction(siteId, managerId, EnumOpenFunction.Crowd))
                //    return null;
                CrossSiteCache.Instance().TryGetDomainId(siteId, out domainId);
                crowdManager                  = new CrosscrowdManagerEntity();
                crowdManager.DomainId         = domainId;
                crowdManager.SiteId           = siteId;
                crowdManager.SiteName         = CacheFactory.FunctionAppCache.GetCrossZoneName(siteId);
                crowdManager.Name             = manager.Name;
                crowdManager.Logo             = manager.Logo;
                crowdManager.CrossCrowdId     = crowdId;
                crowdManager.Morale           = _initMorale;
                crowdManager.ManagerId        = managerId;
                crowdManager.RowTime          = curTime;
                crowdManager.UpdateTime       = curTime;
                crowdManager.ScoreUpdateTime  = curTime;
                crowdManager.ResurrectionTime = ShareUtil.BaseTime;
                crowdManager.NextMatchTime    = ShareUtil.BaseTime;
                crowdManager.Kpi              = ManagerUtil.GetKpi(managerId, siteId);
                CrosscrowdManagerMgr.Insert(crowdManager);
            }
            else if (crowdId > 0)
            {
                if (crowdManager.CrossCrowdId != crowdId)
                {
                    CrossSiteCache.Instance().TryGetDomainId(siteId, out domainId);
                    crowdManager.DomainId          = domainId;
                    crowdManager.CrossCrowdId      = crowdId;
                    crowdManager.KillNumber        = 0;
                    crowdManager.ByKillNumber      = 0;
                    crowdManager.Morale            = _initMorale;
                    crowdManager.Score             = 0;
                    crowdManager.ScoreUpdateTime   = curTime;
                    crowdManager.UpdateTime        = curTime;
                    crowdManager.WinningCount      = 0;
                    crowdManager.ResurrectionCount = 0;
                    crowdManager.ResurrectionAuto  = 0;
                    crowdManager.ClearCdCount      = 0;
                    crowdManager.Kpi = ManagerUtil.GetKpi(managerId, siteId);

                    CrosscrowdManagerMgr.Update(crowdManager);
                }
                else if (crowdManager.Morale <= 0)
                {
                    if (curTime >= crowdManager.ResurrectionTime)
                    {
                        crowdManager.Morale     = _initMorale;
                        crowdManager.UpdateTime = curTime;
                        crowdManager.ResurrectionAuto++;
                        CrosscrowdManagerMgr.Update(crowdManager);
                    }
                    else
                    {
                        crowdManager.Morale = 0;
                    }
                }
            }
            return(crowdManager);
        }