diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index 268448e98..650f251e1 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -12,7 +12,7 @@ import { RewardInter } from '../../../pubUtils/interface'; import { MarqueeModel } from '../../../db/Marquee'; import { ServerlistModel } from '../../../db/Serverlist'; import { pushCurrentTime } from '../../../services/chatService'; -import { checkActivityEditable, checkActivityGroupType } from '../../../services/activity/activityService'; +import { checkActivityEditable, checkActivityGroupType, checkActivityGroupTypeWithId } from '../../../services/activity/activityService'; import { ActivityModel } from '../../../db/Activity'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; import { ActivityGroupTypeModel } from '../../../db/ActivityGroupType'; @@ -153,7 +153,7 @@ export class GmHandler { let activities = await ActivityModel.findActivityByIds(aids); let checkTimeResult = await checkActivityEditable(activities); if(!checkTimeResult) return resResult(STATUS.GM_CAN_NOT_EDIT_ACT); - let checkGroup = await checkActivityGroupType(groupId, activities); + 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, uid); @@ -184,9 +184,25 @@ export class GmHandler { return resResult(STATUS.SUCCESS); } - async saveGroupToServer(msg: { groupId: number, serverIds: number[] }, session: BackendSession) { - const { groupId, serverIds } = msg; + async updateActivityGroup(msg: { groupId: number, groupName: string, serverIds: number[], activities: number[], type: 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); @@ -211,12 +227,10 @@ export class GmHandler { /** * 选择活动组内的活动 */ - async saveActivitiesToGroup(msg: { groupId: number, activities: number[] }, session: BackendSession) { - const { groupId, activities: activityIds } = msg; - const uid = session.get('uid'); + async saveActivitiesToGroup(groupId: number, groupType: number, activityIds: number[], uid: number) { let activities = await ActivityModel.findActivityByIds(activityIds); - let checkResult = await checkActivityGroupType(groupId, activities); + let checkResult = await checkActivityGroupType(groupType, activities); if(!checkResult) return resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE); await ActivityGroupModel.setActivitiesToGroupData(groupId, activityIds, uid); @@ -225,7 +239,7 @@ export class GmHandler { for(let server of activityServers) { pinus.app.rpc.activity.activityRemote.saveActivitiesToGroup.toServer(server.id, groupId, activityIds); } - return resResult(STATUS.SUCCESS) + return resResult(STATUS.SUCCESS); } async saveSingleActivityToGroup(msg: { groupId: number, index: number, activityId: number }, session: BackendSession) { @@ -234,7 +248,7 @@ export class GmHandler { let activity = await ActivityModel.findActivity(activityId); if(!activity) return resResult(STATUS.ACTIVITY_MISSING); - let checkResult = await checkActivityGroupType(groupId, [activity]); + let checkResult = await checkActivityGroupTypeWithId(groupId, [activity]); if(checkResult) return checkResult; let activityGroup = await ActivityGroupModel.findGroupData(groupId); diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index 745b82eff..83c4e5e32 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -279,12 +279,22 @@ export async function checkActivityEditable(activities: ActivityModelType[]) { return true; } -export async function checkActivityGroupType(groupId: number, activities: ActivityModelType[]) { + +export async function checkActivityGroupTypeWithId(groupId: number, activities: ActivityModelType[]) { let activityGroup = await ActivityGroupModel.findGroupData(groupId); if(!activityGroup) return false; if(activityGroup.type != 0) { - let activityGroupType = await ActivityGroupTypeModel.findByGroupType(activityGroup.type); + 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) { diff --git a/gm-server/app/controller/activity.ts b/gm-server/app/controller/activity.ts index b2cd53c9b..130fd0f4a 100644 --- a/gm-server/app/controller/activity.ts +++ b/gm-server/app/controller/activity.ts @@ -4,11 +4,16 @@ export default class ActivityController extends Controller { public async getActivityList() { const { ctx } = this; - const { page, pageSize, type, groupId, current, activityId, sortField, sortOrder } = ctx.request.body; + const { page, pageSize, type, form: {groupId, current, activityId}, sortField, sortOrder } = ctx.request.body; ctx.body = await ctx.service.activity.getActivityList(page, pageSize, sortField, sortOrder, type, groupId, current, activityId); return } + public async getAllActivities() { + const { ctx } = this; + ctx.body = await ctx.service.activity.getAllActivities(); + } + public async updateActivity() { const { ctx } = this; const { activityId, groupId, beginTime, endTime, type, data } = ctx.request.body; @@ -28,11 +33,16 @@ export default class ActivityController extends Controller { public async getActivityGroupList() { const { ctx } = this; - const { page, pageSize, serverId, current, groupId } = ctx.request.body; + const { page, pageSize, form: { serverId, current, groupId} } = ctx.request.body; ctx.body = await ctx.service.activity.getActivityGroupList(page, pageSize, serverId, current, groupId); return } + public async getAllActivityGroups() { + const { ctx } = this; + ctx.body = await ctx.service.activity.getAllActivityGroups(); + } + public async getActivityGroupTypeList() { const { ctx } = this; const { page, pageSize, sortField, sortOrder, groupType, groupTypeName } = ctx.request.body; @@ -40,6 +50,11 @@ export default class ActivityController extends Controller { return } + public async getAllActivityGroupTypes() { + const { ctx } = this; + ctx.body = await ctx.service.activity.getAllActivityGroupTypes(); + } + public async updateActivityGroupType() { const { ctx } = this; const { groupType, groupTypeName, activityTypes } = ctx.request.body; @@ -54,13 +69,6 @@ export default class ActivityController extends Controller { return } - public async saveGroupTypeToActivityGroup() { - const { ctx } = this; - const { groupId, groupType } = ctx.request.body; - ctx.body = await ctx.service.activity.saveGroupTypeToActivityGroup(groupId, groupType); - return - } - public async getGroupDataById() { const { ctx } = this; const { groupId } = ctx.request.body; @@ -68,31 +76,10 @@ export default class ActivityController extends Controller { return } - public async updateActivityGroupName() { + public async updateActivityGroup() { const { ctx } = this; - const { groupId, groupName } = ctx.request.body; - ctx.body = await ctx.service.activity.updateActivityGroupName(groupId, groupName); - return - } - - public async saveActivitiesToGroup() { - const { ctx } = this; - const { groupId, activities } = ctx.request.body; - ctx.body = await ctx.service.activity.saveActivitiesToGroup(groupId, activities); - return - } - - public async saveSingleActivityToGroup() { - const { ctx } = this; - const { groupId, index, activityId } = ctx.request.body; - ctx.body = await ctx.service.activity.saveSingleActivityToGroup(groupId, index, activityId); - return - } - - public async saveGroupToServer() { - const { ctx } = this; - const { groupId, serverIds } = ctx.request.body; - ctx.body = await ctx.service.activity.saveGroupToServer(groupId, serverIds); + const { groupId, groupName, activities, serverIds, type } = ctx.request.body; + ctx.body = await ctx.service.activity.updateActivityGroup(groupId, groupName, activities, serverIds, type); return } diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index f84f42f2c..a51e40d01 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -86,19 +86,18 @@ export default (app: Application) => { router.post('/api/game/getaccuse', controller.game.getAccuse); router.post('/api/activity/getactivitylist', tokenParser, controller.activity.getActivityList); + router.post('/api/activity/getallactivities', controller.activity.getAllActivities); router.post('/api/activity/updateactivity', tokenParser, controller.activity.updateActivity); router.post('/api/activity/deleteactivity', tokenParser, controller.activity.deleteActivity); router.post('/api/activity/getactivitygrouplist', tokenParser, controller.activity.getActivityGroupList); - router.post('/api/activity/updateactivitygroupname', controller.activity.updateActivityGroupName); - // router.post('/api/activity/saveactivitiestogroup', tokenParser, controller.activity.saveActivitiesToGroup); - // router.post('/api/activity/savesingleactivitytogroup', controller.activity.saveSingleActivityToGroup); - // router.post('/api/activity/savegrouptoserver', tokenParser, controller.activity.saveGroupToServer); + router.post('/api/activity/getallactivitygroups', controller.activity.getAllActivityGroups); + router.post('/api/activity/updateactivitygroup', controller.activity.updateActivityGroup); router.post('/api/activity/creategroup', tokenParser, controller.activity.createGroup); router.post('/api/activity/deletegroup', tokenParser, controller.activity.deleteGroup); router.post('/api/activity/getactivitygrouptypelist', controller.activity.getActivityGroupTypeList); + router.post('/api/activity/getallactivitygrouptypes', controller.activity.getAllActivityGroupTypes); router.post('/api/activity/saveactivitygrouptypelist', controller.activity.updateActivityGroupType); router.post('/api/activity/deleteactivitygrouptype', controller.activity.deleteActivityGroupType); - router.post('/api/activity/saveactivitygrouptype', controller.activity.saveGroupTypeToActivityGroup); router.post('/api/activity/getgroupdatabyid', controller.activity.getGroupDataById); router.post('/api/activity/getactivitytaskpoint', controller.activity.getActivityTaskPoint); router.post('/api/activity/createtasktoactivity', controller.activity.createTaskToActivity); diff --git a/gm-server/app/service/Activity.ts b/gm-server/app/service/Activity.ts index 7f8700cf8..f079a25a2 100644 --- a/gm-server/app/service/Activity.ts +++ b/gm-server/app/service/Activity.ts @@ -25,12 +25,33 @@ export default class Activity extends Service { return ctx.service.utils.resResult(STATUS.SUCCESS, { list: list.map(cur => { return { - ...cur, beginTime: cur.beginTime.getTime(), endTime: cur.endTime.getTime() + ...cur, beginTime: cur.beginTime.getTime(), endTime: cur.endTime.getTime(), env: ctx.app.config.realEnv } }), total }); } + public async getAllActivities() { + const { ctx } = this; + let list = await ActivityModel.findAllActivities(); + return ctx.service.utils.resResult(STATUS.SUCCESS, { list }); + } + + public async getAllActivityGroups() { + const { ctx } = this; + let list = await ActivityGroupModel.findAllActivityGroups(); + return ctx.service.utils.resResult(STATUS.SUCCESS, { list }); + } + + public async getAllActivityGroupTypes() { + const { ctx } = this; + // console.log('***', page, pageSize, type, serverId, current, activityId) + const list = await ActivityGroupTypeModel.findAllActivityGroupTypes(); + return ctx.service.utils.resResult(STATUS.SUCCESS, { + list + }); + } + public async checkActivityEditable(activityId: number) { let now = new Date(); let activity = await ActivityModel.findActivity(activityId); @@ -100,7 +121,7 @@ export default class Activity extends Service { }) } catch (e) { - return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); + return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, (e).stack); } } @@ -125,7 +146,7 @@ export default class Activity extends Service { return ctx.service.utils.resResult(STATUS.SUCCESS, { list: list.map(cur => { return { - ...cur, beginTime: cur.beginTime?.getTime(), endTime: cur.endTime?.getTime() + ...cur, beginTime: cur.beginTime?.getTime(), endTime: cur.endTime?.getTime(), env: ctx.app.config.realEnv } }), total }); @@ -134,74 +155,20 @@ export default class Activity extends Service { /** * 更新活动组 */ - public async updateActivityGroupName(groupId: number, groupName: string) { + public async updateActivityGroup(groupId: number, groupName: string, activityIds: number[], serverIds: number[], type: number) { const { ctx } = this; try { - await ActivityGroupModel.updateGroup(groupId, {groupName}, ctx.user?.uid); - } catch(e) { - return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); - } - return ctx.service.utils.resResult(STATUS.SUCCESS) - } + let groupTypeObj = await ActivityGroupTypeModel.findByGroupType(type); + if(!groupTypeObj) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_TYPE_NOT_FOUND); + + await ActivityGroupModel.updateGroup(groupId, {groupName, type}, ctx.user?.uid); - /** - * 选择活动组内的活动 - */ - public async saveActivitiesToGroup(groupId: number, activityIds: number[]) { - const { ctx } = this; - try { + // 更新activities let checkResult = await this.checkActivityGroupType(groupId, activityIds, ctx); if(checkResult) return checkResult; - await ActivityGroupModel.setActivitiesToGroupData(groupId, activityIds, ctx.user?.uid); - - } catch(e) { - return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); - } - return ctx.service.utils.resResult(STATUS.SUCCESS) - } - /** - * 选择活动组内的活动 - */ - public async saveSingleActivityToGroup(groupId: number, index: number, activityId: number) { - console.log(groupId, index, activityId); - const { ctx } = this; - try { - let checkResult = await this.checkActivityGroupType(groupId, [activityId], ctx); - if(checkResult) return checkResult; - - let activityGroup = await ActivityGroupModel.findGroupData(groupId); - if(!activityGroup) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_NOT_FOUND); - let activity = await ActivityModel.findActivity(activityId); - if(!activity) return ctx.service.utils.resResult(STATUS.ACTIVITY_MISSING); - - if(activityGroup.type != 0) { - let activityGroupType = await ActivityGroupTypeModel.findByGroupType(activityGroup.type); - if(!activityGroupType) return ctx.service.utils.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 ctx.service.utils.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, ctx.user?.uid); - - } catch(e) { - return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); - } - return ctx.service.utils.resResult(STATUS.SUCCESS) - } - - /** - * 将活动组添加入服务器内 - */ - public async saveGroupToServer(groupId: number, serverIds: number[]) { - const { ctx } = this; - try { + // 封信servers await ServerlistModel.pullByGroupId(groupId); let servers = await ServerlistModel.findServerByIds(serverIds); for(let server of servers) { @@ -213,8 +180,9 @@ export default class Activity extends Service { await ServerlistModel.updateActivityGroup(server._id, pushArr, pullArr); } await ActivityGroupModel.updateServerData(groupId, serverIds, ctx.user?.uid); + } catch(e) { - return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); + return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, (e).stack); } return ctx.service.utils.resResult(STATUS.SUCCESS) } @@ -227,7 +195,7 @@ export default class Activity extends Service { try { await ActivityGroupModel.createGroup(ctx.user?.uid); } catch(e) { - return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); + return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, (e).stack); } return ctx.service.utils.resResult(STATUS.SUCCESS) } @@ -243,7 +211,7 @@ export default class Activity extends Service { await ActivityGroupModel.deleteGroup(groupId); } } catch(e) { - return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); + return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, (e).stack); } return ctx.service.utils.resResult(STATUS.SUCCESS) } @@ -278,14 +246,6 @@ export default class Activity extends Service { await ActivityGroupTypeModel.deleteActivityGroupType(groupType); return ctx.service.utils.resResult(STATUS.SUCCESS); } - - public async saveGroupTypeToActivityGroup(groupId: number, groupType: number) { - const { ctx } = this; - let groupTypeObj = await ActivityGroupTypeModel.findByGroupType(groupType); - if(!groupTypeObj) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_TYPE_NOT_FOUND); - await ActivityGroupModel.updateGroup(groupId, { type: groupType }, ctx.user?.uid); - return ctx.service.utils.resResult(STATUS.SUCCESS); - } public async getGroupDataById(groupId: number) { const { ctx } = this; diff --git a/shared/db/Activity.ts b/shared/db/Activity.ts index 2874d462e..57b4e7e3b 100644 --- a/shared/db/Activity.ts +++ b/shared/db/Activity.ts @@ -107,6 +107,21 @@ export default class Activity extends BaseModel { return result; } + + public static async findAllActivities() { + let all: ActivityModelType[] = []; + let createdAt; + for(let i = 0; i < 9999; i++) { // 防死循环 + let condition = {}; + if(createdAt) condition['createdAt'] = { $gt: createdAt } + let cur: ActivityModelType[] = await ActivityModel.find(condition).limit(1000).sort({ createdAt: 1 }).lean(); + if(cur.length == 0) break; + createdAt = cur[cur.length - 1].createdAt; + all.push(...cur); + } + return all; + } + //查询 public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', type: number = 0, groupId: number = 0, current: boolean = false, activityId: number = 0) { let searchObj = {}; diff --git a/shared/db/ActivityGroup.ts b/shared/db/ActivityGroup.ts index 29a72bc67..771bb4d70 100644 --- a/shared/db/ActivityGroup.ts +++ b/shared/db/ActivityGroup.ts @@ -144,6 +144,20 @@ export default class Activity_Group extends BaseModel { const result = await ActivityGroupModel.count(searchObj); return result; } + + public static async findAllActivityGroups() { + let all: ActivityGroupModelType[] = []; + let createdAt; + for(let i = 0; i < 9999; i++) { // 防死循环 + let condition = {}; + if(createdAt) condition['createdAt'] = { $gt: createdAt } + let cur = await ActivityGroupModel.find(condition).limit(1000).sort({ createdAt: 1 }).lean(); + if(cur.length == 0) break; + createdAt = cur[cur.length - 1].createdAt; + all.push(...cur); + } + return all; + } } export const ActivityGroupModel = getModelForClass(Activity_Group); diff --git a/shared/db/ActivityGroupType.ts b/shared/db/ActivityGroupType.ts index 62597d5cd..3e2ff126c 100644 --- a/shared/db/ActivityGroupType.ts +++ b/shared/db/ActivityGroupType.ts @@ -89,6 +89,19 @@ export default class Activity_GroupType extends BaseModel { return result; } + public static async findAllActivityGroupTypes() { + let all: ActivityGroupTypeInter[] = []; + let createdAt; + for(let i = 0; i < 9999; i++) { // 防死循环 + let condition = {}; + if(createdAt) condition['createdAt'] = { $gt: createdAt } + let cur: ActivityGroupTypeInter[] = await ActivityGroupTypeModel.find(condition).limit(1000).sort({ createdAt: 1 }).lean(); + if(cur.length == 0) break; + createdAt = cur[cur.length - 1].createdAt; + all.push(...cur); + } + return all; + } } export const ActivityGroupTypeModel = getModelForClass(Activity_GroupType);