团购:后台配置定时器以及邮件
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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, []);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user