diff --git a/gm-server/app/controller/activity.ts b/gm-server/app/controller/activity.ts index 4b30c5806..b2cd53c9b 100644 --- a/gm-server/app/controller/activity.ts +++ b/gm-server/app/controller/activity.ts @@ -109,5 +109,32 @@ export default class ActivityController extends Controller { return } + public async getActivityTaskPoint() { + const { ctx } = this; + const { page, pageSize, sortField, sortOrder, form } = ctx.request.body; + ctx.body = await ctx.service.activity.getActivityTaskPoint(page, pageSize, sortField, sortOrder, form); + return + } + + public async createTaskToActivity() { + const { ctx } = this; + const { taskType, activityId } = ctx.request.body; + ctx.body = await ctx.service.activity.createTaskToActivity(taskType, activityId); + return + } + + public async updateActivityTaskPoint() { + const { ctx } = this; + const { taskType, taskId, activityId, point } = ctx.request.body; + ctx.body = await ctx.service.activity.updateActivityTaskPoint(taskType, taskId, activityId, point); + return + } + + public async delActivityTaskPoint() { + const { ctx } = this; + const { taskType, taskId, activityId } = ctx.request.body; + ctx.body = await ctx.service.activity.delActivityTaskPoint(taskType, taskId, activityId); + return + } } diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 09694351b..df9e3e0e5 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -72,6 +72,10 @@ export default (app: Application) => { 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); + router.post('/api/activity/updateactivitytaskpoint', controller.activity.updateActivityTaskPoint); + router.post('/api/activity/delactivitytaskpoint', controller.activity.delActivityTaskPoint); router.post('/api/mail/getgmmaillist', controller.mail.getGMMailList); router.post('/api/mail/updategmmail', controller.mail.updateGMMail); diff --git a/gm-server/app/service/Activity.ts b/gm-server/app/service/Activity.ts index e3848b206..952b83c0a 100644 --- a/gm-server/app/service/Activity.ts +++ b/gm-server/app/service/Activity.ts @@ -6,6 +6,8 @@ import { ServerlistModel } from '@db/Serverlist'; import { GMUserType } from '@db/GMUser'; import { SignInData } from '@domain/activityField/signInField'; import { ActivityGroupTypeModel } from '@db/ActivityGroupType'; +import { ActivityTaskPointModel } from '@db/ActivityTaskPoint'; +import { gameData } from '@pubUtils/data'; /** * Test Service @@ -38,7 +40,7 @@ export default class Activity extends Service { if(activity.type == ACTIVITY_TYPE.SIGN_IN || activity.type == ACTIVITY_TYPE.SIGN_IN_VIP) { // 签到活动的不显示期内也可以编辑 - let signInObj = new SignInData(activity); + let signInObj = new SignInData(activity, 0); if(signInObj.beginTime < now.getTime() && signInObj.endTime > now.getTime() ) { return this.ctx.service.utils.resResult(STATUS.GM_CAN_NOT_EDIT_ACT); } @@ -296,5 +298,38 @@ export default class Activity extends Service { data: { groupId, groupType: type, activities } }); } + + public async getActivityTaskPoint(page: number, pageSize: number, sortField: string, sortOrder: string, form: {taskType?: number, taskId?: number, activityId?: number}) { + const { ctx } = this; + const list = await ActivityTaskPointModel.findByCondition(page, pageSize, sortField, sortOrder, form); + const total = await ActivityTaskPointModel.countByCondition(form); + return ctx.service.utils.resResult(STATUS.SUCCESS, { + list, total + }); + } + public async createTaskToActivity(taskType: number, activityId: number) { + const { ctx } = this; + let dicTask = gameData.tasks.get(taskType); + if(!dicTask) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + + for(let [id, dic] of dicTask) { + await ActivityTaskPointModel.createDataIfNotExist(taskType, id, activityId, dic['point']||0, ctx.user?.uid); + } + return ctx.service.utils.resResult(STATUS.SUCCESS); + } + + public async updateActivityTaskPoint(taskType: number, taskId: number, activityId: number, point: number) { + const { ctx } = this; + let result = await ActivityTaskPointModel.updateData(taskType, taskId, activityId, point, ctx.user?.uid); + if(!result) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + return ctx.service.utils.resResult(STATUS.SUCCESS); + } + + public async delActivityTaskPoint(taskType: number, taskId: number, activityId: number) { + const { ctx } = this; + + await ActivityTaskPointModel.deleteData(taskType, taskId, activityId); + return ctx.service.utils.resResult(STATUS.SUCCESS); + } } diff --git a/shared/db/Activity.ts b/shared/db/Activity.ts index 6bbad437f..bc92d0771 100644 --- a/shared/db/Activity.ts +++ b/shared/db/Activity.ts @@ -96,7 +96,7 @@ export default class Activity extends BaseModel { } //查询 - public static async findByCondition(page: number, pageSize: number, sortField: string, sortOrder: string, type: number = 0, groupId: number = 0, current: boolean = false, activityId: number = 0) { + 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 = {}; if (type != 0) searchObj['type'] = type; if (groupId != 0) searchObj['groupId'] = groupId; diff --git a/shared/db/ActivityTaskPoint.ts b/shared/db/ActivityTaskPoint.ts index 2f29ffe05..b8cc1bfc2 100644 --- a/shared/db/ActivityTaskPoint.ts +++ b/shared/db/ActivityTaskPoint.ts @@ -20,9 +20,9 @@ export default class Activity_Task_Point extends BaseModel { point: number; // 增加点数 //更新活动数据 - public static async updateData(taskType: number, taskId: number, activityId: number, point: number) { + public static async updateData(taskType: number, taskId: number, activityId: number, point: number, uid = 1) { let result: ActivityTaskPointModelType = await ActivityTaskPointModel.findOneAndUpdate( - { taskType, taskId }, { $set: { activityId, point } }, { upsert: true, new: true } + { taskType, taskId, activityId }, { $set: { point, updatedBy: uid }, $setOnInsert: { createdBy: uid } }, { upsert: true, new: true } ).lean(true); return result; } @@ -39,6 +39,44 @@ export default class Activity_Task_Point extends BaseModel { await ActivityTaskPointModel.deleteOne({ taskType, taskId, activityId }); } + public static async createDataIfNotExist(taskType: number, taskId: number, activityId: number, point: number, uid = 1) { + let result: ActivityTaskPointModelType = await ActivityTaskPointModel.findOneAndUpdate( + { taskType, taskId, activityId }, { $setOnInsert: { point, createdBy: uid, updatedBy: uid } }, { upsert: true, new: true } + ).lean(true); + return result; + } + + private static getSearchObj(form: {taskType?: number, taskId?: number, activityId?: number}) { + let searchObj = {}; + if(form['taskType']) searchObj['taskType'] = form.taskType; + if(form['taskId']) searchObj['taskId'] = form.taskId; + if(form['activityId']) searchObj['activityId'] = form.activityId; + return searchObj + } + + public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: {taskType?: number, taskId?: number, activityId?: number} = {}) { + + let searchObj = this.getSearchObj(form); + let sort = {}; + if(sortField && sortOrder) { + if(sortOrder == 'ascend') { + sort[sortField] = 1; + } else if (sortOrder == 'descend') { + sort[sortField] = -1; + } + } + const result: ActivityTaskPointModelType[] = await ActivityTaskPointModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true }); + return result; + + } + + public static async countByCondition(form: {taskType?: number, taskId?: number, activityId?: number} = {}) { + + let searchObj = this.getSearchObj(form); + const result = await ActivityTaskPointModel.count(searchObj); + return result; + } + } export const ActivityTaskPointModel = getModelForClass(Activity_Task_Point); diff --git a/shared/domain/activityField/activityField.ts b/shared/domain/activityField/activityField.ts index 26aaa0a4d..c545edcc5 100644 --- a/shared/domain/activityField/activityField.ts +++ b/shared/domain/activityField/activityField.ts @@ -1,7 +1,6 @@ import moment = require('moment'); import { ACTIVITY_TIME_TYPE, REFRESH_TIME, SERVER_OPEN_TIME } from '../../consts'; import { ActivityModelType } from '../../db/Activity'; -import { RoleModel } from '../../db/Role'; import { deltaDays } from '../../pubUtils/util'; // 活动数据