feat: 月报统计(总);查询的月报数据自动保存

This commit is contained in:
bietiaop 2024-10-04 11:23:31 +08:00
parent 9f8d5dc1f6
commit dcf04636c2
12 changed files with 739 additions and 62 deletions

View file

@ -51,12 +51,11 @@ export const getAvatarInfoList = async (api, origin = false) => {
/**
* 刷新面板
* @param {MysZZZApi} api
* @param {string} uid
* @returns {Promise<ZZZAvatarInfo[] | null>}
*/
export const refreshPanel = async (api, uid) => {
export const refreshPanel = async api => {
// 获取已保存数据
const originData = getPanelData(uid);
const originData = getPanelData(api.uid);
// 获取新数据
const newData = await getAvatarInfoList(api, true);
if (!newData) return null;
@ -73,7 +72,7 @@ export const refreshPanel = async (api, uid) => {
}
}
// 保存数据
savePanelData(uid, finalData);
savePanelData(api.uid, finalData);
// 格式化数据
finalData.forEach(item => {
item.isNew = !!newData.find(i => i.id === item.id);

View file

@ -31,3 +31,19 @@ export function getPanelData(uid) {
export function savePanelData(uid, data) {
setDB('panel', uid, data);
}
/**
* @param {string} uid
* @returns {Array<object>}
*/
export function getMonthlyData(uid) {
return getDB('monthly', uid) || [];
}
/**
* @param {string} uid
* @param {Array<object>} data
*/
export function saveMonthlyData(uid, data) {
setDB('monthly', uid, data);
}

View file

@ -5,6 +5,7 @@ import { dataPath } from '../path.js';
export const dbPath = {
gacha: 'gacha',
panel: 'panel',
monthly: 'monthly',
};
/**

63
lib/monthly.js Normal file
View file

@ -0,0 +1,63 @@
import { getMonthlyData, saveMonthlyData } from './db.js';
import MysZZZApi from './mysapi.js';
import _ from 'lodash';
/**
* 保存月度数据
* @param {string} uid
* @param {object} newData
*/
export const saveMonthlyNewData = (uid, ...newDatas) => {
// 获取先前月度数据
const savedData = getMonthlyData(uid);
// 合并新旧数据
const mergedData = _.unionBy(newDatas, savedData, 'data_month').sort(
(a, b) => a.data_month - b.data_month
);
// 保存数据
saveMonthlyData(uid, mergedData);
return mergedData.reverse();
};
/**
* 获取月度数据
* @param {MysZZZApi} api
* @param {string} month
* @returns {Promise<object | null>}
*/
export const getMonthly = async (api, month) => {
// 获取月度数据
const data = await api.getFinalData('zzzMonthly', {
query: { month },
});
saveMonthlyNewData(api.uid, data);
return data;
};
/**
* 月度数据统计
* @param {MysZZZApi} api
* @returns {Promise<object | null>}
*/
export const getMonthlyCollect = async api => {
// 获取当前月度数据
const currentData = await getMonthly(api, '');
if (!currentData) return null;
const newDatas = [currentData];
// 获取所有可查询月份
const availableData = currentData.optional_month.filter(
month => month !== currentData.data_month
);
for (const month of availableData) {
const data = await getMonthly(api, month);
if (data) newDatas.push(data);
}
// 合并新旧数据
const mergedData = saveMonthlyNewData(api.uid, ...newDatas);
return mergedData;
};