|
|
@@ -0,0 +1,173 @@
|
|
|
+const db = require('../../plugin/DataBase/db')
|
|
|
+const Logger = require('../Logger')
|
|
|
+
|
|
|
+class Mcp {
|
|
|
+ constructor() {
|
|
|
+ this.logger = new Logger(path.join(__dirname, '../logs/MCP.log'), 'INFO')
|
|
|
+
|
|
|
+ this.auto_day = [
|
|
|
+ { label: '周一', value: 1 },
|
|
|
+ { label: '周二', value: 2 },
|
|
|
+ { label: '周三', value: 3 },
|
|
|
+ { label: '周四', value: 4 },
|
|
|
+ { label: '周五', value: 5 },
|
|
|
+ { label: '周六', value: 6 },
|
|
|
+ { label: '周日', value: 0 }
|
|
|
+ ]
|
|
|
+
|
|
|
+ this.autoTimeLabel = (record) => {
|
|
|
+ if (record.auto_time === -1) {
|
|
|
+ if (record.today_auto_time)
|
|
|
+ return `随机-今日${record.today_auto_time}时`
|
|
|
+ return '随机-待分配'
|
|
|
+ }
|
|
|
+ const match = auto_time.find(item => item.value === record.auto_time)
|
|
|
+ return match ? match.label : '-'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async bind_account({ sender, bind_code }) {
|
|
|
+ try {
|
|
|
+ this.logger.info(`MCP接收绑定账号请求:${sender},绑定码:${bind_code}`)
|
|
|
+ let sql = `
|
|
|
+ SELECT
|
|
|
+ f.student_num, f.name, f.bot_account, a.name
|
|
|
+ FROM
|
|
|
+ lepao_extra f
|
|
|
+ LEFT JOIN
|
|
|
+ lepao_account a
|
|
|
+ ON
|
|
|
+ f.student_num = a.student_num
|
|
|
+ WHERE
|
|
|
+ f.bind_code = ?
|
|
|
+ `
|
|
|
+ const rows = await db.query(sql, [bind_code])
|
|
|
+ if (!rows) return '系统出错,请稍后再试'
|
|
|
+ if (rows.length !== 0) {
|
|
|
+ if (rows[0].bot_account !== sender) return '该账号已被他人绑定,请联系客服解绑'
|
|
|
+ return '该账号您已绑定'
|
|
|
+ }
|
|
|
+ let insertSql = `
|
|
|
+ UPDATE lepao_extra SET bot_account = ? WHERE bind_code = ?
|
|
|
+ `
|
|
|
+ let insertRows = await db.query(insertSql, [sender, bind_code])
|
|
|
+ if (!insertRows || insertRows.affectedRows !== 1)
|
|
|
+ return '系统出错,请稍后再试'
|
|
|
+ return `绑定成功,姓名:${rows[0].name ?? '未更新,请使用乐跑登录器更新账号信息'},学号:${rows[0].student_num}`
|
|
|
+ } catch (error) {
|
|
|
+ this.logger.error(`MCP绑定账号出错:${e}`)
|
|
|
+ return '系统出错,请稍后再试'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async get_account_info({ sender }) {
|
|
|
+ try {
|
|
|
+ this.logger.info(`MCP接收获取账号信息请求:${sender}`)
|
|
|
+ let sql = `
|
|
|
+ SELECT
|
|
|
+ l.name,
|
|
|
+ l.student_num,
|
|
|
+ l.state,
|
|
|
+ l.area,
|
|
|
+ l.auto_time,
|
|
|
+ l.total_num,
|
|
|
+ l.term_num,
|
|
|
+ l.academy_name,
|
|
|
+ l.sex,
|
|
|
+ l.grade_id,
|
|
|
+ l.email,
|
|
|
+ l.auto_run,
|
|
|
+ l.today_auto_time,
|
|
|
+ l.target_count,
|
|
|
+ l.auto_day,
|
|
|
+ l.notice_type
|
|
|
+ FROM
|
|
|
+ lepao_account l
|
|
|
+ LEFT JOIN
|
|
|
+ lepao_extra f
|
|
|
+ ON
|
|
|
+ l.student_num = f.student_num
|
|
|
+ WHERE
|
|
|
+ f.bot_account = ?
|
|
|
+ `
|
|
|
+ const rows = await db.query(sql, [sender])
|
|
|
+ if (!rows) return '系统出错,请稍后再试'
|
|
|
+ if (rows.length == 0) return '您尚未绑定乐跑账号,请先绑定'
|
|
|
+
|
|
|
+ let data = rows[0]
|
|
|
+ let returnMsg = `
|
|
|
+ 姓名:${data.name ?? '未更新,请使用乐跑登录器更新账号信息'}
|
|
|
+ 学号:${data.student_num}
|
|
|
+ 账号状态:${data.state === 1 ? '正常' : '需使用乐跑登录器更新账号信息'}
|
|
|
+ 乐跑跑区:${data.area ?? "随机分配"}
|
|
|
+ 自动乐跑状态:${data.state === 1 ? '开启' : '关闭'}
|
|
|
+ `
|
|
|
+ if (data.auto_run === 1) {
|
|
|
+ returnMsg += `自动乐跑时间:${this.autoTimeLabel(data)}`
|
|
|
+ returnMsg += `自动乐跑星期:${data.auto_day.slice().sort((a, b) => {
|
|
|
+ if (a === 0) return 1; if (b === 0) return -1; return a - b;
|
|
|
+ }).map(day => this.auto_day.find(item => item.value === day)?.label).join(',').replace(/周/g, '')}`
|
|
|
+ }
|
|
|
+ if (data.sex) returnMsg += `性别:${data.sex === 1 ? '男' : '女'}`
|
|
|
+ if (data.email) returnMsg += `邮箱:${data.email}`
|
|
|
+ if (data.grade) returnMsg += `邮箱:${data.grade}`
|
|
|
+ if (data.academy_name) returnMsg += `学院:${data.academy_name}`
|
|
|
+ if (data.grade_id) returnMsg += `年级:${data.grade_id}级`
|
|
|
+ if (data.target_count) returnMsg += `目标乐跑次数:${data.target_count}`
|
|
|
+ if (data.total_num) returnMsg += `累计乐跑次数:${data.total_num}`
|
|
|
+
|
|
|
+ return returnMsg
|
|
|
+ } catch (error) {
|
|
|
+ this.logger.error(`MCP查询账号信息出错:${e}`)
|
|
|
+ return '系统出错,请稍后再试'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async unbind_account({ sender }) {
|
|
|
+ try {
|
|
|
+ this.logger.info(`MCP接收解绑账号请求:${sender}`)
|
|
|
+ let insertSql = `
|
|
|
+ UPDATE lepao_extra SET bot_account = NULL, bot_nmo = NULL WHERE bot_account = ?
|
|
|
+ `
|
|
|
+ let insertRows = await db.query(insertSql, [sender])
|
|
|
+ if (!insertRows || insertRows.affectedRows !== 1)
|
|
|
+ return '系统出错,请稍后再试'
|
|
|
+ return `解绑成功`
|
|
|
+ } catch (error) {
|
|
|
+ this.logger.error(`MCP解绑账号出错:${e}`)
|
|
|
+ return '系统出错,请稍后再试'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async set_notification({ sender, type }) {
|
|
|
+ try {
|
|
|
+ this.logger.info(`MCP接收设置通知请求:${sender},type:${type}`)
|
|
|
+ if(type !== 'email' || type !== 'bot' || type !== 'none') return '通知type不合法,仅支持 email, bot, none三种模式'
|
|
|
+
|
|
|
+ let insertSql = `
|
|
|
+ UPDATE
|
|
|
+ lepao_account la
|
|
|
+ JOIN
|
|
|
+ lepao_extra le
|
|
|
+ ON
|
|
|
+ la.student_num = le.student_num
|
|
|
+ SET
|
|
|
+ la.notice_type = ?
|
|
|
+ WHERE
|
|
|
+ le.bot_account = ?
|
|
|
+ `
|
|
|
+ let insertRows = await db.query(insertSql, [type, sender])
|
|
|
+ if (!insertRows || insertRows.affectedRows !== 1)
|
|
|
+ return '系统出错,请稍后再试'
|
|
|
+ return `操作成功`
|
|
|
+ } catch (error) {
|
|
|
+ this.logger.error(`MCP更换通知方式出错:${e}`)
|
|
|
+ return '系统出错,请稍后再试'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+const MCP = new Mcp()
|
|
|
+module.exports.MCP = MCP
|