后台:修改更新活动

This commit is contained in:
luying
2022-07-30 17:21:31 +08:00
parent f38c8b0fc8
commit 347c2ce7ed
10 changed files with 207 additions and 185 deletions

View File

@@ -2,14 +2,10 @@ import { Application, BackendSession, pinus } from 'pinus';
import { getRandSingleEelm, resResult } from '../../../pubUtils/util';
import { STATUS } from '../../../consts/statusCode';
import { GMMailModel, GMMailType } from '../../../db/GMMail';
import { delGuildActivityRank } from '../../../services/redisService';
import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, PUSH_ROUTE, SURVEY_SELECT } from '../../../consts';
import { checkActivityEditable, checkActivityGroupType, checkActivityGroupTypeWithId } from '../../../services/activity/activityService';
import { ActivityModel } from '../../../db/Activity';
import { ActivityGroupModel } from '../../../db/ActivityGroup';
import { ActivityGroupTypeModel } from '../../../db/ActivityGroupType';
import { GuildActivityCityModel } from '../../../db/GuildActivityCity';
import { GuildActivityRecordModel } from '../../../db/GuildActivityRec';
import { getTimeFunM, nowSeconds } from '../../../pubUtils/timeUtil';
import moment = require('moment');
import { sendUngotDividend } from '../../../services/auctionService';
@@ -20,7 +16,6 @@ import { SurveyModel, SurveyUpdate } from '../../../db/Survery';
import { getSurvey } from '../../../services/gmService';
import { sendMessageToAllWithSuc } from '../../../services/pushService';
import { sendMailByContent, sendMailsByGmMail } from '../../../services/mailService';
import { GuildActivityCityDeclareModel } from '../../../db/GuildActivityCityDeclare';
let timer: NodeJS.Timer;
export default function (app: Application) {
return new GmHandler(app);
@@ -122,35 +117,17 @@ export class GmHandler {
}
}
async updateActivity(msg: { activityId: number|string, groupId: number, beginTime: number, endTime: number, type: number, data: string, timeType: number, days: number, delayDay: number, interval: number, name: string, hideDayByServer: number, effectDay: number }, session: BackendSession) {
const { activityId, groupId, beginTime, endTime, type, data, timeType = 3, days = 0, delayDay = 0, interval = 0, name = '', hideDayByServer = 0, effectDay = 0 } = msg;
const uid = session.get('uid');
if (!type || !data) {
return resResult(STATUS.WRONG_PARMS);
}
let aids: number[] = [];
if (typeof activityId == 'number') {
aids.push(activityId);
} else {
activityId.split(',').forEach(aidStr => {
aids.push(parseInt(aidStr));
});
}
async updateActivity(msg: { aids: number[] }, session: BackendSession) {
let { aids }= msg;
let activities = await ActivityModel.findActivityByIds(aids);
// let checkTimeResult = await checkActivityEditable(activities);
// if(!checkTimeResult) return resResult(STATUS.GM_CAN_NOT_EDIT_ACT);
let checkGroup = await checkActivityGroupTypeWithId(groupId, activities);
if(!checkGroup) return resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE);
activities = await ActivityModel.addActivity(aids, groupId, beginTime ? new Date(beginTime) : undefined, endTime ? new Date(endTime) : undefined, type, data, timeType, days, delayDay, interval, name, hideDayByServer, effectDay, uid);
let activityServers = pinus.app.getServersByType('activity');
for(let server of activityServers) {
pinus.app.rpc.activity.activityRemote.updateActivities.toServer(server.id, activities.map(activity => new ActivityInRemote(activity)));
}
if(type == ACTIVITY_TYPE.TIME_LIMIT_RANK) {
pinus.app.rpc.systimer.systimerRemote.updateTimeLimitRank.broadcast(activities);
let timeLimitRanks = activities.filter(cur => cur.type == ACTIVITY_TYPE.TIME_LIMIT_RANK);
if(timeLimitRanks.length > 0) {
pinus.app.rpc.systimer.systimerRemote.updateTimeLimitRank.broadcast(timeLimitRanks);
}
return resResult(STATUS.SUCCESS, {
@@ -158,31 +135,8 @@ export class GmHandler {
});
}
async switchActivity(msg: { activityId: number, isEnable: boolean }, session: BackendSession) {
const { activityId, isEnable } = msg;
const uid = session.get('uid');
let activity = await ActivityModel.findActivity(activityId);
if(!activity) return resResult(STATUS.WRONG_PARMS);
activity = await ActivityModel.setEnable(activityId, isEnable, uid);
let activityServers = pinus.app.getServersByType('activity');
for(let server of activityServers) {
pinus.app.rpc.activity.activityRemote.updateActivities.toServer(server.id, [new ActivityInRemote(activity)]);
}
return resResult(STATUS.SUCCESS, { activity });
}
async deleteActivity(msg: { activityId: number}, session: BackendSession) {
const { activityId } = msg;
const uid = session.get('uid');
const result = await ActivityModel.deleteActivity(activityId, uid);
if (!result) {
return resResult(STATUS.ACTIVITY_MISSING);
}
await ActivityGroupModel.pullByActivityIds([activityId]);
let activityServers = pinus.app.getServersByType('activity');
for(let server of activityServers) {
pinus.app.rpc.activity.activityRemote.deleteActivities.toServer(server.id, [activityId]);
@@ -191,97 +145,17 @@ export class GmHandler {
return resResult(STATUS.SUCCESS);
}
async updateActivityGroup(msg: { groupId: number, groupName: string, serverIds: number[], activities: number[], type: number }, session: BackendSession) {
async updateActivityGroup(msg: { groupId: number, serverIds: number[], activityIds: number[] }, session: BackendSession) {
const uid = session.get('uid');
let { groupId, groupName, serverIds, activities, type } = msg;
let groupTypeObj = await ActivityGroupTypeModel.findByGroupType(type);
if(!groupTypeObj) return resResult(STATUS.GM_ACTIVITY_GROUP_TYPE_NOT_FOUND);
{
let result = await this.saveActivitiesToGroup(groupId, type, activities, uid);
if(result.code != 0) return result;
}
{
let result = await this.saveGroupToServer(groupId, serverIds, uid);
if(result.code != 0) return result;
}
await ActivityGroupModel.updateGroup(groupId, {groupName, type}, uid);
return resResult(STATUS.SUCCESS);
}
async saveGroupToServer(groupId: number, serverIds: number[], uid: number) {
// await ServerlistModel.pullByGroupId(groupId);
// let servers = await ServerlistModel.findServerByIds(serverIds);
// for(let server of servers) {
// let pushArr: number[] = [], pullArr: number[] = [];
// let activityGroupId = server.activityGroupId||[];
// if(!activityGroupId.includes(groupId)) {
// pushArr.push(groupId);
// }
// await ServerlistModel.updateActivityGroup(server._id, pushArr, pullArr);
// }
await ActivityGroupModel.updateServerData(groupId, serverIds, uid);
let { groupId, serverIds, activityIds } = msg;
let activityServers = pinus.app.getServersByType('activity');
for(let server of activityServers) {
pinus.app.rpc.activity.activityRemote.saveActivitiesToGroup.toServer(server.id, groupId, activityIds);
pinus.app.rpc.activity.activityRemote.saveGroupToServer.toServer(server.id, groupId, serverIds);
}
return resResult(STATUS.SUCCESS);
}
/**
* 选择活动组内的活动
*/
async saveActivitiesToGroup(groupId: number, groupType: number, activityIds: number[], uid: number) {
let activities = await ActivityModel.findActivityByIds(activityIds);
let checkResult = await checkActivityGroupType(groupType, activities);
if(!checkResult) return resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE);
await ActivityGroupModel.setActivitiesToGroupData(groupId, activityIds, uid);
let activityServers = pinus.app.getServersByType('activity');
for(let server of activityServers) {
pinus.app.rpc.activity.activityRemote.saveActivitiesToGroup.toServer(server.id, groupId, activityIds);
}
return resResult(STATUS.SUCCESS);
}
async saveSingleActivityToGroup(msg: { groupId: number, index: number, activityId: number }, session: BackendSession) {
const { groupId, index, activityId } = msg;
const uid = session.get('uid');
let activity = await ActivityModel.findActivity(activityId);
if(!activity) return resResult(STATUS.ACTIVITY_MISSING);
let checkResult = await checkActivityGroupTypeWithId(groupId, [activity]);
if(checkResult) return checkResult;
let activityGroup = await ActivityGroupModel.findGroupData(groupId);
if(!activityGroup) return resResult(STATUS.GM_ACTIVITY_GROUP_NOT_FOUND);
if(activityGroup.type != 0) {
let activityGroupType = await ActivityGroupTypeModel.findByGroupType(activityGroup.type);
if(!activityGroupType) return resResult(STATUS.GM_ACTIVITY_GROUP_TYPE_NOT_FOUND);
let dic = activityGroupType.activityTypes;
let curDic = dic.find(cur => cur.index == index);
// console.log(dic, curDic)
if(curDic.activityType != activity.type) return resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE)
}
let activityIds = activityGroup.activities||[];
if(activityIds.indexOf(activityId) == -1) activityIds.push(activityId);
await ActivityGroupModel.setActivitiesToGroupData(groupId, activityIds, uid);
let activityServers = pinus.app.getServersByType('activity');
for(let server of activityServers) {
pinus.app.rpc.activity.activityRemote.saveActivitiesToGroup.toServer(server.id, groupId, activityIds);
}
return resResult(STATUS.SUCCESS)
}
/**
* 开启军团活动到拍卖行debug
* @param msg

View File

@@ -44,6 +44,7 @@ import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from '../pushServ
import { UserOrderModelType } from '../../db/UserOrder';
import { isArray } from 'underscore';
import { getGuideGachaData } from './gachaService';
import { getPopNoticeData } from './popNoticeService';
/**
* 获取活动数据
@@ -222,6 +223,11 @@ export async function getActivity(serverId: number, roleId: string, guildCode: s
}
case ACTIVITY_TYPE.SHOP:
break
case ACTIVITY_TYPE.POP_NOTICE:
{
activityData = await getPopNoticeData(serverId, activityId, roleId);
break
}
default: {
console.log('未知活动类型.........', activityType)
break;
@@ -358,35 +364,6 @@ export async function checkActivityEditable(activities: ActivityModelType[]) {
return true;
}
export async function checkActivityGroupTypeWithId(groupId: number, activities: ActivityModelType[]) {
let activityGroup = await ActivityGroupModel.findGroupData(groupId);
if(!activityGroup) return false;
if(activityGroup.type != 0) {
return await checkActivityGroupType(activityGroup.type, activities);
}
return true
}
export async function checkActivityGroupType(groupType: number, activities: ActivityModelType[]) {
if(groupType != 0) {
let activityGroupType = await ActivityGroupTypeModel.findByGroupType(groupType);
if(!activityGroupType) return false;
let dic = activityGroupType.activityTypes;
for(let { type } of activities) {
let index = dic.findIndex(cur => cur.activityType == type);
if(index == -1) {
return false;
}
}
}
return true
}
/**
* 达成任务可活动活动积分
* @param type 任务类型,主线、每日、成就
@@ -401,7 +378,6 @@ export async function addActvityTaskPoint(type: number, id: number, session: Bac
let activityTaskPoint = await ActivityTaskPointModel.findData(type, id);
let result: pushActivityInter[] = [];
for (let { activityId, activityType, point } of activityTaskPoint) {
console.log('##### activityTaskPoint:', activityId, activityType, point)
if(activityType == ACTIVITY_TYPE.NEW_HERO_GIFTS) { // 新武将活动
let totalPoint = await newHeroGiftPoint(serverId, activityId, roleId, point);
result.push({ activityId, activityType, param: { totalPoint } });

View File

@@ -858,10 +858,10 @@ export function checkRouteParam(route: string, msg: any) {
}
case "gm.gmHandler.updateActivityGroup":
{
let { groupId, groupName, serverIds, activities, type } = msg;
if(!checkNaturalNumbers(groupId, type)) return false;
let { groupId, groupName, serverIds, activityIds, groupType } = msg;
if(!checkNaturalNumbers(groupId, groupType)) return false;
if(!checkNaturalStrings(groupName)) return false;
if(!checkNumberArray(serverIds, activities)) return false;
if(!checkNumberArray(serverIds, activityIds)) return false;
break;
}
case "gm.gmHandler.saveSingleActivityToGroup":