后台:活动类型表

This commit is contained in:
luying
2021-06-17 17:19:51 +08:00
parent 703a128811
commit 46595fcbed
10 changed files with 194 additions and 21 deletions

View File

@@ -33,6 +33,13 @@ export default class ActivityController extends Controller {
return
}
public async getActivityGroupTypeList() {
const { ctx } = this;
const { page, pageSize, sortField, sortOrder, groupType, groupTypeName } = ctx.request.body;
ctx.body = await ctx.service.activity.getActivityGroupTypeList(page, pageSize, sortField, sortOrder, groupType, groupTypeName);
return
}
public async updateActivityGroupName() {
const { ctx } = this;
const { groupId, groupName } = ctx.request.body;

View File

@@ -66,5 +66,6 @@ export default (app: Application) => {
router.post('/api/activity/savegrouptoserver', tokenParser, controller.activity.saveGroupToServer);
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);
};

View File

@@ -5,6 +5,7 @@ import { ActivityGroupModel } from '@db/ActivityGroup';
import { ServerlistModel } from '@db/Serverlist';
import { GMUserType } from '@db/GMUser';
import { SignInData } from '@domain/activityField/signInField';
import { ActivityGroupTypeModel } from '@db/ActivityGroupType';
/**
* Test Service
@@ -110,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);
await ActivityGroupModel.updateGroupName(groupId, groupName, ctx.user?.uid);
} catch(e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
@@ -147,7 +148,7 @@ export default class Activity extends Service {
}
await ServerlistModel.updateActivityGroup(server._id, pushArr, pullArr);
}
await ActivityGroupModel.updateServerData(groupId, serverIds);
await ActivityGroupModel.updateServerData(groupId, serverIds, ctx.user?.uid);
} catch(e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
@@ -160,7 +161,7 @@ export default class Activity extends Service {
public async createGroup() {
const { ctx } = this;
try {
await ActivityGroupModel.createGroup();
await ActivityGroupModel.createGroup(ctx.user?.uid);
} catch(e) {
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack);
}
@@ -183,4 +184,17 @@ export default class Activity extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS)
}
/**
* 获得活动组类型列表
*/
public async getActivityGroupTypeList(page: number, pageSize: number, sortField: string, sortOrder: string, groupType: number, groupTypeName: string) {
const { ctx } = this;
// console.log('***', page, pageSize, type, serverId, current, activityId)
const list = await ActivityGroupTypeModel.findByCondition(page, pageSize, sortField, sortOrder, { groupType, groupTypeName });
const total = await ActivityGroupTypeModel.countByCondition({ groupType, groupTypeName });
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list, total
});
}
}

View File

