diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index 4a3b79d3b..b80e6c2bd 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, pinus, ChannelService } from 'pinus'; import { resResult, getRandEelm, reduceCe, getRefTime } from '../../../pubUtils/util'; import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE } from '../../../consts'; import { UserGuildModel } from '../../../db/UserGuild'; -import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addGuildActive, message, settleGuildWeekly } from '../../../services/guildService'; +import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addActive, message, settleGuildWeekly } from '../../../services/guildService'; import { GuildModel, GuildType } from '../../../db/Guild'; import { RoleModel, RoleType } from '../../../db/Role'; import { ARMY } from '../../../pubUtils/dicParam'; @@ -181,7 +181,7 @@ export class GuildHandler { return resResult(STATUS.GUILD_MANAGER_REACH_MAX); } - const userGuild = await UserGuildModel.updateInfo(memberRoleId, { auth }, 'auth'); // 设置权限 + const userGuild = await UserGuildModel.updateInfo(memberRoleId, { auth }, {}, 'auth'); // 设置权限 if(!userGuild) { return resResult(STATUS.GUILD_MEMBER_NOT_FOUND); } @@ -656,8 +656,8 @@ export class GuildHandler { // 交换 // TODO redlock - await UserGuildModel.updateInfo(leaderRoleId, { auth: GUILD_AUTH.MEMBER }, 'auth'); // 团长撤 - await UserGuildModel.updateInfo(topUserGuild.roleId, { auth: GUILD_AUTH.LEADER }, 'auth'); // 最高功勋人升 + await UserGuildModel.updateInfo(leaderRoleId, { auth: GUILD_AUTH.MEMBER }, {}, 'auth'); // 团长撤 + await UserGuildModel.updateInfo(topUserGuild.roleId, { auth: GUILD_AUTH.LEADER }, {}, 'auth'); // 最高功勋人升 let managerCntInc = topUserGuild.auth == GUILD_AUTH.MANAGER ? -1 : 0; // 管理人数 const guild = await GuildModel.updateInfo(code, { leader: topUser._id }, { managerCnt: managerCntInc }, 'managerCnt name'); // 如果有转让团长设置leader @@ -820,7 +820,7 @@ export class GuildHandler { } let goods = await addItems(roleId, roleName, sid, activeDayReward.reward); - userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive: activeDayReward.activeDayPoint }, 'receivedActive'); + userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive: activeDayReward.activeDayPoint }, {}, 'receivedActive'); return resResult(STATUS.SUCCESS, { goods, receivedActive: userGuild.receivedActive }); } @@ -833,20 +833,9 @@ export class GuildHandler { const serverId = session.get('serverId'); const { code, active, id } = msg; - const guild = await addGuildActive(code, serverId, active); - if(!guild) return resResult(STATUS.GUILD_NOT_FOUND); - - let userGuild = await UserGuildModel.getMyGuild(roleId, 'activeRecord receivedActive activeDaily activeWeekly'); - let {activeRecord} = userGuild; - if(id != 0) { - let curActiveRecord = activeRecord.find(cur => cur.id == id); - if( curActiveRecord ) { - curActiveRecord.count ++; - } else { - activeRecord.push({id, count: 1}); - } - } - userGuild = await UserGuildModel.updateInfo(roleId, { activeRecord, activeDaily: userGuild.activeDaily + active, activeWeekly: userGuild.activeWeekly + active}) + const result = await addActive(roleId, serverId, id, active); + if(!result) return resResult(STATUS.GUILD_NOT_FOUND); + const { guild, userGuild } = result; let { activeDaily, activeWeekly } = guild; message.updateInfo(code, { activeDaily, activeWeekly }); diff --git a/game-server/app/servers/battle/handler/guildTrainHandler.ts b/game-server/app/servers/battle/handler/guildTrainHandler.ts index 077358f4a..df83dd597 100644 --- a/game-server/app/servers/battle/handler/guildTrainHandler.ts +++ b/game-server/app/servers/battle/handler/guildTrainHandler.ts @@ -105,7 +105,7 @@ export class GuildTrainHandler { // return resResult(STATUS.WRONG_PARMS); // } if (time > getTodayZeroPoint()) { - userGuild = await UserGuildModel.updateInfo(roleId, {trainCount: userGuild.trainCount - 1}); + userGuild = await UserGuildModel.updateInfo(roleId, {}, { trainCount: -1 }); } await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess?1:2 } diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index ea9332586..de4fe96c2 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -9,9 +9,6 @@ import { SystemConfigModel } from "../db/SystemConfig"; import { nowSeconds } from "../pubUtils/timeUtil"; import { pinus } from "pinus"; import { GuildRecType } from "../db/GuildRec"; -import { MailModel } from "../db/Mail"; -import { RewardInter } from "../pubUtils/interface"; -import { getRedis } from "./redisService"; import { ARMY } from "../pubUtils/dicParam"; import { sendMail } from "./mailService"; @@ -95,24 +92,28 @@ export async function getGuildWithRefActive(guildCode: string, serverId: number) * @param serverId 区 * @param active 增加的活跃 */ -export async function addGuildActive(guildCode: string, serverId: number, active: number) { - - // TODO 加写锁 - let guild = await GuildModel.findByCode(guildCode, serverId, '+refTimeDaily'); +export async function addActive(roleId: string, serverId: number, id: number, active: number) { + + let userGuild = await getUserGuildWithRefActive(roleId, 'activeRecord receivedActive activeDaily activeWeekly guildCode'); + if(!userGuild) return false; + + let guildCode = userGuild.guildCode; + let guild = await getGuildWithRefActive(guildCode, serverId); if(!guild) return false; - const now = new Date(); - let { activeDaily, activeWeekly, refTimeDaily} = guild; - - let isRefDaily = shouldRefresh(refTimeDaily, now, 0); - if(isRefDaily) { - activeDaily = 0; refTimeDaily = now; + let {activeRecord} = userGuild; + if(id != 0) { // 用于debug,传0时直接增加活跃 + let curActiveRecord = activeRecord.find(cur => cur.id == id); + if( curActiveRecord ) { + curActiveRecord.count ++; + } else { + activeRecord.push({id, count: 1}); + } } + userGuild = await UserGuildModel.updateInfo(roleId, { activeRecord }, { activeDaily: active, activeWeekly: active }); - activeWeekly += active; activeDaily += active; - - guild = await GuildModel.updateInfo(guildCode, { activeDaily, activeWeekly, refTimeDaily }, {}); - return guild; + guild = await GuildModel.updateInfo(guildCode, { }, { activeDaily: active, activeWeekly: active }); + return { guild, userGuild }; } /** @@ -130,7 +131,7 @@ export async function getUserGuildWithRefActive(roleId: string, select: string) if(isRefDaily) { receivedActive = 0; refTimeDaily = now; activeDaily = 0; activeRecord = []; - userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord }, select); + userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord }, {}, select); if(!userGuild) return false; } @@ -157,14 +158,14 @@ export async function settleGuildWeekly() { let active = false; let job = 0; - if(activeWeekly > 100) { + if(activeWeekly > ARMY.ARMY_WEEKHONOUR_LIMIT) { activeMemberCnt ++; active = true; } if(auth == GUILD_AUTH.LEADER) { job = GUILD_JOB.DAJIANGJUN; - } else if (activeWeekly <= 100) { + } else if (activeWeekly <= ARMY.ARMY_WEEKHONOUR_LIMIT) { job = GUILD_JOB.SHIBING; } else { otherMemberNum++; diff --git a/shared/db/Guild.ts b/shared/db/Guild.ts index 935912c52..46093d33c 100644 --- a/shared/db/Guild.ts +++ b/shared/db/Guild.ts @@ -145,7 +145,7 @@ export default class Guild extends BaseModel { return result; } - public static async updateInfo(code: string, update: GuildUpdateParam, incParam?: { managerCnt?: number, fund?: number }, select?: string) { + public static async updateInfo(code: string, update: GuildUpdateParam, incParam?: { managerCnt?: number, fund?: number, activeDaily?: number, activeWeekly?: number }, select?: string) { const result: GuildType = await GuildModel.findOneAndUpdate({ code }, { $set: update, $inc: incParam }, { new: true }).select(select).lean(); return result; } diff --git a/shared/db/UserGuild.ts b/shared/db/UserGuild.ts index e2e536593..036b8257f 100644 --- a/shared/db/UserGuild.ts +++ b/shared/db/UserGuild.ts @@ -122,8 +122,8 @@ export default class UserGuild extends BaseModel { return result; } - public static async updateInfo(roleId: string, update: UserGuildUpdateParam, select?: string) { - const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON }, { $set: update }, { new: true }).select(select).lean(); + public static async updateInfo(roleId: string, update: UserGuildUpdateParam, incParam?: { activeDaily?: number, activeWeekly?: number, trainCount?: number }, select?: string) { + const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON }, { $set: update, $inc: incParam }, { new: true }).select(select).lean(); return result; } diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index d15a5efc8..3b1ca4677 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -43,6 +43,10 @@ export const ARMY = { ARMY_DEVELOPMENT_SPEED: 30, // 碎片研发单次加速时间(分钟) ARMY_DEVELOPMENT_SPEEDCOST: 50, // 单次助力加速消耗的元宝 ARMY_DEVELOPMENT_SPEEDTMES: 10, // 单个碎片可助力加速的最大次数 + ARMY_TRAIN_FREETIMES: 2, // 练兵场每日挑战次数 + ARMY_TRAIN_BUYTIMES: 2, // 练兵场每日可购买次数 + ARMY_TRAIN_TIMESCOST: 20, // 练兵场购买次数每日 + ARMY_WEEKHONOUR_LIMIT: 1000, // 军团成员参与职位排名周功勋下限(包含) }; export const TREASURE = { CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数