const express = require("express"); const axios = require("axios"); const router = express.Router(); const schedule = require("node-schedule"); var mysql = require("./mysql"); // 本地 // const _mysqlLabor = ["183.36.25.93", "pbl"]; //edu數據庫信息 // const _mysqluser = ["183.36.25.93", "cocorobouser"]; //用户数据库信息 // const _getmysqlLabor2 = ["183.36.25.93", "pbl"]; //edu數據庫信息 // const _getmysqlLabor = ["183.36.25.93", "pbl"]; //edu數據庫信息 //线上 const _mysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息 const _mysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息 const _getmysqlLabor2 = ["172.16.12.7", "pbl"]; //edu數據庫信息 const _getmysqlLabor = ["172.16.12.7", "pbl"]; //edu數據庫信息 // 定时任务:每天凌晨2点触发 schedule.scheduleJob("0 2 * * *", async () => { try { let p = [] p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getSzdjgData"); mysql.usselect(p, async function (ret) { let allDownloadCount = 0; if (ret[7].length) { for (let i = 0; i < ret[7].length; i++) { allDownloadCount += ret[7][i].count; } } let dataAddParam = { serverName: "深教AI6", schoolNum: ret[0][0].count, classNum: ret[1][0].count, teacherNum: ret[2][0].count, studentNum: ret[3][0].count, totalVisit: ret[4][0].count, ssoVisit: ret[5][0].count, visitNum: ret[6][0].count, allDownloadCount: allDownloadCount, activeTeacherNum: ret[8][0].count, activeStudentNum: ret[9][0].count, allPrepareCount: ret[10][0].count, allClassCount: ret[11][0].count, classClickCount: ret[12][0].count, }; console.log(dataAddParam); if (!dataAddParam || !dataAddParam.serverName) { console.error("上报失败:缺少必填参数 serverName"); return; } const response = await axios.post( "http://36.213.31.21:8090/api/data/integrate", dataAddParam, { headers: { "Content-Type": "application/json" } } ); console.log("数据上报成功", response.data); }); } catch (error) { console.error("数据上报异常", error.response?.data?.msg || error.message); } }); /** * 新增:上课/备课数据实时同步接口 * POST /sync/class * body参数请参考接口文档说明 */ router.post("/sync/class", async (req, res) => { try { // 校验必填参数 const { serverName, dataType, courseId, courseName, courseGrade, courseTime, } = req.body; if ( !serverName || typeof dataType !== "number" || !courseId || !courseName || !courseGrade ) { return res .status(400) .json({ code: 400, msg: "缺少必填参数", serverName, dataType: typeof dataType, courseId, courseName, courseGrade, courseTime, }); } // 组装请求体,允许所有字段透传 const realClassParam = { ...req.body }; // 向深教AI学习平台同步数据 const response = await axios.post( "http://36.213.31.21:8090/api/data/integrateClass", realClassParam, { headers: { "Content-Type": "application/json" } } ); // 返回平台响应 res.status(200).json(response.data); } catch (error) { const msg = error.response?.data?.msg || error.response?.data || error.message || "同步失败"; res.status(500).json({ code: 500, msg }); } }); router.post("/data", async (req, res) => { let p = [] p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getSzdjgData"); mysql.usselect(p, async function (ret) { let allDownloadCount = 0; if (ret[7].length) { for (let i = 0; i < ret[7].length; i++) { allDownloadCount += ret[7][i].count; } } let dataAddParam = { serverName: "深教AI6", schoolNum: ret[0][0].count, classNum: ret[1][0].count, teacherNum: ret[2][0].count, studentNum: ret[3][0].count, totalVisit: ret[4][0].count, ssoVisit: ret[5][0].count, visitNum: ret[6][0].count, allDownloadCount: allDownloadCount, activeTeacherNum: ret[8][0].count, activeStudentNum: ret[9][0].count, allPrepareCount: ret[10][0].count, allClassCount: ret[11][0].count, classClickCount: ret[12][0].count, }; console.log(dataAddParam); }); }); module.exports = router; /* 用法示例: POST /sync/class Content-Type: application/json { "serverName": "深教AI1", "dataType": 0, "teacherName": "张老师", "teacherAccount": "E12356334", "teacherPhone": "13235671123", "eduId": "", "schoolName": "第一中学", "schoolType": "公办", "area": "南山区", "coursePackageName": "AI课程", "courseId": "1234", "courseName": "AI画画", "courseGrade": "三年级", "courseTime": "40", "startTime": "2025-07-10 13:00:00", "endTime": "2025-07-10 13:40:00" } */ // gpt-4