定时器

This commit is contained in:
luying
2022-10-09 19:11:29 +08:00
parent 2d3a1c7c30
commit e9170e61e1
6 changed files with 101 additions and 11 deletions
@@ -1,7 +1,10 @@
import { GROUP_SHOP_PRICE_STATUS } from "../../consts";
import { ACTIVITY_TYPE, GROUP_SHOP_PRICE_STATUS, PUSH_ROUTE } from "../../consts";
import { ActivityModel, ActivityModelType } from "../../db/Activity";
import { ActivityGroupShopRecModel } from "../../db/ActivityGroupShopRec";
import { ActivityGroupShopUserRecModel } from "../../db/ActivityGroupShopUserRec";
import { GroupShopData } from "../../domain/activityField/groupShopField";
import { RewardInter } from "../../pubUtils/interface";
import { sendMessageToGroupShopWithSuc } from "../pushService";
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
import { getActivityById } from "./activityService";
@@ -38,4 +41,48 @@ export function getGroupShopPriceStatus(clientPrice: number, price: number) {
if(clientPrice == price) return GROUP_SHOP_PRICE_STATUS.NORMAL;
if(clientPrice < price) return GROUP_SHOP_PRICE_STATUS.NOT_ENOUGH;
return GROUP_SHOP_PRICE_STATUS.OVER;
}
export async function getGroupShopServerData(activityData: ActivityModelType) {
let playerData = new GroupShopData(activityData, 0, 0);
let serverRecords = await ActivityGroupShopRecModel.findByActivity(activityData.activityId);
playerData.setRecords(serverRecords);
return playerData;
}
export async function getGroupShopTimers(activity: ActivityModelType) {
if(!activity) return [];
let playerData = await getGroupShopServerData(activity);
return playerData?.timer||[];
}
export async function setGroupShopToSetSum(arr: { activityId: number, itemId: number, sum: number }[]) {
for(let { activityId, itemId, sum } of arr) {
let serverRecord = await ActivityGroupShopRecModel.setSum(activityId, itemId, sum);
if(serverRecord) {
let activityData = await getActivityById(activityId);
let playerData = new GroupShopData(activityData, 0, 0);
playerData.setRecords([serverRecord]);
let item = playerData.findItemById(itemId);
let nextDiscount = item.getCurDiscount();
// 推送频道
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId, id: itemId, curDiscount: nextDiscount });
}
}
}
export async function refundGroupShop() {
let activities = await ActivityModel.findActivityByType(ACTIVITY_TYPE.GROUP_SHOP);
let recs = new Map<string, { activityId: number, itemId: number, reward: RewardInter[] }[]>();
for(let activityData of activities) {
let playerData = await getGroupShopServerData(activityData);
let items = playerData.items||[];
for(let item of items) {
let playerRecords = await ActivityGroupShopUserRecModel.findByPrice(activityData.activityId, item.id, item.getCurDiscount().price);
}
}
}
+35 -4
View File
@@ -21,7 +21,6 @@ import { LADDER, PVP } from '../pubUtils/dicParam';
import { fetch37Words } from './sdkService';
import { GMMailModel, GMMailType } from '../db/GMMail';
import { Maintenance, ServerlistModel, ServerlistType } from '../db/Serverlist';
import { getWorldChannelSid } from './chatService';
import { createMarqueeMsg, pushMarqueeMsg } from './sysChatService';
import { RegionModel, RegionType } from '../db/Region';
import { CreateServerParam } from '../domain/backEndField/params';
@@ -32,9 +31,8 @@ import { ServerMailModel, ServerMailType } from '../db/ServerMail';
import { ActivityModel, ActivityModelType } from '../db/Activity';
import { TimeLimitRankData } from '../domain/activityField/timeLimitRankField';
import { sendRankMail, takeSnapshot } from './activity/timeLimitRankService';
import { getActivitiesByType } from './activity/activityService';
import { ActivityGroupModel } from '../db/ActivityGroup';
import { sendMessageToServer } from './pushService';
import { sendMessageToGroupShopWithSuc, sendMessageToServer } from './pushService';
import { resResult } from '../pubUtils/util';
import { checkPopUpConditionWhenGuildActivityEnd } from './activity/popUpShopService';
import { pushRefreshTime } from './connectorService';
@@ -42,6 +40,7 @@ import { sendUnReceivedActivityDailyCoin } from './activity/dailyCoinService';
import { ladderTimeout, ladderTimeWillout, sendLadderDailyReward } from './ladderService';
import { LadderMatchRecModel } from '../db/LadderMatchRec';
import { LadderMatchModel } from '../db/LadderMatch';
import { getGroupShopTimers, refundGroupShop, setGroupShopToSetSum } from './activity/groupShopService';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
@@ -99,6 +98,9 @@ export async function init() {
// 名将擂台每日奖励
await ladderDailyReward();
// 团购定时器
initGroupShopSchedule();
}
// 每日刷新
@@ -798,4 +800,33 @@ async function ladderDailyReward() {
}
await LadderMatchRecModel.timeoutMany(battleCodes);
}
// —————————————— 名将擂台 end —————————————— //
// —————————————— 名将擂台 end —————————————— //
// —————————————— 团购定时器 start —————————————— //
async function initGroupShopSchedule() {
let activities = await ActivityModel.findActivityByType(ACTIVITY_TYPE.GROUP_SHOP);
let scheduleMap = new Map<number, { activityId: number, itemId: number, sum: number }[]>(); // 时间 => data
for(let activity of activities) {
let timers = await getGroupShopTimers(activity);
for(let { time, itemId, sum } of timers) {
if(!scheduleMap.has(time)) {
scheduleMap.set(time, []);
}
scheduleMap.get(time).push({ activityId: activity.activityId, itemId, sum });
}
}
for(let [time, arr] of scheduleMap) {
if(scheduledJobs[`groupShopSetSum${time}`]) {
scheduledJobs[`groupShopSetSum${time}`].cancel();
}
scheduleJob(`groupShopSetSum${time}`, time, async () => {
await setGroupShopToSetSum(arr);
});
}
scheduleJob('groupShopRefund', '0 30 5 * * ?', refundGroupShop);
}
// —————————————— 团购定时器 end —————————————— //