返利:达到等级发返利邮件

This commit is contained in:
luying
2022-09-13 20:10:07 +08:00
parent a398684284
commit e2b79f6d4d
6 changed files with 84 additions and 4 deletions

View File

@@ -4,7 +4,7 @@ import Role, { RoleModel, RoleType, WarCount } from '../db/Role'
import { getLvByExp, getExpByLv, gameData, getDicApByLv } from '../pubUtils/data';
import { updateRoleOnlineInfo, updateUserInfo } from './redisService';
// import { switchOnFunc } from './funcSwitchService';
import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, HERO_SYSTEM_TYPE, PUSH_ROUTE } from '../consts';
import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, HERO_SYSTEM_TYPE, PUSH_ROUTE, REBATE_LV } from '../consts';
import { BackendSession, pinus } from 'pinus';
import { REDIS_KEY } from '../consts';
import { Rank } from './rankService';
@@ -20,6 +20,7 @@ import { calculateCeWithRole } from './playerCeService';
import { sendMessageToUserWithSuc } from './pushService';
import { ActionPointModel } from '../db/ActionPoint';
import { GK_MAIN, GK_MAINELITE } from '../pubUtils/dicParam';
import { rebateHistoryOrder } from './orderService';
export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kingExp: number = 0, session: BackendSession) {
const serverId = session.get('serverId');
@@ -51,7 +52,10 @@ export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kin
// await calculateCeWithRole(HERO_SYSTEM_TYPE.ROLE_LV, roleId, serverId, sid, { lv: newLv });
await updateRoleOnlineInfo(roleId, { lv: newLv });
// 达到等级返利
if(lv < REBATE_LV && newLv >= REBATE_LV) {
rebateHistoryOrder(roleId, role.userInfo?.uid);
}
}
let actordata: { lv: number, exp: number, getExp: number, mostExp: number }[] = [];
for (let i = lv; i <= newLv; i++) {

View File

@@ -1,5 +1,5 @@
import { UserOrderModel, UserOrderModelType } from '../db/UserOrder';
import { ACTIVITY_TYPE, DEBUG_PRICE, ORDER_STATE, PAY_TYPE, PUSH_ROUTE, REFUND_PRICE_TO_GOLD, STATUS, TASK_TYPE, TA_EVENT, TA_USERSET_TYPE } from '../consts';
import { ACTIVITY_TYPE, DEBUG_PRICE, MAIL_TYPE, ORDER_STATE, PAY_TYPE, PUSH_ROUTE, REBATE_RATIO, REFUND_PRICE_TO_GOLD, STATUS, TASK_TYPE, TA_EVENT, TA_USERSET_TYPE } from '../consts';
import { dicRMB } from '../pubUtils/dictionary/DicRMB';
import { makeYuanbaoShopReward } from './activity/yuanbaoService';
import { RoleModel } from '../db/Role';
@@ -34,6 +34,10 @@ import { sendMessageToUserWithSuc } from './pushService';
import { gameData } from '../pubUtils/data';
import { checkParamPrice } from '../pubUtils/sdkUtil';
import { checkShopCanBuyInOrder, makeShopOrder } from './shopService';
import { UserModel } from '../db/User';
import { HistoryOrderModel } from '../db/HistoryOrder';
import { sendMailByContent } from './mailService';
import { getGoldObject } from './role/rewardService';
export async function checkOrderCanBuy(roleId: string, serverId: number, activityData: ActivityModelType, productID: string, paramStr: string) {
let activityId = activityData.activityId;
@@ -349,4 +353,18 @@ export async function refundOrderFromRedisPub(message: string) {
await UserOrderModel.refund(order.roleId, order.localOrderID, message);
return true
}
export async function rebateHistoryOrder(roleId: string, uid: number) {
let user = await UserModel.findUserByUid(uid);
if(user) {
let historyOrder = await HistoryOrderModel.findByChannelId(user.channelId);
if(historyOrder && !historyOrder.isReceived) {
let totalPay = historyOrder.totalPay;
if(totalPay > 0) {
await sendMailByContent(MAIL_TYPE.REBATE, roleId, { goods: [getGoldObject(totalPay * REBATE_RATIO)] });
await HistoryOrderModel.receive(user.channelId, roleId);
}
}
}
}

View File

@@ -59,6 +59,7 @@ export enum MAIL_TYPE {
GUILD_DISSMISS = 29, // 军团解散
LADDER = 30, // 名将擂台
GUILD_MAIL = 31, // 军团邮件
REBATE = 32, // 返利邮件
};
export const SEND_NAME = '系统';

View File

@@ -1145,4 +1145,8 @@ export enum SYSTEM_OPEN_ID {
EXPEDITION = 36, // 远征
}
export const DEBUG_PRICE = 0.01;
export const DEBUG_PRICE = 0.01;
// 返利等级
export const REBATE_LV = 10;
export const REBATE_RATIO = 10;

46
shared/db/HistoryOrder.ts Normal file
View File

@@ -0,0 +1,46 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
/**
* 累计充值活动
*/
@index({ channelId: 1 })
export default class HistoryOrder extends BaseModel {
@prop({ required: true })
serverId: number; // 区号
@prop({ required: true })
channelId: string; // 37账号id
@prop({ required: true })
roleId: string; // 当时的玩家id
@prop({ required: true })
roleName: string; // 当时的玩家名
@prop({ required: true })
totalPay: number; // 总支付金额
@prop({ required: true })
isReceived: boolean; // 是否领取
@prop({ required: true })
receiveRoleId: string; // 领取的玩家id
public static async findByChannelId(channelId: string) {
let result: HistoryOrderModelType = await HistoryOrderModel.findOne({ channelId }).lean();
return result;
}
public static async receive(channelId: string, roleId: string) {
let result: HistoryOrderModelType = await HistoryOrderModel.findOneAndUpdate({ channelId }, { $set: { isReceived: true, roleId } }, { new: true }).lean();
return result;
}
}
export const HistoryOrderModel = getModelForClass(HistoryOrder);
export interface HistoryOrderModelType extends Pick<DocumentType<HistoryOrder>, keyof HistoryOrder> { }
export type HistoryOrderModelTypeParam = Partial<HistoryOrderModelType>; // 将所有字段变成可选项

View File

@@ -222,5 +222,12 @@
"sendName": "&",
"content": "%d",
"time": 720
},
{
"id": 32,
"title": "返利邮件",
"sendName": "&",
"content": "%d",
"time": 720
}
]