团购活动:定时退费
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import { ACTIVITY_TYPE, GROUP_SHOP_PRICE_STATUS, PUSH_ROUTE } from "../../consts";
|
||||
import { ACTIVITY_TYPE, GROUP_SHOP_PRICE_STATUS, MAIL_TYPE, PUSH_ROUTE } from "../../consts";
|
||||
import { ActivityModel, ActivityModelType } from "../../db/Activity";
|
||||
import { ActivityGroupShopRecModel } from "../../db/ActivityGroupShopRec";
|
||||
import { ActivityGroupShopRefundModel, RefundRec } from "../../db/ActivityGroupShopRefund";
|
||||
import { ActivityGroupShopUserRecModel } from "../../db/ActivityGroupShopUserRec";
|
||||
import { GroupShopData } from "../../domain/activityField/groupShopField";
|
||||
import { RewardInter } from "../../pubUtils/interface";
|
||||
import { sendMailByContent } from "../mailService";
|
||||
import { sendMessageToGroupShopWithSuc } from "../pushService";
|
||||
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
|
||||
import { getGoldObject } from "../role/rewardService";
|
||||
import { getActivityById } from "./activityService";
|
||||
|
||||
/**
|
||||
@@ -76,13 +79,33 @@ export async function setGroupShopToSetSum(arr: { activityId: number, itemId: nu
|
||||
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 hasRefund = await ActivityGroupShopRefundModel.check(activityData.activityId);
|
||||
if(!hasRefund) continue;
|
||||
|
||||
let recs = new Map<string, { itemId: number, diff: number }[]>();
|
||||
let playerData = await getGroupShopServerData(activityData);
|
||||
if(playerData.endTime >= Date.now()) continue;
|
||||
|
||||
let items = playerData.items||[];
|
||||
for(let item of items) {
|
||||
let playerRecords = await ActivityGroupShopUserRecModel.findByPrice(activityData.activityId, item.id, item.getCurDiscount().price);
|
||||
for(let { roleId, records } of playerRecords) {
|
||||
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.id, diff });
|
||||
}
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user