const axios = require('axios'); const Logs = require('../libs/logs'); const GAMES = { Leagues: {}, List: {}, Baselist: {} }; /** * 精确浮点数字 * @param {number} number * @param {number} x * @returns {number} */ const fixFloat = (number, x=2) => { return parseFloat(number.toFixed(x)); } /** * 获取市场类型 */ const getMarketType = (mk) => { return mk == 0 ? 'early' : 'today'; } /** * 更新联赛列表 */ const syncLeaguesList = ({ mk, leagues }) => { axios.post('https://api.isthe.me/api/p/syncLeague', { mk, leagues }) .then(res => { Logs.out('syncLeaguesList', res.data); }) .catch(err => { Logs.out('syncLeaguesList', err.message); }); } const updateLeaguesList = ({ mk, leagues }) => { const leaguesList = GAMES.Leagues; if (JSON.stringify(leaguesList[mk]) != JSON.stringify(leagues)) { leaguesList[mk] = leagues; syncLeaguesList({ mk, leagues }); return leagues.length; } return 0; } /** * 获取筛选过的联赛 */ const getFilteredLeagues = async (mk) => { return axios.get(`https://api.isthe.me/api/p/getLeagueTast?mk=${mk}`) .then(res => { if (res.data.code == 0) { return res.data.data; } return Promise.reject(new Error(res.data.message)); }); } /** * 同步比赛列表到服务器 */ const syncGamesList = ({ platform, mk, games }) => { axios.post('https://api.isthe.me/api/p/syncGames', { platform, mk, games }) .then(res => { Logs.out('syncGamesList', res.data); }) .catch(err => { Logs.out('syncGamesList', err.message); }); } /** * 同步基准比赛列表 */ const syncBaseList = ({ marketType, games }) => { const baseList = GAMES.Baselist; if (!baseList[marketType]) { baseList[marketType] = games; } const newMap = new Map(games.map(item => [item.eventId, item])); // 删除不存在的项 for (let i = baseList[marketType].length - 1; i >= 0; i--) { if (!newMap.has(baseList[marketType][i].eventId)) { baseList[marketType].splice(i, 1); } } // 添加或更新 const oldIds = new Set(baseList[marketType].map(item => item.eventId)); games.forEach(game => { if (!oldIds.has(game.eventId)) { // 添加新项 baseList[marketType].push(game); } }); } /** * 更新比赛列表 */ const updateGamesList = (({ platform, mk, games } = {}) => { return new Promise((resolve, reject) => { if (!platform || !games) { return reject(new Error('PLATFORM_GAMES_INVALID')); } const marketType = getMarketType(mk); syncGamesList({ platform, mk, games }); if (platform == 'ps') { syncBaseList({ marketType, games }); } resolve(); }); }); /** * 同步基准盘口 */ const syncBaseEvents = ({ marketType, games, outrights }) => { const baseList = GAMES.Baselist; if (!baseList[marketType]) { return; } const baseMap = new Map(baseList[marketType].map(item => [item.eventId, item])); games?.forEach(game => { const { eventId, evtime, events } = game; const baseGame = baseMap.get(eventId); if (baseGame) { baseGame.evtime = evtime; baseGame.events = events; } }); outrights?.forEach(outright => { const { parentId, sptime, special } = outright; const baseGame = baseMap.get(parentId); if (baseGame) { baseGame.sptime = sptime; baseGame.special = special; } }); } /** * 更新比赛盘口 */ const updateGamesEvents = ({ platform, mk, games, outrights }) => { return new Promise((resolve, reject) => { if (!platform || (!games && !outrights)) { return reject(new Error('PLATFORM_GAMES_INVALID')); } const marketType = getMarketType(mk); if (platform == 'ps') { syncBaseEvents({ marketType, games, outrights }); } resolve(); }); } /** * 获取关联比赛 */ const getGamesRelation = () => { return []; } module.exports = { updateLeaguesList, getFilteredLeagues, updateGamesList, updateGamesEvents, getGamesRelation, }