🐞 fix(gvg): 云台补发
This commit is contained in:
@@ -438,51 +438,49 @@ export async function saveVestigeRankSchedule() {
|
||||
}
|
||||
|
||||
// systimer 服,每周六5点
|
||||
export async function sendUngotVestigeReward() {
|
||||
export async function gvgBattlePeriodSchedule() {
|
||||
const config = await GVGConfigModel.findConfig();
|
||||
const playerDatas = await GVGVestigeSumRankModel.getAllCanReceiveRanks(config.configId);
|
||||
const leagueCodeByConfig = new Map<number, string[]>();
|
||||
const dataByConfig = new Map<number, Map<string, Map<string, { playerRanks: {_id: string, rank: number }[], leagueRanks: { _id: string, rank: number }[] }>>>(); // configId => leagueCode => playerdata
|
||||
await sendUngotVestigeReward(config.configId);
|
||||
}
|
||||
|
||||
export async function sendUngotVestigeReward(configId: number) {
|
||||
const playerDatas = await GVGVestigeSumRankModel.getAllCanReceiveRanks(configId);
|
||||
const leagueCodes: string[] = [];
|
||||
const dataByLeague = new Map<string, Map<string, { playerRanks: {_id: string, rank: number }[], leagueRanks: { _id: string, rank: number }[] }>>(); // leagueCode => playerdata
|
||||
const receiveLeagueParam: { _id: string, roleIds: string[] }[] = [], receivePlayerParam: string[] = [];
|
||||
for(let player of playerDatas) {
|
||||
if(!leagueCodeByConfig.has(player.configId)) leagueCodeByConfig.set(player.configId, []);
|
||||
if(leagueCodeByConfig.get(player.configId).indexOf(player.leagueCode) == -1) {
|
||||
leagueCodeByConfig.get(player.configId).push(player.leagueCode);
|
||||
if(leagueCodes.indexOf(player.leagueCode) == -1) {
|
||||
leagueCodes.push(player.leagueCode);
|
||||
}
|
||||
if(!dataByConfig.has(player.configId)) dataByConfig.set(player.configId, new Map());
|
||||
if(!dataByConfig.get(player.configId).has(player.leagueCode)) dataByConfig.get(player.configId).set(player.leagueCode, new Map());
|
||||
if(!dataByConfig.get(player.configId).get(player.leagueCode).has(player.roleId)) dataByConfig.get(player.configId).get(player.leagueCode).set(player.roleId, { playerRanks: [], leagueRanks: [] });
|
||||
dataByConfig.get(player.configId).get(player.leagueCode).get(player.roleId).playerRanks.push({ _id: player._id, rank: player.rank });
|
||||
if(!dataByLeague.has(player.leagueCode)) dataByLeague.set(player.leagueCode, new Map());
|
||||
if(!dataByLeague.get(player.leagueCode).has(player.roleId)) dataByLeague.get(player.leagueCode).set(player.roleId, { playerRanks: [], leagueRanks: [] });
|
||||
dataByLeague.get(player.leagueCode).get(player.roleId).playerRanks.push({ _id: player._id, rank: player.rank });
|
||||
|
||||
receivePlayerParam.push(player._id);
|
||||
}
|
||||
for(let [configId, leagueCodes] of leagueCodeByConfig) {
|
||||
const leagueDatas = await GVGVestigeLeagueRankModel.getAllCanReceiveRanks(configId, leagueCodes);
|
||||
for(let leagueData of leagueDatas) {
|
||||
let players = dataByConfig.get(configId)?.get(leagueData.leagueCode);
|
||||
if(players) {
|
||||
for(let [roleId, data] of players) {
|
||||
if(leagueData.receiveMembers.indexOf(roleId) == -1) {
|
||||
data.leagueRanks.push({ _id: leagueData._id, rank: leagueData.rank });
|
||||
let index = receiveLeagueParam.findIndex(cur => cur._id == leagueData._id);
|
||||
if(index == -1) {
|
||||
receiveLeagueParam.push({ _id: leagueData._id, roleIds: [ roleId ] });
|
||||
} else {
|
||||
receiveLeagueParam[index].roleIds.push(roleId);
|
||||
}
|
||||
}
|
||||
|
||||
const leagueDatas = await GVGVestigeLeagueRankModel.getAllCanReceiveRanks(configId, leagueCodes);
|
||||
for(let leagueData of leagueDatas) {
|
||||
let players = dataByLeague.get(leagueData.leagueCode);
|
||||
if(!players) continue;
|
||||
for(let [roleId, data] of players) {
|
||||
if(leagueData.receiveMembers.indexOf(roleId) == -1) {
|
||||
data.leagueRanks.push({ _id: leagueData._id, rank: leagueData.rank });
|
||||
let index = receiveLeagueParam.findIndex(cur => cur._id == leagueData._id);
|
||||
if(index == -1) {
|
||||
receiveLeagueParam.push({ _id: leagueData._id, roleIds: [ roleId ] });
|
||||
} else {
|
||||
receiveLeagueParam[index].roleIds.push(roleId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(let [configId, leagueMap] of dataByConfig) {
|
||||
for(let [ leagueCode, players ] of leagueMap) {
|
||||
for(let [ roleId, { playerRanks, leagueRanks }] of players) {
|
||||
let { leagueReward, rewards } = calVestigeLeagueBoxRewards(leagueRanks, playerRanks);
|
||||
if(leagueReward.length > 0) await addGVGReward(roleId, '', leagueCode, null, leagueReward, [], ITEM_CHANGE_REASON.GVG_VESTIGE_RECEIVE_RANK);
|
||||
if(rewards.length > 0) await sendMailByContent(MAIL_TYPE.VESTIGE_REWARD, roleId, { params: [`${configId}`], goods: rewards });
|
||||
}
|
||||
for(let [ leagueCode, players ] of dataByLeague) {
|
||||
for(let [ roleId, { playerRanks, leagueRanks }] of players) {
|
||||
let { leagueReward, rewards } = calVestigeLeagueBoxRewards(leagueRanks, playerRanks);
|
||||
if(leagueReward.length > 0) await addGVGReward(roleId, '', leagueCode, null, leagueReward, [], ITEM_CHANGE_REASON.GVG_VESTIGE_RECEIVE_RANK);
|
||||
if(rewards.length > 0) await sendMailByContent(MAIL_TYPE.VESTIGE_REWARD, roleId, { params: [`${configId}`], goods: rewards });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user