diff --git a/gm-server/app/controller/activity.ts b/gm-server/app/controller/activity.ts index 811b592dd..75b90b498 100644 --- a/gm-server/app/controller/activity.ts +++ b/gm-server/app/controller/activity.ts @@ -54,6 +54,13 @@ 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 updateActivityGroupName() { const { ctx } = this; const { groupId, groupName } = ctx.request.body; diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 597511977..192c2a353 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -69,4 +69,5 @@ export default (app: Application) => { router.post('/api/activity/getactivitygrouptypelist', controller.activity.getActivityGroupTypeList); router.post('/api/activity/saveactivitygrouptypelist', controller.activity.updateActivityGroupType); router.post('/api/activity/deleteactivitygrouptype', controller.activity.deleteActivityGroupType); + router.post('/api/activity/saveactivitygrouptype', controller.activity.saveGroupTypeToActivityGroup); }; diff --git a/gm-server/app/service/Activity.ts b/gm-server/app/service/Activity.ts index c60e7246f..3ba9b1cac 100644 --- a/gm-server/app/service/Activity.ts +++ b/gm-server/app/service/Activity.ts @@ -111,7 +111,7 @@ export default class Activity extends Service { public async updateActivityGroupName(groupId: number, groupName: string) { const { ctx } = this; try { - await ActivityGroupModel.updateGroupName(groupId, groupName, ctx.user?.uid); + await ActivityGroupModel.updateGroup(groupId, {groupName}, ctx.user?.uid); } catch(e) { return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); } @@ -124,6 +124,23 @@ export default class Activity extends Service { public async saveActivitiesToGroup(groupId: number, activityIds: number[]) { const { ctx } = this; try { + let activityGroup = await ActivityGroupModel.findGroupData(groupId); + if(!activityGroup) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_NOT_FOUND); + 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 activities = await ActivityModel.findActivityByIds(activityIds); + for(let { type } of activities) { + let index = dic.findIndex(cur => cur.activityType == type); + if(index == -1) { + return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE); + } else { + dic.splice(index, 1); + } + } + } + await ActivityGroupModel.setActivitiesToGroupData(groupId, activityIds, ctx.user?.uid); } catch(e) { @@ -214,4 +231,12 @@ 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); + } } diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 74d00f826..297f75c06 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -382,7 +382,9 @@ export const STATUS = { GM_CAN_NOT_EDIT_ACT: { code: 60016, simStr: '活动期间不可编辑活动' }, GM_STATEGY_NOT_FOUND: { code: 60017, simStr: '未找到该策略' }, GM_SERVER_NOT_FOUND: { code: 60018, simStr: '未找到该服' }, - GM_ACTIVITY_GROUP_TYPE_NOT_FOUND: { code: 60019, simStr: '未找到活动组类型' }, + GM_ACTIVITY_GROUP_NOT_FOUND: { code: 60019, simStr: '未找到该活动组' }, + GM_ACTIVITY_GROUP_TYPE_NOT_FOUND: { code: 60020, simStr: '未找到活动组类型' }, + GM_ACTIVITY_NOT_FIT_GROUP_TYPE: { code: 60021, simStr: '该活动不满足该活动组类型' }, // 支付相关状态 70000 - 79999 NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' }, NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' }, diff --git a/shared/db/ActivityGroup.ts b/shared/db/ActivityGroup.ts index 563ea6625..074aece13 100644 --- a/shared/db/ActivityGroup.ts +++ b/shared/db/ActivityGroup.ts @@ -22,7 +22,7 @@ export default class Activity_Group extends BaseModel { endTime: Date; // 里面的activity的最晚的时间 @prop({ required: true, type: Number }) serverIds: number[]; // 关联服务器列表 - @prop({ required: true }) + @prop({ required: true, default: 0 }) type: number; // 类型 ACTIVITY_GROUP_TYPE @@ -31,7 +31,7 @@ export default class Activity_Group extends BaseModel { let groupId = await CounterModel.getNewCounter(COUNTER.ACTIVITY_GROUP); let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId }, { - $setOnInsert: { groupName: `活动组${groupId}`, activities: [], serverIds: [], createdBy: uid }, $set: { updatedBy: uid } + $setOnInsert: { groupName: `活动组${groupId}`, activities: [], serverIds: [], createdBy: uid, type: 0 }, $set: { updatedBy: uid } }, { new: true, upsert: true }).lean(); return result; } @@ -49,9 +49,9 @@ export default class Activity_Group extends BaseModel { } //更新名字 - public static async updateGroupName(groupId: number, groupName: string, uid = 1) { + public static async updateGroup(groupId: number, update: ActivityGroupModelTypeParam, uid = 1) { let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId }, - { $set: { groupName, updatedBy: uid } }, { new: true }).lean(true); + { $set: { ...update, updatedBy: uid } }, { new: true }).lean(true); return result; } diff --git a/shared/db/ActivityGroupType.ts b/shared/db/ActivityGroupType.ts index 65f397a9c..62597d5cd 100644 --- a/shared/db/ActivityGroupType.ts +++ b/shared/db/ActivityGroupType.ts @@ -26,6 +26,11 @@ export default class Activity_GroupType extends BaseModel { @prop({ required: true, type: ActivityType, _id: false }) activityTypes: ActivityType[]; // 活动类型集合 + public static async findByGroupType(groupType: number) { + let result: ActivityGroupTypeInter = await ActivityGroupTypeModel.findOne({ groupType }).lean(); + return result; + } + public static async createActivityGroupType(groupTypeName: string, types: number[], uid = 1) { let activityTypes = types.map((value, index) => { return { index: index + 1, activityType: value };