feat(37): 根据子包信息获取大区地址的接口和后台

This commit is contained in:
liangtongchuan
2023-03-28 17:01:35 +08:00
parent ee1df7984c
commit f7344aed85
9 changed files with 212 additions and 0 deletions

View File

@@ -57,6 +57,30 @@ export default class GameController extends Controller {
return
}
// getPackages
public async getPackages() {
const { ctx } = this;
const { regionId, pid, gid, pkgName } = ctx.request.body;
ctx.body = await ctx.service.game.getPackages({ regionId, pid, gid, pkgName });
return;
}
// createNewPackage
public async createNewPackage() {
const { ctx } = this;
const { regionId, pkgName, pkgDesc, pid, gid, isOpen } = ctx.request.body;
ctx.body = await ctx.service.game.createNewPackage(regionId, pid, gid, pkgName, pkgDesc, isOpen);
return;
}
// editPackage
public async editPackage() {
const { ctx } = this;
const { regionId, pkgName, pkgDesc, pid, gid, isOpen } = ctx.request.body;
ctx.body = await ctx.service.game.editPackage(regionId, pid, gid, pkgName, pkgDesc, isOpen);
return;
}
public async getChannelInfo() {
const { ctx } = this;

View File

@@ -46,6 +46,9 @@ export default (app: Application) => {
router.post('/api/game/getregions', tokenParser, controller.game.getRegions);
router.post('/api/game/createregion', tokenParser, controller.game.createRegion);
router.post('/api/game/getservers', tokenParser, controller.game.getServers);
router.post('/api/game/getpackages', tokenParser, controller.game.getPackages);
router.post('/api/game/createnewpackage', tokenParser, controller.game.createNewPackage);
router.post('/api/game/editpackage', tokenParser, controller.game.editPackage);
router.post('/api/game/getOnlineUsersByServer', controller.game.getOnlineUsersByServer);
router.post('/api/game/getregionstategy', tokenParser, controller.game.getRegionStategy);
router.post('/api/game/getwhitelist', tokenParser, controller.game.getWhiteList);

View File

@@ -1,3 +1,4 @@
import { PackageModel } from '@db/Package';
import { Service } from 'egg';
import { REDIS_KEY, STATUS } from '@consts';
import { ServerlistModel } from '@db/Serverlist';
@@ -66,6 +67,41 @@ export default class Game extends Service {
});
}
// 获取推广包
public async getPackages(queryParams: {regionId: number, pkgName: string, gid: string, pid: string}) {
const { ctx } = this;
const list = await PackageModel.getPackagesByQuery(queryParams);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list
});
}
// 创建新的推广包
public async createNewPackage(regionId: number, pid: string, gid: string, pkgName: string, pkgDesc: string, isOpen = true) {
const { ctx } = this;
const packageInfo = await PackageModel.createNewPackage({regionId, pkgName, pkgDesc, pid, gid, isOpen}, ctx.user?.uid);
if (!packageInfo) {
return ctx.service.utils.resResult(STATUS.PACKAGE_CREATE_FAILED);
}
const list = await PackageModel.getAllPackagesByRegionId(regionId);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list
});
}
// 更新推广包
public async editPackage(regionId: number, pid: string, gid: string, pkgName: string, pkgDesc: string, isOpen = true) {
const { ctx } = this;
const packageInfo = await PackageModel.updatePackage({regionId, pkgName, pkgDesc, pid, gid, isOpen}, ctx.user?.uid);
if (!packageInfo) {
return ctx.service.utils.resResult(STATUS.PACKAGE_UPDATE_FAILED);
}
const list = await PackageModel.getAllPackagesByRegionId(regionId);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list
});
}
public async getChannelInfo() {
const { ctx } = this;

View File

@@ -24,6 +24,10 @@ export const STATUS = {
UPDATE_INFO_ERR: {code: 1004, simStr: '热更新配置错误'},
DEBUG_FUNCTION_ERR: {code: 1005, simStr: '功能逻辑已改debug接口不再提供'},
DEVELOP_ONLY: {code: 1006, simStr: '只有测试环境才可以使用该接口'},
PACKAGE_NOT_FOUND: {code: 1007, simStr: '您的版本未被支持,请前往应用商店重新下载或联系客服解决'},
REGION_NOT_FOUND: {code: 1008, simStr: '未找到此版本对应区服'},
PACKAGE_CREATE_FAILED: {code: 1009, simStr: '创建子包失败'},
PACKAGE_UPDATE_FAILED: {code: 1010, simStr: '更新子包失败'},
// http请求
REQUEST_TIME_OUT: { code: 2000, simStr: '请求超时' },

95
shared/db/Package.ts Normal file
View File

@@ -0,0 +1,95 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';
import { genCode } from '../pubUtils/util';
/**
* 推广包数据
*/
@index({ gid: 1, pid: 1 })
export default class Package extends BaseModel {
@prop({ required: true })
regionId: number; // 大区id
// @prop({ required: true })
// regionName: string; // 大区名
@prop({ required: true })
packageCode: string; // 包唯一 id
@prop({ required: true })
gid: string; // 37 childGameId
@prop({ required: true })
pid: string; // 37 platformId
@prop({ required: true })
pkgName: string; // 包名
@prop({ required: true })
pkgDesc: string; // 包描述
@prop({ required: true, default: false })
isOpen: boolean; // 是否开启
public static async createNewPackage(params: PackageUpdate, uid = 1) {
const { gid, pid } = params;
let rec: PackageType | null = await PackageModel.findOne({ gid, pid }).lean();
if (rec) {
return rec;
}
const packageCode = genCode(6);
rec = await PackageModel.findOneAndUpdate({ gid, pid }, { $setOnInsert: { ...params, packageCode, createdBy: uid}, $set: { updatedBy: uid } }, { new: true, upsert: true }).lean();
return rec;
}
// 更新推广包的可更新字段
public static async updatePackage(params: PackageUpdate, uid = 1) {
const { gid, pid, regionId } = params;
if (!gid || !pid || !regionId) {
return null;
}
const rec: PackageType | null = await PackageModel.findOneAndUpdate({ gid, pid, regionId }, { $set: { ...params, updatedBy: uid } }, { new: true }).lean();
return rec;
}
public static async getPackageByGidPid(gid: string, pid: string, isOpen = true) {
const rec: PackageType | null = await PackageModel.findOne({ gid, pid, isOpen }).lean();
return rec;
}
// 获取所有包
public static async getAllPackages() {
const recs: PackageType[] = await PackageModel.find().lean();
return recs;
}
// 根据大区id获取所有包
public static async getAllPackagesByRegionId(regionId: number) {
const recs: PackageType[] = await PackageModel.find({ regionId }).lean();
return recs;
}
// 获取符合查询条件的子包
public static async getPackagesByQuery(params: PackageUpdate) {
const queryParams = Object.keys(params).reduce((acc, key) => {
if (!!params[key]) {
acc[key] = params[key];
}
return acc;
}, {});
const recs: PackageType[] = await PackageModel.find(queryParams).lean();
return recs;
}
}
export let PackageModel: ReturnModelType<typeof Package, {}>;
export function loadPackageModel(connect: mongoose.Connection) {
PackageModel = getModelForClass(Package, {
existingConnection: connect
});
}
export interface PackageType extends Pick<DocumentType<Package>, keyof Package> { };
export type PackageUpdate = Partial<PackageType>; // 将所有字段变成可选项

View File

@@ -12,6 +12,7 @@ import { loadActivityGroup } from "./ActivityGroup";
import { loadActivityGroupType } from "./ActivityGroupType";
import { loadActivityTaskPoint } from "./ActivityTaskPoint";
import { loadChannelInfo } from "./ChannelInfo";
import { loadPackageModel } from "./Package";
export function loadGmDb(connect: mongoose.Connection) {
// console.log('************')
@@ -28,4 +29,5 @@ export function loadGmDb(connect: mongoose.Connection) {
loadMarqueeModel(connect);
loadActivityTaskPoint(connect);
loadChannelInfo(connect);
loadPackageModel(connect);
}

View File

@@ -950,5 +950,27 @@
"name": "武将所有装备强化、升品、升星到当前最高",
"module": "user",
"type": "update"
},
{
"id": 137,
"api": "/api/game/getpackages",
"name": "获取大区的子包",
"module": "server",
"type": "find"
},
{
"id": 138,
"api": "/api/game/createnewpackage",
"name": "创建一个新的子包",
"module": "server",
"type": "find"
},
{
"id": 139,
"api": "/api/game/editpackage",
"name": "编辑子包",
"module": "server",
"type": "find"
}
]

View File

@@ -19,6 +19,7 @@ import { getLocalRplUrl, getRemoteRplUrl } from 'app/pubUtils/battleUtils'
import { ChannelInfoModel } from '@db/ChannelInfo';
import { GVGVestigeRecModel } from '@db/GVGVestigeRec';
import { GVGBattleRecModel } from '@db/GVGBattleRec';
import { PackageModel } from '@db/Package';
const sendToWormhole = require('stream-wormhole');
const pump = require('mz-modules/pump');
@@ -278,4 +279,28 @@ export default class GameController extends Controller {
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { rplUrl: remoteUrl });
return;
}
// 根据 pid 和 gid 获取大区地址
public async getRegionAddr() {
const { ctx } = this;
const { pid, gid } = ctx.request.body;
if (!pid || !gid) {
ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
return;
}
const pkg = await PackageModel.getPackageByGidPid(gid, pid);
if (!pkg) {
ctx.body = ctx.service.utils.resResult(STATUS.PACKAGE_NOT_FOUND);
return;
}
const { regionId } = pkg;
const region = await RegionModel.findRegionById(regionId);
if (!region) {
ctx.body = ctx.service.utils.resResult(STATUS.REGION_NOT_FOUND);
return;
}
const { webHost } = region;
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { webHost });
return;
}
}

View File

@@ -30,6 +30,7 @@ export default (app: Application) => {
router.post('/update/getupdateurl', controller.update.getUpdateUrl);
router.post('/web/reloadresource', app.middleware.gmTokenParser(), controller.game.reloadResource);
router.post('/web/upload', controller.game.upload);
router.post('/game/getregionaddr', controller.game.getRegionAddr);
// sdk 回调