/** * 授权服务 * 提供账号授权检查功能 */ const db = require('../middleware/dbProxy'); const dayjs = require('dayjs'); class AuthorizationService { /** * 检查账号授权状态 * @param {string|number} identifier - 账号标识(sn_code 或 id) * @param {string} identifierType - 标识类型:'sn_code' 或 'id' * @returns {Promise} 授权检查结果 {is_authorized: boolean, remaining_days: number, message: string} */ async checkAuthorization(identifier, identifierType = 'sn_code') { const pla_account = db.getModel('pla_account'); const where = {}; where[identifierType] = identifier; const account = await pla_account.findOne({ where }); if (!account) { return { is_authorized: false, remaining_days: 0, message: '账号不存在' }; } const accountData = account.toJSON(); const authDate = accountData.authorization_date; const authDays = accountData.authorization_days || 0; // 如果没有授权信息,默认不允许 if (!authDate || authDays <= 0) { return { is_authorized: false, remaining_days: 0, message: '账号未授权,请联系管理员' }; } // 计算剩余天数 const startDate = dayjs(authDate); const endDate = startDate.add(authDays, 'day'); const now = dayjs(); const remaining = endDate.diff(now, 'day', true); const remaining_days = Math.max(0, Math.ceil(remaining)); if (remaining_days <= 0) { return { is_authorized: false, remaining_days: 0, message: '账号授权已过期,请联系管理员续费' }; } return { is_authorized: true, remaining_days: remaining_days, message: `授权有效,剩余 ${remaining_days} 天` }; } /** * 检查账号授权状态(快速检查,只返回是否授权) * @param {string|number} identifier - 账号标识(sn_code 或 id) * @param {string} identifierType - 标识类型:'sn_code' 或 'id' * @returns {Promise} 是否授权 */ async isAuthorized(identifier, identifierType = 'sn_code') { const result = await this.checkAuthorization(identifier, identifierType); return result.is_authorized; } } module.exports = new AuthorizationService();