活动:修改获取活动逻辑,从serverlist上剥离

This commit is contained in:
luying
2022-04-07 11:38:33 +08:00
parent 0d7b435f1f
commit 765aff9cf0
31 changed files with 148 additions and 152 deletions

View File

@@ -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 = [];

View File

@@ -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, []);
}

View File

@@ -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');

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 => { // 找到关联活动

View File

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

View File

@@ -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<number, Map<number, { serverId: number, data: TimeLimitRankData}[]>>(); // activityId => sendTime => data
let takeSnapDataMap = new Map<number, Map<number, { serverId: number, data: TimeLimitRankData}[]>>(); // 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 —————————————— //

View File

@@ -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();

View File

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