✨ feat(37需求): 推送添加开关
This commit is contained in:
@@ -216,11 +216,22 @@ export class ChatHandler {
|
|||||||
return resResult(STATUS.SUCCESS, accuseRec);
|
return resResult(STATUS.SUCCESS, accuseRec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async setPushMsgTrigger(msg: { isClosePush: boolean }, session: BackendSession) {
|
||||||
|
const roleId = session.get('roleId');
|
||||||
|
const { isClosePush } = msg;
|
||||||
|
|
||||||
|
let role = await RoleModel.setPushMsgOpen(roleId, isClosePush);
|
||||||
|
if(!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
|
return resResult(STATUS.SUCCESS, {
|
||||||
|
isClosePushPush: role.isClosePush
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 客户端推送消息
|
// 客户端推送消息
|
||||||
async debugPushMessage(msg: { uid: number }, session: BackendSession) {
|
async debugPushMessage(msg: { uid: number }, session: BackendSession) {
|
||||||
let dic = gameData.dicPushMessage.get(SDK_PUSH_MSG_TYPE.GUILD_ACTIVITY_START);
|
let dic = gameData.dicPushMessage.get(SDK_PUSH_MSG_TYPE.GUILD_ACTIVITY_START);
|
||||||
if(!dic) return resResult(STATUS.WRONG_PARMS);
|
if(!dic) return resResult(STATUS.WRONG_PARMS);
|
||||||
let result = await pushMsg37(Date.now(), dic, SDK_PUSH_TARGET_TYPE.SINGLE, `${msg.uid}`);
|
let result = await pushMsg37(Date.now().toString(), dic, SDK_PUSH_TARGET_TYPE.SINGLE, `${msg.uid}`);
|
||||||
|
|
||||||
// await pushClientMsg(SDK_PUSH_MSG_TYPE.AFK_ATTENTION);
|
// await pushClientMsg(SDK_PUSH_MSG_TYPE.AFK_ATTENTION);
|
||||||
|
|
||||||
|
|||||||
@@ -1994,6 +1994,11 @@ export function checkRouteParam(route: string, msg: any) {
|
|||||||
if(!isDevelopEnv() && !checkNaturalNumbers(msg.id, msg.count)) return false;
|
if(!isDevelopEnv() && !checkNaturalNumbers(msg.id, msg.count)) return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "chat.chatHandler.setPushMsgTrigger":
|
||||||
|
{
|
||||||
|
if(!isBoolean(msg.isClosePush)) return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'activity.activityHandler.debugActivityMemory':
|
case 'activity.activityHandler.debugActivityMemory':
|
||||||
case 'activity.popUpShopHandler.debugPushPopUpShop':
|
case 'activity.popUpShopHandler.debugPushPopUpShop':
|
||||||
case 'activity.popUpShopHandler.debugPushPopUpInterval':
|
case 'activity.popUpShopHandler.debugPushPopUpInterval':
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { pushMsg37 } from "./sdkService";
|
|||||||
import { RoleModel, RoleType } from "../db/Role";
|
import { RoleModel, RoleType } from "../db/Role";
|
||||||
import { nowSeconds } from "../pubUtils/timeUtil";
|
import { nowSeconds } from "../pubUtils/timeUtil";
|
||||||
import { GVGLeagueModel } from "../db/GVGLeague";
|
import { GVGLeagueModel } from "../db/GVGLeague";
|
||||||
|
import { resolve } from "bluebird";
|
||||||
|
|
||||||
export async function sendMessageToAllWithSuc(route: string, data: any, filterCb?: ({ lv, topLineupCe }) => boolean) {
|
export async function sendMessageToAllWithSuc(route: string, data: any, filterCb?: ({ lv, topLineupCe }) => boolean) {
|
||||||
await sendMessageToAll(route, resResult(STATUS.SUCCESS, data), filterCb);
|
await sendMessageToAll(route, resResult(STATUS.SUCCESS, data), filterCb);
|
||||||
@@ -281,12 +282,24 @@ export async function pushClientMsg(type: SDK_PUSH_MSG_TYPE) {
|
|||||||
if(!needPushMsg()) return;
|
if(!needPushMsg()) return;
|
||||||
let { target, audiences } = targetObj;
|
let { target, audiences } = targetObj;
|
||||||
let t = Date.now();
|
let t = Date.now();
|
||||||
for(let audience of audiences) {
|
for(let i = 0; i < audiences.length; i++) {
|
||||||
|
let audience = audiences[i];
|
||||||
// console.log(target, audience)
|
// console.log(target, audience)
|
||||||
if(audience) await pushMsg37(t, dicPushMessage, target, audience);
|
if(audience) {
|
||||||
|
await timeoutAsync(i * 10)
|
||||||
|
await pushMsg37(t.toString(), dicPushMessage, target, audience);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function timeoutAsync(time: number) {
|
||||||
|
return new Promise<void>((resolve) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve();
|
||||||
|
}, time);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
async function getPushTarget(playerType: number): Promise<{ target: SDK_PUSH_TARGET_TYPE, audiences: string[] }> {
|
async function getPushTarget(playerType: number): Promise<{ target: SDK_PUSH_TARGET_TYPE, audiences: string[] }> {
|
||||||
let uids: number[] = [];
|
let uids: number[] = [];
|
||||||
switch(playerType) {
|
switch(playerType) {
|
||||||
@@ -304,7 +317,7 @@ async function getPushTarget(playerType: number): Promise<{ target: SDK_PUSH_TAR
|
|||||||
if(len == 1) return { target: SDK_PUSH_TARGET_TYPE.SINGLE, audiences: [uids.join()] };
|
if(len == 1) return { target: SDK_PUSH_TARGET_TYPE.SINGLE, audiences: [uids.join()] };
|
||||||
let audiences: string[] = [];
|
let audiences: string[] = [];
|
||||||
for(let i = 0; i < Math.ceil(len/200); i++) {
|
for(let i = 0; i < Math.ceil(len/200); i++) {
|
||||||
audiences.push(uids.slice(i * 200, i * 200 + 200 - 1).join())
|
audiences.push(uids.slice(i * 200, i * 200 + 200).join())
|
||||||
}
|
}
|
||||||
return { target: SDK_PUSH_TARGET_TYPE.LIST, audiences };
|
return { target: SDK_PUSH_TARGET_TYPE.LIST, audiences };
|
||||||
}
|
}
|
||||||
@@ -318,7 +331,7 @@ async function getHasGuildPlayers() {
|
|||||||
if(players.length == 0) break;
|
if(players.length == 0) break;
|
||||||
createdAt = players[players.length -1].createdAt;
|
createdAt = players[players.length -1].createdAt;
|
||||||
players.forEach(player => {
|
players.forEach(player => {
|
||||||
if(player.userInfo && player.userInfo.channelInfo && player.quitTime != player.loginTime) uids.push(player.userInfo.channelInfo.uid);
|
if(player.userInfo && player.userInfo.channelInfo && player.quitTime != player.loginTime && !player.isClosePush) uids.push(player.userInfo.channelInfo.uid);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return uids;
|
return uids;
|
||||||
@@ -331,10 +344,10 @@ async function getHasLeaguePlayers() {
|
|||||||
for(let { members } of leagues) roleIds.push(...members.map(member => member.roleId));
|
for(let { members } of leagues) roleIds.push(...members.map(member => member.roleId));
|
||||||
let len = roleIds.length;
|
let len = roleIds.length;
|
||||||
for(let i = 0; i < Math.ceil(len/1000); i++) {
|
for(let i = 0; i < Math.ceil(len/1000); i++) {
|
||||||
let curRoleIds = roleIds.slice(i * 1000, i * 1000 + 1000 - 1);
|
let curRoleIds = roleIds.slice(i * 1000, i * 1000 + 1000);
|
||||||
let players = await RoleModel.findByRoleIds(curRoleIds, 'userInfo.channelInfo');
|
let players = await RoleModel.findByRoleIds(curRoleIds, 'userInfo.channelInfo isClosePush');
|
||||||
players.forEach(player => {
|
players.forEach(player => {
|
||||||
if(player.userInfo && player.userInfo.channelInfo && player.quitTime != player.loginTime) uids.push(player.userInfo.channelInfo.uid);
|
if(player.userInfo && player.userInfo.channelInfo && player.quitTime != player.loginTime && !player.isClosePush) uids.push(player.userInfo.channelInfo.uid);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return uids;
|
return uids;
|
||||||
@@ -349,7 +362,7 @@ async function getAfkPlayers() {
|
|||||||
if(players.length == 0) break;
|
if(players.length == 0) break;
|
||||||
createdAt = players[players.length -1].createdAt;
|
createdAt = players[players.length -1].createdAt;
|
||||||
players.forEach(player => {
|
players.forEach(player => {
|
||||||
if(player.userInfo && player.userInfo.channelInfo && player.quitTime != player.loginTime) uids.push(player.userInfo.channelInfo.uid);
|
if(player.userInfo && player.userInfo.channelInfo && player.quitTime != player.loginTime && !player.isClosePush) uids.push(player.userInfo.channelInfo.uid);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return uids;
|
return uids;
|
||||||
|
|||||||
@@ -167,8 +167,8 @@ export async function treatGuildName(content: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 37接口 消息推送
|
// 37接口 消息推送
|
||||||
export async function pushMsg37(time: number, dic: DicPushMessage, target: SDK_PUSH_TARGET_TYPE, audience: string) {
|
export async function pushMsg37(code: string, dic: DicPushMessage, target: SDK_PUSH_TARGET_TYPE, audience: string) {
|
||||||
let body = new PushMsg37Param(time);
|
let body = new PushMsg37Param(code);
|
||||||
body.setMsgInfo(dic, target, audience);
|
body.setMsgInfo(dic, target, audience);
|
||||||
return await request37PushMessage(SDK_37_ADDR.PUSH_MSG, body, SDK_37_CONST.PUSH_KEY);
|
return await request37PushMessage(SDK_37_ADDR.PUSH_MSG, body, SDK_37_CONST.PUSH_KEY);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ export enum FRIEND_SHIP_SELECT {
|
|||||||
GET_FRIEND_VALUE = 'friendValue friendLv'
|
GET_FRIEND_VALUE = 'friendValue friendLv'
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'jewels', 'artifacts', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName', 'isVip', 'createTime', 'ipLocation', 'activityItems', 'customerLink'];
|
export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'jewels', 'artifacts', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName', 'isVip', 'createTime', 'ipLocation', 'activityItems', 'customerLink', 'isClosePush'];
|
||||||
|
|
||||||
export enum SURVEY_SELECT {
|
export enum SURVEY_SELECT {
|
||||||
FIND = '-__v -_id -surveyName -roleIndex -reward -mailContent -receivedRole -createdAt -updatedAt'
|
FIND = '-__v -_id -surveyName -roleIndex -reward -mailContent -receivedRole -createdAt -updatedAt'
|
||||||
|
|||||||
+11
-3
@@ -348,6 +348,9 @@ export default class Role extends BaseModel {
|
|||||||
// 是否发送过推送
|
// 是否发送过推送
|
||||||
@prop({ required: false })
|
@prop({ required: false })
|
||||||
hasPushMsg: boolean;
|
hasPushMsg: boolean;
|
||||||
|
// 是否打开推送
|
||||||
|
@prop({ required: false })
|
||||||
|
isClosePush: boolean;
|
||||||
|
|
||||||
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
|
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
|
||||||
const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime').lean({ getters, virtuals });
|
const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime').lean({ getters, virtuals });
|
||||||
@@ -826,22 +829,27 @@ export default class Role extends BaseModel {
|
|||||||
|
|
||||||
public static async findHasGuildPlayers(createdAt?: Date) {
|
public static async findHasGuildPlayers(createdAt?: Date) {
|
||||||
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
|
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
|
||||||
let roles: RoleType[] = await RoleModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter, hasGuild: true }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime createdAt').lean();
|
let roles: RoleType[] = await RoleModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter, hasGuild: true }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async findAfkPlayers(createdAt?: Date) {
|
public static async findAfkPlayers(createdAt?: Date) {
|
||||||
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
|
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
|
||||||
let roles: RoleType[] = await RoleModel.find({ loginTime: { $lt: nowSeconds() - 48 * 60 * 60 }, lv: { $gte: 20 }, hasPushMsg: { $exists: false }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime createdAt').lean();
|
let roles: RoleType[] = await RoleModel.find({ loginTime: { $lt: nowSeconds() - 48 * 60 * 60 }, lv: { $gte: 20 }, hasPushMsg: { $exists: false }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
|
||||||
await RoleModel.updateMany({ _id: roles.map(cur => cur._id) }, { $set: { hasPushMsg: true } });
|
await RoleModel.updateMany({ _id: roles.map(cur => cur._id) }, { $set: { hasPushMsg: true } });
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async findActivePlayers(createdAt?: Date) {
|
public static async findActivePlayers(createdAt?: Date) {
|
||||||
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
|
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
|
||||||
let roles: RoleType[] = await RoleModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime createdAt').lean();
|
let roles: RoleType[] = await RoleModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async setPushMsgOpen(roleId: string, isClosePush: boolean) {
|
||||||
|
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $set: { isClosePush } }, { new: true }).select('-_id roleId isClosePush').lean();
|
||||||
|
return role;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RoleModel = getModelForClass(Role);
|
export const RoleModel = getModelForClass(Role);
|
||||||
|
|||||||
@@ -397,11 +397,11 @@ export class PushMsg37Param {
|
|||||||
source: number; // 推送来源表
|
source: number; // 推送来源表
|
||||||
type: string; // 推送内容
|
type: string; // 推送内容
|
||||||
|
|
||||||
constructor(time: number) {
|
constructor(code: string) {
|
||||||
this.notify_id = time.toString();
|
this.notify_id = code;
|
||||||
this.game_id = SDK_37_CONST.PUSH_GAME_ID;
|
this.game_id = SDK_37_CONST.PUSH_GAME_ID;
|
||||||
// this.c_game_id = SDK_37_CONST.FX_C_GAME_ID;
|
// this.c_game_id = SDK_37_CONST.FX_C_GAME_ID;
|
||||||
this.time = Math.floor(time/1000).toString();
|
this.time = Math.floor(Date.now()/1000).toString();
|
||||||
this.source = 0; // 0: 游戏内
|
this.source = 0; // 0: 游戏内
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user