import { GIFT_GENERATE_TYPE, GM_MAIL_TYPE, MAIL_TIME_TYPE } from "../../consts"; import { isArray, isNumber, isString } from 'underscore'; import ServerStategy, { GMMail } from "../../db/ServerStategy"; import { RegionType } from "../../db/Region"; import { RewardInter } from "../../pubUtils/interface"; import { isTimestamp, parseNumberList } from '../../pubUtils/util'; import { isBoolean, isDate } from "util"; export class UpdateMailParams { hasGoods: boolean = false; // 是否有道具 goods: {id: number; count: number}[]; timeType: MAIL_TIME_TYPE; // 邮件时间类型 expire: number; // 有效时间,单位小时 startTime: number; // 发送时间,延时邮件使用 circleStart: number; // 循环邮件开始循环时间 circleEnd: number; // 循环邮件结束循环时间 circleDay: number; // 循环时间,每周几,0表示每天 circleHour: string; // 几点发送 title: string; content: string; sendName: string; mailType: GM_MAIL_TYPE; // 收件人类型 receivers: {env: string; serverId: number; roleId: string; roleName: string; rewards: {id: number; count: number}[] }[]; reason: string; // 原因 isSp: boolean = false; // 特殊邮件 isSingle: boolean; constructor(obj: UpdateMailParams) { this.goods = obj.goods; if(obj.goods && obj.goods?.length > 0) this.hasGoods = true; this.timeType = obj.timeType; this.expire = obj.expire; this.startTime = obj.startTime; this.circleStart = obj.circleStart; this.circleEnd = obj.circleEnd; this.circleDay = obj.circleDay; this.circleHour = obj.circleHour; this.title = obj.title; this.content = obj.content; this.sendName = obj.sendName; if(obj.isSingle == true) { this.mailType = GM_MAIL_TYPE.SINGLE; } else if (obj.isSingle == false) { this.mailType = GM_MAIL_TYPE.SERVER; } this.receivers = obj.receivers; if(obj.receivers && obj.receivers.length > 0) { for(let { rewards } of obj.receivers) { console.log('#### rewards', rewards) if(rewards && rewards.length > 0) this.hasGoods = true; } } this.reason = obj.reason; this.isSp = obj.isSp; } checkParams() { if(!this.title || !this.content || !this.sendName) return false; if(this.reason && !isString(this.reason)) return false; if(this.timeType == MAIL_TIME_TYPE.IMMEDIATE) { if(!this.expire) return false; } else if (this.timeType == MAIL_TIME_TYPE.DELAY) { if(!this.expire || !this.startTime) return false; } else if (this.timeType == MAIL_TIME_TYPE.CIRCLE) { if(!this.expire || !this.circleStart || !this.circleEnd || this.circleDay == undefined || !this.circleHour) return false; } if(!this.receivers || !isArray(this.receivers)) return false; if(!this.mailType) return false; for(let { serverId, roleId, roleName } of this.receivers) { if(!serverId) return false; if(this.mailType == GM_MAIL_TYPE.SINGLE||this.mailType == GM_MAIL_TYPE.GROUP) { if(!roleId || !roleName) return false; } } return true; } } export class UpdateRegionParams { id: number|'new' = 0; // 大区id name: string = ''; // 大区名 prefix: string = ''; // 区名前缀 remark: string = ''; minVersion: string = ''; whitelistVersion: string = ''; curVersion: string = ''; updateResUrl: string = ''; reviewVersion: string = ''; reviewEnv: string = ''; addressType: number = 0; maxPlayerCnt: number = 0; type: number = 0; timers: string[]; activityGroupId: number[] = []; openMail?: GMMail; // circleMail?: GMMail; stopRegisterTime: number = 0; isOpen: boolean = false; hasOpenMail: boolean = false; // hasCircleMail: boolean = false; constructor(obj: UpdateRegionParams) { for(let key in obj) { this[key] = obj[key]; } } checkParams() { if(!this.id || !this.name || !this.prefix || !isString(this.minVersion)|| !isString(this.whitelistVersion) || !isString(this.curVersion) || !isString(this.updateResUrl)) { // console.log('1111', !this.id, !this.name, !this.prefix, !isString(this.minVersion),!isString(this.curVersion), !isString(this.updateResUrl)) return false } if(this.isOpen && (!this.maxPlayerCnt || !isArray(this.activityGroupId) || this.activityGroupId.length <= 0 )) { // console.log('2222') return false } return true; } getUpdateParam(oldRegion?: RegionType) { if(!oldRegion) { let stategy = new ServerStategy(this); return { name: this.name, prefix: this.prefix, remark: this.remark, minVersion: this.minVersion, whitelistVersion: this.whitelistVersion, curVersion: this.curVersion, reviewVersion: this.reviewVersion, reviewEnv: this.reviewEnv, updateResUrl: this.updateResUrl, addressType: this.addressType, stategy } } else { let stategy = new ServerStategy(this); return { name: this.name||oldRegion.name, prefix: this.prefix||oldRegion.prefix, remark: this.remark||oldRegion.remark, minVersion: this.minVersion||oldRegion.minVersion, whitelistVersion: this.whitelistVersion||oldRegion.whitelistVersion, curVersion: this.curVersion||oldRegion.curVersion, reviewVersion: this.reviewVersion||oldRegion.reviewVersion, reviewEnv: this.reviewEnv||oldRegion.reviewEnv, updateResUrl: this.updateResUrl||oldRegion.updateResUrl, addressType: this.addressType||oldRegion.addressType, stategy: { ...(oldRegion.stategy||{}), ...stategy } } } } } export class CreateRegionParam { name: string = ''; // 大区名 prefix: string = ''; // 区名前缀 remark: string = ''; minVersion: string = ''; whitelistVersion: string = ''; env: string = ''; // 环境变量 gmLink: string; // 对应后台链接 gameHost: string; // 长链接 webHost: string; // 短链接 gmPort: number; // 后台使用的connector端口 updateResUrl: string; // 热更新资源根目录 addressType: number; // 热更新资源根目录 constructor(obj: any) { for(let key in obj) { this[key] = obj[key]; } } checkParams() { if(!this.name || !this.prefix || !this.env || !this.gmLink || !this.gameHost || !this.gmPort || !this.webHost || !isNumber(this.gmPort) || !isString(this.minVersion) || !isString(this.whitelistVersion) || !this.updateResUrl) { return false } return true; } } export class CreateServerParam { env: string = ''; openTime: number = 0; activityGroupId: number[] = []; hasOpenMail: boolean = false; openMail?: GMMail; // hasCircleMail: boolean = false; // circleMail?: GMMail; stopRegisterTime: number = 0; constructor(obj?: any) { if(obj) { for(let key in obj) { this[key] = obj[key]; } } } setByRegionStategy(region: RegionType, openTime: number) { this.env = region.env; this.openTime = openTime; if(region.stategy) { this.activityGroupId = region.stategy.activityGroupId; this.hasOpenMail = !!region.stategy.openMail; this.openMail = region.stategy.openMail; // this.hasCircleMail = !!region.stategy.circleMail; // this.circleMail = region.stategy.circleMail; this.stopRegisterTime = region.stategy.stopRegisterTime; } } checkParams() { // console.log('##### createNew', this.env, this.openTime, this.stopRegisterTime, this.hasOpenMail, this.hasCircleMail) if(!this.env || !this.openTime || !this.stopRegisterTime ) { return false } if(this.hasOpenMail && !this.openMail) return false; // if(this.hasCircleMail && !this.circleMail) return false; return true; } } export class CreateGiftCode { name: string; // 礼包码名 goods: RewardInter[]; // 奖励 beginTime: number; // 开始时间 endTime: number; // 结束时间 codeLen: number; // 礼包码位数 remark: string = ''; // 备注 generateType: GIFT_GENERATE_TYPE; // 生成类型 channel: string[] = ['all']; code: string = ''; type: number = 0; // 类型 constructor(obj: any) { this.name = obj.name; this.goods = obj.goods; this.beginTime = obj.beginTime; this.endTime = obj.endTime; this.codeLen = obj.codeLen; this.remark = obj.remark; this.generateType = obj.generateType; this.channel = obj.channel; this.code = obj.code; this.type = obj.type; } checkParams() { if(!isString(this.name)) return false; if(!isArray(this.goods)) return false; for(let { id, count } of this.goods) { if(!isNumber(id) || !isNumber(count)) return false; } if(this.type != 0 && this.type != 1 && this.type != 2) return false; if(!isTimestamp(this.beginTime) || !isTimestamp(this.endTime)) return false; if(!isNumber(this.codeLen) || this.codeLen <= 0) return false; if(this.generateType != GIFT_GENERATE_TYPE.ONE_TO_MANY && this.generateType != GIFT_GENERATE_TYPE.ONE_TO_ONE) { return false } if(this.code != undefined && !isString(this.code)) return false if(!isArray(this.channel)) return false; return true; } } export class UpdateGiftCode { id: number; name: string; // 礼包码名 goods: RewardInter[]; // 奖励 beginTime: number; // 开始时间 endTime: number; // 结束时间 codeLen: number; // 礼包码位数 remark: string = ''; // 备注 type: number; // 类型 0-游戏内 1-外链调用 constructor(id: number, obj: any) { this.id = id; this.name = obj.name; this.goods = obj.goods; this.beginTime = obj.beginTime; this.endTime = obj.endTime; this.codeLen = obj.codeLen; this.remark = obj.remark; this.type = obj.type; } checkParams() { if(!isNumber(this.id) || this.id <= 0) return false if(!isString(this.name)) return false; if(!isArray(this.goods)) return false; for(let { id, count } of this.goods) { if(!isNumber(id) || !isNumber(count)) return false; } if(!isTimestamp(this.beginTime) || !isTimestamp(this.endTime)) return false; if(!isNumber(this.codeLen) || this.codeLen <= 0) return false; if(this.type != 0 && this.type != 1 && this.type != 2) return false; return true; } } export class GuildFormParam { code: string; name: string; notice: string; fund: number; lv: number; equipProduce: number; boss: number; train: number; wishPool: number; store: number; donate: number; trainLv: string; constructor(obj?: any) { if(obj) { for(let key in obj) { this[key] = obj[key]; } } } checkParams() { if(!this.code || !isString(this.code)) return false; if(this.name && !isString(this.name)) return false; if(this.notice && !isString(this.notice)) return false; if(this.fund && !isNumber(this.fund)) return false; if(this.lv && !isNumber(this.lv)) return false; if(this.equipProduce && !isNumber(this.equipProduce)) return false; if(this.boss && !isNumber(this.boss)) return false; if(this.train && !isNumber(this.train)) return false; if(this.wishPool && !isNumber(this.wishPool)) return false; if(this.store && !isNumber(this.store)) return false; if(this.donate && !isNumber(this.donate)) return false; if(this.trainLv && !isString(this.trainLv)) return false; return true; } } export class SetHeroParam { lv?: number; expInc?: number; star?: number; quality?: number; colorStar?: number; job?: number; constructor(obj?: any) { if(obj) { for(let key in obj) { this[key] = obj[key]; } } } checkParams() { if(this.lv && !isNumber(this.lv)) return false; if(this.expInc && !isNumber(this.expInc)) return false; if(this.star && !isNumber(this.star)) return false; if(this.quality && !isNumber(this.quality)) return false; if(this.colorStar && !isNumber(this.colorStar)) return false; return true; } } export class UpdateActivityParam { activityIds: number[] = []; groupId: number; beginTime: Date; endTime: Date; type: number; data: string; timeType: number; days: number; delayDay: number; interval: number; name: string; hideDayByServer: number; effectDay: number; multiTime: { id: number, beginTime: Date, endTime: Date}[]; constructor(obj?: any) { if(!obj) return; if (typeof obj.activityId == 'number') { this.activityIds.push(obj.activityId); } else if (typeof obj.activityId == 'string'){ obj.activityId.split(',').forEach(aidStr => { this.activityIds.push(parseInt(aidStr)); }); } if(obj.groupId != undefined)this.groupId = obj.groupId; if(obj.beginTime != undefined) this.beginTime = new Date(obj.beginTime); if(obj.endTime != undefined) this.endTime = new Date(obj.endTime); if(obj.type != undefined) this.type = obj.type; if(obj.data != undefined) this.data = obj.data; if(obj.timeType != undefined) this.timeType = obj.timeType; if(obj.days != undefined) this.days = obj.days; this.delayDay = obj.delayDay||0; this.interval = obj.interval||0; this.effectDay = obj.effectDay||0; this.hideDayByServer = obj.hideDayByServer||0; if(obj.name != undefined) this.name = obj.name; if(obj.multiTime && obj.multiTime.length) { this.multiTime = []; for(let { id, beginTime, endTime } of obj.multiTime) { this.multiTime.push({ id, beginTime: new Date(beginTime), endTime: new Date(endTime)}) } } } checkParams() { if(this.activityIds && this.activityIds.length && this.activityIds.find(activityId => !isNumber(activityId))) return false; if(this.groupId && !isNumber(this.groupId)) return false; if(this.beginTime && !isDate(this.beginTime)) return false; if(this.endTime && !isDate(this.endTime)) return false; if(this.type && !isNumber(this.type)) return false; if(this.data && !isString(this.data)) return false; if(this.timeType && !isNumber(this.timeType)) return false; if(this.days && !isNumber(this.days)) return false; if(this.delayDay && !isNumber(this.delayDay)) return false; if(this.interval && !isNumber(this.interval)) return false; if(this.name && !isString(this.name)) return false; if(this.hideDayByServer && !isNumber(this.hideDayByServer)) return false; if(this.effectDay && !isNumber(this.effectDay)) return false; if(this.timeType == 4 && !isArray(this.multiTime)) return false; return true; } checkTime() { if(this.timeType == 4) { let t = undefined; for(let { beginTime, endTime } of this.multiTime) { if(beginTime > endTime) return false; if(t && beginTime < t) return false; t = endTime; } } return true; } } export class UpdateChannelParam { code: string; // 渠道标识 platform: string; // 渠道标识 desc: string; // 渠道描述 isDefaultPolicy: boolean; // 是否使用默认协议 userPolicyLink: string; // 用户协议 privacyPolicyLink: string; // 隐私协议 constructor(obj?: any) { if(!obj) return; this.code = obj.code; this.platform = obj.platform; this.desc = obj.desc; this.isDefaultPolicy = obj.isDefaultPolicy; this.userPolicyLink = obj.userPolicyLink; this.privacyPolicyLink = obj.privacyPolicyLink; } checkParams() { if(!this.code || !isString(this.code)) return false; if(!this.platform || !isString(this.platform)) return false; if(this.desc && !isString(this.desc)) return false; if(!isBoolean(this.isDefaultPolicy)) return false; if(this.userPolicyLink && !isString(this.userPolicyLink)) return false; if(this.privacyPolicyLink && !isString(this.privacyPolicyLink)) return false; return true; } } export class CreatePvpConfigParam { env: string = ''; seasonNum: number|'new' = 0; seasonStartTime: number = 0; seasonEndTime: number = 0; seasonRewardTime: number = 0; warIds: string = ''; constructor(obj?: any) { if(obj) { for(let key in obj) { this[key] = obj[key]; } } } checkParams() { // console.log('##### createNew', this.env, this.openTime, this.stopRegisterTime, this.hasOpenMail, this.hasCircleMail) if(this.seasonNum != 'new' && !isNumber(this.seasonNum)) return false; if(!this.env || !isNumber(this.seasonStartTime) || !isNumber(this.seasonEndTime) || !isNumber(this.seasonRewardTime) || !isString(this.warIds)) { return false } return true; } getUpdateParam() { let { seasonStartTime, seasonEndTime, seasonRewardTime, warIds } = this; return { seasonStartTime, seasonEndTime, seasonRewardTime, warIds: parseNumberList(warIds)} } } export class UpdateHiddenDataParam { env: string = ''; arr: { type: number, id: number }[] = []; publishTime: number = 0; constructor(obj?: any) { if(obj) { for(let key in obj) { this[key] = obj[key]; } } } checkParams() { // console.log('##### createNew', this.env, this.openTime, this.stopRegisterTime, this.hasOpenMail, this.hasCircleMail) if(!isArray(this.arr)) return false; for(let { type, id } of this.arr) { if(!isNumber(type) || !isNumber(id)) return false; } if(!this.env || !isNumber(this.publishTime)) { return false } return true; } }