From 3bf0f7a35e3325b14954066d537c11b5fc3d80cc Mon Sep 17 00:00:00 2001 From: luying Date: Tue, 18 Apr 2023 17:28:44 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(37=E9=9C=80=E6=B1=82):=20?= =?UTF-8?q?=E6=B3=A8=E9=94=80=E5=86=B7=E5=8D=B4=E6=8F=90=E7=A4=BA=E9=9C=80?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/consts/statusCode.ts | 1 + shared/db/Role.ts | 4 +++- web-server/app/service/Auth.ts | 16 ++++++++++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index ffadb674d..97fd5f77a 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -56,6 +56,7 @@ export const STATUS = { SERVER_STOP_REGISTER: { code: 10020, simStr: '服务器已停止注册' }, ROLE_CLOSE_TIME_OVER: { code: 10021, simStr: '该账号已注销不可再取消' }, ROLE_CLOSED: { code: 10022, simStr: '该账号已注销' }, + ROLE_CLOSE_COOL_DOWN: { code: 10023, simStr: '注销冷却中' }, // 战斗相关状态 20000 - 29999 // 战斗通用 20000 - 20099 BATTLE_MISS_INFO: { code: 20001, simStr: '缺少关卡信息' }, diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 65ebc12d0..cf6ea8aeb 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -357,6 +357,8 @@ export default class Role extends BaseModel { @prop({ required: true, select: false }) closeTime: number; + @prop({ required: true, select: false }) + cancelCloseTime: number; public static async findAllByUid(uid: number, getters = false, virtuals = true) { const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime +closeTime').lean({ getters, virtuals }); @@ -868,7 +870,7 @@ export default class Role extends BaseModel { } public static async cancelCloseAccount(roleId: string, now: number) { - let role: RoleType = await RoleModel.findOneAndUpdate({ roleId, closeTime: { $gte: now } }, { $set: { closeTime: 0 } }, { new: true }).select('roleId +closeTime').lean(); + let role: RoleType = await RoleModel.findOneAndUpdate({ roleId, closeTime: { $gte: now } }, { $set: { closeTime: 0, cancelCloseTime: now } }, { new: true }).select('roleId +closeTime').lean(); return role; } } diff --git a/web-server/app/service/Auth.ts b/web-server/app/service/Auth.ts index e152206f0..9dd4a623e 100644 --- a/web-server/app/service/Auth.ts +++ b/web-server/app/service/Auth.ts @@ -486,14 +486,26 @@ export default class Auth extends Service { public async closeAccount(roleId: string) { const ctx = this.ctx; - let role = await RoleModel.closeAccount(roleId, nowSeconds() + 15 * 24 * 60 * 60); + let role = await RoleModel.findByRoleId(roleId, '+cancelCloseTime'); if(!role) return ctx.service.utils.resResult(STATUS.ROLE_NOT_FOUND); + if(role.cancelCloseTime > 0 && role.cancelCloseTime + 24 * 60 * 60 > nowSeconds() ) + return ctx.service.utils.resResult(STATUS.ROLE_CLOSE_COOL_DOWN, `注销冷却中,请${this.getCdTimeStr(role.cancelCloseTime)}后再试`); + + role = await RoleModel.closeAccount(roleId, nowSeconds() + 15 * 24 * 60 * 60); return ctx.service.utils.resResult(STATUS.SUCCESS, { closeTime: role.closeTime }); } + private getCdTimeStr(cancelCloseTime: number) { + let gap = cancelCloseTime + 24 * 60 * 60 - nowSeconds(); + let h = Math.floor(gap/60/60); + let m = Math.floor((gap - h * 60 * 60 )/60); + let s = gap - h * 60 * 60 - m * 60; + return `${h}小时${m}分${s}秒` + } + public async cancelCloseAccount(roleId: string) { const ctx = this.ctx; - let role = await RoleModel.cancelCloseAccount(roleId, nowSeconds() + 15 * 24 * 60 * 60); + let role = await RoleModel.cancelCloseAccount(roleId, nowSeconds()); if(!role) return ctx.service.utils.resResult(STATUS.ROLE_CLOSE_TIME_OVER); return ctx.service.utils.resResult(STATUS.SUCCESS, { closeTime: role.closeTime }); }