From ebf4158ea26594d20a481c753d106a8f96460f89 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 12 Oct 2022 19:31:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=A2=E8=B4=AD=EF=BC=9A=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=AE=9A=E6=97=B6=E5=99=A8=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/gm/handler/gmHandler.ts | 4 ++++ .../servers/systimer/remote/systimerRemote.ts | 10 +++++++- .../app/services/activity/groupShopService.ts | 24 ++++++++++--------- game-server/app/services/timeTaskService.ts | 3 ++- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index 23a784f78..bc79e0c8d 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -131,6 +131,10 @@ export class GmHandler { if(timeLimitRanks.length > 0) { pinus.app.rpc.systimer.systimerRemote.updateTimeLimitRank.broadcast(timeLimitRanks); } + let groupShops = activities.filter(cur => cur.type == ACTIVITY_TYPE.GROUP_SHOP); + if(groupShops.length > 0) { + pinus.app.rpc.systimer.systimerRemote.initSumSchedule.broadcast(); + } return resResult(STATUS.SUCCESS, { activity: activities diff --git a/game-server/app/servers/systimer/remote/systimerRemote.ts b/game-server/app/servers/systimer/remote/systimerRemote.ts index 2a6c334bc..c9f7082b1 100644 --- a/game-server/app/servers/systimer/remote/systimerRemote.ts +++ b/game-server/app/servers/systimer/remote/systimerRemote.ts @@ -1,5 +1,5 @@ import { Application, ChannelService } from 'pinus'; -import { resetPvpSeasonTime, guildActivityStart, gateActivityEnd, cityActivityEnd, raceActivityEnd, guildActivitySchedule, auctionSchedule, initMaintenance, stopMaintenance, initAutoCreateServer, addMailsToSchedule, updateTimeLimitRank, setLadderCountDown, cancelLadderCountDown } from '../../../services/timeTaskService'; +import { resetPvpSeasonTime, guildActivityStart, gateActivityEnd, cityActivityEnd, raceActivityEnd, guildActivitySchedule, auctionSchedule, initMaintenance, stopMaintenance, initAutoCreateServer, addMailsToSchedule, updateTimeLimitRank, setLadderCountDown, cancelLadderCountDown, initSumSchedule } from '../../../services/timeTaskService'; import PvpDefenseType from '../../../db/PvpDefense'; import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity'; import { reloadResources } from '../../../pubUtils/data'; @@ -201,6 +201,14 @@ export class SystimerRemote { } } + public async initSumSchedule() { + try { + await initSumSchedule(); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } + public async setLadderCountDown(battleCode: string, time: number, status: LADDER_STATUS) { try { await setLadderCountDown(battleCode, time, status); diff --git a/game-server/app/services/activity/groupShopService.ts b/game-server/app/services/activity/groupShopService.ts index 601d26ec4..8fbdfcd1d 100644 --- a/game-server/app/services/activity/groupShopService.ts +++ b/game-server/app/services/activity/groupShopService.ts @@ -4,6 +4,7 @@ import { ActivityGroupShopRecModel } from "../../db/ActivityGroupShopRec"; import { ActivityGroupShopRefundModel, RefundRec } from "../../db/ActivityGroupShopRefund"; import { ActivityGroupShopUserRecModel } from "../../db/ActivityGroupShopUserRec"; import { GroupShopData } from "../../domain/activityField/groupShopField"; +import { gameData } from "../../pubUtils/data"; import { RewardInter } from "../../pubUtils/interface"; import { sendMailByContent } from "../mailService"; import { sendMessageToGroupShopWithSuc } from "../pushService"; @@ -62,6 +63,7 @@ export async function getGroupShopTimers(activity: ActivityModelType) { } export async function setGroupShopToSetSum(arr: { activityId: number, itemId: number, sum: number }[]) { + console.log('###### setGroupShopToSetSum', JSON.stringify(arr)); for(let { activityId, itemId, sum } of arr) { let serverRecord = await ActivityGroupShopRecModel.setSum(activityId, itemId, sum); if(serverRecord) { @@ -89,24 +91,24 @@ export async function refundGroupShop(isDebug = false) { if(!isDebug && playerData.endTime >= Date.now()) continue; let items = playerData.items||[]; + let refundRecs: RefundRec[] = []; for(let item of items) { + let curDiscount = item.getCurDiscount(); let playerRecords = await ActivityGroupShopUserRecModel.findByPrice(activityData.activityId, item.itemId, item.getCurDiscount().price); for(let { roleId, records } of playerRecords) { + let rewards: {id: number, count: number}[] = [], sumGold = 0; for(let { price, buyCnt } of records) { - if(price <= item.getCurDiscount().price) continue; - let diff = (price - item.getCurDiscount().price) * buyCnt; - - if(!recs.has(roleId)) recs.set(roleId, []); - recs.get(roleId).push({ itemId: item.itemId, diff }); + if(price <= curDiscount.price) continue; + let diff = (price - curDiscount.price) * buyCnt; + rewards.push(getGoldObject(diff)); + sumGold += diff; + refundRecs.push({ roleId, itemId: item.itemId, diff }); } + let itemName = gameData.goods.get(item.id)?.name?? `${item.id}`; + let resultDiscount = curDiscount.discount; + await sendMailByContent(MAIL_TYPE.GROUP_SHOP_REFUND, roleId, { goods: rewards, params: [itemName, `${resultDiscount}`, `${sumGold}`] }); } } - let refundRecs: RefundRec[] = []; - for(let [ roleId, arr ] of recs) { - let reward = arr.map(({ diff }) => getGoldObject(diff)); - await sendMailByContent(MAIL_TYPE.GROUP_SHOP_REFUND, roleId, { goods: reward }); - refundRecs.push(...arr.map(cur => ({ roleId, ...cur }))); - } await ActivityGroupShopRefundModel.refund(activityData.activityId, refundRecs); } } \ No newline at end of file diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index b38f3cd52..6c21902b1 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -810,12 +810,13 @@ async function initGroupShopSchedule() { }); } -async function initSumSchedule() { +export async function initSumSchedule() { let activities = await ActivityModel.findActivityByType(ACTIVITY_TYPE.GROUP_SHOP); let scheduleMap = new Map(); // 时间 => data for(let activity of activities) { let timers = await getGroupShopTimers(activity); for(let { time, itemId, sum } of timers) { + if(time < Date.now()) continue; if(!scheduleMap.has(time)) { scheduleMap.set(time, []); }