团购:后台配置定时器以及邮件

This commit is contained in:
luying
2022-10-12 19:31:32 +08:00
parent c0bc6fdf15
commit ebf4158ea2
4 changed files with 28 additions and 13 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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<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(time < Date.now()) continue;
if(!scheduleMap.has(time)) {
scheduleMap.set(time, []);
}