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'; /** * 获得军团捐献,并检查是否刷新捐献数据 * @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 }); let chatSid = await getGuildChannelSid(code); pinus.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, { fund: guild.fund }); await recordGuildFund(serverId, guild, fund); return guild } catch(e) { return null } }