后台:活动分组分服
This commit is contained in:
@@ -4,15 +4,15 @@ export default class ActivityController extends Controller {
|
|||||||
|
|
||||||
public async getActivityList() {
|
public async getActivityList() {
|
||||||
const { ctx } = this;
|
const { ctx } = this;
|
||||||
const { page, pageSize, type, serverId, current, activityId } = ctx.request.body;
|
const { page, pageSize, type, groupId, current, activityId } = ctx.request.body;
|
||||||
ctx.body = await ctx.service.activity.getActivityList(page, pageSize, type, serverId, current, activityId);
|
ctx.body = await ctx.service.activity.getActivityList(page, pageSize, type, groupId, current, activityId);
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
public async updateActivity() {
|
public async updateActivity() {
|
||||||
const { ctx } = this;
|
const { ctx } = this;
|
||||||
const { activityId, serverId, beginTime, endTime, type, data } = ctx.request.body;
|
const { activityId, groupId, beginTime, endTime, type, data } = ctx.request.body;
|
||||||
ctx.body = await ctx.service.activity.updateActivity(activityId, serverId, beginTime, endTime, type, data);
|
ctx.body = await ctx.service.activity.updateActivity(activityId, groupId, beginTime, endTime, type, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async deleteActivity() {
|
public async deleteActivity() {
|
||||||
@@ -21,4 +21,47 @@ export default class ActivityController extends Controller {
|
|||||||
ctx.body = await ctx.service.activity.deleteActivity(activityId);
|
ctx.body = await ctx.service.activity.deleteActivity(activityId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getActivityGroupList() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const { page, pageSize, serverId, current, groupId } = ctx.request.body;
|
||||||
|
ctx.body = await ctx.service.activity.getActivityGroupList(page, pageSize, serverId, current, groupId);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
public async updateActivityGroupName() {
|
||||||
|
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 saveGroupToServer() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const { groupId, serverIds } = ctx.request.body;
|
||||||
|
ctx.body = await ctx.service.activity.saveGroupToServer(groupId, serverIds);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
public async createGroup() {
|
||||||
|
const { ctx } = this;
|
||||||
|
ctx.body = await ctx.service.activity.createGroup();
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
public async deleteGroup() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const { groupId } = ctx.request.body;
|
||||||
|
ctx.body = await ctx.service.activity.deleteGroup(groupId);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,4 +50,11 @@ export default (app: Application) => {
|
|||||||
router.post('/api/activity/getactivitylist', controller.activity.getActivityList);
|
router.post('/api/activity/getactivitylist', controller.activity.getActivityList);
|
||||||
router.post('/api/activity/updateactivity', controller.activity.updateActivity);
|
router.post('/api/activity/updateactivity', controller.activity.updateActivity);
|
||||||
router.post('/api/activity/deleteactivity', controller.activity.deleteActivity);
|
router.post('/api/activity/deleteactivity', controller.activity.deleteActivity);
|
||||||
|
router.post('/api/activity/getactivitygrouplist', controller.activity.getActivityGroupList);
|
||||||
|
router.post('/api/activity/updateactivitygroupname', controller.activity.updateActivityGroupName);
|
||||||
|
router.post('/api/activity/saveactivitiestogroup', controller.activity.saveActivitiesToGroup);
|
||||||
|
router.post('/api/activity/savegrouptoserver', controller.activity.saveGroupToServer);
|
||||||
|
router.post('/api/activity/creategroup', controller.activity.createGroup);
|
||||||
|
router.post('/api/activity/deletegroup', controller.activity.deleteGroup);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { Service } from 'egg';
|
import { Service } from 'egg';
|
||||||
import { STATUS } from '@consts';
|
import { STATUS } from '@consts';
|
||||||
import { ActivityModel } from '@db/Activity';
|
import { ActivityModel } from '@db/Activity';
|
||||||
|
import { ActivityGroupModel } from '@db/ActivityGroup';
|
||||||
|
import { ServerlistModel } from '@db/Serverlist';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test Service
|
* Test Service
|
||||||
@@ -10,11 +12,11 @@ export default class Activity extends Service {
|
|||||||
/**
|
/**
|
||||||
* 获得活动列表
|
* 获得活动列表
|
||||||
*/
|
*/
|
||||||
public async getActivityList(page: number, pageSize: number, type: number = 0, serverId: number = 0, current: boolean = false, activityId: number = 0) {
|
public async getActivityList(page: number, pageSize: number, type: number = 0, groupId: number = 0, current: boolean = false, activityId: number = 0) {
|
||||||
const { ctx } = this;
|
const { ctx } = this;
|
||||||
// console.log('***', page, pageSize, type, serverId, current, activityId)
|
// console.log('***', page, pageSize, type, groupId, current, activityId)
|
||||||
const list = await ActivityModel.findByCondition(page, pageSize, type, serverId, current, activityId);
|
const list = await ActivityModel.findByCondition(page, pageSize, type, groupId, current, activityId);
|
||||||
const total = await ActivityModel.countByCondition(type, serverId, current, activityId);
|
const total = await ActivityModel.countByCondition(type, groupId, current, activityId);
|
||||||
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||||
list: list.map(cur => {
|
list: list.map(cur => {
|
||||||
return {
|
return {
|
||||||
@@ -24,7 +26,7 @@ export default class Activity extends Service {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async updateActivity(activityId: number | string, serverId: number, beginTime: number, endTime: number, type: number, data: string) {
|
public async updateActivity(activityId: number | string, groupId: number, beginTime: number, endTime: number, type: number, data: string) {
|
||||||
const { ctx } = this;
|
const { ctx } = this;
|
||||||
if (!type || !data) {
|
if (!type || !data) {
|
||||||
return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
||||||
@@ -32,23 +34,25 @@ export default class Activity extends Service {
|
|||||||
try {
|
try {
|
||||||
let result = JSON.parse(data);
|
let result = JSON.parse(data);
|
||||||
ctx.service.utils.checkActivityData(result, type);
|
ctx.service.utils.checkActivityData(result, type);
|
||||||
} catch (e) {
|
let aids: number[] = [];
|
||||||
return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
if (typeof activityId == 'number') {
|
||||||
}
|
aids.push(activityId);
|
||||||
let aids: number[] = [];
|
} else {
|
||||||
if (typeof activityId == 'number') {
|
activityId.split(',').forEach(aidStr => {
|
||||||
aids.push(activityId);
|
aids.push(parseInt(aidStr));
|
||||||
} 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);
|
||||||
}
|
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||||
const activity = await ActivityModel.addActivity(aids, serverId, beginTime ? new Date(beginTime) : undefined, endTime ? new Date(endTime) : undefined, type, data);
|
activity: activities
|
||||||
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
})
|
||||||
activity
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async deleteActivity(activityId: number) {
|
public async deleteActivity(activityId: number) {
|
||||||
const { ctx } = this;
|
const { ctx } = this;
|
||||||
const result = await ActivityModel.deleteActivity(activityId);
|
const result = await ActivityModel.deleteActivity(activityId);
|
||||||
@@ -59,4 +63,100 @@ export default class Activity extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得活动组列表
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
|
||||||
|
} 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)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ export const COUNTER = {
|
|||||||
HID: { name: 'hid', def: 10000 },
|
HID: { name: 'hid', def: 10000 },
|
||||||
EID: { name: 'eid', def: 1 },
|
EID: { name: 'eid', def: 1 },
|
||||||
ROLE: { name: 'role', def: 1 },
|
ROLE: { name: 'role', def: 1 },
|
||||||
ACTIVITY: { name: 'aid', def: 1 }
|
ACTIVITY: { name: 'aid', def: 1 },
|
||||||
|
ACTIVITY_GROUP: { name: 'agid', def: 1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
export const DEFAULT_HEROES = [19, 53, 46, 40, 22, 56, 32, 28, 18];
|
export const DEFAULT_HEROES = [19, 53, 46, 40, 22, 56, 32, 28, 18];
|
||||||
|
|||||||
@@ -375,6 +375,7 @@ export const STATUS = {
|
|||||||
GM_PVP_DEFENSE_NOT_FOUND: { code: 60012, simStr: '该玩家未保存防守阵' },
|
GM_PVP_DEFENSE_NOT_FOUND: { code: 60012, simStr: '该玩家未保存防守阵' },
|
||||||
GM_PVP_DEFENSE_HERO_NOT_FOUND: { code: 60013, simStr: '该守阵没有该武将' },
|
GM_PVP_DEFENSE_HERO_NOT_FOUND: { code: 60013, simStr: '该守阵没有该武将' },
|
||||||
GM_JSON_FORMAT_ERR: { code: 60005, simStr: 'json格式错误' },
|
GM_JSON_FORMAT_ERR: { code: 60005, simStr: 'json格式错误' },
|
||||||
|
GM_CAN_NOT_DEL_ACT_GROUP: { code: 60006, simStr: '活动组有指向的服务器或活动,不可删除' },
|
||||||
// 支付相关状态 70000 - 79999
|
// 支付相关状态 70000 - 79999
|
||||||
NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' },
|
NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' },
|
||||||
NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' },
|
NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' },
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import BaseModel from './BaseModel';
|
|||||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||||
import { CounterModel } from './Counter';
|
import { CounterModel } from './Counter';
|
||||||
import { COUNTER } from '../consts';
|
import { COUNTER } from '../consts';
|
||||||
|
import { ActivityGroupModel } from './ActivityGroup';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 活动系统
|
* 活动系统
|
||||||
@@ -51,14 +52,11 @@ export default class Activity extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//新增活动
|
//新增活动
|
||||||
public static async addActivity(aids: number[], serverId: number, beginTime: Date, endTime: Date, type: number, data: string) {
|
public static async addActivity(aids: number[], groupId: number, beginTime: Date, endTime: Date, type: number, data: string) {
|
||||||
let result: ActivityModelType[] = [];
|
let result: ActivityModelType[] = [];
|
||||||
for (let activityId of aids) {
|
for (let activityId of aids) {
|
||||||
if (!activityId) activityId = await CounterModel.getNewCounter(COUNTER.ACTIVITY);
|
if (!activityId) activityId = await CounterModel.getNewCounter(COUNTER.ACTIVITY);
|
||||||
let update = { type, data }
|
let update = { type, data }
|
||||||
if (serverId != undefined) {
|
|
||||||
update["serverId"] = serverId;
|
|
||||||
}
|
|
||||||
if (beginTime != undefined) {
|
if (beginTime != undefined) {
|
||||||
update["beginTime"] = beginTime;
|
update["beginTime"] = beginTime;
|
||||||
}
|
}
|
||||||
@@ -69,20 +67,28 @@ export default class Activity extends BaseModel {
|
|||||||
{ new: true, upsert: true }).lean(true);
|
{ new: true, upsert: true }).lean(true);
|
||||||
result.push(rec);
|
result.push(rec);
|
||||||
}
|
}
|
||||||
|
if(groupId != undefined) {
|
||||||
|
if(groupId == 0) {
|
||||||
|
let newGroup = await ActivityGroupModel.createGroup();
|
||||||
|
groupId = newGroup.groupId;
|
||||||
|
}
|
||||||
|
await ActivityGroupModel.addActivitiesToGroupData(groupId, aids);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//删除活动
|
//删除活动
|
||||||
public static async deleteActivity(activityId: number) {
|
public static async deleteActivity(activityId: number) {
|
||||||
let result = await ActivityModel.deleteMany({ activityId });
|
let result = await ActivityModel.deleteMany({ activityId });
|
||||||
|
await ActivityGroupModel.pullByActivityIds([activityId]);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询
|
//查询
|
||||||
public static async findByCondition(page: number, pageSize: number, type: number = 0, serverId: number = 0, current: boolean = false, activityId: number = 0) {
|
public static async findByCondition(page: number, pageSize: number, type: number = 0, groupId: number = 0, current: boolean = false, activityId: number = 0) {
|
||||||
let searchObj = {};
|
let searchObj = {};
|
||||||
if (type != 0) searchObj['type'] = type;
|
if (type != 0) searchObj['type'] = type;
|
||||||
if (serverId != 0) searchObj['serverId'] = { $in: [0, serverId] };
|
if (groupId != 0) searchObj['groupId'] = groupId;
|
||||||
if (activityId != 0) searchObj['activityId'] = activityId;
|
if (activityId != 0) searchObj['activityId'] = activityId;
|
||||||
if (current) {
|
if (current) {
|
||||||
searchObj['beginTime'] = { $lte: new Date };
|
searchObj['beginTime'] = { $lte: new Date };
|
||||||
@@ -93,10 +99,10 @@ export default class Activity extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获得活动数量
|
// 获得活动数量
|
||||||
public static async countByCondition(type: number = 0, serverId: number = 0, current: boolean = false, activityId: number = 0) {
|
public static async countByCondition(type: number = 0, groupId: number = 0, current: boolean = false, activityId: number = 0) {
|
||||||
let searchObj = {};
|
let searchObj = {};
|
||||||
if (type != 0) searchObj['type'] = type;
|
if (type != 0) searchObj['type'] = type;
|
||||||
if (serverId != 0) searchObj['serverId'] = { $in: [0, serverId] };
|
if (groupId != 0) searchObj['groupId'] = groupId;
|
||||||
if (activityId != 0) searchObj['activityId'] = activityId;
|
if (activityId != 0) searchObj['activityId'] = activityId;
|
||||||
if (current) {
|
if (current) {
|
||||||
searchObj['beginTime'] = { $lte: new Date };
|
searchObj['beginTime'] = { $lte: new Date };
|
||||||
@@ -105,6 +111,18 @@ export default class Activity extends BaseModel {
|
|||||||
const result = await ActivityModel.count(searchObj);
|
const result = await ActivityModel.count(searchObj);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//根据多个活动id查询活动数据
|
||||||
|
public static async findActivityByIds(activityIds: number[]) {
|
||||||
|
let result: ActivityModelType[] = await ActivityModel.find({ activityId: { $in: activityIds } }).lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateGroupId(activityIds: number[], groupId: number) {
|
||||||
|
let result = await ActivityModel.updateMany({ activityId: { $in: activityIds } }, { $set: { groupId } });
|
||||||
|
console.log(result)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ActivityModel = getModelForClass(Activity);
|
export const ActivityModel = getModelForClass(Activity);
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||||
|
import { CounterModel } from './Counter';
|
||||||
|
import { COUNTER } from '../consts';
|
||||||
|
import { ActivityModel } from './Activity';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 活动合集
|
* 活动合集
|
||||||
@@ -11,31 +14,88 @@ export default class Activity_Group extends BaseModel {
|
|||||||
groupId: number; // 组Id
|
groupId: number; // 组Id
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
groupName: string; // 组名
|
groupName: string; // 组名
|
||||||
@prop({ required: true })
|
@prop({ required: true, type: Number })
|
||||||
activities: number[]; // 活动Id
|
activities: number[]; // 活动Id
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
beginTime: Date; // 里面的activity的最早的时间
|
beginTime: Date; // 里面的activity的最早的时间
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
endTime: Date; // 里面的activity的最晚的时间
|
endTime: Date; // 里面的activity的最晚的时间
|
||||||
|
@prop({ required: true, type: Number })
|
||||||
|
serverIds: number[]; // 关联服务器列表
|
||||||
|
|
||||||
|
|
||||||
|
//查询组
|
||||||
|
public static async createGroup() {
|
||||||
|
let groupId = await CounterModel.getNewCounter(COUNTER.ACTIVITY_GROUP);
|
||||||
|
|
||||||
|
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId }, {
|
||||||
|
$setOnInsert: { groupName: `活动组${groupId}`, activities: [], serverIds: [] }
|
||||||
|
}, { new: true, upsert: true }).lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//查询组
|
//查询组
|
||||||
public static async findGroupData(groupId: number) {
|
public static async findGroupData(groupId: number) {
|
||||||
let result: ActivityGroupModelType = await ActivityGroupModel.findOne({ groupId }).lean(true);
|
let result: ActivityGroupModelType = await ActivityGroupModel.findOne({ groupId }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//更新名字
|
//更新名字
|
||||||
public static async updateGroupName(groupId: number, groupName: string) {
|
public static async updateGroupName(groupId: number, groupName: string) {
|
||||||
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
|
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
|
||||||
{ $set: { groupName } }, { upsert: true, new: true }).lean(true);
|
{ $set: { groupName } }, { new: true }).lean(true);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//更新询组
|
//更新询组
|
||||||
public static async updateGroupData(groupId: number, activities: number[], beginTime: Date, endTime: Date) {
|
public static async setActivitiesToGroupData(groupId: number, activities: number[]) {
|
||||||
|
await this.pullByActivityIds(activities); // 先将原先的删除
|
||||||
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
|
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
|
||||||
{ $set: { activities, beginTime, endTime } }, { upsert: true, new: true }).lean(true);
|
{ $set: { activities } }, { new: true }).lean(true);
|
||||||
|
await ActivityModel.updateGroupId(activities, groupId);
|
||||||
|
result = await this.updateTime(result.groupId, result.activities);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新询组
|
||||||
|
public static async addActivitiesToGroupData(groupId: number, activities: number[]) {
|
||||||
|
await this.pullByActivityIds(activities); // 先将原先的删除
|
||||||
|
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
|
||||||
|
{ $addToSet: { activities: { $each: activities } } }, { new: true }).lean(true);
|
||||||
|
await ActivityModel.updateGroupId(activities, groupId);
|
||||||
|
result = await this.updateTime(result.groupId, result.activities);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据包含的活动更新开始和结束时间
|
||||||
|
private static async updateTime(groupId: number, aids: number[]) {
|
||||||
|
let activities = await ActivityModel.findActivityByIds(aids);
|
||||||
|
let beginTime = undefined, endTime = undefined;
|
||||||
|
for(let activity of activities) {
|
||||||
|
if(!beginTime || activity.beginTime < beginTime) beginTime = activity.beginTime;
|
||||||
|
if(!endTime || activity.endTime > endTime) endTime = activity.endTime;
|
||||||
|
}
|
||||||
|
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
|
||||||
|
{ $set: { beginTime, endTime } }, { new: true }).lean(true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 删除活动id
|
||||||
|
public static async pullByActivityIds(activities: number[]) {
|
||||||
|
await ActivityModel.updateGroupId(activities, 0);
|
||||||
|
let activityGroups = await ActivityGroupModel.find({ activities: { $in: activities } });
|
||||||
|
for(let { groupId } of activityGroups) {
|
||||||
|
let result = await ActivityGroupModel.findOneAndUpdate({ groupId }, { $pull: { activities: { $in: activities } } }, { new: true }).lean(true);
|
||||||
|
await this.updateTime(result.groupId, result.activities);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//更新服务器
|
||||||
|
public static async updateServerData(groupId: number, serverIds: number[]) {
|
||||||
|
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
|
||||||
|
{ $set: { serverIds } }, { new: true }).lean(true);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,6 +104,32 @@ export default class Activity_Group extends BaseModel {
|
|||||||
let result = await ActivityGroupModel.deleteMany({ groupId });
|
let result = await ActivityGroupModel.deleteMany({ groupId });
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//查询
|
||||||
|
public static async findByCondition(page: number, pageSize: number, serverId: number = 0, current: boolean = false, groupId: number = 0) {
|
||||||
|
let searchObj = {};
|
||||||
|
if (serverId != 0) searchObj['serverIds'] = { $elemMatch:{$eq:serverId} };
|
||||||
|
if (groupId != 0) searchObj['groupId'] = groupId;
|
||||||
|
if (current) {
|
||||||
|
searchObj['beginTime'] = { $lte: new Date };
|
||||||
|
searchObj['endTime'] = { $gte: new Date };
|
||||||
|
}
|
||||||
|
const result: ActivityGroupModelType[] = await ActivityGroupModel.find(searchObj, { _id: 0 }).limit(pageSize).skip((page - 1) * pageSize).sort({ updatedAt: -1 }).lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得活动数量
|
||||||
|
public static async countByCondition(serverId: number = 0, current: boolean = false, groupId: number = 0) {
|
||||||
|
let searchObj = {};
|
||||||
|
if (serverId != 0) searchObj['serverId'] = { $in: [serverId] };
|
||||||
|
if (groupId != 0) searchObj['groupId'] = groupId;
|
||||||
|
if (current) {
|
||||||
|
searchObj['beginTime'] = { $lte: new Date };
|
||||||
|
searchObj['endTime'] = { $gte: new Date };
|
||||||
|
}
|
||||||
|
const result = await ActivityGroupModel.count(searchObj);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ActivityGroupModel = getModelForClass(Activity_Group);
|
export const ActivityGroupModel = getModelForClass(Activity_Group);
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ export default class Activity_Pop_Up_Shop extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//删除活动领取记录
|
//删除活动领取记录
|
||||||
public static async deleteActivity(serverId: number, activityId: number, roleId: string, id: number) {
|
public static async deleteActivity(_serverId: number, activityId: number, roleId: string, id: number) {
|
||||||
let nowDate = new Date();
|
let nowDate = new Date();
|
||||||
await ActivityPopUpShopModel.deleteMany({
|
await ActivityPopUpShopModel.deleteMany({
|
||||||
roleId, activityId, id,
|
roleId, activityId, id,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export default class Activity_Treasure_Hunt_Shop extends ActivityShop {
|
|||||||
dayIndex: number; // 第几天
|
dayIndex: number; // 第几天
|
||||||
|
|
||||||
//根据活动id查询活动数据
|
//根据活动id查询活动数据
|
||||||
public static async findTreasureData(serverId: number, activityId: number, roleId: string, roundIndex: number, dayIndex: number) {
|
public static async findTreasureData(_serverId: number, activityId: number, roleId: string, roundIndex: number, dayIndex: number) {
|
||||||
let result: ActivityTreasureHuntShopModelType = await ActivityTreasureHuntShopModel.findOne({ roleId, activityId, roundIndex, dayIndex }).lean(true);
|
let result: ActivityTreasureHuntShopModelType = await ActivityTreasureHuntShopModel.findOne({ roleId, activityId, roundIndex, dayIndex }).lean(true);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export default class Serverlist extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
serverStatus: number; // 服务器状态
|
serverStatus: number; // 服务器状态
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true, type: Number })
|
||||||
activityGroupId: number[]; // 活动组
|
activityGroupId: number[]; // 活动组
|
||||||
|
|
||||||
public get status() {
|
public get status() {
|
||||||
@@ -84,6 +84,26 @@ export default class Serverlist extends BaseModel {
|
|||||||
let server: ServerlistType[] = await ServerlistModel.find({ serverType }).lean({ getters: true, virtuals: true });
|
let server: ServerlistType[] = await ServerlistModel.find({ serverType }).lean({ getters: true, virtuals: true });
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//根据多个活动id查询活动数据
|
||||||
|
public static async findServerByIds(ids: number[]) {
|
||||||
|
let result: ServerlistType[] = await ServerlistModel.find({ id: { $in: ids } }).lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateActivityGroup(id: string, pushArr: number[], pullArr: number[]) {
|
||||||
|
console.log(id, pushArr, pullArr)
|
||||||
|
let update = {};
|
||||||
|
if(pushArr.length > 0) update['$push'] = { activityGroupId: { $each: pushArr } };
|
||||||
|
if(pullArr.length > 0) update['$pull'] = { activityGroupId: { $in: pullArr } };
|
||||||
|
let result: ServerlistType[] = await ServerlistModel.findOneAndUpdate({ _id: id }, update).lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async pullByGroupId(groupId: number) {
|
||||||
|
let result = await ServerlistModel.updateMany({ activityGroupId: { $elemMatch: { $eq: groupId } }}, { $pull: { activityGroupId: groupId } }, { new: true }).lean(true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ServerlistModel = getModelForClass(Serverlist);
|
export const ServerlistModel = getModelForClass(Serverlist);
|
||||||
|
|||||||
Reference in New Issue
Block a user