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)); }
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); }