diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index 524ca6ec1..b768c6ebe 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -33,8 +33,7 @@ export class ActivityHandler { let playerActivityArray = []; - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let groups = await ActivityGroupModel.findGroupsData(activityGroupId); + let groups = await ActivityGroupModel.findByServerId(serverId); let playerGroupArray = []; for (let groupData of groups) { let playerGroupActivityArray = []; diff --git a/game-server/app/servers/activity/remote/activityRemote.ts b/game-server/app/servers/activity/remote/activityRemote.ts index 5543dd74d..563ab1445 100644 --- a/game-server/app/servers/activity/remote/activityRemote.ts +++ b/game-server/app/servers/activity/remote/activityRemote.ts @@ -7,6 +7,7 @@ import { getServerMainten, setServerMainten, stopServerMainten } from '../../../ import { taflush } from '../../../services/sdkService'; import { ActivityInRemote } from '../../../domain/activityField/activityField'; import { errlogger } from '../../../util/logger'; +import { ActivityGroupModel } from '../../../db/ActivityGroup'; export default function (app: Application) { new HandlerService(app, {}); @@ -39,9 +40,9 @@ export class ActivityRemote { public async loadActivities() { try { - let servers = await ServerlistModel.findByEnv(this.app.get('env')); - for(let { id: serverId, activityGroupId } of servers) { - for(let groupId of activityGroupId) { + let activityGroup = await ActivityGroupModel.findAllActivityGroup(); + for(let { groupId, serverIds } of activityGroup) { + for(let serverId of serverIds) { if(!this.groupToServer.has(groupId)) { this.groupToServer.set(groupId, []); } diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index 49b73297a..81b27f5c9 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -224,16 +224,16 @@ export class GmHandler { async saveGroupToServer(groupId: number, serverIds: number[], uid: number) { - await ServerlistModel.pullByGroupId(groupId); - let servers = await ServerlistModel.findServerByIds(serverIds); - for(let server of servers) { - let pushArr: number[] = [], pullArr: number[] = []; - let activityGroupId = server.activityGroupId||[]; - if(!activityGroupId.includes(groupId)) { - pushArr.push(groupId); - } - await ServerlistModel.updateActivityGroup(server._id, pushArr, pullArr); - } + // await ServerlistModel.pullByGroupId(groupId); + // let servers = await ServerlistModel.findServerByIds(serverIds); + // for(let server of servers) { + // let pushArr: number[] = [], pullArr: number[] = []; + // let activityGroupId = server.activityGroupId||[]; + // if(!activityGroupId.includes(groupId)) { + // pushArr.push(groupId); + // } + // await ServerlistModel.updateActivityGroup(server._id, pushArr, pullArr); + // } await ActivityGroupModel.updateServerData(groupId, serverIds, uid); let activityServers = pinus.app.getServersByType('activity'); diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index a7753eff7..b91f9185f 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -283,7 +283,7 @@ export function _getActivitiesByType(serverId: number, type: number) { let result: ActivityInRemote[] = []; for(let activityId of activityByType) { let activity = activities.get(activityId); - if(activity && activity.beginTime <= Date.now()) { + if(activity && activity.beginTime <= Date.now() && activity.endTime >= Date.now()) { result.push(activity); } } diff --git a/game-server/app/services/activity/dailyChallengesService.ts b/game-server/app/services/activity/dailyChallengesService.ts index 5d0bdd3e3..f16c5479a 100644 --- a/game-server/app/services/activity/dailyChallengesService.ts +++ b/game-server/app/services/activity/dailyChallengesService.ts @@ -5,7 +5,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { DailyChallengesData } from '../../domain/activityField/dailyChallengesField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -17,8 +17,8 @@ import { getActivityById } from './activityService'; * */ export async function dailyChallengesActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.TASK_DAILY_CHALLENGES, new Date()); + + let activityDataArray: ActivityModelType[] = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_DAILY_CHALLENGES); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/dailyCoinService.ts b/game-server/app/services/activity/dailyCoinService.ts index 67f8414b5..f14955789 100644 --- a/game-server/app/services/activity/dailyCoinService.ts +++ b/game-server/app/services/activity/dailyCoinService.ts @@ -5,7 +5,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { DailyCoinData } from '../../domain/activityField/dailyCoinField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -17,8 +17,7 @@ import { getActivityById } from './activityService'; * */ export async function dailyCoinActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.DAILY_COIN, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_COIN); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/dailyGKService.ts b/game-server/app/services/activity/dailyGKService.ts index 404eae40c..64e419159 100644 --- a/game-server/app/services/activity/dailyGKService.ts +++ b/game-server/app/services/activity/dailyGKService.ts @@ -5,7 +5,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { DailyGKData } from '../../domain/activityField/dailyGKField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -17,8 +17,7 @@ import { getActivityById } from './activityService'; * */ export async function dailyGKActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.DAILY_GK, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_GK); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/dailyGiftsService.ts b/game-server/app/services/activity/dailyGiftsService.ts index bf9dfa381..9ee70e951 100644 --- a/game-server/app/services/activity/dailyGiftsService.ts +++ b/game-server/app/services/activity/dailyGiftsService.ts @@ -5,7 +5,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { DailyGiftsData } from '../../domain/activityField/dailyGiftsField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; @@ -18,8 +18,7 @@ import { getActivityById } from './activityService'; * */ export async function dailyGiftsActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.DAILY_DISCOUNT_GIFT, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_DISCOUNT_GIFT); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/dailyMealService.ts b/game-server/app/services/activity/dailyMealService.ts index 50130e114..72d07f510 100644 --- a/game-server/app/services/activity/dailyMealService.ts +++ b/game-server/app/services/activity/dailyMealService.ts @@ -5,7 +5,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { DailyMealData } from '../../domain/activityField/dailyMealField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -17,8 +17,7 @@ import { getActivityById } from './activityService'; * */ export async function dailyMealActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.DAILY_MEAL, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_MEAL); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/dailyRMBGiftsService.ts b/game-server/app/services/activity/dailyRMBGiftsService.ts index 929de8462..a5279a512 100644 --- a/game-server/app/services/activity/dailyRMBGiftsService.ts +++ b/game-server/app/services/activity/dailyRMBGiftsService.ts @@ -7,7 +7,7 @@ import { RewardParam } from '../../domain/activityField/rewardField'; import { addReward, stringToRewardParam } from './giftPackageService'; import { ServerlistModel } from '../../db/Serverlist'; import { RoleModel } from '../../db/Role'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -20,9 +20,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; */ export async function dailyRMBGiftsActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.DAILY_RMB_GIFTS, new Date()) - + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_RMB_GIFTS); if (activityArray.length == 0) { return null; } diff --git a/game-server/app/services/activity/growthFundService.ts b/game-server/app/services/activity/growthFundService.ts index 5d95c4502..65f33b96e 100644 --- a/game-server/app/services/activity/growthFundService.ts +++ b/game-server/app/services/activity/growthFundService.ts @@ -5,7 +5,7 @@ import { ActivityBuyRecordsModel } from '../../db/ActivityBuyRecords'; import { RoleModel } from '../../db/Role'; import { GrowthFundData } from '../../domain/activityField/growthFundField'; import { ServerlistModel } from '../../db/Serverlist'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -25,8 +25,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶) */ export async function growthFundActivity(type: number, serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, type, new Date()) + let activityArray = await getActivitiesByType(serverId, type); if (activityArray.length == 0) { return null; } diff --git a/game-server/app/services/activity/growthService.ts b/game-server/app/services/activity/growthService.ts index 1ce5fbf3a..225201627 100644 --- a/game-server/app/services/activity/growthService.ts +++ b/game-server/app/services/activity/growthService.ts @@ -3,11 +3,9 @@ import { ActivityModel, ActivityModelType } from '../../db/Activity'; import { ActivityGrowthModel, ActivityGrowthModelType } from '../../db/ActivityGrowth'; import { ActivityGrowthPointModel, ActivityGrowthPointModelType } from '../../db/ActivityGrowthPoint'; import { HeroModel } from '../../db/Hero'; -import { RoleModel } from '../../db/Role'; -import { ServerlistModel } from '../../db/Serverlist'; import { GrowthData } from '../../domain/activityField/growthField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** * 获取活动数据 @@ -18,8 +16,7 @@ import { getActivityById } from './activityService'; * */ export async function growthActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.TASK_GROWTH, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.TASK_GROWTH); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/limitPackageService.ts b/game-server/app/services/activity/limitPackageService.ts index a42cd4f3c..6f879279b 100644 --- a/game-server/app/services/activity/limitPackageService.ts +++ b/game-server/app/services/activity/limitPackageService.ts @@ -64,8 +64,7 @@ export async function getPlayerLimitPackageData(activityId: number, serverId: nu */ export async function limitPackageActivity(serverId: number, roleId: string, type: number) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, type, new Date) + let activityArray = await getActivitiesByType(serverId, type); activityArray = activityArray.sort((a, b) => { return b.activityId - a.activityId }); diff --git a/game-server/app/services/activity/monopolyService.ts b/game-server/app/services/activity/monopolyService.ts index c8ab4eb62..a6c222d7f 100644 --- a/game-server/app/services/activity/monopolyService.ts +++ b/game-server/app/services/activity/monopolyService.ts @@ -6,7 +6,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { MonopolyData } from '../../domain/activityField/monopolyField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -18,8 +18,7 @@ import { getActivityById } from './activityService'; * */ export async function getMonopolyActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.MONOPOLY, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.MONOPOLY); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/monthlyTicketService.ts b/game-server/app/services/activity/monthlyTicketService.ts index 09ebc2ba7..03d2ae6d8 100644 --- a/game-server/app/services/activity/monthlyTicketService.ts +++ b/game-server/app/services/activity/monthlyTicketService.ts @@ -8,7 +8,7 @@ import moment = require('moment'); import { ServerlistModel } from '../../db/Serverlist'; import { sendMailByContent } from './../mailService'; import { RoleModel, RoleType } from '../../db/Role'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { RewardInter } from '../../pubUtils/interface'; import { DUNGEON_CONST, PVP, VIP } from '../../pubUtils/dicParam'; import { cal } from '../../pubUtils/util'; @@ -26,8 +26,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; */ export async function monthlyTicketActivity(serverId: number, roleId: string, type: number) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, type, new Date()) + let activityArray = await getActivitiesByType(serverId, type); activityArray = activityArray.sort((a, b) => { return b.activityId - a.activityId }); diff --git a/game-server/app/services/activity/newHeroGKService.ts b/game-server/app/services/activity/newHeroGKService.ts index 7f3f4bc3f..d5e694e2e 100644 --- a/game-server/app/services/activity/newHeroGKService.ts +++ b/game-server/app/services/activity/newHeroGKService.ts @@ -1,11 +1,9 @@ import { ACTIVITY_TYPE } from '../../consts'; import { ActivityModel, ActivityModelType } from '../../db/Activity'; import { ActivityNewHeroGKModel, ActivityNewHeroGKModelType } from '../../db/ActivityNewHeroGK'; -import { RoleModel } from '../../db/Role'; -import { ServerlistModel } from '../../db/Serverlist'; import { NewHeroGKData } from '../../domain/activityField/newHeroGKField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -17,8 +15,7 @@ import { getActivityById } from './activityService'; * */ export async function newHeroGKActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.DAILY_GK, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_GK); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/newHeroGachaService.ts b/game-server/app/services/activity/newHeroGachaService.ts index a15387ef3..74b07cd8d 100644 --- a/game-server/app/services/activity/newHeroGachaService.ts +++ b/game-server/app/services/activity/newHeroGachaService.ts @@ -5,7 +5,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { NewHeroGachaData } from '../../domain/activityField/newHeroGachaField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -17,8 +17,7 @@ import { getActivityById } from './activityService'; * */ export async function newHeroGachaActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.NEW_HERO_GACHA, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.NEW_HERO_GACHA); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/newHeroGiftsService.ts b/game-server/app/services/activity/newHeroGiftsService.ts index 4c08a1a89..e3ef8b7cf 100644 --- a/game-server/app/services/activity/newHeroGiftsService.ts +++ b/game-server/app/services/activity/newHeroGiftsService.ts @@ -4,7 +4,7 @@ import { ActivityNewHeroGiftModel, ActivityNewHeroGiftModelType } from '../../db import { NewHeroGiftData } from '../../domain/activityField/newHeroGiftField'; import { ServerlistModel } from '../../db/Serverlist'; import { RoleModel } from '../../db/Role'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -17,8 +17,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; */ export async function getNewHeroGiftsActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.DAILY_RMB_GIFTS, new Date()) + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.DAILY_RMB_GIFTS); if (activityArray.length == 0) { return null; diff --git a/game-server/app/services/activity/refreshTaskService.ts b/game-server/app/services/activity/refreshTaskService.ts index 75307a8ab..bd7648739 100644 --- a/game-server/app/services/activity/refreshTaskService.ts +++ b/game-server/app/services/activity/refreshTaskService.ts @@ -2,11 +2,9 @@ import { ACTIVITY_TYPE } from '../../consts'; import { ActivityModel, ActivityModelType } from '../../db/Activity'; import { ActivityRefreshTaskModel, ActivityRefreshTaskModelType } from '../../db/ActivityRefreshTask'; import { ActivityRefreshTaskPointModel, ActivityRefreshTaskPointModelType } from '../../db/ActivityRefreshTaskPoint'; -import { RoleModel } from '../../db/Role'; -import { ServerlistModel } from '../../db/Serverlist'; import { RefreshTaskData } from '../../domain/activityField/refreshTaskField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** @@ -18,8 +16,7 @@ import { getActivityById } from './activityService'; * */ export async function getRefreshTaskActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.REFRESH_TASK, new Date()); + let activityDataArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.REFRESH_TASK); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/selfServiceShopActivityService.ts b/game-server/app/services/activity/selfServiceShopActivityService.ts index 0ffb717ba..5da428b84 100644 --- a/game-server/app/services/activity/selfServiceShopActivityService.ts +++ b/game-server/app/services/activity/selfServiceShopActivityService.ts @@ -9,7 +9,7 @@ import { SelfServiceShopData, SelfServiceShopItem } from '../../domain/activityF import { addReward, stringToRewardParam } from './giftPackageService'; import moment = require('moment'); import { RoleModel } from '../../db/Role'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -21,8 +21,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; * */ export async function getSelfServiceShopActivityData(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.SELF_SERVICE_SHOP, new Date()) + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SELF_SERVICE_SHOP); activityArray = activityArray.sort((a, b) => { return b.activityId - a.activityId }); diff --git a/game-server/app/services/activity/sevenDaysService.ts b/game-server/app/services/activity/sevenDaysService.ts index 0b027472d..a39308899 100644 --- a/game-server/app/services/activity/sevenDaysService.ts +++ b/game-server/app/services/activity/sevenDaysService.ts @@ -7,7 +7,7 @@ import { SevenDaysData } from '../../domain/activityField/sevenDaysField'; import { ActivityDailyChallengesModel, ActivityDailyChallengesModelType } from '../../db/ActivityDailyChallenges'; import { ActivityDailyGiftsModel, ActivityDailyGiftsModelType } from '../../db/ActivityDailyGifts'; import { RoleModel } from '../../db/Role'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -19,8 +19,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; * */ export async function sevenDaysActivity(serverId: number, roleId: string, type: number) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, type, new Date()); + let activityDataArray = await getActivitiesByType(serverId, type); if (activityDataArray.length === 0) { return null; } diff --git a/game-server/app/services/activity/signInService.ts b/game-server/app/services/activity/signInService.ts index fb670aca6..8efb2d6aa 100644 --- a/game-server/app/services/activity/signInService.ts +++ b/game-server/app/services/activity/signInService.ts @@ -6,7 +6,7 @@ import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { SignInData } from '../../domain/activityField/signInField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; /** * 获取活动数据 @@ -18,8 +18,7 @@ import { getActivityById } from './activityService'; * */ export async function signInActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.SIGN_IN, new Date()); + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SIGN_IN); if (activityArray.length == 0) { return null; } @@ -46,8 +45,7 @@ export async function signInActivity(serverId: number, roleId: string) { * */ export async function signInVIPActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.SIGN_IN_VIP, new Date()); + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.SIGN_IN_VIP); if (activityArray.length == 0) { return null; } @@ -76,9 +74,7 @@ export async function signInVIPActivity(serverId: number, roleId: string) { * */ export async function newPlayerSignInActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN, new Date()); - + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN); if (activityArray.length == 0) { return null; } diff --git a/game-server/app/services/activity/thirtyDaysService.ts b/game-server/app/services/activity/thirtyDaysService.ts index ca0e7dfcb..421c71ca7 100644 --- a/game-server/app/services/activity/thirtyDaysService.ts +++ b/game-server/app/services/activity/thirtyDaysService.ts @@ -6,7 +6,7 @@ import { RoleModel } from '../../db/Role'; import moment = require('moment'); import { deltaDays } from '../../pubUtils/util'; import { ServerlistModel } from '../../db/Serverlist'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -19,8 +19,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; */ export async function thirtyDaysActivity(type: number, serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, type, new Date()) + let activityArray = await getActivitiesByType(serverId, type); if (activityArray.length == 0) { return null; } diff --git a/game-server/app/services/activity/treasureHuntService.ts b/game-server/app/services/activity/treasureHuntService.ts index a319d97ad..884b77e9e 100644 --- a/game-server/app/services/activity/treasureHuntService.ts +++ b/game-server/app/services/activity/treasureHuntService.ts @@ -12,7 +12,7 @@ import { deltaDays } from '../../pubUtils/util'; import { addReward, stringToRewardParam } from './giftPackageService'; import { RewardParam } from '../../domain/activityField/rewardField'; import { RoleModel } from '../../db/Role'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -225,11 +225,10 @@ export async function getTreasureHuntData(serverId: number, roleId: string) { } async function getNewActivityData(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); let huntActivityId: number = 0; // 寻宝骑兵-活动Id let huntEndTime: Date = null; // 寻宝骑兵-结束时间 let huntRoundIndex: number = 0; // 寻宝骑兵-周期数 - let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.TREASURE_HUNT, 1)//activityId从小到大排序 + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.TREASURE_HUNT); let treasureHuntDataArray: TreasureHuntData[] = []; let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); @@ -259,11 +258,10 @@ async function getNewActivityData(serverId: number, roleId: string) { } async function getNextActivityData(serverId: number, roleId: string, oldHuntActivityId: number, oldHuntEndTime: Date, oldHuntRoundIndex: number) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); let huntActivityId: number = 0; // 寻宝骑兵-活动Id let huntEndTime: Date = null; // 寻宝骑兵-结束时间 let huntRoundIndex: number = oldHuntRoundIndex; // 寻宝骑兵-周期数 - let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.TREASURE_HUNT, 1)//activityId从小到大排序 + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.TREASURE_HUNT); let treasureHuntDataArray: TreasureHuntData[] = []; let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); diff --git a/game-server/app/services/activity/vipRechargeMoneyService.ts b/game-server/app/services/activity/vipRechargeMoneyService.ts index bee346bfb..b25e43678 100644 --- a/game-server/app/services/activity/vipRechargeMoneyService.ts +++ b/game-server/app/services/activity/vipRechargeMoneyService.ts @@ -4,7 +4,7 @@ import { ActivityVipRechargeMoneyModel, ActivityVipRechargeMoneyModelType } from import { VipRechargeMoneyData } from '../../domain/activityField/vipRechargeMoneyField'; import { ServerlistModel } from '../../db/Serverlist'; import { RoleModel } from '../../db/Role'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; /** @@ -17,8 +17,7 @@ import { getRoleCreateTime, getServerCreateTime } from '../redisService'; */ export async function vipRechargeMoneyActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY, new Date()) + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY); if (activityArray.length == 0) { return null; } @@ -65,8 +64,7 @@ export async function getPlayerVipRechargeMoneyData(activityId: number, serverId * */ export async function addVipRechargeMoney(roleId: string, serverId: number, RMB: number) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY, new Date()) + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.VIP_RECHARGE_MONEY); if (activityArray.length == 0) { return null; } diff --git a/game-server/app/services/activity/yuanbaoService.ts b/game-server/app/services/activity/yuanbaoService.ts index 05f806e88..0c8da0ccc 100644 --- a/game-server/app/services/activity/yuanbaoService.ts +++ b/game-server/app/services/activity/yuanbaoService.ts @@ -6,7 +6,7 @@ import { UserOrderModel, UserOrderModelType } from '../../db/UserOrder'; import { RewardParam } from '../../domain/activityField/rewardField'; import { YuanBaoShopData } from '../../domain/activityField/yuanBaoShopField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; -import { getActivityById } from './activityService'; +import { getActivitiesByType, getActivityById } from './activityService'; import { addReward, stringToRewardParam } from './giftPackageService'; /** @@ -19,8 +19,7 @@ import { addReward, stringToRewardParam } from './giftPackageService'; */ export async function yuanbaoActivity(serverId: number, roleId: string) { - let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.YUAN_BAO_SHOP, -1) + let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.YUAN_BAO_SHOP); if (activityArray.length == 0) { return null; } diff --git a/game-server/app/services/gmService.ts b/game-server/app/services/gmService.ts index 9e6f1ed14..6e2e7fe2f 100644 --- a/game-server/app/services/gmService.ts +++ b/game-server/app/services/gmService.ts @@ -29,6 +29,7 @@ import { RefreshShopData } from "../domain/activityField/refreshShopField"; import { RoleType } from "../db/Role"; import { MonopolyData } from "../domain/activityField/monopolyField"; import { ActivityPopUpShopModel, ActivityPopUpShopModelType } from "../db/ActivityPopUpShop"; +import { getActivitiesByType } from "./activity/activityService"; // —————————————— 跑马灯 —————————————— // // 初始 @@ -319,8 +320,7 @@ export async function getParamStr(activity: ActivityModelType, productID: string // param['beginTimeStamp'] = playerRecord.beginTime.getTime(); break; case ACTIVITY_TYPE.REFRESH_SHOP: - let { activityGroupId } = await ServerlistModel.findByServerId(role.serverId); - let monopolyActivitys = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.MONOPOLY, 1); + let monopolyActivitys = await getActivitiesByType(role.serverId, ACTIVITY_TYPE.MONOPOLY); let parentActivity = monopolyActivitys.find(activity => { let data = new MonopolyData(activity, 0, 0); let curShop = data.list.find(land => { // 找到关联活动 diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 1aeba36eb..0aaa8bebb 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -15,6 +15,7 @@ import { TimeLimitRankData } from '../domain/activityField/timeLimitRankField'; import { ActivityTimeLimitRankModel } from '../db/ActivityTimeLimitRank'; import { RoleModel, RoleType } from '../db/Role'; import { GuildType } from '../db/Guild'; +import { ActivityGroupModel } from '../db/ActivityGroup'; /** * 在服务重新启动时,将信息存入redis @@ -47,9 +48,9 @@ export async function initAllRank() { await setRankRedisFromDb(REDIS_KEY.PVP_RANK, {}); - for(let {id, activityGroupId} of serverList) { + for(let {id} of serverList) { await initRank(id); - await initActivitiesRank(id, activityGroupId) + await initActivitiesRank(id) } } @@ -74,8 +75,10 @@ export async function initRank(serverId: number) { await setRankRedisFromDb(REDIS_KEY.HERO_RANK, { serverId }); } -export async function initActivitiesRank(serverId: number, activityGroupId: number[]) { +export async function initActivitiesRank(serverId: number) { let serverTime = await getServerCreateTime(serverId); + let activityGroup = await ActivityGroupModel.findByServerId(serverId); + let activityGroupId = activityGroup.map(cur => cur.groupId); let activities = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.TIME_LIMIT_RANK, new Date()); for(let activity of activities) { let data = new TimeLimitRankData(activity, 0, serverTime); diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index adc1dd0de..61795fa40 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -34,6 +34,7 @@ import { ActivityModel, ActivityModelType } from '../db/Activity'; import { TimeLimitRankData } from '../domain/activityField/timeLimitRankField'; import { sendRankMail, takeSnapshot } from './activity/timeLimitRankService'; import { getActivitiesByType } from './activity/activityService'; +import { ActivityGroupModel } from '../db/ActivityGroup'; const PER_SECOND = 1 * 1000; const PER_DAY = 24 * 60 * 60; @@ -679,61 +680,82 @@ async function autoCreateServerSchedule(region: RegionType) { // —————————————— 活动 start —————————————— // async function initTimeLimitRank() { - let servers = await ServerlistModel.findByEnv(pinus.app.get('env')); - for(let { serverId } of servers) { - let serverTime = await getServerCreateTime(serverId); - let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TIME_LIMIT_RANK); - for(let activity of activities) { - let data = new TimeLimitRankData(activity, 0, serverTime); - if(data.sendMailTime > Date.now()) { - await setSendRankMailSchedule(data, serverId); - } - if(data.rankEndTime > Date.now() && data.needSnapshot()) { - await setTakeRankSnapshotSchedule(data, serverId); - } - } - } - + let activities = await ActivityModel.findAllActivities(); + await updateTimeLimitRank(activities); } export async function updateTimeLimitRank(activities: ActivityModelType[]) { - let servers = await ServerlistModel.findByEnv(pinus.app.get('env')); - for(let { serverId, openTime } of servers) { - for(let activity of activities) { - let data = new TimeLimitRankData(activity, 0, openTime); - if(data.sendMailTime > Date.now()) { - await setSendRankMailSchedule(data, serverId); - } - if(data.rankEndTime > Date.now() && data.needSnapshot()) { - await setTakeRankSnapshotSchedule(data, serverId); + let sendMailDataMap = new Map>(); // activityId => sendTime => data + let takeSnapDataMap = new Map>(); // activityId=>rankTime=>data + for(let activity of activities) { + let { activityId } = activity + let group = await ActivityGroupModel.findByActivity(activityId); + for(let { serverIds } of group) { + let servers = await ServerlistModel.findByServerIds(serverIds); + for(let { env, openTime, serverId } of servers) { + if(env == pinus.app.get('env')) { + let data = new TimeLimitRankData(activity, 0, openTime); + if(data.sendMailTime > Date.now()) { + if(!sendMailDataMap.has(activityId)) { + sendMailDataMap.set(activityId, new Map()); + } + if(!sendMailDataMap.get(activityId).has(data.sendMailTime)) { + sendMailDataMap.get(activityId).set(data.sendMailTime, []); + } + sendMailDataMap.get(activityId).get(data.sendMailTime).push({ serverId, data }); + } + if(data.rankEndTime > Date.now() && data.needSnapshot()) { + if(!takeSnapDataMap.has(activityId)) { + takeSnapDataMap.set(activityId,new Map()); + } + if(!takeSnapDataMap.get(activityId).has(data.rankEndTime)) { + takeSnapDataMap.get(activityId).set(data.rankEndTime, []); + } + takeSnapDataMap.get(activityId).get(data.rankEndTime).push({ serverId, data }); + } + } } } } + for(let [activityId, map] of sendMailDataMap) { + for(let [sendMailTime, arr] of map) { + await setSendRankMailSchedule(sendMailTime, activityId, arr); + } + } + for(let [activityId, map] of takeSnapDataMap) { + for(let [rankEndTime, arr] of map) { + await setTakeRankSnapshotSchedule(rankEndTime, activityId, arr); + } + } } -async function setSendRankMailSchedule(data: TimeLimitRankData, serverId: number) { - console.log('########### setSendRankMailSchedule1 ########') - if(scheduledJobs[`rankMail_${serverId}_${data.activityId}`]) { - scheduledJobs[`rankMail_${serverId}_${data.activityId}`].cancel(); +async function setSendRankMailSchedule(sendMailTime: number, activityId: number, arr: { serverId: number, data: TimeLimitRankData}[]) { + console.log('########### setSendRankMailSchedule1 ########', sendMailTime, activityId, arr.length) + if(scheduledJobs[`rankMail_${sendMailTime}_${activityId}`]) { + scheduledJobs[`rankMail_${sendMailTime}_${activityId}`].cancel(); } - scheduleJob(`rankMail_${serverId}_${data.activityId}`, data.sendMailTime, async () => { + scheduleJob(`rankMail_${sendMailTime}_${activityId}`, sendMailTime, async () => { console.log('########### setSendRankMailSchedule2 ########') - await sendRankMail(data, serverId); + for(let { serverId, data } of arr) { + await sendRankMail(data, serverId); + } }) } -async function setTakeRankSnapshotSchedule(data: TimeLimitRankData, serverId: number) { - console.log('########### setTakeRankSnapshotSchedule1 ########') +async function setTakeRankSnapshotSchedule(rankEndTime: number, activityId: number, arr: { serverId: number, data: TimeLimitRankData}[]) { + console.log('########### setTakeRankSnapshotSchedule1 ########', rankEndTime, activityId, arr.length) - if(scheduledJobs[`snapshot${data.activityId}`]) { - scheduledJobs[`snapshot${data.activityId}`].cancel(); + if(scheduledJobs[`snapshot_${rankEndTime}_${activityId}`]) { + scheduledJobs[`snapshot_${rankEndTime}_${activityId}`].cancel(); } - scheduleJob(`snapshot${data.activityId}`, data.rankEndTime, async () => { + scheduleJob(`snapshot_${rankEndTime}_${activityId}`, rankEndTime, async () => { console.log('########### setTakeRankSnapshotSchedule2 ########') - await takeSnapshot(data, serverId); + for(let { serverId, data } of arr) { + await takeSnapshot(data, serverId); + } }) } // —————————————— 活动 end —————————————— // \ No newline at end of file diff --git a/shared/db/ActivityGroup.ts b/shared/db/ActivityGroup.ts index 283c7bd15..52dcc6d20 100644 --- a/shared/db/ActivityGroup.ts +++ b/shared/db/ActivityGroup.ts @@ -41,6 +41,10 @@ export default class Activity_Group extends BaseModel { return result; } + public static async findByActivity(activityId: number) { + let result: ActivityGroupModelType[] = await ActivityGroupModel.find({ activities: activityId }).lean(); + return result; + } //查询组 public static async findGroupsData(groupIds: number[]) { let result: ActivityGroupModelType[] = await ActivityGroupModel.find({ groupId: { $in: groupIds } }).lean(); diff --git a/shared/db/Serverlist.ts b/shared/db/Serverlist.ts index 5ce62c303..7e4fe9acd 100644 --- a/shared/db/Serverlist.ts +++ b/shared/db/Serverlist.ts @@ -61,8 +61,8 @@ export default class Serverlist extends BaseModel { @prop({ required: true, default: 1, enum: SERVER_STATUS }) serverStatus: number; // 服务器状态 - @prop({ required: true, type: Number }) - activityGroupId: number[]; // 活动组 + // @prop({ required: true, type: Number }) + // activityGroupId: number[]; // 活动组 public get status() { let now = nowSeconds(); @@ -154,19 +154,19 @@ export default class Serverlist extends BaseModel { return result; } - public static async updateActivityGroup(id: string, pushArr: number[], pullArr: number[]) { - // console.log(id, pushArr, pullArr) - let update = {}; - if(pushArr.length > 0) update['$push'] = { activityGroupId: { $each: pushArr } }; - if(pullArr.length > 0) update['$pull'] = { activityGroupId: { $in: pullArr } }; - let result: ServerlistType[] = await ServerlistModel.findOneAndUpdate({ _id: id }, update).lean(); - return result; - } + // public static async updateActivityGroup(id: string, pushArr: number[], pullArr: number[]) { + // // console.log(id, pushArr, pullArr) + // let update = {}; + // if(pushArr.length > 0) update['$push'] = { activityGroupId: { $each: pushArr } }; + // if(pullArr.length > 0) update['$pull'] = { activityGroupId: { $in: pullArr } }; + // let result: ServerlistType[] = await ServerlistModel.findOneAndUpdate({ _id: id }, update).lean(); + // return result; + // } - public static async pullByGroupId(groupId: number) { - let result = await ServerlistModel.updateMany({ activityGroupId: { $elemMatch: { $eq: groupId } }}, { $pull: { activityGroupId: groupId } }, { new: true }).lean(true); - return result; - } + // public static async pullByGroupId(groupId: number) { + // let result = await ServerlistModel.updateMany({ activityGroupId: { $elemMatch: { $eq: groupId } }}, { $pull: { activityGroupId: groupId } }, { new: true }).lean(true); + // return result; + // } public static async incRoleCnt(serverId: number) { let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $inc: { playerCnt: 1 } });