This commit is contained in:
luying
2022-04-11 20:32:08 +08:00
parent d4a103a6b1
commit c6ebb62c6a
14 changed files with 124 additions and 49 deletions

View File

@@ -4,7 +4,7 @@ import { STATUS } from '../../../consts/statusCode';
import { GMMailModel, GMMailType } from '../../../db/GMMail';
import { delGuildActivityRank, getRoleOnlineInfo } from '../../../services/redisService';
import { SendMailFun } from '../../../services/mailService';
import { GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, REF_CIRCLE_MAIL_TIME } from '../../../consts';
import { GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, PUSH_ROUTE, REF_CIRCLE_MAIL_TIME, SURVEY_SELECT } from '../../../consts';
import { checkActivityEditable, checkActivityGroupType, checkActivityGroupTypeWithId } from '../../../services/activity/activityService';
import { ActivityModel } from '../../../db/Activity';
import { ActivityGroupModel } from '../../../db/ActivityGroup';
@@ -17,6 +17,9 @@ import { sendUngotDividend } from '../../../services/auctionService';
import { taflush } from '../../../services/sdkService';
import { ActivityInRemote } from '../../../domain/activityField/activityField';
import { pushCurrentTime } from '../../../services/auctionService';
import { SurveyModel } from '../../../db/Survery';
import { getSurvey } from '../../../services/gmService';
import { sendMessageToAllWithSuc } from '../../../services/pushService';
let timer: NodeJS.Timer;
export default function (app: Application) {
return new GmHandler(app);
@@ -384,4 +387,24 @@ export class GmHandler {
pinus.app.rpc.systimer.systimerRemote.taflush.broadcast();
return resResult(STATUS.SUCCESS);
}
async updateSurvey(msg: { code: string, surveyId: string, beginTim: number, endTime: number, isEnable: boolean, surverLink: string, surveyName: string, roleIndex: number, goods: string, mailContent: string }, session: BackendSession) {
let reward = JSON.parse(msg.goods);
let result = await SurveyModel.updateSurvey(msg.code, {...msg, reward}, SURVEY_SELECT.FIND);
if(!result) return resResult(STATUS.WRONG_PARMS);
await sendMessageToAllWithSuc(PUSH_ROUTE.UPDATE_SURVEY, { survey: result });
return resResult(STATUS.SUCCESS);
}
async deleteSurvey(msg: { code: string }, session: BackendSession) {
let { code } = msg;
await SurveyModel.deleteSurvey(code);
await sendMessageToAllWithSuc(PUSH_ROUTE.DELETE_SURVEY, { code });
return resResult(STATUS.SUCCESS);
}
}

View File

