Files
autoAiWorkSys/api/utils/account_utils.js
张成 10aff2f266 1
2025-12-19 22:24:23 +08:00

83 lines
2.4 KiB
JavaScript

/**
* 账号工具函数
* 提供账号相关的工具方法
*/
const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
const timezone = require('dayjs/plugin/timezone');
// 启用 UTC 和时区插件
dayjs.extend(utc);
dayjs.extend(timezone);
/**
* 计算剩余天数(使用 UTC 时间避免时区问题)
* @param {Date|string|null} authorizationDate - 授权日期
* @param {number} authorizationDays - 授权天数
* @returns {number} 剩余天数
*/
function calculateRemainingDays(authorizationDate, authorizationDays) {
if (!authorizationDate || !authorizationDays || authorizationDays <= 0) {
return 0;
}
// 使用 UTC 时间计算,避免时区问题
const startDate = dayjs(authorizationDate).utc().startOf('day');
const endDate = startDate.add(authorizationDays, 'day');
const now = dayjs().utc().startOf('day');
// 计算剩余天数
const remaining = endDate.diff(now, 'day', false); // 使用整数天数
return Math.max(0, remaining);
}
/**
* 检查授权是否有效
* @param {Date|string|null} authorizationDate - 授权日期
* @param {number} authorizationDays - 授权天数
* @returns {boolean} 授权是否有效
*/
function isAuthorizationValid(authorizationDate, authorizationDays) {
const remainingDays = calculateRemainingDays(authorizationDate, authorizationDays);
return remainingDays > 0;
}
/**
* 为账号对象添加 remaining_days 字段
* @param {Object} account - 账号对象(可以是 Sequelize 实例或普通对象)
* @returns {Object} 添加了 remaining_days 的账号对象
*/
function addRemainingDays(account) {
// 如果是 Sequelize 实例,转换为普通对象
const accountData = account.toJSON ? account.toJSON() : account;
const authDate = accountData.authorization_date;
const authDays = accountData.authorization_days || 0;
accountData.remaining_days = calculateRemainingDays(authDate, authDays);
return accountData;
}
/**
* 为账号数组添加 remaining_days 字段
* @param {Array} accounts - 账号数组
* @returns {Array} 添加了 remaining_days 的账号数组
*/
function addRemainingDaysToAccounts(accounts) {
if (!Array.isArray(accounts)) {
return accounts;
}
return accounts.map(account => addRemainingDays(account));
}
module.exports = {
calculateRemainingDays,
isAuthorizationValid,
addRemainingDays,
addRemainingDaysToAccounts
};