Files
ZYZ/game-server/app/services/donateService.ts
2022-04-08 20:39:01 +08:00

74 lines
2.7 KiB
TypeScript

import { DonationModel } from '../db/Donation';
import { getZeroPoint, nowSeconds } from '../pubUtils/timeUtil';
import { GuildModel, GuildType } from '../db/Guild';
import { findWhere } from 'underscore';
import { GUILD_STRUCTURE } from '../consts/constModules/guildConst';
import { getGuildChannelSid } from './chatService';
import { pinus } from 'pinus';
import { lockData } from './redLockService';
import { ACTIVITY_TYPE, DATA_NAME } from '../consts';
import { gameData } from '../pubUtils/data';
import { shouldRefresh } from '../pubUtils/util';
import { getActivitiesByType } from './activity/activityService';
import { recordGuildFund } from './activity/timeLimitRankService';
import { pushGuildInfoUpdate } from './guildService';
/**
* 获得军团捐献,并检查是否刷新捐献数据
* @param code
* @param serverId
*/
export async function getDonation(code: string, guild: GuildType, serverId: number) {
let donation = await DonationModel.getDonation(code);
if (!donation) {
donation = await createDonation(code, guild, serverId);
}
if (donation.refTime < getZeroPoint()) {
let { lv } = guild.structure.find(cur => cur.id == GUILD_STRUCTURE.DONATE);
donation = await DonationModel.updateDonation(code, { donateFund:0, reports:[], refTime: nowSeconds(), donationLv: lv});
}
return donation;
}
/**
* 创建军团捐献信息
* @param code
* @param serverId
*/
export async function createDonation(code: string, guild: GuildType, serverId: number) {
let { lv } = guild.structure.find(cur => cur.id == GUILD_STRUCTURE.DONATE);
let donation = await DonationModel.createDonation(code, lv);
return donation;
}
// 增加资金
export async function addFund(code: string, serverId: number, fund: number) {
try {
let guild = await GuildModel.findByCode(code, serverId, 'lv todayFund refTodayFund');
let {lv, todayFund, refTodayFund} = guild;
if(!guild) return null
let dicStructure = gameData.centerBase.get(lv);
if(!dicStructure) return null
if(shouldRefresh(refTodayFund, new Date())) {
todayFund = 0;
refTodayFund = new Date();
}
if(todayFund + fund > dicStructure.maxFund) {
fund = dicStructure.maxFund - todayFund;
todayFund = dicStructure.maxFund;
} else {
todayFund += fund;
}
if(fund < 0) return null
guild = await GuildModel.updateInfo(code, { todayFund, refTodayFund }, { fund });
await pushGuildInfoUpdate(code, { fund: guild.fund });
await recordGuildFund(serverId, guild, fund);
return guild
} catch(e) {
return null
}
}