🐞 fix(37需求): 注销冷却提示需求

This commit is contained in:
luying
2023-04-18 17:28:44 +08:00
parent e071b411bc
commit 3bf0f7a35e
3 changed files with 18 additions and 3 deletions

View File

@@ -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: '缺少关卡信息' },

View File

@@ -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;
}
}

View File

@@ -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 });
}