@@ -38,7 +38,8 @@ export const COUNTER = {
SERVER_STATEGY: { name: 'stategy', def: 1 },
SERVER_GROUP: { name: 'group', def: 1 },
SERVER_BY_TYPE: { name: 'serverby', def: 1 },
SERVER: { name: 'server', def: 1 }
SERVER: { name: 'server', def: 1 },
ACTIVITY_GROUP_TYPE: { name: 'actgrptype', def: 0 }
};
export const DEFAULT_HEROES = [19, 53, 46, 40, 22, 56, 32, 28, 18];
@@ -444,7 +445,9 @@ export const FILENAME = {
DIC_ACTIVITY_TYPE: 'dic_zyz_activityType',
DIC_TASK_TYPE: 'dic_zyz_taskType',
DIC_GK_SZTM: 'dic_zyz_gk_activity_sztm',
DIC_GK_MJSD: 'dic_zyz_gk_activity_mjsd'
DIC_GK_MJSD: 'dic_zyz_gk_activity_mjsd',
DIC_SERVER_NAME: 'dic_zyz_serverName',
DIC_SERVER_GROUP_NAME: 'dic_zyz_serverGropName',
}
export const WAR_RELATE_TABLES = [

View File

@@ -76,7 +76,7 @@ export default class Activity extends BaseModel {
}
if (groupId != undefined) {
if (groupId == 0) {
let newGroup = await ActivityGroupModel.createGroup();
let newGroup = await ActivityGroupModel.createGroup(uid);
groupId = newGroup.groupId;
}
await ActivityGroupModel.addActivitiesToGroupData(groupId, aids, uid);

View File

@@ -27,11 +27,11 @@ export default class Activity_Group extends BaseModel {
//查询组
public static async createGroup() {
public static async createGroup(uid = 1) {
let groupId = await CounterModel.getNewCounter(COUNTER.ACTIVITY_GROUP);
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId }, {
$setOnInsert: { groupName: `活动组${groupId}`, activities: [], serverIds: [] }
$setOnInsert: { groupName: `活动组${groupId}`, activities: [], serverIds: [], createdBy: uid }, $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) {
public static async updateGroupName(groupId: number, groupName: string, uid = 1) {
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
{ $set: { groupName } }, { new: true }).lean(true);
{ $set: { groupName, updatedBy: uid } }, { new: true }).lean(true);
return result;
}
@@ -59,9 +59,9 @@ export default class Activity_Group extends BaseModel {
public static async setActivitiesToGroupData(groupId: number, activities: number[], uid = 1) {
await this.pullByActivityIds(activities, uid); // 先将原先的删除
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
{ $set: { activities } }, { new: true }).lean(true);
{ $set: { activities, updatedBy: uid } }, { new: true }).lean(true);
await ActivityModel.updateGroupId(activities, groupId, uid);
result = await this.updateTime(result.groupId, result.activities);
result = await this.updateTime(result.groupId, result.activities, uid);
return result;
}
@@ -71,12 +71,12 @@ export default class Activity_Group extends BaseModel {
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
{ $addToSet: { activities: { $each: activities } } }, { new: true }).lean(true);
await ActivityModel.updateGroupId(activities, groupId, uid);
result = await this.updateTime(result.groupId, result.activities);
result = await this.updateTime(result.groupId, result.activities, uid);
return result;
}
// 根据包含的活动更新开始和结束时间
private static async updateTime(groupId: number, aids: number[]) {
private static async updateTime(groupId: number, aids: number[], uid = 1) {
let activities = await ActivityModel.findActivityByIds(aids);
let beginTime = undefined, endTime = undefined;
for (let activity of activities) {
@@ -84,7 +84,7 @@ export default class Activity_Group extends BaseModel {
if (!endTime || activity.endTime > endTime) endTime = activity.endTime;
}
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
{ $set: { beginTime, endTime } }, { new: true }).lean(true);
{ $set: { beginTime, endTime, updatedBy: uid } }, { new: true }).lean(true);
return result;
}
@@ -94,16 +94,16 @@ export default class Activity_Group extends BaseModel {
await ActivityModel.updateGroupId(activities, 0, uid);
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);
let result = await ActivityGroupModel.findOneAndUpdate({ groupId }, { $pull: { activities: { $in: activities } }, $set: { updatedBy: uid } }, { new: true }).lean(true);
await this.updateTime(result.groupId, result.activities);
}
}
//更新服务器
public static async updateServerData(groupId: number, serverIds: number[]) {
public static async updateServerData(groupId: number, serverIds: number[], uid = 1) {
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
{ $set: { serverIds } }, { new: true }).lean(true);
{ $set: { serverIds, updatedBy: uid } }, { new: true }).lean(true);
return result;
}

View File

@@ -0,0 +1,78 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { CounterModel } from './Counter';
import { COUNTER, ACTIVITY_TYPE } from '../consts';
/**
* 活动合集
*/
@index({ activityId: 1 })
class ActivityType {
@prop({ required: true })
index: number; // 活动集合内部id防止activityType有重复的情况
@prop({ required: true, enum: ACTIVITY_TYPE })
activityType: ACTIVITY_TYPE; // 活动类型
}
export default class Activity_GroupType extends BaseModel {
@prop({ required: true })
groupType: number; // 类型id创建时自增
@prop({ required: true })
groupTypeName: string; // 类型名
@prop({ required: true, type: ActivityType, _id: false })
activityTypes: ActivityType[]; // 活动类型集合
public static async createActivityGroupType(groupTypeName: string, types: number[], uid = 1) {
let activityTypes = types.map((value, index) => {
return { index: index + 1, activityType: value };
});
let groupType = await CounterModel.getNewCounter(COUNTER.ACTIVITY_GROUP_TYPE);
let result: ActivityGroupTypeInter = await ActivityGroupTypeModel.findOneAndUpdate({ groupType }, {
$setOnInsert: { groupTypeName, activityTypes, createdBy: uid }, $set: { updatedBy: uid }
}, { new: true, upsert: true }).lean();
return result;
}
private static getSearchObj(form: { groupType?: number, groupTypeName?: string }) {
let searchObj = {};
if(form.groupType != undefined) searchObj['groupType'] = form.groupType;
if(form.groupTypeName != undefined) searchObj['groupTypeName'] = form.groupTypeName;
return searchObj;
}
//查询
public static async findByCondition(page: number, pageSize: number, sortField: string, sortOrder: string, form: { groupType?: number, groupTypeName?: string } = {}) {
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: ActivityGroupTypeInter[] = await ActivityGroupTypeModel.find(searchObj, { _id: 0 }).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
return result;
}
// 获得活动数量
public static async countByCondition(form: { groupType?: number, groupTypeName?: string } = {}) {
let searchObj = this.getSearchObj(form);
const result = await ActivityGroupTypeModel.count(searchObj);
return result;
}
}
export const ActivityGroupTypeModel = getModelForClass(Activity_GroupType);
export interface ActivityGroupTypeInter extends Pick<DocumentType<Activity_GroupType>, keyof Activity_GroupType> {
id: number;
};
export type ActivityGroupTypeUpdate = Partial<ActivityGroupTypeInter>; // 将所有字段变成可选项

