Files
ZYZ/gm-server/app/service/Activity.ts
2021-06-15 13:59:38 +08:00

187 lines
7.2 KiB
TypeScript

import { Service } from 'egg';
import { STATUS, ACTIVITY_TYPE } from '@consts';
import { ActivityModel } from '@db/Activity';
import { ActivityGroupModel } from '@db/ActivityGroup';
import { ServerlistModel } from '@db/Serverlist';
import { GMUserType } from '@db/GMUser';
import { SignInData } from '@domain/activityField/signInField';
/**
* Test Service
*/
export default class Activity extends Service {
/**
* 获得活动列表
*/
public async getActivityList(page: number, pageSize: number, sortField: string, sortOrder: string, type: number = 0, groupId: number = 0, current: boolean = false, activityId: number = 0) {
const { ctx } = this;
// console.log('***', page, pageSize, type, groupId, current, activityId)
const list = await ActivityModel.findByCondition(page, pageSize, sortField, sortOrder, type, groupId, current, activityId);
const total = await ActivityModel.countByCondition(type, groupId, current, activityId);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => {
return {
...cur, beginTime: cur.beginTime.getTime(), endTime: cur.endTime.getTime()
}
}), total
});
}
public async checkActivityEditable(activityId: number) {
let now = new Date();
let activity = await ActivityModel.findActivity(activityId);
if(this.app.config.env == 'production') {
if(!activity || (activity.beginTime < now && activity.endTime > now)) {
if(activity.type == ACTIVITY_TYPE.SIGN_IN || activity.type == ACTIVITY_TYPE.SIGN_IN_VIP) {
// 签到活动的不显示期内也可以编辑
let signInObj = new SignInData(activity);
if(signInObj.beginTime < now.getTime() && signInObj.endTime > now.getTime() ) {
return this.ctx.service.utils.resResult(STATUS.GM_CAN_NOT_EDIT_ACT);
}
} else {
return this.ctx.service.utils.resResult(STATUS.GM_CAN_NOT_EDIT_ACT);
}
}
}
return 0
}
public async updateActivity(activityId: number | string, groupId: number, beginTime: number, endTime: number, type: number, data: string) {
const { ctx } = this;
let gmuser: GMUserType = ctx.user;
if (!type || !data) {
return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
}
try {
let result = JSON.parse(data);
ctx.service.utils.checkActivityData(result, type);
let aids: number[] = [];
if (typeof activityId == 'number') {
aids.push(activityId);
} else {
activityId.split(',').forEach(aidStr => {
aids.push(parseInt(aidStr));
});
}
const activities = await ActivityModel.addActivity(aids, groupId, beginTime ? new Date(beginTime) : undefined, endTime ? new Date(endTime) : undefined, type, data, gmuser.uid);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
activity: activities
})
} catch (e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
}
public async deleteActivity(activityId: number) {
const { ctx } = this;
const result = await ActivityModel.deleteActivity(activityId, ctx.user?.uid);
if (result) {
return ctx.service.utils.resResult(STATUS.SUCCESS);
} else {
return ctx.service.utils.resResult(STATUS.ACTIVITY_MISSING);
}
}
/**
* 获得活动组列表
*/
public async getActivityGroupList(page: number, pageSize: number, serverId: number = 0, current: boolean = false, groupId: number = 0) {
const { ctx } = this;
// console.log('***', page, pageSize, type, serverId, current, activityId)
const list = await ActivityGroupModel.findByCondition(page, pageSize, serverId, current, groupId);
const total = await ActivityGroupModel.countByCondition(serverId, current, groupId);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => {
return {
...cur, beginTime: cur.beginTime?.getTime(), endTime: cur.endTime?.getTime()
}
}), total
});
}
/**
* 更新活动组
*/
public async updateActivityGroupName(groupId: number, groupName: string) {
const { ctx } = this;
try {
await ActivityGroupModel.updateGroupName(groupId, groupName);
} catch(e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
return ctx.service.utils.resResult(STATUS.SUCCESS)
}
/**
* 选择活动组内的活动
*/
public async saveActivitiesToGroup(groupId: number, activityIds: number[]) {
const { ctx } = this;
try {
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 {
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);
} catch(e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
return ctx.service.utils.resResult(STATUS.SUCCESS)
}
/**
* 创建一个新组
*/
public async createGroup() {
const { ctx } = this;
try {
await ActivityGroupModel.createGroup();
} catch(e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
return ctx.service.utils.resResult(STATUS.SUCCESS)
}
public async deleteGroup(groupId: number) {
const { ctx } = this;
try {
let group = await ActivityGroupModel.findGroupData(groupId);
if(group) {
if(group.serverIds.length > 0 || group.activities.length > 0) {
return ctx.service.utils.resResult(STATUS.GM_CAN_NOT_DEL_ACT_GROUP);
}
await ActivityGroupModel.deleteGroup(groupId);
}
} catch(e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
return ctx.service.utils.resResult(STATUS.SUCCESS)
}
}