军团:补发活跃宝箱

This commit is contained in:
luying
2022-05-10 16:56:41 +08:00
parent 2695d7e9fb
commit 9658fd8059
9 changed files with 106 additions and 69 deletions
+47 -47
View File
@@ -3,10 +3,10 @@ import { GuildModel, GuildType, GuildUpdateParam } from "../db/Guild";
import { resResult, shouldRefresh } from "../pubUtils/util";
import { STATUS, MAIL_TYPE, GUILD_AUTH, GUILD_JOB, REDIS_KEY, CHAT_SERVER, TASK_TYPE, COUNTER, GUILD_REC_TYPE, PUSH_ROUTE } from "../consts";
import { RoleModel, RoleType } from "../db/Role";
import { UserGuildModel, UserGuildType } from "../db/UserGuild";
import { UserGuildModel, UserGuildType, WishGood } from "../db/UserGuild";
import { UserGuildApplyModel } from "../db/UserGuildApply";
import { PVPConfigModel } from "../db/SystemConfig";
import { nowSeconds } from "../pubUtils/timeUtil";
import { getZeroPointD, getZeroPointOfTimeD, nowSeconds } from "../pubUtils/timeUtil";
import { pinus, BackendSession, FrontendOrBackendSession } from "pinus";
import { ARMY } from "../pubUtils/dicParam";
import { sendMailByContent } from "./mailService";
@@ -23,6 +23,8 @@ import { changeGuildActivity } from "./activity/guildPayService";
import { GuildRecModel } from "../db/GuildRec";
import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "./pushService";
import { delGuildChannel, leaveGuildChannel } from "./chatChannelService";
import { GuildActiveModel, } from "../db/GuildActive";
import { RewardInter } from "../pubUtils/interface";
export async function getMyGuildInfo(roleId: string, sid: string, userGuild: UserGuildType, guild: GuildType, serverId: number, session: FrontendOrBackendSession) {
@@ -44,8 +46,10 @@ export async function getMyGuildInfo(roleId: string, sid: string, userGuild: Use
let dicGuild = gameData.centerBase.get(guildLv);
let guildMemberMax = dicGuild && memberCnt >= dicGuild.peopleNum;
let guildActive = await getTodayGuildActive(guild.code);
// 返回
return { hasGuild: true, guildMemberMax, ...guild, leader: { ...leader, isOnline: leaderIsOnline }, rank, myInfo: { ...userGuild } };
return { hasGuild: true, guildMemberMax, ...guild, activeDaily: guildActive, leader: { ...leader, isOnline: leaderIsOnline }, rank, myInfo: { ...userGuild } };
}
/**
@@ -131,33 +135,14 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol
return { status: 0, guild, userGuild, roleName: role.roleName, memberCnt: guild.memberCnt, guildCe: guild.guildCe }
}
/**
* 刷新军团日活跃
* @param guildCode 军团唯一code
* @param serverId 区
*/
export async function getGuildWithRefActive(guildCode: string, serverId: number) {
export async function getTodayGuildActive(guildCode: string) {
let today = getZeroPointD();
return await getGuildActiveByRefTime(guildCode, today);
}
let res: any = await lockData(serverId, DATA_NAME.REFRESH_ACTIVE, guildCode);// 加锁
if (!!res.err) return false;
let guild = await GuildModel.findByCode(guildCode, serverId, '+refTimeDaily');
if (!guild) {
res.releaseCallback();//解锁
return false;
}
const now = new Date();
let { activeDaily, refTimeDaily } = guild;
let isRefDaily = shouldRefresh(refTimeDaily, now);
if (isRefDaily) {
activeDaily = 0; refTimeDaily = now;
guild = await GuildModel.updateInfoWithLeader(guildCode, { activeDaily, refTimeDaily }, {});
}
res.releaseCallback();//解锁
return guild;
export async function getGuildActiveByRefTime(guildCode: string, refTime: Date) {
let guildActive = await GuildActiveModel.getActive(guildCode, refTime);
return guildActive? guildActive.active: 0;
}
/**
@@ -182,9 +167,6 @@ export async function addActive(roleId: string, serverId: number, id: number, ty
if (!userGuild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
let guildCode = userGuild.guildCode;
let guild = await getGuildWithRefActive(guildCode, serverId);
if (!guild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
// 周结算锁
let weeklySumLock = await lockDataNoRetry(serverId, DATA_NAME.WEEKLY_GUILD_SUM, guildCode);
if (!!weeklySumLock.err) {
@@ -208,14 +190,15 @@ export async function addActive(roleId: string, serverId: number, id: number, ty
}
userGuild = await UserGuildModel.updateInfo(roleId, { activeRecord, activeUpdateTime: nowSeconds() }, { activeDaily: active, activeWeekly: active });
guild = await GuildModel.updateInfo(guildCode, { activeUpdateTime: nowSeconds() }, { activeDaily: active, activeWeekly: active });
let guild = await GuildModel.updateInfo(guildCode, { activeUpdateTime: nowSeconds() }, { activeWeekly: active });
let guildActive = await GuildActiveModel.addActive(guildCode, getZeroPointD(), active);
// 排行榜更新
let r = new Rank(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
await r.setRankWithGuildInfo(guildCode, guild.activeWeekly, guild.activeUpdateTime, guild);
let r2 = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId });
await r2.setRankWithGuildInfo2(guildCode, guild.lv, guild.activeWeekly, guild.lvUpdateTime, guild);
await pushGuildInfoUpdate(guildCode, { activeDaily: guild.activeDaily, activeWeekly: guild.activeWeekly });
await pushGuildInfoUpdate(guildCode, { activeDaily: guildActive.active, activeWeekly: guild.activeWeekly });
return { status: 1, guild, userGuild };
}
@@ -238,19 +221,8 @@ export async function refreshUserGuild(userGuild: UserGuildType, roleId: string)
const now = new Date();
let isRefDaily = shouldRefresh(refTimeDaily, now);
if (isRefDaily) {
wishGoods.map(async function ({ donateNames, goodId, drawCnt }) {
let goodInfo = getGoodById(goodId)
if (!goodInfo)
return;
for (let i = 0; i < drawCnt; i++) {
let donateName = donateNames[donateNames.length - i - 1];
await sendMailByContent(MAIL_TYPE.WISH_POOL_REWARD, roleId, {
params: [donateName, goodInfo.name],
goods: [{ id: goodId, count: 1 }]
});
}
});
await sendUnreceivedWishPool(wishGoods, roleId);
await sendUnreceivedActiveBox(roleId, userGuild.guildCode, refTimeDaily, receivedActive);
receivedActive = []; refTimeDaily = now; activeDaily = 0; activeRecord = []; wishGoods = []; receivedWishPool = [];
let receiveBoxs = [], wishDntCnt = 0, donateCnt = 0;
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord, wishGoods, receiveBoxs, wishDntCnt, donateCnt, receivedWishPool }, {});
@@ -260,6 +232,34 @@ export async function refreshUserGuild(userGuild: UserGuildType, roleId: string)
return userGuild;
}
async function sendUnreceivedWishPool(wishGoods: WishGood[], roleId: string) {
wishGoods.map(async function ({ donateNames, goodId, drawCnt }) {
let goodInfo = getGoodById(goodId)
if (!goodInfo)
return;
for (let i = 0; i < drawCnt; i++) {
let donateName = donateNames[donateNames.length - i - 1];
await sendMailByContent(MAIL_TYPE.WISH_POOL_REWARD, roleId, {
params: [donateName, goodInfo.name],
goods: [{ id: goodId, count: 1 }]
});
}
});
}
async function sendUnreceivedActiveBox(roleId: string, guildCode: string, refTimeDaily: Date, receiveActiveBox: number[]) {
let refTime = getZeroPointOfTimeD(refTimeDaily);
let guildActive = await getGuildActiveByRefTime(guildCode, refTime);
let goods: RewardInter[] = [];
for(let [id, { activeDayPoint, reward }] of gameData.guildActiveDayReward) {
console.log('####', guildActive, activeDayPoint, receiveActiveBox)
if(guildActive >= activeDayPoint && receiveActiveBox.indexOf(id) == -1) goods.push(...reward);
}
if(goods.length > 0) {
await sendMailByContent(MAIL_TYPE.GUILD_DAILY_BOX, roleId, { goods });
}
}
/**
* 每周结算上周公会周功勋和 活跃并发奖励(未完)
*