import {IJsonCourse} from "./types" import {getTimeNow, logAndNotifyUser, resetCookie, sduAxios, sleep} from "./includes" import {appConfig} from "./config" import * as qs from "qs" export let reqBody = 'sEcho=1&iColumns=15&sColumns=&iDisplayStart=0&iDisplayLength=2000&mDataProp_0=kch&mDataProp_1=kcmc&mDataProp_2=kxhnew&mDataProp_3=jkfs&mDataProp_4=xmmc&mDataProp_5=fzmc&mDataProp_6=ktmc&mDataProp_7=xf&mDataProp_8=skls&mDataProp_9=sksj&mDataProp_10=skdd&mDataProp_11=xqmc&mDataProp_12=syrs&mDataProp_13=ctsm&mDataProp_14=czOper' let currentErrorCount = 0 let totalErrorCount = 0 export const JsonCourseList = <{ bx: IJsonCourse[], xx: IJsonCourse[], rx: IJsonCourse[] }>{ bx: [], xx: [], rx: [] } async function updateBx() { try { let resp = await sduAxios.post('/jsxsd/xsxkkc/xsxkBxxk?1=1&kcxx=&skls=&skfs=&xqid=', reqBody) if (resp.data.aaData.length) { JsonCourseList.bx.length = 0 JsonCourseList.bx.push(...resp.data.aaData) } } catch (_e) { console.log('获取必修JsonList失败 at ' + getTimeNow()) await processError(_e as Error) } } async function updateXx() { try { let resp = await sduAxios.post('/jsxsd/xsxkkc/xsxkXxxk?1=1&kcxx=&skls=&skfs=&xqid=', reqBody) if (resp.data.aaData.length) { JsonCourseList.xx.length = 0 JsonCourseList.xx.push(...resp.data.aaData) } } catch (_e) { console.log('获取限选JsonList失败 at ' + getTimeNow()) await processError(_e as Error) } } async function updateRx() { try { let resp = await sduAxios.post('/jsxsd/xsxkkc/xsxkGgxxkxk?kcxx=&skls=&skxq=&skjc=&sfym=false&sfct=false&szjylb=&sfxx=true&skfs=&xqid=', reqBody) if (resp.data.aaData.length) { JsonCourseList.rx.length = 0 JsonCourseList.rx.push(...resp.data.aaData) } } catch (_e) { console.log('获取任选JsonList失败 at ' + getTimeNow()) await processError(_e as Error) } } export async function poll() { if (appConfig.channels.includes('bx')) { await updateBx() await sleep(appConfig.interval) } if (appConfig.channels.includes('xx')) { await updateXx() await sleep(appConfig.interval) } if (appConfig.channels.includes('rx')) { await updateRx() await sleep(appConfig.interval) } setImmediate(poll) } async function processError(e: Error) { currentErrorCount++ if (currentErrorCount >= 30) { console.log('[error]出现轮询error过多,进行重新登录。上一次异常信息:' + e.message) try { await resetCookie() currentErrorCount = 0 } catch (_e) { console.log('[error]重新登录失败') } if (totalErrorCount != -1) { totalErrorCount++ } } if (totalErrorCount >= 10) { logAndNotifyUser('[error]重新登录失败次数过多,请检查 at ' + getTimeNow()) totalErrorCount = -1 } }