View File

@@ -4,6 +4,7 @@ import { GameModel } from './Game';
import { CounterModel } from './Counter';
import { COUNTER } from '../consts';
import { ServerStategyTypeParam } from './ServerStategy';
import { getServerName, getServerGroupName } from '../pubUtils/data';
// 暂时服务器列表是从game表取的之后会转移到使用这张表目前用作查询该服战力中位数
@@ -99,11 +100,11 @@ export default class Serverlist extends BaseModel {
if(groupServerCount > 10) {
groupId = await CounterModel.getNewCounter(COUNTER.SERVER_GROUP);
}
let groupName = '逍遥津' + groupId;
let groupName = getServerGroupName(groupId)||"";
let serverId = await CounterModel.getNewCounter({ name: `${COUNTER.SERVER_BY_TYPE.name}_${serverType}`, def: COUNTER.SERVER_BY_TYPE.def });
let id = await CounterModel.getNewCounter(COUNTER.SERVER);
if(!name) name = '出师表' + id
if(!name) name = getServerName(id)||"";
const doc = new ServerlistModel();
const update = Object.assign(doc.toJSON(), params, { id, serverId, host, groupId, groupName, name, createdBy: uid, updatedBy: uid }, { activityGroupId: stategy.activityGroupId, maxPlayerCnt: stategy.maxPlayerCnt});

View File

@@ -84,6 +84,7 @@ import { dicRecruit, loadRecruit } from './dictionary/DicRecruit';
import { loadRMB, dicRMB } from './dictionary/DicRMB';
import { dicActivityType, loadActivityType } from './dictionary/DicActivityType';
import { dicTaskTypeDesc, loadTaskType } from './dictionary/DicTaskType';
import { dicServerName, dicServerGroupName, loadServerName } from "./dictionary/DicServerName";
export const gameData = {
blurprtCompose: dicBlueprtCompose,
@@ -204,7 +205,9 @@ export const gameData = {
recruit: dicRecruit,
rmb: dicRMB,
activityType: dicActivityType,
taskTypeDesc: dicTaskTypeDesc
taskTypeDesc: dicTaskTypeDesc,
serverNames: dicServerName,
serverGroupNames: dicServerGroupName,
};
// 在此提供一些原先在gamedata中提供的方法以便更方便获取gameData数据
@@ -668,6 +671,36 @@ function getHeroTransPiece() {
gameData.heroTransPiece = newMap
}
// 根据groupId获得当前大区名
export function getServerGroupName(groupId: number) {
let name = gameData.serverGroupNames.get(groupId);
if(!name) {
let maxId = 0;
gameData.serverGroupNames.forEach((gname, id) => {
if(id > maxId) {
maxId = id;
name = gname;
}
})
}
return name;
}
// 根据服务器id获得当前大区名
export function getServerName(id: number) {
let name = gameData.serverNames.get(id);
if(!name) {
let maxId = 0;
gameData.serverNames.forEach((sname, id) => {
if(id > maxId) {
maxId = id;
name = sname;
}
})
}
return name;
}
// 初始加载
function initDatas() {
parseDicParam();
@@ -765,6 +798,7 @@ function loadDatas() {
loadRMB();
loadActivityType();
loadTaskType();
loadServerName();
}
// 重载dicParam

View File

@@ -0,0 +1,35 @@
// 武将特技表
import { readFileAndParse } from '../util'
import { FILENAME } from '../../consts'
export interface DicServerName {
// id
readonly id: number;
// 小区名
readonly name: string;
}
export const dicServerName = new Map<number, string>();
export const dicServerGroupName = new Map<number, string>();
export function loadServerName() {
{
let arr = readFileAndParse(FILENAME.DIC_SERVER_NAME);
arr.forEach(o => {
let { id, sname } = o;
dicServerName.set(id, sname);
});
arr = undefined;
}
{
let arr = readFileAndParse(FILENAME.DIC_SERVER_GROUP_NAME);
arr.forEach(o => {
let { id, groupName } = o;
dicServerGroupName.set(id, groupName);
});
arr = undefined;
}
}