123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- 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
|