@@ -43,7 +43,8 @@ import { SkinModel } from '../db/Skin';
import { getAp } from './actionPointService';
import { HeroParam } from '../domain/roleField/hero';
import { pick } from 'underscore';
import { sendMessageToServerWithSuc, sendMessageToUser, sendMessageToUserWithSuc } from './pushService';
import { sendMessageToAllWithSuc, sendMessageToServerWithSuc, sendMessageToUser, sendMessageToUserWithSuc } from './pushService';
import { getSurvey } from './gmService';
/**
* init: 初始的时候是否推送 true-推 false-不推
@@ -76,6 +77,7 @@ const modules = [
{ id: 23, type: 'guildActivity', init: false, refresh: true, guild: true },
{ id: 24, type: 'donate', init: false, refresh: true, guild: true },
{ id: 25, type: 'shop', init: false, refresh: true, guild: false },
{ id: 26, type: 'survey', init: false, refresh: false, guild: false },
]
export async function pushData(hasInit: boolean, role: RoleType, session: FrontendOrBackendSession, pushType: 'entry' | 'refresh' = 'entry') {
@@ -202,6 +204,9 @@ async function getModuleData(type: string, data: { role: RoleType, session: Fron
return getAllGuildActivityStatus();
case 'chapter':
return getMainChapter(role);
case 'survey':
console.log('******', role.roleId);
return await getSurvey(role.roleId);
default:
return null;
}
@@ -285,11 +290,8 @@ export async function everydayRefresh() {
}
async function pushRefreshTime() {
let servers = await getAllServers();
let todayZeroPoint = getZeroPoint();
for(let serverId of servers) {
await sendMessageToServerWithSuc(serverId, PUSH_ROUTE.REFRESH_TIME, { todayZeroPoint }, true);
}
await sendMessageToAllWithSuc(PUSH_ROUTE.REFRESH_TIME, { todayZeroPoint });
}
export async function kickUser(app: Application, uid: string, message = STATUS.LOGIN_ERR) {

View File

@@ -1,5 +1,5 @@
import Marquee, { MarqueeType, MarqueeModel } from "../db/Marquee";
import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, MARQUEE_SHOW_TYPE, MARQUEE_TIME_TYPE, REF_CIRCLE_MAIL_TIME, SERVER_STATUS } from "../consts";
import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, MARQUEE_SHOW_TYPE, MARQUEE_TIME_TYPE, REF_CIRCLE_MAIL_TIME, SERVER_STATUS, SURVEY_SELECT } from "../consts";
import { scheduleJob, scheduledJobs, Job } from 'node-schedule';
import { createMarqueeMsg as sysCreateMarqueeMsg, pushMarqueeMsg as sysPushMarqueeMsg } from './sysChatService';
import { GroupMessageType } from "../db/GroupMessage";
@@ -30,6 +30,7 @@ import { RoleType } from "../db/Role";
import { MonopolyData } from "../domain/activityField/monopolyField";
import { ActivityPopUpShopModel, ActivityPopUpShopModelType } from "../db/ActivityPopUpShop";
import { getActivitiesByType } from "./activity/activityService";
import { SurveyModel } from "../db/Survery";
// —————————————— 跑马灯 —————————————— //
// 初始
@@ -335,4 +336,13 @@ export async function getParamStr(activity: ActivityModelType, productID: string
break;
}
return JSON.stringify(param);
}
export async function getSurvey(roleId: string) {
let surveys = await SurveyModel.findEnableSurvey(SURVEY_SELECT.ENTRY);
return surveys.filter(cur => cur.receivedRole?.indexOf(roleId) == -1).map(cur => {
delete cur.receivedRole;
return cur;
});
}

View File

@@ -2,9 +2,29 @@ import { Channel, pinus } from "pinus";
import { CHANNEL_PREFIX, PUSH_BATCH, PUSH_INTERVAL, PUSH_ROUTE, STATUS } from "../consts";
import { resResult } from "../pubUtils/util";
import { getCityChannelSid, getGuildChannelSid, getWorldChannelSid, groupRoomId } from "./chatService";
import { getRoleOnlineInfo } from "./redisService";
import { getAllOnlineRoles, getRoleOnlineInfo } from "./redisService";
import { errlogger, infologger } from '../util/logger';
export async function sendMessageToAllWithSuc(route: string, data: any) {
await sendMessageToAll(route, resResult(STATUS.SUCCESS, data));
}
export async function sendMessageToAll(route: string, data: any) {
let allOnlineUsers = await getAllOnlineRoles();
let n = Math.ceil(allOnlineUsers.length / PUSH_BATCH); // 一共多少批
let i = -1;
let interval = setInterval(() => {
if (++i < n) {
let users = allOnlineUsers.slice(i * PUSH_BATCH, (i + 1) * PUSH_BATCH - 1);
let uids = users.map(cur => ({ uid: cur.roleId, sid: cur.sid }));
pinus.app.channelService.pushMessageByUids(route, data, uids);
} else {
clearInterval(interval);
}
}, PUSH_INTERVAL);
}
export async function sendMessageToServerWithSuc(serverId: number, route: string, data: any, isBatch = false) {
await sendMessageToServer(serverId, route, resResult(STATUS.SUCCESS, data), isBatch);
}

View File

@@ -289,9 +289,10 @@ export async function sendSurveyMail(code: string) {
let rec = await SurveyRecModel.findByCode(code);
if(!rec || rec.hasSentMail) return false;
let survey = await SurveyModel.findBySurveyId(rec.surveyId);
let survey = await SurveyModel.receive(rec.surveyId, rec.roleId);
if(!survey) return false;
await sendMailByContent(MAIL_TYPE.SEND_MAIL, rec.roleId, { goods: survey.reward, params: [survey.mailContent] });
await sendMessageToUserWithSuc(rec.roleId, PUSH_ROUTE.DELETE_SURVEY, { code: rec.code });
rec = await SurveyRecModel.send(rec.code);
}