From d140297d4afbf1f89e7c7ede927002b68dcb7025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E4=B8=9C=E9=98=B3?= <15147476661@163.com> Date: Mon, 5 May 2025 19:38:47 +0800 Subject: [PATCH] v1.1 --- server/Jstest.js | 46 + server/dabao.js | 0 server/index.js | 10897 +++++++++++++++++++++++++++++++++++++++++ server/index1.js | 11960 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 22903 insertions(+) create mode 100644 server/Jstest.js create mode 100644 server/dabao.js create mode 100644 server/index.js create mode 100644 server/index1.js diff --git a/server/Jstest.js b/server/Jstest.js new file mode 100644 index 0000000..e37d267 --- /dev/null +++ b/server/Jstest.js @@ -0,0 +1,46 @@ +import fs from "fs"; +import child_process from "node:child_process"; + +app.post("/apistu/pppta",async (req,res)=>{ + const sqlread="SELECT * FROM tmj_ex WHERE id=?" + const resultptainfor=await new Promise((resolve, reject) => { + connection.query(sqlread,[req.body.uuid],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + let information=JSON.parse(resultptainfor.tmlist)[parseInt(req.body.th)] + res.send(JSON.parse(information.information)) + let tmlist=JSON.parse(information.information).testprint + let uuid1=uuidv4.v4() + let worktemp="C:\\Users\\l\\Music\\reat\\src\\MarkdownEditor\\test\\"+uuid1 + fs.mkdirSync(worktemp) + if(req.body.pl==="java") { + fs.writeFileSync(worktemp + "\\Main.java", req.body.code) + + fs.writeFileSync(worktemp + "\\inputby.txt", "work") + tmlist.map((tmone, index) => { + fs.writeFileSync(worktemp + "\\input" + (index + 1) + ".txt", tmone) + }) + child_process.execFileSync(`python`, ["C:\\Users\\l\\PycharmProjects\\PythonProject7\\py2.py", worktemp, "java", 1]) + let json_wb = fs.readFileSync(worktemp + "\\zt.json").toString() + let json_zt = JSON.parse(json_wb) + let zt_1 = [...json_zt.test] + if (json_zt.by === 0) { + let work_result = [...tmlist] + tmlist.map((tmresult, indexresult) => { + zt_1[index].by = 0 + zt_1[index].sc = fs.readFileSync(worktemp + "\\output1.txt", {encoding: "utf8"}) + zt_1[index].err = fs.readFileSync(worktemp + "\\err1.txt", {encoding: "utf8"}) + zt_1[index] = {...zt_1[index], ...tmresult} + }) + //zt_1.by=0 + //zt_1.sc=fs.readFileSync(worktemp+"\\output1.txt",{encoding:"utf8"}) + //zt_1.err=fs.readFileSync(worktemp+"\\err1.txt",{encoding:"utf8"}) + }else { + let by_err={} + by_err.by=json_zt.by + by_err.err=fs.readFileSync(worktemp+"\\err_by.txt",{encoding:"utf8"}) + } + + } +}) diff --git a/server/dabao.js b/server/dabao.js new file mode 100644 index 0000000..e69de29 diff --git a/server/index.js b/server/index.js new file mode 100644 index 0000000..12990d4 --- /dev/null +++ b/server/index.js @@ -0,0 +1,10897 @@ +const uuidv4 = require('uuid'); +const express = require('express'); +const multer = require('multer'); +const cors = require('cors'); +const app = express(); +const fs = require('fs'); +const zlib = require('zlib'); +const tar = require('tar'); +const axios = require('axios'); +const { promisify } = require('util'); +const {exec} = require('child_process'); +const moment=require('moment'); +var mysql = require('mysql'); +var q = require('qiao-zip'); +const qj=require('./shezhikecheng.js'); +const dabao=require('./dabao.js'); +const { basename, join, extname} = require("node:path"); +const {c, r} = require("tar"); +const {response} = require("express"); +const {homedir} = require("node:os"); +const readline = require("node:readline"); +const parsex=require('./parseexcel') +const crypto = require('crypto'); +const makeexcel=require('./makeexcel') +const speakeasy = require('speakeasy'); + +const xlsx = require('xlsx') +const xlsxnode=require('node-xlsx'); +console.log(uuidv4.v4()) +var connection = mysql.createConnection({ + host : 'localhost', + user : 'root', + password : '416416', + database : 'neigongda' +}); + +connection.connect(); +app.use(cors({ + origin: ['http://localhost:3000','http://localhost:89'], +})); + +app.use(express.urlencoded({extended: false})); // 现在就方便多了,express的两个方法一执行就行啦 +app.use(express.json({limit: '100mb', extended: true})); +const port = process.env.PORT || 3400; +const storage = multer.diskStorage({ + destination: function (req, file, cb) { + fs.mkdir('uploads/'+req.headers.xuehao, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + console.log('文件夹已存在或成功创建!'); + }); + cb(null, 'uploads/'+req.headers.xuehao+'/') // 确保这个文件夹已经存在 + }, + filename: function (req, file, cb) { + const xh=file.originalname; + console.log(xh); + cb(null, xh) + } +}) +const upload = multer({ storage: storage }); +async function newbug(bug,place,input){ + const sql="INSERT INTO errbug(time,bug,place) VALUES(?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sql, [moment().format(), JSON.stringify({ + message: bug.message, + stack: bug.stack, + input: input + }, null, 4), place], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + +} + +app.get('/apitea/allkezxdtlist',async function (req, res) { + const sqlzxdtlist = "SELECT * FROM kechengbiao WHERE teacher=" + req.query.tea;//查询课程信息 + const resultzxdtlistall = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let zxdtlist = []; + for(let j=0; j { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const tanme = resultzxdt.name; + const tid = resultzxdt.id; + const start = resultzxdt.start; + const end = resultzxdt.end; + const allth = JSON.parse(resultzxdt.timu).all.t0 + const sqlt0 = "SELECT * FROM tm WHERE id=\"" + allth + "\"" + const result0 = await new Promise((resolve, reject) => { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ydtx = result0.length; + const titea = { + name: tanme, + id: tid, + start: start, + end: end, + ydtx: ydtx, + all: allstu, + classname: classname + }; + zxdtlist.push(titea); + } + } + } + res.send(zxdtlist) +}) +app.get('/apitea/allkezxdtlist_new',async function (req, res) { + //req.query.tea;//查询课程信息 + const sqlselect="SELECT * FROM tmj_ex WHERE tea=?" + let result=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.query.tea], (error, results, fields) => { + if (error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(stusql,[result[i].fbkc], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + let wb=""; + sturesult.map((kcname,index)=>{ + wb+=kcname.classname+"," + }) + wb=wb.slice(0,-1) + result[i].kcwb=wb; + const studaansql="SELECT COUNT(*) AS num FROM tmj_stu WHERE ksh=? AND zt=?" + const daan=await new Promise((resolve, reject) => { + connection.query(studaansql,[result[i].id,"已提交"], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + result[i].finish=daan[0].num; + } + res.send(result); +}) +app.get('/apitea/zxdtlist',async function (req, res) { + const sqlzxdtlist = "SELECT * FROM kechengbiao WHERE classid=" + req.query.kc;//查询课程信息 + + const resultzxdtlist = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(JSON.parse(results[0].timu)); + }); + }); + const resultallinfor = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const classname=resultallinfor.classname + const allstu=JSON.parse(resultallinfor.student).length +// res.send(resultzxdtlist); + let zxdtlist=[]; + for (let i = 0; i < resultzxdtlist.length; i++) { + const sqlzxdtinfor = "SELECT * FROM timuji WHERE id=" + resultzxdtlist[i];//查询答题信息 + + const resultzxdt = await new Promise((resolve, reject) => { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const tanme=resultzxdt.name; + const tid=resultzxdt.id; + const start=resultzxdt.start; + const end=resultzxdt.end; + const allth=JSON.parse(resultzxdt.timu).all.t0 + const sqlt0="SELECT * FROM tm WHERE id=\""+allth+"\"" + const result0 = await new Promise((resolve, reject) => { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ydtx=result0.length; + const titea={name:tanme,id:tid,start:start,end:end,ydtx:ydtx,all:allstu,class:classname}; + zxdtlist.push(titea); + } + res.send(zxdtlist) +}) +app.get('/apitea/zxdtlist_new',async function (req, res) { + const sqlzxdtlist = "SELECT * FROM kechengbiao WHERE classid=" + req.query.kc;//查询课程信息 + + const resultzxdtlist = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlselectzxdt="SELECT * FROM tmj_ex WHERE JSON_CONTAINS( "+`'["${resultzxdtlist.teacherid}"]'`+",fbkc,'$')" + let result=await new Promise((resolve, reject) => { + connection.query(sqlselectzxdt,[req.query.tea], (error, results, fields) => { + if (error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(stusql,[result[i].fbkc], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + let wb=""; + sturesult.map((kcname,index)=>{ + wb+=kcname.classname+"," + }) + wb=wb.slice(0,-1) + result[i].kcwb=wb; + const studaansql="SELECT COUNT(*) AS num FROM tmj_stu WHERE ksh=? AND zt=?" + const daan=await new Promise((resolve, reject) => { + connection.query(studaansql,[result[i].id,"已提交"], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + result[i].finish=daan[0].num; + } + res.send(result); +}) +app.get("/apitea/ptastu",async function (req,res){ + const sqlstd = "SELECT * FROM tm WHERE id=" + req.query.timu; + + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + + console.log(resultptastd); + const sql1t = "SELECT * FROM pta WHERE th=\'" +req.query.timu + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC";//查出已答同学 + console.log(sql1t) + const resultstuti= await new Promise((resolve, reject) => { + connection.query(sql1t, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const tname=resultptastd.tanme + const studaan=JSON.parse(resultstuti[0].daan).t; + const buffer = Buffer.from(resultptastd.pj, 'base64'); + const cacheDir = join(homedir(), '.cache'); + console.log(cacheDir); +// 将Buffer写入文件 + const uuid=uuidv4.v4() + fs.writeFileSync(cacheDir+"\\"+uuid+".zip", buffer); + fs.mkdirSync(cacheDir+"\\"+uuid); + await q.unzip(cacheDir+"\\"+uuid+".zip", cacheDir+"\\"+uuid); + const data = fs.readFileSync(cacheDir+"\\"+uuid+"\\tm.json", 'utf8'); + let daan=JSON.parse(data).t; + let plyl=[]; + let stdprintall=0; + let stuprintall=0; + const jgall=JSON.parse(resultstuti[0].daan).by + const memoryall=JSON.parse(resultstuti[0].daan).memory + const timeall=JSON.parse(resultstuti[0].daan).time.toFixed(2); + const tjsjall=JSON.parse(resultstuti[0].daan).tjsj + for(let i=0;i { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + if(resulttimuinfor.length>0) { + const tname = resulttimuinfor[0].tname + let allstu=JSON.parse(resulttimuinfor[0].all).stu + const tigroup = JSON.parse(resulttimuinfor[0].timu).allti + const tmprintall = JSON.parse(resulttimuinfor[0].timu).all.allprint; + const sql1 = "SELECT * FROM pta WHERE th=\'" + tmprintall + "\' ";//查出已答同学 + console.log(sql1) + const resultstuinfor = await new Promise((resolve, reject) => { + connection.query(sql1, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let daan = []; + let tistdprint = 0; + for (const titi of tigroup) { + const sqlstd = "SELECT * FROM tm WHERE id=" + titi; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tistdprint = tistdprint + resultptastd.fen + daan.push(resultptastd); + } + let stu = [] + console.log(resultstuinfor) + for (const tongxue of resultstuinfor) { + let stuti = {} + const sqlstu = "SELECT * FROM student WHERE xuehao=\'" + tongxue.xuehao + "\'";//查出已答同学 + const stuname = await new Promise((resolve, reject) => { + connection.query(sqlstu, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + + stuti.name = stuname.studentname; + stuti.xzb = stuname.nianjizhaungye;//行政班 + stuti.xuehao = tongxue.xuehao; + + allstu = allstu.filter(function(item) { + return item !== tongxue.xuehao + }); + stuti.start = JSON.parse(tongxue.daan).time//开始时间 + let ti = []; + const tigroup = JSON.parse(resulttimuinfor[0].timu).allti; + let allprint = 0; + for (const titi of tigroup) { + //查询学生对题目的作答 + + const sql1t = "SELECT * FROM pta WHERE th=\'" + titi + "\' and xuehao= \'" + tongxue.xuehao + "\' ORDER BY paixu DESC";//查出已答同学 + console.log(sql1t) + const resultstuti = await new Promise((resolve, reject) => { + connection.query(sql1t, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + console.log(resultstuti[0]) + const tistuda = resultstuti[0]; + let print + if (JSON.parse(resultstuti[0].daan).printall !== undefined) { + print = JSON.parse(resultstuti[0].daan).printall + } else { + print = JSON.parse(resultstuti[0].daan).defen + } + allprint = allprint + print; + tistuda.print = print + ti.push({ti: tistuda}); + } + stuti.print = allprint + stuti.t = ti + stu.push(stuti) + + } + let wdtx=[] + for (let k=0; k { + connection.query(sqlstu, (error, results, fields) => { + if (error) reject(error); + + if(results.length > 0) { + resolve(results[0]); + }else{ + resolve({xuehao:allstu[k]}); + } + }); + }); + wdtx.push(stuname) + + } + res.send({ti: resulttimuinfor, daan: daan, stu: stu, stdprint: tistdprint,stuno:wdtx}); + }else{ + res.send({ti: [], daan:[], stu: [], stdprint: -1}); + } +}) +app.get('/api/ptalisttm',async (req, res) => { + try{ + let duoxuetiprint=[] + let panduantiprint=[] + let danxuetiprint=[] + let tiankongtiprint=[] + let ptaprint=[] + let allfen=0; + let stufen=0; + let jd=0; + let allpta=0; + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let ptalist=JSON.parse(result[0].timu).pta; + + for (const element of ptalist) { + //查学生作答 + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={}; + if(resultpta!==undefined){ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).printall; + allfen=allfen+stdfen; + stufen=stufen+fen; + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + const memory= parseInt(JSON.parse(resultpta.daan).memory); + const time=parseInt(JSON.parse(resultpta.daan).time) + if(memory>63353){ + cl.color="purple" + cl.wb="内存超限" + } + if(time>600){ + cl.color="purple" + if(cl.wb==="内存超限") + {cl.wb="内存超限 时间超限"} + else{ + cl.wb="时间超限" + } + } + //cl.daan=JSON.parse(resultpta.daan) + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + }else{ + const stdfen=resultptastd.fen; + allfen=allfen+stdfen; + //stufen=stufen+fen; + //jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + } + ptaprint.push(cl); + //duoxuetiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={} + if(resultpta===undefined || resultpta.daan==="未作答"){ + const stdfen=resultptastd.fen; + allfen=allfen+stdfen; + //stufen=stufen+fen; + //jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + panduantiprint.push(cl) + } + console.log(0); + ptalist=JSON.parse(result[0].timu).danxueti; + + for (const element of ptalist) { + console.log(3); + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(4) + let cl={} + console.log(resultptastd) + if(resultpta===undefined || resultpta.daan==="未作答"){ + const stdfen=resultptastd.fen; + // const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + //stufen=stufen+parseInt(fen); + //jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + console.log(fen) + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + danxuetiprint.push(cl) + console.log(5) + } + console.log(1); + ptalist=JSON.parse(result[0].timu).tiankongti; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={} + if(resultpta===undefined || resultpta.daan==="未作答"){ + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + const stdfen=resultptastd.fen; + //const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + //stufen=stufen+parseInt(fen); + //jd++; + allpta++; + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + //const stdfen=resultptastd.fen; + //const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + tiankongtiprint.push(cl) + + } + ptalist=JSON.parse(result[0].timu).duoxueti; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={} + if(resultpta===undefined || resultpta.daan==="未作答"){ + const stdfen=resultptastd.fen; + //const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + // stufen=stufen+parseInt(fen); + // jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + duoxuetiprint.push(cl) + + } + const alldate={jd:jd,allpta:allpta,allfen:allfen,stufen:stufen}; + res.send({ptaprint:JSON.stringify(ptaprint),duoxuetiprint:JSON.stringify(duoxuetiprint),danxuetiprint:JSON.stringify(danxuetiprint),panduantiprint:JSON.stringify(panduantiprint),tiankongtiprint:JSON.stringify(tiankongtiprint),alldate:alldate}); + + + } + + catch(err){} +}) +// 设置路由和上传字段 +app.post('/api/jdttj',async (req, res) => { + try{ + const sql = "SELECT * FROM pta WHERE xuehao = ? AND th=?"; + let result = await new Promise((resolve, reject) => { + connection.query(sql, [req.body.xuehao,req.body.th], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + console.log(result); + let jsonsj=result[0].daan; + const uuidv4=result[0].uuid; + const wjs=[]; + if(JSON.parse(jsonsj).sftj==="no"){ + //没提交 + const folderPath = 'nginx/html/homework/'+uuidv4; + + const folderList = fs.readdirSync(folderPath) + console.log(folderList); + folderList.forEach((item) => { + + const json64= fs.readFileSync('nginx/html/homework/'+uuidv4+'/'+item); + const base64Data = json64.toString('base64'); + const wjjson={file:basename(item),json64:base64Data}; + wjs.push(wjjson); + console.log(wjjson) + }) + let fh=JSON.parse(jsonsj); + fh.wj=JSON.stringify(wjs); + fh.sftj="no"; + const sql = 'UPDATE pta SET daan=? WHERE xuehao=? and th=?'; + await new Promise((resolve, reject) => { + connection.query(sql, [JSON.stringify(fh), req.body.xuehao, req.body.th], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + // console.log(results); + }); + }); + + } + }catch(err){ + console.log(err); + } +}) +app.post('/api/upload', upload.single('file'), (req, res) => { + const file = req.file; + console.log(file); + if (!file) { + return res.status(400).send('No file uploaded.'); + } + res.send('File uploaded successfully.'); +}); +const storagehw = multer.diskStorage({ + destination: function (req, file, cb) { + fs.mkdir('nginx/html/homework/'+req.headers.xuehao, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + console.log('文件夹已存在或成功创建!'); + }); + cb(null, 'nginx/html/homework/'+req.headers.xuehao+'/') // 确保这个文件夹已经存在 + }, + filename: function (req, file, cb) { + const xh=file.originalname; + console.log(xh); + cb(null, xh) + } +}) +const uploadhw = multer({ storage: storagehw }); +app.post('/api/hwdelete',(req, res) => { + const lj='nginx/html/homework/'+req.body.uuid+'/'+req.body.filename; + try { + fs.unlinkSync(lj); + console.log('文件已成功删除'); + } catch (err) { + console.error('删除文件时出错:', err); + } +}) +// 设置路由和上传字段 +app.post('/api/uploadhm', uploadhw.single('file'), (req, res) => { + const file = req.file; + console.log(file); + if (!file) { + return res.status(400).send('No file uploaded.'); + } + res.send('File uploaded successfully.'); +}); +app.get('/api/chaxujiatiao', (req, res) => { + stu=req.query.xuehao; + var sql = "SELECT * FROM jiatiao WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + connection.query(sql,function (err, result) { + res.send(result); + }) +}) + +app.get('/api/cxtm',(req, res) => { + const sql = "SELECT * FROM pta WHERE xuehao = ? AND th=? ORDER BY paixu DESC"; + console.log(sql); + console.log(req.params.xuehao); + console.log(req.params.th) + connection.query(sql, [req.query.xuehao,req.query.th], (err, results) => { + if(results.length === 0){ + res.send("未作答") + }else { + if (results[0].daan === "未作答") { + res.send("未作答"); + } else { + let daan = JSON.parse(results[0].daan); + console.log(daan); + res.send(results[0].daan); + } + } + }); + +}) +app.get('/api/print',async (req, res) => { + try{ + let duoxuetiprint=[] + let panduantiprint=[] + let danxuetiprint=[] + let tiankongtiprint=[] + let ptaprint=[] + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let ptalist=JSON.parse(result[0].timu).duoxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + duoxuetiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + panduantiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).danxueti; + + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + danxuetiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).tiankongti; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + tiankongtiprint.push(JSON.parse(resultpta.daan).defen) + + } + ptalist=JSON.parse(result[0].timu).pta; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let red=0; + let green=0; + ptaprint.push(JSON.parse(resultpta.daan).printall) + } + res.send({ptaprint:JSON.stringify(ptaprint),duoxuetiprint:JSON.stringify(duoxuetiprint),danxuetiprint:JSON.stringify(danxuetiprint),panduantiprint:JSON.stringify(panduantiprint),tiankongtiprint:JSON.stringify(tiankongtiprint)}); + + + } + + catch(err){} +}) +app.get('/api/ptacolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).pta; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" + element + "\' and xuehao= \'" + req.query.xuehao + "\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if (resultpta !== undefined) { + let red = 0; + let green = 0; + JSON.parse(resultpta.daan).t.forEach(daan => { + if (daan.print === 0) { + red++; + } else { + green++; + } + }) + if (green === 0) { + color.push("red"); + } else if (red === 0) { + color.push("green"); + } else { + color.push("yellow"); + } + }else{ + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/duoxueticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).duoxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/panduancolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/danxueticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).danxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/danxueticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).danxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/panduanticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/tiankongticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).tiankongti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + + if(resultpta.daan!=="未作答") { + const all=JSON.parse(resultpta.daan).xuexiang.length; + if (JSON.parse(resultpta.daan).defen === all) { + color.push("green"); + } else if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("yellow") + } + }else { + color.push("#000000"); + } + console.log(color) + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/dizhimoban', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM dizhimoban WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + jg=[]; + result.forEach(function(value, index) { + const json=JSON.parse(value.dizhijson); + jg[index] = json; + }); + + + res.send(jg); + }); +}) +app.get('/api/dizhimobanbing', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM dizhimobanbing WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + jg=[]; + result.forEach(function(value, index) { + const json=JSON.parse(value.dizhijson); + jg[index] = json; + }); + + + res.send(jg); + }); +}) +app.get('/api/shijiamoban', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM shijiamoban WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + jg=[]; + result.forEach(function(value, index) { + jg[index] = value.mobanjson; + jg[index].id=value.id; + }); + + + res.send(jg); + }); +}) + +app.get('/api/studentinformation',async (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM student WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); +let stuinfor=await new Promise((resolve,reject)=>{ + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + resolve(result[0]); + }); + }) + const sqlsx="SELECT * FROM shixi WHERE xuehao = ?"; + let stuinforsx=await new Promise((resolve,reject)=>{ + connection.query(sqlsx,[stu],function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + resolve(result); + }); + }) + stuinfor.shixihao=JSON.stringify(stuinforsx); + res.send(stuinfor); +}) + +app.get('/api/teacherinformation', (req, res) => { + tea=req.query.teacher; + + var sql = "SELECT * FROM teacher WHERE xuegonghao = "+"'"+tea+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result[0]); + }); +}) +app.get('/api/jiaqiluhu', (req, res) => { + //stu=req.query.student; + + var sql = "SELECT * FROM jiaqi"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + flag=1; + result.forEach(function(value, index) { + + const dateFormat = 'YYYY-MM-DD'; + const start=moment(value.lssj, dateFormat).subtract(7, 'days'); + const end=moment(value.endtime, dateFormat); + console.log(end); + console.log(start); + if(moment().isBetween(start,end)){ + console.log(end); + res.send(value); + flag=2; + } + }) + if(flag===1) { + res.send({}); + } + }); +}) +app.get('/api/parentsinformation', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM parents WHERE stdentid = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result); + }); +}) +app.get('/api/jiatiaocx', (req, res) => { + const stu=req.query.uuid; + + var sql = "SELECT * FROM jiatiao WHERE uuid = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + if(result[0].leixing==='binjia'){ + fs.mkdir('uploads/'+req.query.uuid, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + JSON.parse(result[0].zzclbase64).map((value,index)=>{ + var dataBuffer = Buffer.from(value.base64, 'base64'); + fs.writeFile('uploads/'+req.query.uuid+"/"+value.wj, dataBuffer, function(err) { + + }); + + }); + console.log('文件夹已存在或成功创建!'); + }); + } + + if(result.length===0){ + res.send({zt:'错误'}); + }else { + result[0].zt="ok"; + res.send(result[0]); + } + }); +}) +function stucx(stu) { + + + var sql = "SELECT * FROM student WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + let yy={}; + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + + } + + return JSON.stringify(result[0]); + + + }); + console.log(yy); + +} +app.get('/api/jiatiaocxfdy', async (req, res) => { + try { + const fdy = req.query.fdy; + + // 创建目录 + if(!fs.existsSync(`nginx/html/${fdy}`)) { + await fs.mkdir(`nginx/html/${fdy}`, (err) => { + console.log(err); + }); + } + // 数据库查询 + const sql = "SELECT * FROM jiatiao WHERE fdy = ? AND tj !=2"; + const result = await new Promise((resolve, reject) => { + connection.query(sql, [fdy], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + // 处理查询结果 + const resultfdy = []; + for (const value of result) { + const stujt = { + jt: value.jtnr, + leixing: value.leixing, + uuid: value.uuid, + }; + + // 查询学生信息 + const sql1 = "SELECT * FROM student WHERE xuehao = ?"; + const resultxuesheng = await new Promise((resolve, reject) => { + connection.query(sql1, [value.xuehao], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + stujt.stu = JSON.stringify(resultxuesheng); + + // 处理特定类型的记录 + if (value.leixing === 'binjia') { + const uuidDir = `nginx/html/${fdy}/${value.uuid}`; + if(!fs.existsSync(uuidDir)) { + await fs.mkdir(uuidDir, (err) => { + console.log(err); + }); + } + + // 解析并写入文件 + const files = JSON.parse(value.zzclbase64); + const wj = []; + for (const file of files) { + const dataBuffer = Buffer.from(file.base64, 'base64'); + const filePath = `${uuidDir}/${file.wj}`; + await fs.writeFile(filePath, dataBuffer,(err) => { + console.log(err); + }); + const wjfile = { url: `localhost:89/${fdy}/${value.uuid}/${file.wj}` ,filePath:`${file.wj}` }; + wj.push(wjfile); + } + stujt.wj = wj; + } + + resultfdy.push(stujt); + } + + // 发送响应 + res.json(resultfdy); + } catch (err) { + console.error(err); + res.status(500).send('Internal Server Error'); + } +}); +app.get('/api/jiatiaocxfdylx', async (req, res) => { + try { + const fdy = req.query.fdy; + const leixing=req.query.leixing; + // 创建目录 + if(!fs.existsSync(`nginx/html/${fdy}`)) { + await fs.mkdir(`nginx/html/${fdy}`, (err) => { + console.log(err); + }); + } + // 数据库查询 + const sql = "SELECT * FROM jiatiao WHERE fdy = ? AND tj = ?"; + const result = await new Promise((resolve, reject) => { + connection.query(sql, [fdy,leixing], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + // 处理查询结果 + const resultfdy = []; + for (const value of result) { + const stujt = { + jt: value.jtnr, + leixing: value.leixing, + uuid: value.uuid, + }; + + // 查询学生信息 + const sql1 = "SELECT * FROM student WHERE xuehao = ?"; + const resultxuesheng = await new Promise((resolve, reject) => { + connection.query(sql1, [value.xuehao], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + stujt.stu = JSON.stringify(resultxuesheng); + + // 处理特定类型的记录 + if (value.leixing === 'binjia') { + const uuidDir = `nginx/html/${fdy}/${value.uuid}`; + if(!fs.existsSync(uuidDir)) { + await fs.mkdir(uuidDir, (err) => { + console.log(err); + }); + } + + // 解析并写入文件 + const files = JSON.parse(value.zzclbase64); + const wj = []; + for (const file of files) { + const dataBuffer = Buffer.from(file.base64, 'base64'); + const filePath = `${uuidDir}/${file.wj}`; + await fs.writeFile(filePath, dataBuffer,(err) => { + console.log(err); + }); + const wjfile = { url: `localhost:89/${fdy}/${value.uuid}/${file.wj}` ,filePath:`${file.wj}` }; + wj.push(wjfile); + } + stujt.wj = wj; + } + + resultfdy.push(stujt); + } + + // 发送响应 + res.json(resultfdy); + } catch (err) { + console.error(err); + res.status(500).send('Internal Server Error'); + } +}); +app.get('/api/sjmobancx', (req, res) => { + id=req.query.uuid; + + var sql = "SELECT * FROM shijiamoban WHERE id = "+"'"+id+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + if(result.length===0){ + res.send({zt:'错误'}); + }else { + result[0].zt="ok"; + res.send(result[0]); + } + }); +}) +app.get('/api/shixiinformation', (req, res) => { + sx=req.query.shixi; + + var sql = "SELECT * FROM shixi WHERE shixihao = "+"'"+sx+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result[0]); + }); +}); +app.get('/api/ptatm', (req, res) => { + id=req.query.id; + + var sql = "SELECT * FROM tm WHERE id = "+"'"+id+"';"; + console.log(sql+"1234"); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result[0]); + }); +}); +app.post('/api/ptadaan', (req, res) => { + const sql = 'UPDATE pta SET daan=? WHERE xuehao=? and th=?'; + connection.query(sql, [req.body.daan,req.body.xuehao,req.body.th], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/fabucommit', (req, res) => { + const sql = 'INSERT INTO commit(uuid,likes,dislikes,author,neirong,fabutime,xuehao,xuhao,filelist) VALUES(?,?,?,?,?,?,?,?,?)'; + + connection.query(sql, [uuidv4.v4(),JSON.stringify(req.body.likes),JSON.stringify(req.body.dislikes),req.body.author,req.body.neirong,req.body.fabutime,req.body.xuehao,req.body.xuhao,JSON.stringify(req.body.filelist)], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + res.send({status:"ok"}) +}) +app.post('/api/newcommitgroup', async (req, res) => { + const sql="SELECT COUNT(*) AS rows FROM commitgroup;" + const rownum=await new Promise((resolve, reject) => { + connection.query(sql,(err, result) => { + resolve(result); + }) + }) + const sqlinsert="INSERT INTO commitgroup(xuhao,teacher,zhuti,student,fabukecheng) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[rownum[0].rows+1,req.body.tea,"[]","[]","[]"],(err, result)=>{ + if (err) throw err; + resolve(result); + // 处理查询结果 + console.log(result); + }) + }) + res.send(rownum) +}) +app.post('/api/updatelike',async (req, res) => { + const sql = "SELECT * FROM commit WHERE uuid=\'" + req.body.uuid + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + let likes=JSON.parse(result[0].likes); + if(!likes.includes(req.body.xuehao)){ + likes.push(req.body.xuehao); + }else{ + likes=likes.filter(item => item !== req.body.xuehao); + } + + const sqlupdate = 'UPDATE commit SET likes=? WHERE uuid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(likes),req.body.uuid], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + res.send(likes); +}) +app.get('/api/cxcommittimu', (req, res) => { + const sql="SELECT * FROM commitgroup WHERE xuhao=?"; + connection.query(sql,[req.query.xuhao],function (err, result) { + if (err){ + throw err; + + } + if(result.length>0) { + res.send(result[0]); + }else{ + res.send("nocommit") + } + }) + +}) +app.post('/api/updatedislike',async (req, res) => { + const sql = "SELECT * FROM commit WHERE uuid=\'" + req.body.uuid + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + let likes=JSON.parse(result[0].dislikes); + if(!likes.includes(req.body.xuehao)){ + likes.push(req.body.xuehao); + }else{ + likes=likes.filter(item => item !== req.body.xuehao); + } + + const sqlupdate = 'UPDATE commit SET dislikes=? WHERE uuid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(likes),req.body.uuid], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + res.send(likes); +}) +app.get("/apitea/classlist_ex",async (req, res) => { + const sql="SELECT classid,classname,teacherid,classbh FROM kechengbiao WHERE teacher=?" + const claasslist=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + res.send(claasslist); +}) +app.get('/apitea/gettaolong',async (req, res) => { + const sql="SELECT * FROM commitgroup WHERE xuhao=?" + let results = await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuhao],(error, results, fields) => { + resolve(results[0]); + }) + }) + if(results) { + let fabuclass = JSON.parse(results.fabukecheng); + console.log(fabuclass) + const sqlclass = "SELECT classid,classname,teacherid,classbh FROM kechengbiao WHERE teacher=?" + let claasslist = await new Promise((resolve, reject) => { + connection.query(sqlclass, [req.query.tea], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + for (let i = 0; i < claasslist.length; i++) { + console.log(123) + if (fabuclass.includes(parseInt(claasslist[i].teacherid))) { + console.log("yes") + claasslist[i].choose = true; + } + } + results.fabu = claasslist; + res.send(results); + } + +}) +app.post("/apitea/fabukaoshi",async (req, res) => { + let student=[]; + const fabuclass=req.body.fabuclass;//获取发布班级 + for(let i=0;i { + connection.query(sqlclass,[fabuclass[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + student=[...student,...JSON.parse(claasslist.student)]; + + + } + + student=[...new Set(student)]; + console.log(student); + const sqlupdate = 'UPDATE kaoshipaper SET paper=?,std=?,xx=?,stu=? WHERE uuid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.paper),JSON.stringify(req.body.std),JSON.stringify(req.body.xx),JSON.stringify(student),req.body.xuhao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); +}) +app.post("/aptea/fabutaolong",async (req, res) => { + const sql="SELECT * FROM commitgroup WHERE xuhao=?" + let results = await new Promise((resolve, reject) => { + connection.query(sql,[req.body.xuhao],(error, results, fields) => { + resolve(results[0]); + }) + }) + let student=[]; + const fabuclass=JSON.parse(results.fabukecheng); + for(let i=0;i { + connection.query(sqlclass,[fabuclass[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + student=[...student,...JSON.parse(claasslist.student)]; + + + } + student=[...new Set(student)]; + const sqlupdate = 'UPDATE commitgroup SET student=? WHERE xuhao=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(student),req.body.xuhao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + res.send(student); +}) +app.post("/apitea/updatetaolong",async (req, res) => { + let fabuclass=[]; + + req.body.classinfor.map((value,index)=>{ + if(value.choose===true){ + fabuclass.push(parseInt(value.teacherid)) + } + }) + const sql = 'UPDATE commitgroup SET title=?,zhuti=?,fabukecheng=? WHERE xuhao=?'; + console.log(req.body.seconds); + connection.query(sql, [req.body.title,JSON.stringify(req.body.zhuti),JSON.stringify(fabuclass),req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) + +app.get('/api/taolong',async (req, res) => { + const sql="SELECT * FROM commitgroup WHERE teacher=?"; + let reasult = await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error) reject(error); + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlcommit,[reasult[i].xuhao],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + let stufinish=[] + resultcommit.map((value) => { + stufinish.push(value.xuehao) + }) + stufinish=[...new Set(stufinish)]; + reasult[i].stufinish=stufinish; + for(let j=0;j { + connection.query(sqlclass, [JSON.parse(reasult[i].fabukecheng)[j]], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + console.log(resultclass) + resultclass.map((value,index)=>{ + kechengname=kechengname+" "+value.classname+"@"+value.classbh + const temp=JSON.parse(value.student); + stu=[...stu,...temp] + }) + + + + } + let uniqueArr = [...new Set(stu)]; + reasult[i].studentshiji=uniqueArr; + + reasult[i].classnamelist=kechengname; + } + res.send(reasult); +}) +app.get('/api/getstucommit',async (req, res) => { + const sql = "SELECT xuhao,teacher,title,zhuti,student,teacher.name AS teaname\n" + + "FROM commitgroup\n" + + "LEFT JOIN teacher ON teacher.xuegonghao = commitgroup.teacher\n" + + "WHERE JSON_CONTAINS(student, "+`'["${req.query.xuehao}"]'`+", '$');" ; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + const temp=[...result]; + for(let i=0;i { + connection.query(sql, [req.query.xuehao,temp[i].xuhao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + if(stu.length===0){ + temp[i].zt="nofinish" + }else{ + temp[i].zt="finish" + } + } + + res.send(temp); + +}) +app.get("/apitea/askks",async (req, res) => { + //WHERE JSON_CONTAINS(stu,?, '$'); + const sqlpaper="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(tea,?, '$')" + // const sqllist="SELECT * FROM askforks WHERE xuehao = ? ;" + const resultkslist=await new Promise((resolve, reject) => { + connection.query(sqlpaper, ["["+req.query.tea+"]"], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + let resultlist=[]; + for(let i=0;i { + connection.query(sqllist, [resultkslist[i].uuid], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + resultlist=[...resultlist,...resultone]; + } + console.log(resultlist) + const askks=[...resultlist]; + for(let i=0;i { + connection.query(sqltm, [resultlist[i].ksh], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + askks[i].tm=JSON.parse(resultm[0].paper)[resultlist[i].th] + askks[i].daan=JSON.parse(resultm[0].std)[resultlist[i].th] + askks[i].showdaan=false; + + } + res.send(askks); +}) +app.post("/api/updateksask",async (req, res) => { + const sql = 'UPDATE askforks SET filelist=?,neirong=? WHERE id=?'; + console.log(req.body.seconds); + connection.query(sql, [req.body.filelist,req.body.neirong,req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.get("/api/selectaskforks",async (req, res) => { + const sqllist="SELECT * FROM askforks WHERE xuehao = ? ;" + const resultlist=await new Promise((resolve, reject) => { + connection.query(sqllist, [req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + let temp=[...resultlist] + for(let i=0;i { + connection.query(sqltm, [temp[i].ksh], (error, results, fields) => { + if (error) reject(error); + + resolve(results); + }); + + }) + temp[i].tm=JSON.parse(resulttimu[0].paper)[temp[i].th]; + } + res.send(temp); +}) +app.get("/kaoshi/selectlist",async (req, res) => { + const sqllist="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(stu,?, '$');" + const resultlist=await new Promise((resolve, reject) => { + connection.query(sqllist, ["[\""+req.query.xuehao+"\"]"], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + let temp=[...resultlist] + let allprint=-1; + let stuprint=-1; + for(let i=0;i0){ + const sqlend = "SELECT * FROM kaoshiend WHERE ks=? AND xuehao=?" + const resultend=await new Promise((resolve, reject) => { + connection.query(sqlend, [resultlist[i].uuid,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + const stddaan=JSON.parse(resultlist[i].std) + + let jue=[] + if(resultend[0]) { + jue=JSON.parse(resultend[0].ksdaan); + } + let needteacher=false;//是否需要老师阅卷 + let finishteacher=true//老师是否完成阅卷 + + for(let i=0;i { + connection.query(sqlend, [resultlist[i].uuid,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + if(resultend.length>0){ + zt="已提交" + }else{ + const sqling = "SELECT * FROM kaoshing WHERE ks=? AND xuehao=?" + const resulting=await new Promise((resolve, reject) => { + connection.query(sqlend, [resultlist[i].uuid,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + if(resulting.length>0){ + zt="已开始作答" + }else{ + zt="未开始作答" + } + } + + } + console.log(zt) + if(allprint!==-1){ + temp[i].alllprint=allprint; + temp[i].printstu=stuprint; + }else{ + temp[i].alllprint="_"; + temp[i].printstu="_"; + } + temp[i].zt=zt; + } + res.send(temp); +}) +app.get('/api/selectcommit', (req, res) => { + const sql='SELECT * FROM commit WHERE xuhao=?'; + connection.query(sql,[req.query.xuhao],function (err, result) { + if(err){throw err} + const temp=[...result]; + for(let i=0;i { + const sql = 'INSERT INTO sp(uuid,starttime,xuehao,spxh) VALUES(?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.starttime,req.body.xuehao,req.body.spxh], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/xgymk', (req, res) => { + const sql = 'UPDATE sp SET seconds=?,endtime=? WHERE uuid=?'; + console.log(req.body.seconds); + connection.query(sql, [req.body.seconds,req.body.endtime,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/changemobansj', (req, res) => { + const sql = 'UPDATE shijiamoban SET mobanjson=?,mobanmc=? WHERE id=?'; + connection.query(sql, [req.body.moban,req.body.mobanmc,req.body.id1], (error, results, fields) => { + if (error) throw error; + res.send({status:"ok"}) + // 处理查询结果 + console.log(results); + }); +}) + +app.post('/api/fdycl', (req, res) => { + const sql = 'UPDATE jiatiao SET tj=?,huifunr=? WHERE uuid=?'; + connection.query(sql, [req.body.hf,req.body.tj,req.body.id1], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/tijiaoshijia', (req, res) => { + // let xuehao=req + console.log(req.body); + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,leixing) VALUES(?,?,?,?,?,"shijia")'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + if(req.body.azq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "z", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "z", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"z", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"A" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["A",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.ayq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).date(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).date(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "y", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "y", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"y", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"Y" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["Y",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.anq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startmonth=moment(jsonsql.startdate).month(); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const endmonth=moment(jsonsql.enddate).month(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "n", + "day":startdays.toString(), + "month":startmonth.toString(), + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "n", + "day":enddays.toString(), + "hour": enddays.toString(), + "month":endmonth.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"n", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"C" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["C",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if(results.length===0){ + const dizhi= { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc":"dzA", + "mdd":"目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao,"dzA",JSON.stringify(dizhi),req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + // 处理查询结果 + console.log(results); + }); + +}) +//修改 +app.post('/api/kecb',(req,res)=>{ + const start=req.body.start; + const end=req.body.end; + const xuehao=req.body.xuehao; + console.log(1367); + const startxueiq=moment("2024-09-02T00:00:27+08:00"); + const daystart=moment(start).diff(startxueiq,"days"); + const dayend=moment(end).diff(startxueiq,"days"); + console.log(daystart); + const minutestart=moment(start).minutes()+moment(start).hours()*60; + const minutesend=moment(end).minutes()+moment(end).hours()*60; + let kestart=0; + if(minutestart<500){ + kestart=1; + }else if(minutestart<620){ + kestart=2; + }else if(minutestart<840){ + kestart=3; + }else if(minutestart<960){ + kestart=4; + }else { + kestart=5; + } + let keend=0; + if(minutesend>1060){ + keend=4; + }else if(minutesend<940){ + keend=3; + }else if(minutesend<720){ + keend=2; + }else if(minutesend<600){ + keend=1; + }else { + keend=0; + } + const kaishi=daystart*4+kestart; + const jieshu=dayend*4+keend; + const sql = 'SELECT xunhuan(?,?,?)'; + + + connection.query(sql, [kaishi,jieshu,xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + console.log(dayend); + +}) +app.post('/api/changeshijia', (req, res) => { + // let xuehao=req + console.log(req.body); + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, [req.body.jtnr,req.body.tj,"shijia",req.body.uuid], (error, results, fields) => { + if (error) throw error; + res.send({status:"ok"}) + // 处理查询结果 + console.log(results); + }); + if(req.body.azq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "z", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "z", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"z", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"A" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["A",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.ayq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).date(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).date(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "y", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "y", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"y", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"Y" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["Y",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.anq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startmonth=moment(jsonsql.startdate).month(); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const endmonth=moment(jsonsql.enddate).month(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "n", + "day":startdays.toString(), + "month":startmonth.toString(), + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "n", + "day":enddays.toString(), + "hour": enddays.toString(), + "month":endmonth.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"n", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"C" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["C",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if(results.length===0){ + const dizhi= { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc":"dzA", + "mdd":"目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao,"dzA",JSON.stringify(dizhi),req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + // 处理查询结果 + console.log(results); + }); + +}) +app.post("/api/tijiaobing", function (req, res) { + try{ + const filenames = fs.readdirSync(__dirname+'/uploads/'+req.body.uuid); + + + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,zzcl,zzclbase64,leixing) VALUES(?,?,?,?,?,?,?,"binjia")'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + const wjgroup=[]; + filenames.forEach(filename=>{ + const data = fs.readFileSync(__dirname+'/uploads/'+req.body.uuid+'/'+filename); + data.toString('base64'); + const wj={ + wj:filename, + base64:data.toString('base64'), + } + wjgroup.push(wj); + }) + + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj,JSON.stringify(filenames),JSON.stringify(wjgroup)], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + + + }); + + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + // 处理查 + const sql2 = 'SELECT * FROM dizhimobanbing WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql2, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimobanbing(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + console.log(req.body) + } catch (err) { + console.error(err); + } + + +}) +function executeCommandWithTimeout(command, timeout) { + // 创建一个promise + return new Promise((resolve, reject) => { + // 设置定时器来超时终止命令 + const timer = setTimeout(() => { + reject(new Error('Command execution timed out.')); + if (childProcess) { + childProcess.kill(); // 终止命令执行 + } + }, timeout); + + // 执行命令 + const startTime = process.hrtime(); + const childProcess = exec(command, (error, stdout, stderr) => { + // 清除定时器 + clearTimeout(timer); + + if (error) { + reject(error); + return; + } + + resolve({ stdout, stderr }); + }); + const endTime = process.hrtime(startTime); + +// 计算总的纳秒数 + const timeInNanoSeconds = endTime[0] * 1e9 + endTime[1]; + +// 转换为秒 + const timeInSeconds = timeInNanoSeconds / 1e9; + + console.log(`程序运行时间: ${timeInSeconds} 秒`); + }); +} +app.post("/api/ptatj", function (req, res) { + fs.writeFile(req.body.uuid+'.c', req.body.code, (err) => { + if (err) throw err; + exec(`gcc ${req.body.uuid}.c -o${req.body.uuid}.exe`, (error, stdout, stderr) => { + if (error) { + console.error(`执行的错误: ${error}`); + return; + } + + const startTime = process.hrtime(); + executeCommandWithTimeout(`${req.body.uuid}.exe re1.out`, 5000) + .then(({ stdout, stderr }) => { + console.log(stdout); + console.error(stderr); + }) + .catch(error => { + console.error(error.message); + }); + const endTime = process.hrtime(startTime); + +// 计算总的纳秒数 + const timeInNanoSeconds = endTime[0] * 1e9 + endTime[1]; + +// 转换为秒 + const timeInSeconds = timeInNanoSeconds / 1e9; + + console.log(`程序运行时间: ${timeInSeconds} 秒`); + // exec(`${req.body.uuid}.exe re.out`) + console.log(`stdout: ${stdout}`); + if (stderr) { + console.log(`stderr: ${stderr}`); + } + }); + console.log('数据已成功写入文件'); + }); +}) +app.post("/api/changebing", function (req, res) { + try{ + const filenames = fs.readdirSync(__dirname+'/uploads/'+req.body.uuid); + + + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=?,zzcl=?,zzclbase64=? WHERE uuid=?'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + const wjgroup=[]; + filenames.forEach(filename=>{ + const data = fs.readFileSync(__dirname+'/uploads/'+req.body.uuid+'/'+filename); + data.toString('base64'); + const wj={ + wj:filename, + base64:data.toString('base64'), + } + wjgroup.push(wj); + }) + + connection.query(sql, [req.body.jtnr,req.body.tj,req.body.leixing,JSON.stringify(filenames),JSON.stringify(wjgroup),req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + + }); + + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + // 处理查 + const sql2 = 'SELECT * FROM dizhimobanbing WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql2, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimobanbing(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + console.log(req.body) + } catch (err) { + console.error(err); + } + + +}) +app.post("/api/includemobansj", function (req, res) { + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +console.log(req.body.moban); + connection.query(sql, [req.body.mobanmc,req.body.moban,req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + + + }); +}) +app.get("/api/denglu", function (req, res) { + const sql="SELECT * FROM student WHERE xuehao=\'"+req.query.xuehao+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + console.log(results); + if(results.length === 0) { + res.send({mes:'wuzhanghao'})//无账号 + }else if(results[0].passage===req.query.mima){ + res.send({mes:'ok'}) + }else { + res.send({mes:'mimachuowu'})//密码错误 + } + }) +}) +app.get("/api/splist", function (req, res) { + const sql="SELECT * FROM splist WHERE id=\'"+req.query.id1+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + res.send(results[0].list); + //if(error)console.log(error); + console.log(results[0].list); + + }) +}) +app.get("/api/tmlist", function (req, res) { + const sql="SELECT * FROM timuji WHERE id=\'"+req.query.id+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(results.length >0) { + res.send(results[0].timu); + console.log(results[0].timu); + //if(error)console.log(error); + console.log(results[0].timu); + }else{ + res.send("题目错误") + } + }) +}) + +app.get("/api/createtime", async function (req, res) { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); +if(result.length !== 0) { + const t0 = JSON.parse(result[0].timu).all.t0; + const limittime = JSON.parse(result[0].timu).all.seconds; + const sql1 = "SELECT * FROM pta WHERE th=\'" + t0 + "\' AND xuehao = \'" + req.query.xuehao + "\'"; + console.log(sql1) + const resultt0 = await new Promise((resolve, reject) => { + connection.query(sql1, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + if (resultt0.length !== 0) { + res.send({timestart: JSON.parse(resultt0[0].daan), limittime: limittime}); + } else { + const timestart = moment().format('YYYY-MM-DD HH:mm:ss'); + const inset = "INSERT INTO pta (xuehao,daan,th,class,tmjth) VALUES (?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [req.query.xuehao, JSON.stringify({time: timestart}), t0, req.query.class, 0], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + res.send({timestart: timestart, limittime: limittime}); + } +}else{ + res.send({timestart: "无", limittime: "无"}); +} +}) +app.get("/api/createsql", async function (req, res) { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const limittime = JSON.parse(result[0].timu).all.seconds; + const t0 = JSON.parse(result[0].timu).all.t0; + JSON.parse(result[0].timu).danxueti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + JSON.parse(result[0].timu).duoxueti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + JSON.parse(result[0].timu).panduanti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + JSON.parse(result[0].timu).tiankongti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + res.send("ok") + }catch (e) { + console.log(e); + } + +}) +app.get("/api/checktime", async function (req, res) { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + if(result.length > 0) { + const starttime = moment(result[0].start); + const endtime = moment(result[0].end); + const t0 = JSON.parse(result[0].timu).all.t0; + const limittime = JSON.parse(result[0].timu).all.seconds; + const sql1 = "SELECT * FROM pta WHERE th=\'" + t0 + "\' AND xuehao = \'" + req.query.xuehao + "\'"; + console.log(sql1) + const resultt0 = await new Promise((resolve, reject) => { + connection.query(sql1, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + console.log(resultt0) + if (moment().diff(starttime, 'seconds') < 0) { + res.send({ + timestart: JSON.parse(resultt0[0].daan), + limittime: limittime, + zt: "beforestart", + starttime: starttime, + endtime: endtime + }); + + } else if (moment().diff(endtime, 'seconds') > 0) { + res.send({ + timestart: JSON.parse(resultt0[0].daan), + limittime: limittime, + zt: "finish", + starttime: starttime, + endtime: endtime + }); + } else { + + if (resultt0.length !== 0) { + res.send({ + timestart: JSON.parse(resultt0[0].daan), + limittime: limittime, + zt: "start", + starttime: starttime, + endtime: endtime + }); + } else { + res.send({zt: "nostart", starttime: starttime, endtime: endtime, limittime: limittime}); + } + } + }else{ + res.send({zt: "errornopiece"}); + } +}) +app.get("/api/jiaotiaoteachercx", function (req, res) { + const sql="SELECT * FROM kechengbiao WHERE teacher=\'"+req.query.teacher+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + // console.log(results); + res.send(JSON.stringify(results)); + }) +}) +app.get("/api/kechengcx1", function (req, res) { + const sql="SELECT * FROM kechengbiao WHERE classid=\'"+req.query.xuehao+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + // console.log(results); + res.send(JSON.stringify(results[0])); + }) +}) + +app.get("/api/dengluteacher", function (req, res) { + const sql="SELECT * FROM teacher WHERE xuegonghao=\'"+req.query.teacher+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + console.log(results); + if(results.length === 0) { + res.send({mes:'wuzhanghao'})//无账号 + }else if(results[0].passage===req.query.mima){ + if(results[0].quexian===1) { + res.send({mes: 'ok',zw:'任课老师'}) + }else if(results[0].quexian===2){ + res.send({mes:'ok',zw:'辅导员'}) + } + }else { + + + res.send({mes:'mimachuowu'})//密码错误 + } + }) +}) +app.post("/api/tijiaoshixi", function (req, res) { + try{ + + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,leixing) VALUES(?,?,?,?,?,"shixi")'; + + + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) +app.post("/api/xiugaimima",function (req, res) { + const sql='UPDATE student SET passage=? WHERE xuehao=?'; + console.log(sql); + connection.query(sql,[req.body.pass,req.body.xuehao],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/xiugaimimatea",function (req, res) { + const sql='UPDATE student SET passage=? WHERE xuegonghao=?'; + console.log(sql); + connection.query(sql,[req.body.pass,req.body.xuehao],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/xiugaizt1",function (req, res) { + const sql='UPDATE jiatiao SET tj=? WHERE uuid=?'; + console.log(sql); + connection.query(sql,[req.body.zx,req.body.uuid],(error, results, fields) => { + if (error) throw error; + }) + res.send({mes:'修改成功'}) +}) +app.post("/api/deletemoban1",function (req, res) { + const sql='DELETE FROM shijiamoban WHERE id=?'; + console.log(sql); + connection.query(sql,[req.body.uuid],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/deletezt1",function (req, res) { + const sql='DELETE FROM jiatiao WHERE uuid=?'; + console.log(sql); + connection.query(sql,[req.body.uuid],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/changeshixi", function (req, res) { + try{ + + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + + + connection.query(sql, [req.body.jtnr,req.body.tj,"shixi",req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) + +app.post("/api/tijiaojqlh", function (req, res) { + try{ + + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,leixing) VALUES(?,?,?,?,?,"jqlh")'; + + + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), jsonsql.xxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) +app.post("/api/changejqlh", function (req, res) { + try{ + + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + + + connection.query(sql, [req.body.jtnr,req.body.tj,"jqlh",req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + + + connection.query(sql, [req.body.jtnr,req.body.tj,"jqlh",req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) +app.get("/api/chaxunptacode",function (req, res) { + const sql = "SELECT * FROM pta WHERE th=\'" +req.query.th + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + res.send(results[0]); + }); + +}) +app.get("/api/timujistu",async function (req, res) { + const sql = "SELECT * FROM student WHERE xuehao=\'" + req.query.xuehao + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const timuji=JSON.parse(result[0].timuji); + console.log(timuji) + const timu1=[] + timuji.map(async (value, index) => { + const sql = "SELECT * FROM timuji WHERE id=\'" + value + "\'"; + console.log(sql) + const resulttimuji = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const t=JSON.parse(resulttimuji[0].timu); + let tsum=0; + // "pta": [1], "danxueti": [2], "duoxueti": [4], "panduanti": [5], "tiankongti": [3]} + //tsum=t. + if(t.pta!==undefined){ + tsum=tsum+t.pta.length + } + if(t.danxueti!==undefined){ + tsum=tsum+t.danxueti.length + } + if(t.duoxueti!==undefined){ + tsum=tsum+t.duoxueti.length + } + if(t.panduanti!==undefined){ + tsum=tsum+t.panduanti.length + } + if(t.tiankongti!==undefined){ + tsum=tsum+t.tiankongti.length + } + const teacher=JSON.parse(resulttimuji[0].all).teacher; + const school=JSON.parse(resulttimuji[0].all).danwei; + const class1=JSON.parse(resulttimuji[0].all).class; + const timujiall={sum:tsum,ti:t,teacher:teacher,danwei:school,class:class1,starttime:resulttimuji[0].start,endtime:resulttimuji[0].end}; + // console.log(timujiall) + timu1.push(JSON.stringify(timujiall)); + }) + console.log(timu1) + res.send(timu1); +}) +app.get("/api/timujistunew", async function (req, res) { + try { + const xuehao = req.query.xuehao; + if (!xuehao) { + return res.status(400).send('xuehao is required'); + } + + const studentResult = await queryDatabase(`SELECT * FROM student WHERE xuehao=?`, [xuehao]); + if (studentResult.length === 0) { + return res.status(404).send('Student not found'); + } + + const timuji = JSON.parse(studentResult[0].timuji); + if(timuji) { + const timuPromises = timuji.map(async (value) => { + const timujiResult = await queryDatabase(`SELECT * FROM timuji WHERE id=?`, [value]); + if (timujiResult.length === 0) { + return null; + } + + const t = JSON.parse(timujiResult[0].timu); + const all = JSON.parse(timujiResult[0].all); + const tstart = timujiResult[0].start; + const tend = timujiResult[0].end; + const tname = timujiResult[0].name; + const tsum = (t.pta || []).length + (t.danxueti || []).length + (t.duoxueti || []).length + + (t.panduanti || []).length + (t.tiankongti || []).length; + + return { + id: timujiResult[0].id, + sum: tsum, + ti: t, + teacher: all.teacher, + danwei: all.danwei, + class: all.class, + kemu: all.kemu, + starttime: timujiResult[0].start, + endtime: timujiResult[0].end, + name: tname, + }; + }); + const timu1 =await Promise.all(timuPromises); + res.send(timu1); + }else{ + res.send([]) + } + + + } catch (error) { + console.error(error); + res.status(500).send('Internal Server Error'); + } +}); + +async function queryDatabase(sql, params) { + return new Promise((resolve, reject) => { + connection.query(sql, params, (error, results, fields) => { + if (error) { + reject(error); + } else { + resolve(results); + } + }); + }); +} +//上传与处理题目 +const storagetm = multer.diskStorage({ + destination: function (req, file, cb) { + fs.mkdir('nginx/html/'+req.headers.th, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + console.log('文件夹已存在或成功创建!'); + }); + cb(null, 'nginx/html/'+req.headers.th+'/') // 确保这个文件夹已经存在 + }, + filename: function (req, file, cb) { + const th=req.headers.xx;//选项 + console.log(th); + cb(null, th+extname(file.originalname)) + if(req.headers.lx==="xx"){ + + var contentText = fs.readFileSync('nginx/html/'+req.headers.th+'/tm.json','utf-8'); + var content = JSON.parse(contentText); + content.xuexiang.push('/'+th+extname(file.originalname)) + fs.writeFileSync('nginx/html/'+req.headers.th+'/tm.json',JSON.stringify(content)); + }else if(req.headers.lx==="tm"){ + var contentText1 = fs.readFileSync('nginx/html/'+req.headers.th+'/tm.json','utf-8'); + var content1 = JSON.parse(contentText1); + console.log(); + content1.tm='/'+th+extname(file.originalname); + fs.writeFileSync('nginx/html/'+req.headers.th+'/tm.json',JSON.stringify(content1)); + } + + } +}) +const uploadtm = multer({ storage: storagetm }); +app.post('/api/uploadtm', uploadtm.single('file'), (req, res) => { + const file = req.file; + console.log(file); + if (!file) { + return res.status(400).send('No file uploaded.tm'); + } + res.send('File uploaded successfully.'); +}); +app.post('/apitea/deletexuexiang',function(req,res){ + var contentText1 = fs.readFileSync('nginx/html/'+req.body.th+'/tm.json','utf-8'); + var content1 = JSON.parse(contentText1); + console.log(req.body.xx) + var file = content1.xuexiang[req.body.xx]; + console.log(file); + fs.unlinkSync('nginx/html/'+req.body.th+file) + content1.xuexiang.splice(req.body.xx,1); + fs.writeFileSync('nginx/html/'+req.body.th+'/tm.json',JSON.stringify(content1)); +}) +app.post('/apitea/uplatetm',function(req,res){ + + console.log(req.body) + if(req.body.leixing==="编程题") { + + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + // res.send({mes:"yes"}); + }else if(req.body.leixing==="单选题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + }else if(req.body.leixing==="多选题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + }else if(req.body.leixing==="填空题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + }else if(req.body.leixing==="判断题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + + // res.send({mes:"no"}); +}) +app.get('/apitea/gettm',function(req,res){ + const sqlzxdtlist = "SELECT * FROM prepletimu WHERE id=" + req.query.id;//查询课程信息 + + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) throw error; + console.log(results); + res.send(results[0]); + }); + +}) +app.get('/apitea/gettmj',async function(req,res){ + const sql = "SELECT * FROM perparetmj WHERE id=\'" + req.query.th + "\'"; + console.log(sql) + try { + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqltm = "SELECT * FROM prepletimu WHERE tmj=\'" + req.query.th + "\'"; + console.log(sqltm) + const tmj = JSON.parse(result.timu); + let tmlist = []; + for (let i = 0; i < tmj.length; i++) { + const sqltm = "SELECT * FROM prepletimu WHERE id=\'" + tmj[i] + "\'"; + const resulttm = await new Promise((resolve, reject) => { + connection.query(sqltm, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tmlist.push(resulttm); + + } + + + result.tm = tmlist + res.send(result) + }catch (e) { + console.log(e) + } +}) +app.post('/apitea/updatename',function(req,res){ + const sql = 'UPDATE prepletimu SET tname=? WHERE id=?'; + connection.query(sql, [req.body.tname, req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.get('/apitea/getclass',function(req,res){ + const sql = "SELECT * FROM kechengbiao WHERE teacher=\'" + req.query.tea + "\'"; + console.log(sql) + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + res.send(results) + }); + +}) +app.post('/apitea/updattmj',function(req,res){ + const sql = 'UPDATE perparetmj SET tname=?,information=?,`limit`=?,starttime=?,endtimw=? WHERE id=?'; + connection.query(sql, [req.body.tname,JSON.stringify(req.body.information),req.body.limit,req.body.start,req.body.end,req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.get('/apitea/gettmjlist',function(req,res){ + const sql = "SELECT * FROM perparetmj WHERE tea=\'" + req.query.tea + "\'"; + console.log(sql) + connection.query(sql, (error, results, fields) => { + if (error) throw error; + res.send(results) + }); + +}) +app.post('/apitea/newtimu',async function(req,res){ + let tid=0; + if(req.body.tlx==="编程题"){ + const infor={"tmname":" ", + "srgs":[""], + "scgs":[" "], + "sryl":"", + "scyl":" ", + "stdcode":" ", + "testprint":[] + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["编程题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="单选题"){ + const infor={ + xuexiang:[], + daan:" ", + tm:"/tm.png" + + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["单选题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="多选题"){ + const infor={ + xuexiang:[], + daan:[], + tm:"/tm.png" + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["多选题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="填空题"){ + const infor={ + tm:"/tm.png", + daan:[ ], + + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["填空题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="判断题"){ + const infor={ + + daan:" ", + tm:"/tm.png" + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["判断题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + } + const sqlid=`SELECT * FROM perparetmj WHERE id = ${req.body.tmj}` + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let timu=JSON.parse(resultid.timu); + timu.push(tid) + const sqlupdate = 'UPDATE perparetmj SET timu=? WHERE id=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(timu),req.body.tmj], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + fs.mkdirSync("nginx/html/"+tid.toString()); + const tm={ + tm:"/tm.png", + xuexiang:[] + } + fs.copyFileSync("nginx/html/tmbefore.png","nginx/html/"+tid.toString()+"/tm.png") + fs.writeFileSync("nginx/html/"+tid.toString()+"/tm.json",JSON.stringify(tm)); + const sqladd=`SELECT * FROM prepletimu WHERE id = ${tid}` + const resultadd = await new Promise((resolve, reject) => { + connection.query(sqladd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + res.send(resultadd); + +}) +app.post("/apitea/fabu",async function(req,res){ + const sqlid=`SELECT * FROM perparetmj WHERE id = ${req.body.tmj}` + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let pta=[];//编程题 + let danxueti=[];//单选题 + let duoxueti= [];//多选题 + let panduanti=[];//判断题 + let tiankongti= [];//填空题 + let allprint=0; + + const timu=JSON.parse(resultid.timu)//查询题目 + for(let i=0;i { + connection.query(sqltm, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resulttm.leixing==="编程题"){ + pta.push(timu[i]) + // { + // "tmname": "在未来的智慧城市中,有一家名为“智停无忧”的智能停车场,它采用先进的技术来管理车辆进出,并根据停车时长自动计算费用。请你编写一个C语言程序,实现停车场收费计算,需要处理以下几种情况:如果停车时间为1小时以内(含1小时),免费; 如果停车时间1小时以上,8小时以内(含8小时),则按照每小时5元的价格收费; 如果停车时间为8小时以上,前8小时按照每小时5元的价格收费,超过8小时后,每增加1小时,按照每小时10元的价格收费。停车费用封顶为300元。", + // "srgs": "输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。", + //"scgs": "输出包括多行,每行对应输入的一行,为翻转后的字符串。输出时去掉多余的空格。只在每个单词之前以1个空格间隔。输出的每行末尾没有空格。", + // "sryl": ["9","10"], + //"scyl": ["您停车9小时,需要支付50元","您停车9小时,需要支付50元test"] + // } + // {"tmname":"QWERTYUIO","srgs":["2","3","4","","","","","","","","","","",""],"scgs":["4","5","6","","","","","","","","","","",""],"sryl":"2\n4\n55555555555\n3\n4","scyl":"2\n3\n4","stdcode":"#include\nint main()","testprint":[{"tname":" 123","stdout":" 4567","stdin":" 1243","print":"5"}]} + const ptatm={ + tmname:JSON.parse(resulttm.information).tmname, + sryl:JSON.parse(resulttm.information).srgs, + scyl:JSON.parse(resulttm.information).scgs, + srgs:JSON.parse(resulttm.information).sryl, + scgs:JSON.parse(resulttm.information).scyl, + } + let fen=0; + const tname=resulttm.tname; + const leixing=1;//编程题 + const stdcode=JSON.parse(resulttm.information).stdcode; + const csd=JSON.parse(resulttm.information).testprint; + let tm=[]; + const uuid=uuidv4.v4(); + fs.mkdirSync(`tmtemp/${uuid}/`) + for(let j=0;j { + connection.query(sqladd,[leixing,pj,JSON.stringify(ptatm),timu[i],stdcode,fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + }else if(resulttm.leixing==="单选题"){ + danxueti.push(timu[i]); + let xuexiang=[] + JSON.parse(resulttm.information).xuexiang.map((value,index)=>{ + xuexiang.push(`/${timu[i]}/${value}`) + }) + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + xuexiang:xuexiang, + tm:tm, + daan:daan, + } + const leixing=2; + const fen=5; + allprint+=fen; + const tname=resulttm.tname; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + }else if(resulttm.leixing==="多选题"){ + let xuexiang=[] + duoxueti.push(timu[i]); + JSON.parse(resulttm.information).xuexiang.map((value,index)=>{ + xuexiang.push(`/${timu[i]}/${value}`) + }) + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + xuexiang:xuexiang, + tm:tm, + daan:daan, + } + const leixing=4;//多选题 + const fen=5; + const tname=resulttm.tname; + allprint+=fen; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + }else if(resulttm.leixing==="填空题"){ + tiankongti.push(timu[i]); + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + tk:{A0:" "}, + tm:tm, + daan:daan, + } + const leixing=3;//填空题 + const fen=daan.length; + allprint+=fen; + const tname=resulttm.tname; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + }else if(resulttm.leixing==="判断题"){ + panduanti.push(timu[i]); + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + + tm:tm, + daan:daan, + } + const leixing=5;//判断题 + const fen=5; + allprint+=fen; + const tname=resulttm.tname; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + } + + } + const seconds=resultid.limit; + let limit; + if(resultid.limit<0){ + limit="time" + }else{ + limit="none" + } + const t0=1000+parseInt(req.body.tmj) + const timusql={ + all: {t0: t0, + limit: limit, + seconds: seconds, + allprint: allprint}, + pta: pta, + allti: timu, + danxueti: danxueti, + duoxueti: duoxueti, + panduanti: panduanti, + tiankongti: tiankongti + } + const name=resultid.tname; + const start=moment(resultid.starttime).format('YYYY-MM-DD HH:MM:SS'); + const end=moment(resultid.endtime).format('YYYY-MM-DD HH:MM:SS'); + const sqltea=`SELECT * FROM teacher WHERE id = ${resultid.tea}` + const resulttea = await new Promise((resolve, reject) => { + connection.query(sqltea, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const teachername=resulttea.name; + const banji=JSON.parse(resultid.information).class; + for(let k=0;k { + connection.query(sqlclass, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const stu=JSON.parse(resultclass.student); + const kemu=resultclass.classname; + const class1=resultclass.classname; + const allinfor={ + stu: stu, + kemu:kemu, + class: class1, + "danwei": "内蒙古工业大学", + "teacher": teachername + }; + const sqladd = 'INSERT INTO timuji(name,id,timu,all,start,end) VALUES(?,?,?,?,?,?)'; + timusql.all.t0=timusql.all.t0+banji[k]; + await new Promise((resolve, reject) => { + connection.query(sqladd,[resultid.tname,resultid.id*10+k,timusql,allinfor,start,end], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + //添加题目集号到课程表 + const sqlread=`SELECT * FROM kechengbiao WHERE teacherid = ${banji[k]}` + const resultread = await new Promise((resolve, reject) => { + connection.query(sqlread, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let timu=JSON.parse(resultread.timu); + timu.push(resultid.id*10+k); + const sqlwrite=`UPDATE kechengbiao SET timu=? WHERE teacherid = ${banji[k]}` + await new Promise((resolve, reject) => { + connection.query(sqlwrite,[JSON.stringify(timu)], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + for(let j=0;j { + connection.query(sqlreadstu, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let timustu=JSON.parse(resultreadstu.timuji); + timustu.push(resultid.id*10+k); + const sqlwritestu=`UPDATE student SET timuji=? WHERE xuehao = ${stu[j]}` + await new Promise((resolve, reject) => { + connection.query(sqlwritestu,[JSON.stringify(timustu)], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + } + //添加题目集给同学 + } + res.send({AB:123}) + +}) +app.post("/api/askfortea",function(req,res){ + const sql = 'INSERT INTO askfortea(`uuid`,tmj,th,filelist,neirong,xuehao,`return`,returnlist) VALUES(?,?,?,?,?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.tmj,req.body.th,JSON.stringify(req.body.filelist),req.body.neirong,req.body.xuehao,"no","no"], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) + +const removeDuplicatesByUUID = (items) => { + const seenUUIDs = {}; + const filteredItems = []; + + for (const item of items) { + if (!seenUUIDs[item.uuid]) { + filteredItems.push(item); + seenUUIDs[item.uuid] = true; + } + } + + return filteredItems; +}; +app.get("/api/askfortea",function(req,res){ + const sql="SELECT `uuid`,askfortea.tmj,askfortea.th,filelist,neirong,xuehao,`return`,returnlist,tm.tanme AS tname,timuji.name AS tmjname FROM askfortea INNER JOIN tm ON tm.id = askfortea.th INNER JOIN timuji ON timuji.id = askfortea.tmj\n" + + "WHERE xuehao=\""+req.query.xuehao+"\""; + connection.query(sql, (error, results, fields) => { + if (error) throw error; + const uniqueArray = removeDuplicatesByUUID(results) + // 处理查询结果 + res.send(uniqueArray); + }); +}) +app.get('/api/getkc', (req, res) => { + + var sql = "SELECT * FROM kcxx WHERE kch = "+"'"+req.query.kch+"' AND teacherid= '"+req.query.teacherid+"';"; + console.log(sql); + connection.query(sql,function (err, result) { + if(result.length > 0) { + res.send(result[0]); + }else{ + res.send("no"); + } + }) +}) +app.post("/api/askkcbnew",(req,res)=>{ + // temp.push({filelist:[],uuid:uid,neirong:" ",title:"提问1",return:"no",returnlist:"no",tea:teaask}); + const sql = 'INSERT INTO askforteakcb(uuid,xuehao,tea,kch,title,filelist,neirong,`return`,returnlist,teacherid) VALUES(?,?,?,?,?,?,?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.xuehao,req.body.tea,req.body.kch,req.body.title,JSON.stringify(req.body.filelist), + req.body.neirong,req.body.returnpost,req.body.returnlist,req.body.teacherid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/kaoshi/askks",(req,res)=>{ + // temp.push({filelist:[],uuid:uid,neirong:" ",title:"提问1",return:"no",returnlist:"no",tea:teaask}); + const sql = 'INSERT INTO askforks(uuid,ksh,th,xuehao,filelist,neirong,`return`,returnlist) VALUES(?,?,?,?,?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.ksh,req.body.th,req.body.xuehao,JSON.stringify(req.body.filelist), + req.body.neirong,"no","no"], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + res.send("no") +}) +app.post("/api/uddateaskforkc",(req,res)=>{ + var sql = "UPDATE askforteakcb SET filelist = ?, neirong = ?,title=? WHERE uuid=?;"; + connection.query(sql, [JSON.stringify(req.body.filelist),req.body.neirong,req.body.title,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/api/uddateaskfortm",(req,res)=>{ + var sql = "UPDATE askfortea SET filelist = ?, neirong = ? WHERE uuid=?;"; + connection.query(sql, [JSON.stringify(req.body.filelist),req.body.neirong,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/apitea/returnaskfortm",(req,res)=>{ + var sql = "UPDATE askfortea SET returnlist = ?, `return` = ? WHERE uuid=?;"; + + + connection.query(sql, [req.body.returnlist,req.body.return,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/apitea/returnaskks",(req,res)=>{ + var sql = "UPDATE askforks SET returnlist = ?, `return` = ? WHERE `id`=?;"; + + + connection.query(sql, [req.body.returnlist,req.body.return,req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/apitea/returnaskforkc",(req,res)=>{ + var sql = "UPDATE askforteakcb SET returnlist = ?, `return` = ? WHERE uuid=?;"; + + + connection.query(sql, [req.body.returnlist,req.body.return,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results) + res.send(results[0]); + }); +}) +app.post("/kaoshi/update",(req,res)=>{ + const sql = 'UPDATE kaoshing SET infor=? WHERE xuehao=? and ks=?'; +console.log(sql) + connection.query(sql, [JSON.stringify(req.body.date), req.body.xuehao, req.body.ks], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + // console.log(results); + }); +res.send({status:"ok"}) + +}) +app.get("/kaoshi/selectfirst",async (req,res)=> { + //看有没有被提交 + const sqlpaper = "SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultpaper = await new Promise((resolve, reject) => { + connection.query(sqlpaper, [req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + //看是否开始答题 + + const sqlstutm = "SELECT * FROM kaoshing WHERE xuehao=? and ks=?;"; + const resulttm = await new Promise((resolve, reject) => { + connection.query(sqlstutm, [req.query.xuehao, req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const sqlstuend = "SELECT * FROM kaoshiend WHERE xuehao=? and ks=?;"; + const resultend = await new Promise((resolve, reject) => { + connection.query(sqlstuend, [req.query.xuehao, req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + let stu; + let end; + if(resulttm.length>0){ + stu = resulttm[0] + }else { + stu="no" + } + if(resultend.length>0){ + end = resultend[0] + }else { + end="no" + } + res.send({paper:resultpaper[0],stu:stu,end:end}) + + + +}) +app.get("/kaoshi/select",async (req,res)=>{ + //看有没有被提交 + const sqlstuend = "SELECT * FROM kaoshiend WHERE xuehao=? and ks=?;"; + const resultend = await new Promise((resolve, reject) => { + connection.query(sqlstuend,[req.query.xuehao,req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + //看是否开始答题 + const sqlstutm = "SELECT * FROM kaoshing WHERE xuehao=? and ks=?;"; + const resulttm = await new Promise((resolve, reject) => { + connection.query(sqlstutm,[req.query.xuehao,req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + + if (resulttm.length > 0) { + if(resultend.length > 0) { + resulttm[0].end="end" + }else { + resulttm[0].end="noend" + } + resulttm[0].infor=JSON.parse(resulttm[0].infor); + res.send(resulttm[0]); + }else{ + const sqlpaper = "SELECT * FROM kaoshipaper WHERE uuid=?;"; + const resultpaper = await new Promise((resolve, reject) => { + connection.query(sqlpaper,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + + }) + console.log(resultpaper); + let xx=JSON.parse(resultpaper.xx) + xx.start=moment().format(); + const ks=resultpaper.uuid; + const sql = 'INSERT INTO kaoshing(ks,xuehao,infor,xx) VALUES(?,?,?,?)'; + const resultinsert = await new Promise((resolve, reject) => { + connection.query(sql, [ks, req.query.xuehao, resultpaper.paper, JSON.stringify(xx)], (error, results, fields) => { + if (error) throw error; + resolve(123); + // 处理查询结果 + console.log(124); + }); + }) + console.log(123) + res.send({ + ks:ks, + xuehao:req.query.xuehao, + infor:JSON.parse(resultpaper.paper), + xx:JSON.stringify(xx) + }) + } + +}) +app.get("/kaoshi/showtea",async (req,res)=>{ + //看有没有被提交 + const sqlstuend = "SELECT * FROM kaoshiend WHERE xuehao=? and ks=?;"; + const resultend = await new Promise((resolve, reject) => { + connection.query(sqlstuend,[req.query.xuehao,req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + //看是否开始答题 + const stuql="SELECT studentname,shoujihao,nianjizhaungye,xueyuan FROM student WHERE xuehao=\""+req.query.xuehao+"\""; + const sturesults= await new Promise((resolve, reject) => { + connection.query(stuql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + + + const sqlpaper = "SELECT * FROM kaoshipaper WHERE uuid=?;"; + const resultpaper = await new Promise((resolve, reject) => { + connection.query(sqlpaper,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + + }) + // console.log(resultpaper); + let xx=JSON.parse(resultpaper.xx) + // xx.start=moment().format(); + const ks=resultpaper.uuid; + + console.log(123) + res.send({ + ks:ks, + xuehao:req.query.xuehao, + infor:JSON.parse(resultend[0].ksdaan), + stu:sturesults[0], + + allprint:resultend[0].allprint, + xx:JSON.stringify(xx), + std:JSON.parse(resultpaper.std), + }) + + +}) +app.get("/api/getkcaskfortea",(req,res)=>{ + var sql = "SELECT * FROM askforteakcb WHERE xuehao = "+"'"+req.query.xuehao+"' AND kch = '"+req.query.kch+"'"; + console.log(sql); + + connection.query(sql,function (err, result) { + const temp=[...result]; + result.map((value,index)=>{ + temp[index].filelist=JSON.parse(value.filelist); + }) + if(result.length > 0) { + res.send(temp); + }else{ + res.send([]); + } + }) +}) + +app.get("/api/askfortealist",async function(req,res){ + const sql="SELECT `uuid`,askfortea.tmj,askfortea.th,filelist,neirong,xuehao,`return`,returnlist,tm.tanme AS tname,timuji.name AS tmjname FROM askfortea INNER JOIN tm ON tm.id = askfortea.th INNER JOIN timuji ON timuji.id = askfortea.tmj\n" + + "WHERE xuehao=\""+req.query.xuehao+"\""; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const uniqueArray = removeDuplicatesByUUID(results) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(sqltm,[uniqueArray[i].th], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }) + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist); + uniqueArray[i].tminfor=resulttm; + } + res.send(uniqueArray); +}) +app.get("/api/askforteakclist",async function(req,res){ + const sql="SELECT * FROM askforteakcb WHERE xuehao=\""+req.query.xuehao+"\""; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const uniqueArray = removeDuplicatesByUUID(results) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(classsql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + uniqueArray[i].kc=kcresults[0]; + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist) + } + res.send(uniqueArray); +}) +app.get("/kaoshi/result",async function(req,res){ + const sql="SELECT * FROM kaoshing WHERE ks=? AND xuehao=?"; + const resulting= await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ks,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + console.log(results) + resolve(results); + + }); + }) + if(resulting.length===0){ + //未作答 + console.log("未作答") + const sql="SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultpaper= await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + })//查出原卷 + const jue=JSON.parse(resultpaper[0].paper)//原卷 + const stddaan=JSON.parse(resultpaper[0].std)//标准答案 + let jueres=[] + for(let i=0;i { + connection.query(sql,[req.query.ks,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + })//查出原卷 + if(resultend.length!==0){ + //学生已提交 + stupaper=resultend[0]; + }else{ + const sqltj = 'INSERT INTO kaoshiend(ks,ksdaan,infor,xuehao,tijiaotime) VALUES(?,?,?,?,?)'; + //补充提交 + await new Promise((resolve, reject) => { + connection.query(sqltj, [req.query.ks, resulting[0].infor, resulting[0].xx, req.query.xuehao, moment().format()], (error, results, fields) => { + if (error) throw error; + resolve(results); + // 处理查询结果 + console.log(results); + }); + //提交后在查询 + }) + const sqlcx="SELECT * FROM kaoshiend WHERE ks=? AND xuehao=?"; + const resultend= await new Promise((resolve, reject) => { + connection.query(sqlcx,[req.query.ks,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + stupaper=resultend[0]; + + } + //得到学生卷 + const sqlpaper="SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultpaper= await new Promise((resolve, reject) => { + connection.query(sqlpaper,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + })//查出原卷 + + const stddaan=JSON.parse(resultpaper[0].std)//标准答案 + const jue=JSON.parse(stupaper.ksdaan); + let printall=0;//总分 + let stdprint=0;//总分 + let jueall= []; + let needteacher=false;//是否需要老师阅卷 + let finishteacher=true//老师是否完成阅卷 + for(let i=0;i { + connection.query(sql,[req.body.ks,req.body.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + console.log(results) + if(results.length === 0){ + //未提交重新提交 + const sql = 'INSERT INTO kaoshiend(ks,ksdaan,infor,xuehao,tijiaotime) VALUES(?,?,?,?,?)'; + console.log(sql) + connection.query(sql, [req.body.ks,JSON.stringify(req.body.ksdaan),JSON.stringify(req.body.infor),req.body.xuehao,moment().format()], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + res.send({status:"ok"}) +}) +app.get("/apitea/askforteakclist",async function(req,res){ + const sql="SELECT * FROM askforteakcb WHERE tea=\""+req.query.teacher+"\""; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const uniqueArray = removeDuplicatesByUUID(results) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(classsql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const stuql="SELECT studentname,shoujihao,nianjizhaungye FROM student WHERE xuehao=\""+uniqueArray[i].xuehao+"\""; + const sturesults= await new Promise((resolve, reject) => { + connection.query(stuql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + uniqueArray[i].kc=kcresults[0]; + uniqueArray[i].stu=sturesults[0]; + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist) + } + res.send(uniqueArray); +}) +app.get("/apitea/askforti", async function(req,res){ + const sql="SELECT * FROM kechengbiao WHERE teacher=\""+req.query.teacher+"\""; + let timujigroup=[]; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + for(i=0;i arr.indexOf(item) === index); + let askforti=[]; + for(let i=0;i { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + + Array.prototype.push.apply(askforti,resultti); + } + //console.log(uniqueArray); // 输出: [1, 2, 3, 4] + const uniqueArray = removeDuplicatesByUUID(askforti) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(sqltm,[uniqueArray[i].th], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }) + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist); + uniqueArray[i].tminfor=resulttm; + } + res.send(uniqueArray); + +}) +app.get("/apitea/taolongstu",async function(req,res){ + const sql="SELECT * FROM commitgroup WHERE xuhao=\""+req.query.xuhao+"\""; + let stulist=[]; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const stu=JSON.parse(results[0].student); + console.log(stu) + for(let i=0;i { + connection.query(sqlstu, [stu[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + if(sture.length>0) { + console.log(sture) + stulist.push(sture[0]) + } + } + const sqlcommit="SELECT * FROM commit WHERE xuhao=\""+req.query.xuhao+"\""; +let finish=[]; +let nofinish=[...stu] + console.log(nofinish) + const resultscommit= await new Promise((resolve, reject) => { + connection.query(sqlcommit, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + resultscommit.map((value,index)=>{ + if(!finish.includes(value.xuehao)){ + finish.push(value.xuehao); + } + if(nofinish.includes(value.xuehao)){ + nofinish=nofinish.filter((item,index)=>item!==value.xuehao.toString()); + console.log(nofinish); + } + }) + let finishlist=[]; + for (let i=0;i { + connection.query(sqlstu, [finish[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + if(stu) + finishlist.push(stu) + } + let nofinishlist=[]; + for (let i=0;i { + connection.query(sqlstu, [nofinish[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + nofinishlist.push(stu) + } + res.send({all:stulist,finish:finishlist,nofinish:nofinishlist}); +}) +app.post("/kaoshi/teauplate",async function(req,res){ + let tea=[]; + req.body.teapanjue.map((value,index)=>{ + tea.push(parseInt(value.xuegonghao)); + }) + const sql="UPDATE kaoshipaper SET paperbj=?,stdbj=?,xxbj=?,fabukecheng=?,tea=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.paper,null,4),JSON.stringify(req.body.std,null,4),JSON.stringify(req.body.xx,4),JSON.stringify(req.body.fabu),JSON.stringify(tea),req.body.uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + console.log(results); + console.log(1345) + }) + }) + res.send({status:"ok"}) +}) +app.get("/api/teaselect",async function(req,res){ + const sqltea="SELECT name,xuegonghao,iphone FROM teacher WHERE xuegonghao=?"; + const tea=await new Promise((resolve, reject) => { + connection.query(sqltea,[req.query.tea],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + if(tea.length>0){ + res.send(tea[0]) + }else{ + res.send("error") + } +}) +app.get("/kaoshi/teaget",async function(req,res){ + const sqltea="SELECT name,xuegonghao,iphone FROM teacher WHERE xuegonghao=?"; + const tea=await new Promise((resolve, reject) => { + connection.query(sqltea,[req.query.tea],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + const sql="SELECT * FROM kaoshipaper WHERE uuid=?"; + const paper=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ksh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + console.log(tea) + if(paper.length>0){ + let temppaper={...paper[0]} + let tealist=[] + for(let i=0;i { + connection.query(sqltea,[JSON.parse(temppaper.tea)[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + tealist.push(tea[0]); + + } + temppaper.tea=tealist; + res.send(temppaper); + }else{ + const sqlinsert = 'INSERT INTO kaoshipaper(`uuid`,paperbj,tea,`stdbj`,xxbj,maintea) VALUES(?,?,?,?,?,?)'; + const re=new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.query.ksh,"[]",JSON.stringify([parseInt(tea[0].xuegonghao)]),"[]",JSON.stringify({ + limit:-1, + name:" ", + timestart:" ", + timeend:" ", + }),req.query.tea], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + + res.send({ + uuid:req.query.ksh, + paperbj:"[]", + tea:[parseInt(tea[0].xuegonghao)], + stdbj:"[]", + xxbj:JSON.stringify({ + limit:-1, + name:" ", + timestart:" ", + timeend:" ", + }) + }); + + } +}) +app.get("/kaoshi/teafajaun",async function(req,res){ + const sql="SELECT * FROM kaoshipaper WHERE uuid=?"; + const paper=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ksh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) +}) +app.get("/kaoshi/teatilist",async function(req,res){ + const sql="SELECT `id`,ksdaan FROM kaoshiend WHERE ks=?"; + const resulttimu=await new Promise((resolve, reject) => { + connection.query(sql,[parseInt(req.query.ksh)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let ksdaan=[]; + for(let i=0;i { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + }else if(studaan.lx==="填空题"){ + if (studaan.sr ==="") { + let temp = JSON.parse(resulttimu[i].ksdaan); + temp[parseInt(req.query.tid)].teacherprint = 0; + temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=? WHERE id=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + } + } + let infor={}; + let flag=false; + let all=0; + let now;//发送的时候在第几个 + ksdaan.map((value,index)=>{ + if(value.teacherid===undefined||value.teacherid===req.query.teacherid) { + all++; + } + if(value.teacherid===undefined&&flag===false){ + flag=true; + now=all; + infor.ti=value; + } + + }) + if(infor.ti===undefined){ + ksdaan.map((value,index)=>{ + if(value.teacherid===req.query.teacherid){ + //flag=true; + now=all; + infor.ti=value; + } + }) + } + infor.all=all; + infor.now=now; + res.send(infor); +}) +app.get("/kaoshi/teatiafter",async function(req,res){ + const sql="SELECT `id`,ksdaan FROM kaoshiend WHERE ks=?"; + const resulttimu=await new Promise((resolve, reject) => { + connection.query(sql,[parseInt(req.query.ksh)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let ksdaan=[]; + for(let i=0;i { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + }else if(studaan.lx==="填空题"){ + if (studaan.sr ==="") { + let temp = JSON.parse(resulttimu[i].ksdaan); + temp[parseInt(req.query.tid)].teacherprint = 0; + temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=? WHERE id=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + } + } + let infor={}; + let flag=false; + let all=0; + let now;//发送的时候在第几个 + + let muqian; + for(let i=0;i { + connection.query(sql, [req.body.id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let json1=JSON.parse(result[0].ksdaan) + if(json1[req.body.tid].teacherid===undefined||json1[req.body.tid].teacherid==req.query.teacherid){ + json1[req.body.tid].teacherid=req.body.teacherid; + json1[req.body.tid].teacherprint=parseInt(req.body.print); + console.log(json1) + const sql="UPDATE kaoshiend SET ksdaan=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql, [JSON.stringify(json1,null,4),req.body.id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send("yes") + }else{ + res.send("已判") + } + + + +}) +app.get("/kaoshi/teatibefore",async function(req,res){ + const sql="SELECT `id`,ksdaan FROM kaoshiend WHERE ks=?"; + // temp[parseInt(req.query.tid)].teacherprint = 0; + //temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const resulttimu=await new Promise((resolve, reject) => { + connection.query(sql,[parseInt(req.query.ksh)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let ksdaan=[]; + for(let i=0;i { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + }else if(studaan.lx==="填空题"){ + if (studaan.sr ==="") { + let temp = JSON.parse(resulttimu[i].ksdaan); + temp[parseInt(req.query.tid)].teacherprint = 0; + temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=? WHERE id=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + } + } + let infor={}; + let flag=false; + let all=0; + let now;//发送的时候在第几个 + + let muqian; + for(let i=0;i=0;i--){ + console.log(12) + let value=ksdaan[i]; + console.log(1233) + console.log(ksdaan[i]); + + if(value.teacherid===undefined||value.teacherid==req.query.teacherid) { + all--; + } + if((value.teacherid===undefined||value.teacherid==req.query.teacherid)&&flag===false){ + flag=true; + now=all; + infor.ti=value; + } + } + all=0; + for (let i=0;i{ + const sqlstd="SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultstd=await new Promise((resolve, reject) => { + connection.query(sqlstd,[req.query.ksh],(error, results, fields) => { + if(error)throw error; + resolve(results[0]); + }) + }) + if(JSON.parse(resultstd.xx).pan_jue_finsih===false) { + const sql = "SELECT * FROM kaoshiend WHERE ks=?"; + const resultksdaan = await new Promise((resolve, reject) => { + connection.query(sql, [parseInt(req.query.ksh)], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let finish = true; + for (let i = 0; i < resultksdaan.length; i++) { + const ksdaan = JSON.parse(resultksdaan[i].ksdaan); + + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[i].panjaun === "teacher") { + if (value.teacherid === undefined) { + finish = false + } + } + } + if (value.lx === "简答题") { + if (value.teacherid === undefined) { + finish = false + } + } + }) + + } + if(finish===true){ + let jsonxx=JSON.parse(resultstd.xx); + jsonxx.pan_jue_finsih=true + const sqlupdate = 'UPDATE kaoshipaper SET xx=? WHERE `uuid`=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(jsonxx, null, 4), req.query.ksh], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + let infor=[] + let allprint=[] + if(finish===true){ + + for (let i = 0; i < resultksdaan.length; i++) { + const ksdaan = JSON.parse(resultksdaan[i].ksdaan); + let num=0; + let ksdaantemp=[...ksdaan] + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[index].panjaun === "teacher") { + num=num+value.teacherprint + ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else{ + if(value.sr.trimStart()===stddaan[index].std.trimStart()){ + num=num+stddaan[index].print + ksdaantemp[index].way="computer" + ksdaantemp[index].printstu=stddaan[index].print + } + } + } + else if (value.lx === "简答题") { + const stddaan = JSON.parse(resultstd.std); + num=num+value.teacherprint + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else if(value.lx==="多选题"){ + let zq=true + const stddaan = JSON.parse(resultstd.std); + value.daan.map((item,xuaho)=>{ + if(!stddaan[index].std.includes(item)){} + zq=false + }) + if(value.daan.length!==stddaan[index].std.length){ + zq=false + } + if(zq){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + + + }else if(value.lx==="单选题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + num=num+0 + } + }else if(value.lx==="判断题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + } + + }) + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=?,allprint=? WHERE id=?'; + //resultksdaan[i]. + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(ksdaantemp,null,4),num,resultksdaan[i].id],(error, results) => { + if (error) throw error; + resolve(results); + + }) + }) + allprint.push(num) + infor.push({infor:ksdaantemp,num:num}) + } + } + + res.send({finish: finish}) + }else{ + res.send({finish: true}) + } + +}) +app.get("/teaapi/kaoshishow",async (req,res)=>{ + //查考试已完成阅卷和正在阅卷 + const sql="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(tea, "+`'[${req.query.tea}]'`+", '$');" + let result=await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i0){ + //考试未开始 + result[i].zt="test_no_start" + }else if(moment().diff(moment(xx.timeend),'s')<0){ + //考试未结束 + result[i].zt="testing" + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + }else{ + let pan_jue_finish; + //考试已结束 + let resultstd=result[i] + if(JSON.parse(result[i].xx).pan_jue_finsih===false) { + const sql = "SELECT * FROM kaoshiend WHERE ks=?"; + const resultksdaan = await new Promise((resolve, reject) => { + connection.query(sql, [parseInt(result[i].uuid)], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let finish = true; + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[j].panjaun === "teacher") { + if (value.teacherid === undefined) { + finish = false + } + } + } + if (value.lx === "简答题") { + if (value.teacherid === undefined) { + finish = false + } + } + }) + + } + if(finish===true){ + let jsonxx=JSON.parse(resultstd.xx); + jsonxx.pan_jue_finsih=true + const sqlupdate = 'UPDATE kaoshipaper SET xx=? WHERE `uuid`=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(jsonxx, null, 4), result[i].uuid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + let infor=[] + let allprint=[] + if(finish===true){ + + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + let num=0; + let ksdaantemp=[...ksdaan] + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[index].panjaun === "teacher") { + num=num+value.teacherprint + ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else{ + if(value.sr.trimStart()===stddaan[index].std.trimStart()){ + num=num+stddaan[index].print + ksdaantemp[index].way="computer" + ksdaantemp[index].printstu=stddaan[index].print + } + } + } + else if (value.lx === "简答题") { + const stddaan = JSON.parse(resultstd.std); + num=num+value.teacherprint + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else if(value.lx==="多选题"){ + let zq=true + const stddaan = JSON.parse(resultstd.std); + value.daan.map((item,xuaho)=>{ + if(!stddaan[index].std.includes(item)){} + zq=false + }) + if(value.daan.length!==stddaan[index].std.length){ + zq=false + } + if(zq){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + + + }else if(value.lx==="单选题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + num=num+0 + } + }else if(value.lx==="判断题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + } + + }) + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=?,allprint=? WHERE id=?'; + //resultksdaan[i]. + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(ksdaantemp,null,4),num,resultksdaan[i].id],(error, results) => { + if (error) throw error; + resolve(results); + + }) + }) + allprint.push(num) + infor.push({infor:ksdaantemp,num:num}) + } + } + pan_jue_finish=finish + // res.send({finish: finishr}) + }else{ + pan_jue_finish=true + // res.send({finish: true}) + } + //判断完成 + if(pan_jue_finish===true) { + result[i].zt = "finish_pan_jue" + }else{ + result[i].zt = "pan_jue" + } + + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + + } + if(!result[i].std){ + result[i].zt="wei_fa_bu" + } + + } + res.send(result); +}) +app.get("/kaoshi/teaprint",async (req,res)=>{ + const sql="SELECT * FROM kaoshiend WHERE ks=? ORDER BY allprint DESC"; + const chengji=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ksh],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let printA=0 + if(chengji.length>0) { + printA=chengji[0].allprint; + } + let paiming=1 + chengji.map((value,index)=>{ + + + if(value.allprint===printA){ + chengji[index].paiming=paiming; + + }else{ + printA=value.allprint; + paiming=index+1; + chengji[index].paiming=paiming; + } + + }) + for (let i=0;i { + connection.query(sqlinfor,[chengji[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + chengji[i].stuinfor=stu[0] + + } + const sqlupdate="SELECT * FROM kaoshipaper WHERE uuid=?"; + const std=await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.query.ksh],(error, results, fields) => { + if (error) throw error; + resolve(results[0]); + }) + }) + res.send({chengji:chengji,std:std}) +}) +app.get("/apitea/teakechengbiao",async (req,res)=>{ + const sql="SELECT * FROM kechengbiao WHERE teacher=?"; + const kecheng=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let kechengbiao=[]; + for(let i=0;i<31;i++){ + let zhou=[]; + for (let j=0;j<7;j++){ + const day=[ + { + zhou:i,//第几周 + day:j,//每周第几天 + jie:1, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:2, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:3, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:4, + classid:0//class号 + + } + ] + zhou.push(day) + } + kechengbiao.push(zhou) + } + kecheng.map((ke,indexke)=>{ + const kelist=JSON.parse(ke.classzou); + kelist.map((kezhou,indexzhou)=>{ + kezhou.class.map((keday,indexday)=>{ + kechengbiao[parseInt(kezhou.zhou)-1][parseInt(keday.day)-1][parseInt(keday.jie)-1].classid={ + name:ke.classname, + id:ke.classid, + teacherid:ke.teacherid, + classbh:ke.classbh, + place:ke.place, + color:ke.color, + } + kechengbiao[parseInt(kezhou.zhou)-1][parseInt(keday.day)-1][parseInt(keday.jie)-1].kch=keday.ke + }) + }) + }) + res.send(kechengbiao) +}) +app.get("/apitea/getclassinfor",async (req,res)=>{ + const sql="SELECT * FROM kcxx WHERE kch=? AND teacherid=?"; + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.kch,req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(result.length===0){ + res.send("no") + }else{ + result[0].xkh=JSON.parse(result[0].xkh) + result[0].skq=JSON.parse(result[0].skq) + res.send(result[0]) + } +}) +app.post("/apitea/addkcxx",async (req,res)=>{ + const informoban={ + "filelist": [ + + ], + "preparebeizhu": "练习题", + "timu": [ + + ] + + } + const sql = 'INSERT INTO kcxx(tea,kch,skq,xkh,teacherid) VALUES(?,?,?,?,?)'; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.tea,req.body.kch,JSON.stringify(informoban),JSON.stringify(informoban),req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) +}) +app.post("/apitea/uplatekcxxskq",async (req,res)=>{ + const sql="UPDATE kcxx SET skq=? WHERE kch=? and teacherid=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.infor),req.body.kch,req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) +}) +app.post("/apitea/uplatekcxxxkq",async (req,res)=>{ + const sql="UPDATE kcxx SET xkh=? WHERE kch=? and teacherid=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.infor),req.body.kch,req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) +}) +app.get("/apitea/cxtimuji",async (req,res)=>{ + const sqlcx="SELECT * FROM timuji WHERE `name` REGEXP ?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlcx,[`.*${req.query.name}.*`],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + + for(let i=0;i { + connection.query(sqlkechengbiao, (err, results, fields) => { + if (err) throw err; + console.log(results); + resolve(results) + }); + }) + let kename=""; + let classid=[]; + kecheng.map((value,index)=>{ + kename+=","+value.classname; + classid.push(value.teacherid); + }) + if(kename.length>3){ + kename=kename.substring(1) + } + result[i].kename=kename; + result[i].classid=classid; + } + + res.send(result) +}) +app.get("/teaapi/askforkckcb",async (req,res)=>{ + const sql="SELECT * FROM askforteakcb WHERE kch=? AND teacherid=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.kch,req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const uniqueArray = removeDuplicatesByUUID(reasult) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(classsql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const stusql="SELECT studentname,xuehao,shoujihao,xueyuan,nianjizhaungye FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(stusql, [temparray[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + uniqueArray[i].stu=stureasult[0] + uniqueArray[i].kc=kcresults[0]; + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist) + } + res.send(uniqueArray) +}) +app.get("/apischool/addschoolxlsx",async (req,res)=>{ + const school=await parsex.sheetlist(req.query.xlsx) ; + res.send(school); +}) +async function addkcbtojson(jsonwb,kch){ + let jsonjs=JSON.parse(jsonwb); + const sqlreadkc="SELECT * FROM kechengbiaotest WHERE teacherid=?" + const kcreasult=await new Promise((resolve, reject) => { + connection.query(sqlreadkc, [kch.teacherid],(error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kclist=[] + JSON.parse(kcreasult[0].classzou).map((zou,zouindex)=>{ + zou.class.map((ke,keindex)=>{ + kclist.push(ke.ke) + }) + }) + jsonjs.map((keone,index)=>{ + if(kclist.includes(keone.time)) { + jsonjs[index].ke = parseInt(kch.classid) + } + }) + return JSON.stringify(jsonjs) +} +app.post("/apischool/addstudent",async (req,res)=>{ + const stuinfor=req.body.stu + console.log(stuinfor) + let stuexcel=await makeexcel.makeExcel(stuinfor) + + for(let i=0;i { + connection.query(sqlbanji,[stuinfor[i].classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlkecheng="SELECT * FROM zhuanye WHERE id=?" + const kecheng=await new Promise((resolve, reject) => { + connection.query(sqlkecheng,[reasultbanji[0].zhaunyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stukecb=[]; + for(let i=0;i<31;i++){ + for(let j=1;j<7;j++){ + for(let k=1;k<4;k++){ + stukecb.push({ + ke:0, + time:`n${i}z${j}A${k}` + }) + } + } + } + let stukecbwb=JSON.stringify(stukecb) + const pyfa=JSON.parse(kecheng[0].pyfa); + for(let i=0;i { + connection.query(sqlkcstu,[pyfa[0].publicclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + let stulist=[]; + if(stu[0].student) { + stulist=JSON.parse(stu[0].student) + } + stulist.push(stuinfor[i].xuehao) + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),pyfa[0].publicclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + } + for(let i=0;i { + connection.query(sqlkcstu,[pyfa[0].zhuanyeclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + let stulist=[]; + if(stu[0].student) { + stulist=JSON.parse(stu[0].student) + } + stulist.push(stuinfor[i].xuehao) + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),pyfa[0].zhuanyeclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + } + const sqlinsert="INSERT INTO student (fudaoyaunid,kecb,studentname, xuehao, shoujihao, xingbian, xueyuan, nianjizhaungye, passage, morenpassword, ruxuetime,idcard)\n" + + "SELECT ?,?,?,?,?,?,?,?,?,?,?,?" + + + "WHERE NOT EXISTS (\n" + + " SELECT 1\n" + + " FROM student\n" + + " WHERE shoujihao = ?\n" + + ");\n" + console.log(123) + const result=await new Promise((resolve, reject) => { + connection.query(sqlinsert,[reasultbanji[0].teacherid,stukecbwb,stuinfor[i].name,stuinfor[i].xuehao,stuinfor[i].iphone,stuinfor[i].xingbian,stuinfor[i].xueyuan,stuinfor[i].classid,stuinfor[i].passage,stuinfor[i].morenpassword,stuinfor[i].ruxuetime,stuinfor[i].idcard,stuinfor[i].iphone],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + + } +res.send({stu:stuexcel}) + //console.log(stuinfor.length) +}) +app.get("/apischool/selectteacher",async (req,res)=>{ + const sql="SELECT name,iphone FROM teacher WHERE xuegonghao=?" + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error)throw error; + if(results.length===0){ + res.send("no"); + }else{ + res.send(results[0]); + } + }) +}) +app.post("/apischool/uplatekcbkc",async (req,res)=>{ + const sql="UPDATE kechengbiao SET bianjikc=? WHERE classid=?" + console.log(req.body) + connection.query(sql,[JSON.stringify(req.body.bianjikc,null,4),req.body.classid],(error, results, fields) => { + + + }) +}) +app.post("/apischool/uplatekcinfor",(req,res)=>{ + const sql="UPDATE kechengbiao SET classname=?,teacherid=?,classbh=?,teacher=?,color=?,place=? WHERE classid=?" + connection.query(sql,[req.body.classname,req.body.teacherid,req.body.classbh,req.body.teacher,req.body.color,req.body.place,req.body.classid],(error,reasult,field)=>{ + + }) +}) +app.get("/apischool/getkcinfor_bianji",(req,res)=>{ + const sql="SELECT * FROM kechengbiao WHERE classid=?" + connection.query(sql,[req.query.classid],(error, results, fields) => { + res.send(results[0]); + }) +}) +app.get("/apischool/getkechenglist",async (req,res)=>{ + const sql="SELECT * FROM kechengbiao " + let result=await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqltea,[result[i].teacher],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(tea.length===0){ + result[i].teaname="no"; + }else{ + result[i].teaname=tea[0].name; + } + } + res.send(result) +}) +app.get("/apischool/newkcb",async (req,res)=>{ + const sqlnum="SELECT * FROM kechengall" + const resultnum=await new Promise((resolve, reject) => { + connection.query(sqlnum,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let num=resultnum.length; + let sqlinsert="INSERT INTO kechengall(id,kechenglist) VALUES(?,?)" + let kechengbiao=[]; + for(let i=0;i<31;i++){ + let zhou=[]; + for (let j=0;j<7;j++){ + const day=[ + { + zhou:i,//第几周 + day:j,//每周第几天 + jie:1, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:2, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:3, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:4, + classid:0//class号 + + } + ] + zhou.push(day) + } + kechengbiao.push(zhou) + } + const resultinsert=await new Promise((resolve, reject) => { + connection.query(sqlinsert,[num+1,JSON.stringify(kechengbiao)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + res.send({num:num}) +}) +app.post("/apischool/fabukc",async (req,res)=>{ + const sqlselect="SELECT * FROM kechengbiaotest WHERE kechengid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.classid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + let zhoukc = []; + zhou.map((day, dayindex) => { + day.map((ke, keindex) => { + if (ke.classid != 0) { + let keone = {ke: `n${ke.zhou}z${ke.day + 1}A${ke.jie}`, day: ke.day + 1, jie: ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day + 1}A${ke.jie}`] = []; + } + }) + }) + if (zhoukc.length !== 0) { + const kcone = { + zhou: zhouindex + 1, + class: zhoukc + } + kc.push(kcone) + } + + + }) + //console.log(qj); + //console.log(kc) + const sqlupdate = 'UPDATE kechengbiaotest SET classtime=?,classzou=?,timu=? WHERE classid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(qj), JSON.stringify(kc), req.body.classid, "[]"], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + const sqlfabu="UPDATE kechengall SET fabu=? WHERE id=?"; + await new Promise((resolve, reject) => { + connection.query(sqlfabu,["已发布",req.body.classid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({status:"ok"}) + +}) +app.get("/apischool/getstudent",async (req,res)=>{ + const sql="SELECT * FROM studenttest"; + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,fields)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) +}) +app.get("/apischool/getteacher",async (req,res)=>{ + const sql="SELECT * FROM teacher"; + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,fields)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) +}) +app.get("/apischool/paixustudent",async (req,res)=>{ + if(req.query.search==="") { + + const sql = `SELECT * FROM studenttest ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM \`studenttest\` WHERE CONCAT(studentname,xuehao,shoujihao,xueyuan,nianjizhaungye) LIKE ? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + } +}) +app.get("/apischool/paixuteacher",async (req,res)=>{ + if(req.query.search==="") { + + const sql = `SELECT * FROM teacher ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM teacher WHERE CONCAT(name,xuegonghao,zzmm,iphone) LIKE ? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + } +}) +app.post("/apischool/addxueyuan",async (req,res)=>{ + try { + const md5 = crypto.createHash('md5'); + md5.update(req.body.password); + //const password = md5.digest('hex'); + const sqlchaxun = "SELECT * FROM xueyuan WHERE id=?"; + const result = await new Promise((resolve, reject) => { + connection.query(sqlchaxun, [req.body.xueyuanid], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + if (result.length === 0) { + const password = md5.digest('hex'); + const sqlinsertxueyuan = "INSERT INTO xueyuan(id,name,zhuanye,password,leaderid,leadername,jiejian,zt) VALUES(?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsertxueyuan, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian, "已发布"], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + } else { + + const updatesql = "UPDATE xueyuan SET id=?,name=?,zhuanye=?,password=?,leaderid=?,leadername=?,jiejian=?,zt=? WHERE id=?"; + const password = md5.digest('hex'); + console.log(updatesql) + await new Promise((resolve, reject) => { + connection.query(updatesql, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian, "已发布", req.body.xueyuanid], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + } + const xid = req.body.xueyuanid; + const zhuanye = req.body.zhuanye; + for (let i = 0; i < zhuanye.length; i++) { + try { + const sqlinsertzhaunye = "INSERT INTO zhuanye(id,name,jianjie,xueyuanid,classs) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsertzhaunye, [xid.toString() + zhuanye[i].zyid, zhuanye[i].title, zhuanye[i].jianjie, req.body.xueyuanid, "[]"], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + }catch (e) { + console.log(e) + } + } + res.send({status:"ok"}) + }catch (e) { + console.error(e); + } +}) +app.post("/apischool/baochunxueyuan",async (req,res)=>{ + const md5 = crypto.createHash('md5'); + md5.update(req.body.password); + const sqlchaxun="SELECT * FROM xueyuan WHERE id=?"; + const result=await new Promise((resolve, reject) => { + connection.query(sqlchaxun,[req.body.xueyuanid],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + if (result.length===0) { + const password = md5.digest('hex'); + const sqlinsertxueyuan = "INSERT INTO xueyuan(id,`name`,zhuanye,`password`,leaderid,leadername,jiejian,zt) VALUES(?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsertxueyuan, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian, "未发布"], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + }else{ + const updatesql="UPDATE xueyuan SET id=?,name=?,zhuanye=?,password=?,leaderid=?,leadername=?,jiejian=?,zt=? WHERE id=?"; + const password = md5.digest('hex'); + + await new Promise((resolve, reject) => { + connection.query(updatesql, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian,"未发布",req.body.xueyuanid], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + } + res.send({status:"ok"}) + +}) +app.get("/apischool/getbjxueyuan",async (req,res)=>{ + const sql="SELECT * FROM xueyuan WHERE id=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuanid],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(reasult) +}) +app.get("/apischool/getxueyuanlist",async (req,res)=>{ + const sql="SELECT * FROM xueyuan"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(reasult) +}) +app.get("/apixueyuan/getxueyuaname",async (req,res)=>{ + const sql="SELECT name FROM xueyuan WHERE id=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(reasult[0]) +}) +app.post("/apixueyuan/password",async(req,res)=>{ + const sql="SELECT * FROM xueyuan WHERE id=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length===0){ + res.send({status:"系统错误 无此学院"}) + }else { + if (req.body.password === reasult[0].password) { + res.send({status:"ok",name:reasult[0].name}) + }else{ + res.send({status:"err"}); + } + } +}) +app.post("/apixueyuanany/password",async(req,res)=>{ + const sql="SELECT * FROM xueyuan WHERE name=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.name],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length===0){ + res.send({status:"系统错误 无此学院"}) + }else { + if (req.body.password === reasult[0].password) { + res.send({status:"ok",xyid:reasult[0].id}) + }else{ + res.send({status:"err"}); + } + } +}) +app.post("/apischool/password",async(req,res)=>{ + const sql="SELECT * FROM information WHERE xiang='password'"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.name],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length===0){ + res.send({status:"系统错误 无此学院"}) + }else { + if (req.body.password === reasult[0].value) { + res.send({status:"ok",xyid:reasult[0].id}) + }else{ + res.send({status:"err"}); + } + } +}) +app.get("/apixueyuan/getzhuanye",async (req,res)=>{ + const sql="SELECT * FROM zhuanye WHERE xueyuanid=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyaunid],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlclsss,[reasult[i].id],(err,results,field)=>{ + resolve(results); + }) + }) + reasult[i].classcout=reasultclass.length; + } + + res.send(reasult) +}) +app.get("/apixueyuan/getkechengbiao",async (req,res)=>{ + const sql="SELECT classname,teacher,place FROM kechengbiao WHERE teacherid=? AND classzou IS NOT NULL"; + let result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(result.length>0) { + const sqltea = "SELECT * FROM teacher WHERE xuegonghao=?" + let tea = await new Promise((resolve, reject) => { + connection.query(sqltea, [result[0].teacher], (err, results, field) => { + if(err)throw err; + resolve(results); + }) + }) + if(tea.length>0) { + result[0].teachername = tea[0].name; + result[0].status = "ok" + } + res.send(result[0]) + }else{ + res.send({status:"err"}) + } +}) +app.post("/apixueyuan/saveclass",async (req,res)=>{ + const sql="UPDATE banjiclass SET classname1=?,classname2=?,kclist=?,teacherid=?,teachername=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.classname1,req.body.classname2,JSON.stringify(req.body.kclist),req.body.teacherid,req.body.teachername,req.body.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send({status:"ok"}) +}) +app.get("/apixueyuan/getbjclass",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE id=?" + let reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length>0){ + const sqltea="SELECT * FROM teacher WHERE xuegonghao=?"; + const reasulttea=await new Promise((resolve, reject) => { + connection.query(sqltea,[reasult[0].teacherid],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasulttea.length>0) { + reasult[0].teachername = reasulttea[0].name; + } + } + res.send(reasult[0]) +}) +app.post("/apixueyuan/fubuclass",async (req,res)=>{ + const sql="UPDATE banjiclass SET zt=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql,["已发布",req.body.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) +}) +app.get("/apixueyuan/newclassid",async (req,res)=>{ + const sqlgetlength="SELECT COUNT(*) AS leng FROM banjiclass" + const resultlength=await new Promise((resolve, reject) => { + connection.query(sqlgetlength,(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + const len=resultlength[0].leng; + const sql="INSERT INTO banjiclass(id,xueyuanid,zhaunyeid,zt) VALUES(?,?,?,?)"; + await new Promise((resolve, reject) => { + connection.query(sql,[len+1,req.query.xueyuan,req.query.zhuanye,"未发布"],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(resultlength) + +}) +app.get("/apixueyuan/getclass_zhuanye",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + + let reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqllist,[reasult[i].classname1+reasult[i].classname2],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + console.log(stucount) + reasult[i].stulen=stucount[0].jishu + } + res.send(reasult) +}) +app.get("/apischool/getclass_newstu",async (req,res)=>{ + const sqlxueyuan ="SELECT * FROM xueyuan" + const xueyuan=await new Promise((resolve, reject) => { + connection.query(sqlxueyuan,(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + const xueyuanlist={}; + for(let i=0;i { + connection.query(sql,[xueyuan[i].id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + xueyuanlist[xueyuan[i].name]=classxx + } + res.send(xueyuanlist) +}) +app.get("/apixueyuan/get_allstu",async (req,res)=>{ + const sqlstu="SELECT * FROM student WHERE xueyuan=?" + const reastudent=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xueyuan],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(reastudent) +}) +app.get("/apixueyuan/get_stulist",async (req,res)=>{ + const sqlclass="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sqlclass,[req.query.zhuanye],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + let stu=[]; + for(let i=0;i { + connection.query(sqlstu,[req.query.xueyuan,reasultclass[i].classname1+reasultclass[i].classname2],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + stu=[...stu,...reastudent] + + } + res.send(stu) +}) +app.get("/apixueyuan/getpaixu_allstu",async (req,res)=>{ + if(req.query.search==="") { + + const sql = `SELECT * FROM student WHERE xueyuan=? ORDER BY ${req.query.px} ${req.query.sxnx} ` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + // stu=[...stu,...result] + res.send(result) + //console.log(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM \`student\` WHERE CONCAT(studentname,xuehao,shoujihao,xueyuan,nianjizhaungye) LIKE ? AND xueyuan=? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`,req.query.xueyuan],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + //stu=[...stu,...result] + } + //res.send(result); +}) +app.get("/apixueyuan/getpaixu_stulist",async (req,res)=>{ + const sqlclass="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sqlclass,[req.query.zhuanye],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + let stu=[]; + console.log(reasultclass) + for(let i=0;i { + connection.query(sql,[req.query.xueyuan,reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stu=[...stu,...result] + //res.send(result) + console.log(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM \`student\` WHERE CONCAT(studentname,xuehao,shoujihao,xueyuan,nianjizhaungye) LIKE ? AND xueyuan=? AND nianjizhaungye=? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`,req.query.xueyuan,reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + //res.send(result) + stu=[...stu,...result] + } + + + } + res.send(stu) +}) +app.get("/apixueyuan/getkslist",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + reasultclass.map((banji,index)=>{ + + const kc=JSON.parse(banji.kclist); + if(kc) { + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + } + }) + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) + + let kechengnew=[]; + if(JSON.parse(kechengnewlist.kclist)) { + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + kecheng = [...new Set(kechengnew)] + let ksp = []; + for (let i = 0; i < kecheng.length; i++) { + const kc = "SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(fabukecheng, " + `'["${kecheng[i]}"]'` + ", '$');" + const kspaper = await new Promise((resolve, reject) => { + connection.query(kc, (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + + ksp = [...ksp, ...kspaper]; + } + ksp.map((kspone, indexone) => { + const stutimu = JSON.parse(kspone.stu) + let stukc = []; + console.log(stutimu) + console.log(stulist) + stutimu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + ksp[indexone].sturea = stukc; + }) + res.send(ksp) + }else{ + res.send([]) + } +}) +app.get("/apixueyuan/gettaolonglist",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + reasultclass.map((banji,index)=>{ + + const kc=JSON.parse(banji.kclist); + if(kc) { + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + } + }) + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) + + let kechengnew=[]; + if(JSON.parse(kechengnewlist.kclist)) { + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + kecheng = [...new Set(kechengnew)] + let ksp = []; + for (let i = 0; i < kecheng.length; i++) { + const kc = "SELECT * FROM commitgroup WHERE JSON_CONTAINS(fabukecheng, " + `'[${kecheng[i]}]'` + ", '$');" + console.log(kc) + const kspaper = await new Promise((resolve, reject) => { + connection.query(kc, (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + + ksp = [...ksp, ...kspaper]; + } + ksp.map((kspone, indexone) => { + const stutimu = JSON.parse(kspone.student) + let stukc = []; + console.log(stutimu) + console.log(stulist) + stutimu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + ksp[indexone].sturea = stukc; + }) + for (let i = 0; i < ksp.length; i++) { + const sqlcommit = "SELECT * FROM commit WHERE xuhao=?" + const reasultcommit = await new Promise((resolve, reject) => { + connection.query(sqlcommit, [ksp[i].xuhao], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + const commitstu = []; + const commit = []; + reasultcommit.map((valuecommit, indexcommit) => { + if (stulist.includes(valuecommit.xuehao)) { + commit.push(valuecommit) + commitstu.push(valuecommit.xuehao) + } + }) + ksp[i].commit = commit; + ksp[i].commitstu = commitstu + } + res.send(ksp) + }else{ + res.send([]) + } +}) +app.get("/apixueyuan/gettmjlist",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + reasultclass.map((banji,index)=>{ + + const kc=JSON.parse(banji.kclist); + if(kc) { + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + } + }) + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) +if(JSON.parse(kechengnewlist.kclist)) { + let kechengnew = []; + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + kecheng = [...new Set(kechengnew)] + let ksp = []; + for (let i = 0; i < kecheng.length; i++) { + const kc = "SELECT * FROM perparetmj WHERE JSON_CONTAINS(information, " + `'["${kecheng[i]}"]'` + ", '$.class');" + const kspaper = await new Promise((resolve, reject) => { + connection.query(kc, (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + + ksp = [...ksp, ...kspaper]; + } + for (let i = 0; i < ksp.length; i++) { + const kspone = ksp[i]; + const kspclass = JSON.parse(kspone.information).class; + let tmjstu = [] + for (let j = 0; j < kspclass.length; j++) { + const sqlkc = "SELECT * FROM kechengbiao WHERE teacherid=?"; + const stureasult = await new Promise((resolve, reject) => { + connection.query(sqlkc, [kspclass[j]], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + const stuone = JSON.parse(stureasult[0].student); + tmjstu = [...tmjstu, ...stuone]; + + } + let stukc = []; + tmjstu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + + ksp[i].sturea = stukc; + } + + res.send(ksp) +}else{ + res.send([]) +} +}) + +app.post("/apixueyuan/changepassword",async (req,res)=>{ + try { + const sql = "SELECT password FROM xueyuan WHERE id=?" + const pass = await new Promise((resolve, reject) => { + connection.query(sql, [req.body.xueyuan], (error, results, field) => { + // if (error) throw error; + resolve(results); + }) + }) + if (pass.length === 0) { + res.send({status: "无此学院"}) + } else { + const md5 = crypto.createHash('md5'); + const yuan = md5.update(req.body.yuanpass).digest('hex'); + if (yuan === pass[0].password) { + const sqlupdate = "UPDATE xueyuan SET password=? WHERE id=?" + const md51 = crypto.createHash('md5'); + await new Promise((resolve, reject) => { + connection.query(sqlupdate, [md51.update(req.body.newpass).digest('hex'), req.body.xueyuan], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({status: "ok"}) + } else { + res.send({status: "原密码错误"}) + } + } + }catch (e) { + //throw e; + await newbug(e,"/apixueyuan/changepassword",req.body); + console.log(e); + } +}) +app.get("/apitea/stumanageinfor",async(req,res)=>{ + try { + const sqlstu = "SELECT * FROM student WHERE xuehao=?" + const reasult = await new Promise((resolve, reject) => { + connection.query(sqlstu, [req.query.stu], (error, results, field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + console.log(123) + if (reasult.length > 0) { + const sql = "SELECT * FROM teacher WHERE id=?" + const teareasult = await new Promise((resolve, reject) => { + connection.query(sql, [reasult[0].fudaoyaunid], (error, results, field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + if(teareasult.length > 0) { + reasult[0].fdyname = teareasult[0].name; + } + const sqlbanji="SELECT * FROM `banjiclass` WHERE CONCAT(classname1,classname2)=?" + const banjireasult=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[reasult[0].nianjizhaungye],(error, results, field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const zyreasult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[banjireasult[0].zhaunyeid],(error,results,field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + reasult[0].zy=zyreasult[0].name + + delete reasult[0].kecb + res.send(reasult[0]) + console.log(1234) + }else{ + res.send({err:"yes"}) + } + + }catch (e) { + console.log(e) + if (e) { + newbug(e, "/apitea/stuinfor", req.query) + } + res.send({err:"ok"}) + } +}) +app.post("/apitea/updatestuinfor",async(req,res)=>{ + const sql="UPDATE student SET studentname=?,shoujihao=?,xingbian=?,gongyumingche=?,shushemc=?,ruxuetime=?,idcard=?,zzmm=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.infor.studentname,req.body.infor.shoujihao,req.body.infor.xingbian,req.body.infor.gongyumingche,req.body.infor.shushemc,req.body.infor.ruxuetime,req.body.infor.idcard,req.body.infor.zzmm,req.body.infor.xuehao],(error,results,field)=>{ + if (error) { + newbug(error, "/apitea/updatestuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send({err:"ok"}) + // console.log(req.body); +}) +app.get("/apitea/getteaparent",async(req,res)=>{ + const sql="SELECT * FROM parents WHERE stdentid=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.stu],(error, results, fields) => { + if (error) { + newbug(error, "/apitea/getteaparent", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(reasult) +}) +app.post("/apitea/updateparents",async(req,res)=>{ + const sql="UPDATE parents SET name=?,iphone=?,guanxi=? WHERE id=?"; + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.parents.name,req.body.parents.iphone,req.body.parents.guanxi,req.body.parents.id],(error, results, fields) => { + if (error) { + newbug(error, "/apitea/updateparents", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send({ok:"ok"}) +}) +app.get("/apitea/stunewparent",async(req,res)=>{ + const sqllen="SELECT COUNT(*) AS leng FROM parents" + const reasultlen=await new Promise((resolve, reject) => { + connection.query(sqllen,(error,results,fields) => { + if (error) { + newbug(error, "/apitea/stunewparent", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlinsert="INSERT INTO parents(id,stdentid) VALUES(?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[parseInt(reasultlen[0].leng+1),req.query.xuehao],(error,results,fields) => { + if (error) { + newbug(error, "/apitea/stunewparent", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send({length:reasultlen[0].leng+1}) +}) +app.post("/apixueyuan/changezhuanye",async (req,res)=>{ + const sql="UPDATE zhuanye SET name=?,jianjie=? WHERE id=?" + + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.name,req.body.jianjie,req.body.id],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/changezhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + +}) +app.post("/apixueyuan/addzhuanye",async (req,res)=>{ + const sqlinsert="INSERT INTO zhuanye(id,name,jianjie,xueyuanid,classs) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.id,req.body.name,req.body.jianjie,req.body.xueyuanid,req.body.classs],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlselect="SELECT * FROM xueyuan WHERE id=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.xueyuanid],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let zhuanye=JSON.parse(reasult[0].zhuanye); + zhuanye.push({zyid: req.body.id, title: req.body.name, jianjie:req.body.jianjie}) + const sqlupdate="UPDATE xueyuan SET zhuanye=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(zhuanye,null,4),req.body.xueyuanid],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) +}) +async function huqoukecheng(kecheng){ + let kechenglist=[] + + for(let i=0;i { + connection.query(sqlkc,[kecheng[i]],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results[0]) + }) + }) + if(kc) { + delete kc.classzou + delete kc.classtime + const sqltea = "SELECT * FROM teacher WHERE xuegonghao=?" + const teareasult = await new Promise((resolve, reject) => { + connection.query(sqltea, [kc.teacher], (error, results, fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + if(teareasult.length>0) { + kc.teaname = teareasult[0].name; + const sqlstu = "SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM `student` WHERE kecb LIKE ?" + const stureasult = await new Promise((resolve, reject) => { + connection.query(sqlstu, [`%"ke": ${kc.classid}%`], (error, results, field) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + kc.stulist = stureasult; + kechenglist.push(kc); + } + }else{ + kechenglist.push("nokecheng") + } + } + return kechenglist +} +app.get("/apixueyuan/addclassinfor",async(req,res)=>{ + const result=await huqoukecheng([req.query.teacherid]); + res.send(result[0]); +}) +app.get("/apixueyuan/getkecheng",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + //旧代码废弃开始 + if(1===2) { + reasultclass.map((banji, index) => { + + const kc = JSON.parse(banji.kclist); + + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + }) + kecheng = [...new Set(kecheng)] + } + //旧代码废弃 结束 + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) + + let kechengnew=[]; + if(JSON.parse(kechengnewlist.kclist)) { + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + console.log(kechengnew) + kechengnew = [...new Set(kechengnew)] + res.send(await huqoukecheng(kechengnew)) + } +}) +app.get("/apixueyuan/get_addstu",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + if(!JSON.parse(req.query.readystu).includes(stuname.xuehao)) { + stuname.choose = false + stulist.push(stuname) + } + }) + } + res.send(stulist); +}) +app.post("/apixueyuan/addstutokc",async (req,res)=>{ + const sqlkcb="SELECT * FROM kechengbiao WHERE classid=?" + + const kcb=await new Promise((resolve, reject) => { + connection.query(sqlkcb,[req.body.classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kctime=JSON.parse(kcb[0].classzou) + let kcbiao=[]; + kctime.map((valuezou,indexzou)=>{ + valuezou.class.map((valueke,indexke)=>{ + kcbiao.push(valueke.ke) + }) + }) + const stu=JSON.parse(req.body.stu); + for(let i=0;i { + connection.query(sqlstu,[stu[i]],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let kclisttemp=[]; + if(stureasult[0].kecb) { + kclisttemp=JSON.parse(stureasult[0].kecb) + }else{ + for(let i=0;i<31;i++){ + for(let j=1;j<=7;j++){ + for(let k=1;k<=4;k++){ + kclisttemp.push({ + ke: 0, + time: `n${i}z${j}A${k}` + }) + } + } + } + } + let kclisttemp2=[...kclisttemp]; + kclisttemp.map((value1,index)=>{ + // console.log(value1) + if(kcbiao.includes(value1.time)){ + // console.log(123) + kclisttemp2[index].ke=parseInt(kcb[0].classid) + } + }) + const sqlupdate="UPDATE student SET kecb=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(kclisttemp2),stureasult[0].xuehao],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + + //res.send({ke:kclisttemp2,kek:kcbiao}); + + + } + let stukc=JSON.parse(kcb[0].student) + stukc=[...stukc,...stu]; + stukc=[...new Set(stukc)] + //res.send(stukc); + const sqlupdatestu="UPDATE kechengbiao SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatestu,[JSON.stringify(stukc),kcb[0].classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({status:"ok"}) + +}) +app.post("/apixueyuan/yuantuike",async(req,res)=>{ + const sqlkcb="SELECT * FROM kechengbiao WHERE classid=?" + + const kcb=await new Promise((resolve, reject) => { + connection.query(sqlkcb,[req.body.classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kctime=JSON.parse(kcb[0].classzou) + let kcbiao=[]; + kctime.map((valuezou,indexzou)=>{ + valuezou.class.map((valueke,indexke)=>{ + kcbiao.push(valueke.ke) + }) + }) + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.stu],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let kclisttemp=[]; + if(stureasult[0].kecb) { + kclisttemp=JSON.parse(stureasult[0].kecb) + }else{ + for(let i=0;i<31;i++){ + for(let j=1;j<=7;j++){ + for(let k=1;k<=4;k++){ + kclisttemp.push({ + ke: 0, + time: `n${i}z${j}A${k}` + }) + } + } + } + } + let kclisttemp2=[...kclisttemp]; + kclisttemp.map((value1,index)=>{ + // console.log(value1) + if(kcbiao.includes(value1.time)){ + // console.log(123) + kclisttemp2[index].ke=0 + } + }) + + const sqlupdate="UPDATE student SET kecb=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(kclisttemp2),stureasult[0].xuehao],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let stukc=JSON.parse(kcb[0].student) + stukc=stukc.filter(stu=>stu!==req.body.stu) + const sqlupdatestu="UPDATE kechengbiao SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatestu,[JSON.stringify(stukc),kcb[0].classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apiclass/getxueke",async(req,res)=>{ + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + + const banji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.query.banji],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results[0]) + }) + }) + if(banji) { + const sqlstubanji = "SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist = await new Promise((resolve, reject) => { + connection.query(sqlstubanji, [banji.classname1 + banji.classname2], (error, results, field) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kcall = JSON.parse(banji.kclist); + //系统自选 + if (kcall) { + let systemkcall = kcall.systemchoose; + for (let i = 0; i < systemkcall.length; i++) { + const systemonekc = systemkcall[i].kechenglist; + let kc = [] + systemonekc.map((valuekc, index) => { + kc.push(valuekc.classid) + }) + systemkcall[i].kcinfor = await huqoukecheng(kc); + let stu = []; + systemkcall[i].kcinfor.map((valuekc, indexkc) => { + valuekc.stulist.map((valuestu, indexstu) => { + + stu.push(valuestu.xuehao) + }) + }) + let stuallno = stulist.filter(word => !stu.includes(word.xuehao)) + systemkcall[i].nostu = stuallno + systemkcall[i].addsystemchoose = {stulist: []} + } + let studentkcall = kcall.stuchoose + for (let i = 0; i < studentkcall.length; i++) { + const stuonekc = studentkcall[i].kechenglist; + let kc = [] + stuonekc.map((valuekc, index) => { + kc.push(valuekc.classid) + + }) + studentkcall[i].kcinfor = await huqoukecheng(kc); + let stu = []; + studentkcall[i].kcinfor.map((valuekc, indexkc) => { + valuekc.stulist.map((valuestu, indexstu) => { + stu.push(valuestu.xuehao) + }) + }) + let stuallno = stulist.filter(word => !stu.includes(word.xuehao)) + studentkcall[i].nostu = stuallno + studentkcall[i].addsystemchoose = {stulist: []} + } + let publickc = kcall.publicclass; + let kclist = []; + publickc.map((kc, kcindex) => { + kclist.push(kc.classid) + + }) + let publickcinfor = await huqoukecheng(kclist) + let zhuanyekc = kcall.zhuanyeclass + kclist = []; + zhuanyekc.map((zy, zyindex) => { + kclist.push(zy.classid) + }) + let zhaunyekcinfor = await huqoukecheng(kclist) + res.send({ + systemchoose: systemkcall, + studentchoose: studentkcall, + publickc: publickcinfor, + zhaunyekc: zhaunyekcinfor + }) + } else { + res.send({ + systemchoose: [], + studentchoose: [], + publickc: [], + zhaunyekc: [] + }) + } + }else { + res.send({ + systemchoose: [], + studentchoose: [], + publickc: [], + zhaunyekc: [] + }) + } +}) +app.post("/apiclass/addsyschoosekc",async(req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.systemchoose[req.body.index].kechenglist.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apiclass/addstuchoosekc",async(req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.stuchoose[req.body.index].kechenglist.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apiclass/addpublickc",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.publicclass.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apiclass/addzhuanyekc",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.zhuanyeclass.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apibanji/addsystemchoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.post("/apibanji/addstuchoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.post("/apibanji/changestuchoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + //kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + kclist.systemchoose[req.body.index].kechengname=req.body.name + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.post("/apibanji/changesyschoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + //kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + kclist.stuchoose[req.body.index].kechengname=req.body.name + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.get("/apiclass/chaxunsyj",async(req,res)=>{ + const sqlclass="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasultclass =await new Promise((resolve, reject) => { + connection.query(sqlclass,[req.query.classname],(error,results,fields)=>{ + + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + + }) + }) + console.log(reasultclass) + const sqlxueyuan="SELECT * FROM xueyuan WHERE id=?" + if(reasultclass[0]) { + const xueyuan = await new Promise((resolve, reject) => { + connection.query(sqlxueyuan, [reasultclass[0].xueyuanid], (error, results, field) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(xueyuan[0]) + } +}) +app.post("/apixueyuan/savekcallinfor",async(req,res)=>{ + const sqlupdate="UPDATE kechengall SET name=?,kch=?,jianjie=?,color=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.name,req.body.kch,req.body.jianjie,req.body.color,req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlupdatekc="UPDATE kechengbiaotest SET color=?,classname=? WHERE kechengid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatekc,[req.body.color,req.body.name,req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) +}) +app.post("/apixueyuan/savekcallkcb",async(req,res)=>{ + const sqlupdate="UPDATE kechengall SET kechenglist=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + const sqlupdatetime="UPDATE kechengbiaotest SET classzou=?,bianjikc=? WHERE kechengid=?" + + await new Promise((resolve, reject) => { + connection.query(sqlupdatetime,[JSON.stringify(kc),JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM kechengbiaotest WHERE kechengid=?" + let banjilist=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }); + console.log(banjilist.length) + for(let i=0;i { + connection.query(sqlupdateclasstime,[JSON.stringify(classtimeqj),banjilist[i].classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + } + + + +}) +app.post("/apixueyuan/savekcallkcb_add_stu",async(req,res)=>{ + const sqlselect_old="SELECT * FROM kechengall WHERE id=?" + const old_result=await new Promise((resolve, reject) => { + connection.query(sqlselect_old,[req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const timekc_old=[]; + old_result.map((zhouvalue,zhouindex)=>{ + zhouvalue.map((dayvalue,dayindex)=>{ + dayvalue.map((kevalue,keindex)=>{ + timekc_old.push(`n${kevalue.zhou}z${kevalue.day+1}A${kevalue.jie}`) + }) + }) + }) + const sqlupdate="UPDATE kechengall SET kechenglist=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + let kcnew=[] + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + kcnew.push(`n${ke.zhou}z${ke.day+1}A${ke.jie}`) + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + const sqlupdatetime="UPDATE kechengbiaotest SET classzou=?,bianjikc=? WHERE kechengid=?" + + await new Promise((resolve, reject) => { + connection.query(sqlupdatetime,[JSON.stringify(kc),JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM kechengbiaotest WHERE kechengid=?" + let banjilist=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }); + console.log(banjilist.length) + for(let i=0;i { + connection.query(sqlstu, (error, results, fields) => { + if (error) throw error; + resolve(results) + }) + }) + const sturesult_temp=[...sturesult] + for(let stu_i=0;stu_i{ + if(kcnew.includes(keone.time)){ + kcstu[keindex].ke=parseInt(banjilist[0].classid) + }else if(timekc_old.includes(keone.time)){ + kcstu[keindex].ke=0 + + } + }) + const sqlupdate_stu="UPDATE student SET kecb=? WHERE studentid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate_stu,[JSON.stringify(kcstu),sturesult[stu_i].studentid], (error,results,fields)=>{ + if (error) throw error; + resolve(results) + }) + }) + } + const xiang=banjilist[i] + + console.log(i) + //console.log(xiang) + let classtimeqj=JSON.parse(xiang.classtime) + classtimeqj={...qj,...classtimeqj}; + const sqlupdateclasstime="UPDATE kechengbiaotest SET classtime=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdateclasstime,[JSON.stringify(classtimeqj),banjilist[i].classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + } + + res.send({status:"ok"}) +}) +app.post("/apixueyaun/addbanjitokc",async(req,res)=>{ + const sqlcount="SELECT * FROM `kechengbiaotest` ORDER BY classid DESC LIMIT 1;" + let len=await new Promise((resolve, reject) => { + connection.query(sqlcount,(error,results,fields)=>{ + resolve(results[0].classid) + }) + }) + let length=parseInt(len)+1 + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + //console.log(qj); + //console.log(kc) + // const sqlupdate= 'UPDATE kechengbiao SET classtime=?,classzou=?,timu=? WHERE classid=?' ; + //await new Promise((resolve, reject) => { + // connection.query(sqlupdate,[JSON.stringify(qj),JSON.stringify(kc),req.body.classid,"[]"],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + // }) + const sqlinsert="INSERT INTO kechengbiaotest(student,classtime,classzou,color,timu,kechengid,bianjikc,classid) VALUES(?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,["[]",JSON.stringify(qj),JSON.stringify(kc),req.body.color,"[]",req.body.kechengid,JSON.stringify(req.body.kcb),length+1],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({id:length+1,studentnum:120}) +}) +app.post("/apixueyaun/addbanjitokcupdate",async(req,res)=>{ + const sqlcount="SELECT * FROM `kechengbiaotest` ORDER BY classid DESC LIMIT 1;" + let len=await new Promise((resolve, reject) => { + connection.query(sqlcount,(error,results,fields)=>{ + resolve(results[0].classid) + }) + }) + let length=parseInt(len)+1 + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + //console.log(qj); + //console.log(kc) + // const sqlupdate= 'UPDATE kechengbiao SET classtime=?,classzou=?,timu=? WHERE classid=?' ; + //await new Promise((resolve, reject) => { + // connection.query(sqlupdate,[JSON.stringify(qj),JSON.stringify(kc),req.body.classid,"[]"],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + // }) + const sqlinsert="INSERT INTO kechengbiaotest(student,classtime,classzou,color,timu,kechengid,bianjikc,classid,place,studentnum,teaname,teacherid,teacher,classbh,classname) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,["[]",JSON.stringify(qj),JSON.stringify(kc),req.body.color,"[]",req.body.kechengid,JSON.stringify(req.body.kcb),length+1,req.body.place,req.body.studentnum,req.body.teaname,req.body.teacherid,req.body.teacher,req.body.classbh,req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({id:length+1,studentnum:120}) +}) +async function getkcks(kcteacherid){ + const sql="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(fabukecheng, "+`'["${kcteacherid}"]'`+", '$');" + let result=await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i0){ + //考试未开始 + result[i].zt="test_no_start" + }else if(moment().diff(moment(xx.timeend),'s')<0){ + //考试未结束 + result[i].zt="testing" + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + }else{ + let pan_jue_finish; + //考试已结束 + let resultstd=result[i] + if(JSON.parse(result[i].xx).pan_jue_finsih===false) { + const sql = "SELECT * FROM kaoshiend WHERE ks=?"; + const resultksdaan = await new Promise((resolve, reject) => { + connection.query(sql, [parseInt(result[i].uuid)], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let finish = true; + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[j].panjaun === "teacher") { + if (value.teacherid === undefined) { + finish = false + } + } + } + if (value.lx === "简答题") { + if (value.teacherid === undefined) { + finish = false + } + } + }) + + } + if(finish===true){ + let jsonxx=JSON.parse(resultstd.xx); + jsonxx.pan_jue_finsih=true + const sqlupdate = 'UPDATE kaoshipaper SET xx=? WHERE `uuid`=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(jsonxx, null, 4), result[i].uuid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + let infor=[] + let allprint=[] + if(finish===true){ + + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + let num=0; + let ksdaantemp=[...ksdaan] + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[index].panjaun === "teacher") { + num=num+value.teacherprint + ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else{ + if(value.sr.trimStart()===stddaan[index].std.trimStart()){ + num=num+stddaan[index].print + ksdaantemp[index].way="computer" + ksdaantemp[index].printstu=stddaan[index].print + } + } + } + else if (value.lx === "简答题") { + const stddaan = JSON.parse(resultstd.std); + num=num+value.teacherprint + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else if(value.lx==="多选题"){ + let zq=true + const stddaan = JSON.parse(resultstd.std); + value.daan.map((item,xuaho)=>{ + if(!stddaan[index].std.includes(item)){} + zq=false + }) + if(value.daan.length!==stddaan[index].std.length){ + zq=false + } + if(zq){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + + + }else if(value.lx==="单选题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + num=num+0 + } + }else if(value.lx==="判断题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + } + + }) + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=?,allprint=? WHERE id=?'; + //resultksdaan[i]. + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(ksdaantemp,null,4),num,resultksdaan[i].id],(error, results) => { + if (error) throw error; + resolve(results); + + }) + }) + allprint.push(num) + infor.push({infor:ksdaantemp,num:num}) + } + } + pan_jue_finish=finish + // res.send({finish: finishr}) + }else{ + pan_jue_finish=true + // res.send({finish: true}) + } + //判断完成 + if(pan_jue_finish===true) { + result[i].zt = "finish_pan_jue" + }else{ + result[i].zt = "pan_jue" + } + + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + + } + if(!result[i].std){ + result[i].zt="wei_fa_bu" + } + + } + return result; +} +async function getkcleaarntaolong(kcteacherid){ + const sql="SELECT * FROM commitgroup WHERE JSON_CONTAINS(fabukecheng, "+`'[${kcteacherid}]'`+", '$')"; + let reasult = await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error) reject(error); + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlcommit,[reasult[i].xuhao],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + let stufinish=[] + resultcommit.map((value) => { + stufinish.push(value.xuehao) + }) + stufinish=[...new Set(stufinish)]; + reasult[i].stufinish=stufinish; + for(let j=0;j { + connection.query(sqlclass, [JSON.parse(reasult[i].fabukecheng)[j]], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + console.log(resultclass) + resultclass.map((value,index)=>{ + kechengname=kechengname+" "+value.classname+"@"+value.classbh + const temp=JSON.parse(value.student); + stu=[...stu,...temp] + }) + + + + } + let uniqueArr = [...new Set(stu)]; + reasult[i].studentshiji=uniqueArr; + + reasult[i].classnamelist=kechengname; + } + return reasult; +} +async function getkctmj(kcteacheid){ + const sql = `SELECT * FROM perparetmj WHERE information LIKE "%\\\"${kcteacheid}\\\"%"`; + console.log(sql) + const kctmj=await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) throw error; + resolve(results) + }); + }) + return kctmj +} +app.get("/apixueyaun/getkechengmanage",async(req,res)=>{ + const sqlkcall="SELECT * FROM kechengall WHERE id=?" + const kcallresult=await new Promise((resolve, reject) => { + connection.query(sqlkcall,[req.query.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kcb=JSON.parse(kcallresult[0].kechenglist); + const sqlkc="SELECT * FROM kechengbiaotest WHERE kechengid=?" + const kclist=await new Promise((resolve, reject) => { + connection.query(sqlkc,[req.query.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + for(let kc_i=0;kc_i{ + const sqlupdate="UPDATE kechengbiaotest SET teacherid=?,teacher=?,teaname=?,place=?,studentnum=?,classbh=? WHERE classid=?" + console.log(req.body) + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.teacherid,req.body.teacher,req.body.teaname,req.body.place,req.body.studentnum,req.body.classbh,req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) +}) +app.post("/apixueyuan/deletekcbanji",async(req,res)=>{ + const sql="DELETE FROM kechengbiaotest WHERE classid=?" + console.log(req.body) + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) +}) +}) +app.get("/apixueyuan/newkcall",async(req,res)=>{ + let kechengbiao=[]; + for(let i=0;i<31;i++){ + let zhou=[]; + for (let j=0;j<7;j++){ + const day=[ + { + zhou:i,//第几周 + day:j,//每周第几天 + jie:1, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:2, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:3, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:4, + classid:0//class号 + + } + ] + zhou.push(day) + } + kechengbiao.push(zhou) + } + const sqlinsert="INSERT INTO kechengall (kechenglist) VALUES(?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[JSON.stringify(kechengbiao)],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlread="SELECT * FROM kechengall ORDER BY id DESC LIMIT 1" + const newid=await new Promise((resolve, reject) => { + connection.query(sqlread,(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(newid[0]); +}) +app.get("/apixueyuan/getkechengbiaotestinfor",async(req,res)=>{ + const sql="SELECT * FROM kechengbiaotest WHERE teacherid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.teacherid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(result[0]); +}) +app.post("/apixueyuan/savepyfa",async (req,res)=>{ + const sqlupdate="UPDATE zhuanye SET pyfa=?,kclist=?,infor=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.xueyear),JSON.stringify(req.body.kclist),JSON.stringify(req.body.infor),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apixueyuan/openpyfa",async (req,res)=>{ + const sqlrea="SELECT * FROM zhuanye WHERE id=?" + let reasultA=await new Promise((resolve, reject) => { + connection.query(sqlrea,[req.query.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + if(reasultA[0].pyfa) { + let reasult = JSON.parse(reasultA[0].pyfa); + console.log(reasult) + const reasulttemp = [...reasult]; + for (let i = 0; i < reasult.length; i++) { + const pyfaone = reasult[i]; + for (let j = 0; j < pyfaone.publicclass.length; j++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].publicclass[j] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].publicclass[j].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + + } + for (let j = 0; j < pyfaone.zhuanyeclass.length; j++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].zhuanyeclass[j] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].zhuanyeclass[j].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + + } + for (let j = 0; j < pyfaone.systemchoose.length; j++) { + const onechoose = pyfaone.systemchoose[j]; + for (let k = 0; k < onechoose.ke.length; k++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].systemchoose[j].ke[k] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].systemchoose[j].ke[k].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + } + } + for (let j = 0; j < pyfaone.studnetchoose.length; j++) { + const onechoose = pyfaone.studnetchoose[j]; + for (let k = 0; k < onechoose.ke.length; k++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].studnetchoose[j].ke[k] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].studnetchoose[j].ke[k].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + } + } + + } + reasultA[0].pyfa = JSON.stringify(reasulttemp) + let kclist = []; + const kcold = JSON.parse(reasultA[0].kclist); + for (let i = 0; i < kcold.length; i++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + const kcone = await new Promise((resolve, reject) => { + connection.query(sqlselect, [kcold[i].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + kclist.push(kcone) + } + reasultA[0].kclist = kclist + console.log(12) + res.send(reasultA[0]); + }else{ + res.send({ststus:"new"}) + + } +}) +app.get("/apixueyuan/readxueke",async (req,res)=>{ + const sql="SELECT * FROM student WHERE xuehao=?" + const reasultstu=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasultbanji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[reasultstu[0].nianjizhaungye],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlkecheng="SELECT * FROM zhuanye WHERE id=?" + const kecheng=await new Promise((resolve, reject) => { + connection.query(sqlkecheng,[reasultbanji[0].zhaunyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let ruxueyear=moment(reasultstu[0].ruxuetime).year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + if(month<1){ + month=1; + } + let xueke=JSON.parse(kecheng[0].pyfa)[month-1].studnetchoose + for(let i=0;i { + connection.query(sqlke,[xuekeone.ke[j].teacherid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + delete reasultke.classtime; + xueke[i].ke[j]={...reasultke} + //reasult[a].ke[j] + } + } + res.send({month:month,xueke:xueke}) +}) +app.get("/apistu/xueke",async (req,res)=>{ + const sql="SELECT * FROM student WHERE xuehao=?" + let reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + +//console.log(reasult[0].chooseke) + res.send(reasult[0].chooseke) + +}) +app.post("/api/xuekesave",async (req,res)=>{ + const sqlkcget="SELECT * FROM kechengbiaotest WHERE classid=?" + const kc=await new Promise((resolve, reject) => { + connection.query(sqlkcget,[req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kecheng=[]; + let kclist=JSON.parse(kc[0].classzou) + kclist.map((zouvalue,zouindex)=>{ + zouvalue.class.map((kevalue,keindex)=>{ + kecheng.push( + kevalue.ke + ) + }) + }) + let stulist=JSON.parse(kc[0].student); + // stulist=stulist.filter(item=>item!==req.body.xuehao) + stulist.push(req.body.xuehao); + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + console.log(stureasult) + let temp=[...JSON.parse(stureasult[0].kecb)] + JSON.parse(stureasult[0].kecb).map((kcvalue,indexke)=>{ + if(kecheng.includes(kcvalue.time)){ + temp[indexke].ke=parseInt(req.body.classid); + } + }) + console.log(temp); + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(temp),JSON.stringify(req.body.chooseke),req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(temp); +}) +app.post("/api/xueketuike",async (req,res)=>{ + const sqlkcget="SELECT * FROM kechengbiaotest WHERE classid=?" + const kc=await new Promise((resolve, reject) => { + connection.query(sqlkcget,[req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kecheng=[]; + let kclist=JSON.parse(kc[0].classzou) + kclist.map((zouvalue,zouindex)=>{ + zouvalue.class.map((kevalue,keindex)=>{ + kecheng.push( + kevalue.ke + ) + }) + }) + let stulist=JSON.parse(kc[0].student); + // stulist.push(req.body.xuehao); + stulist=stulist.filter(item=>item!==req.body.xuehao) + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + console.log(stureasult) + let temp=[...JSON.parse(stureasult[0].kecb)] + JSON.parse(stureasult[0].kecb).map((kcvalue,indexke)=>{ + if(kecheng.includes(kcvalue.time)){ + temp[indexke].ke=0; + } + }) + console.log(temp); + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(temp),JSON.stringify(req.body.chooseke),req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(temp); +}) +app.get("/apixueyuan/zyinfor",async(req,res)=>{ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zhuanye],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(reasult[0]); +}) + +async function getxueyuanzystu(zhuanyeid){ + const sqlbanji="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const zybj=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[zhuanyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + let stulist=[] + for(let i=0;i { + connection.query(sqlstu,[zybj[i].classname1+zybj[i].classname2],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + stuone.map((stua,indexa)=>{ + stulist.push(stua.xuehao) + }) + + } + return stulist +} +async function getxueyuanzystu_xx(zhuanyeid){ + const sqlbanji="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const zybj=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[zhuanyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + let stulist=[] + for(let i=0;i { + connection.query(sqlstu,[zybj[i].classname1+zybj[i].classname2],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + stuone.map((stua,indexa)=>{ + let temp={...stua} + if(stua.chooseke){ + temp.chooseke=JSON.parse(stua.chooseke) + }else{ + temp.chooseke={status:"no"} + } + delete temp.kecb + delete temp.morenpassword + stulist.push(temp) + }) + + } + return stulist +} +async function updatekc(xuehao){ + let stulista=[...xuehao] + let kestu={} + for(let a=0;a { + connection.query(sqlstu,[stulista[a]],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji = "SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasultbanji = await new Promise((resolve, reject) => { + connection.query(sqlbanji, [stuinfor[0].nianjizhaungye], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + if(reasultbanji[0]) { + const sqlkecheng = "SELECT * FROM zhuanye WHERE id=?" + const kecheng = await new Promise((resolve, reject) => { + connection.query(sqlkecheng, [reasultbanji[0].zhaunyeid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stukecb = []; + for (let i = 0; i < 31; i++) { + for (let j = 1; j < 7; j++) { + for (let k = 1; k < 4; k++) { + stukecb.push({ + ke: 0, + time: `n${i}z${j}A${k}` + }) + } + } + } + let stukecbwb = JSON.stringify(stukecb) + let stuchoose = {} + if (JSON.parse(stuinfor[0].chooseke)) { + stuchoose = JSON.parse(stuinfor[0].chooseke) + } + let month=0; + if(stuinfor[0].ruxuetime) { + let ruxueyear = moment(stuinfor[0].ruxuetime).year(); + let moment1 = moment(`${ruxueyear}-09-01`) + month = Math.ceil(moment().diff(moment1, 'months') / 6); + } + console.log(month) + if(month<0){ + month=0; + } + const pyfa = JSON.parse(kecheng[0].pyfa); + + for (let i = 0; i < pyfa[month].publicclass.length; i++) { + stukecbwb = await addkcbtojson(stukecbwb, pyfa[month].publicclass[i]) + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [pyfa[month].publicclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + + stulist.push(stuinfor[i].xuehao) + + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), pyfa[month].publicclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + for (let i = 0; i < pyfa[0].zhuanyeclass.length; i++) { + stukecbwb = await addkcbtojson(stukecbwb, pyfa[month].zhuanyeclass[i]) + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [pyfa[month].zhuanyeclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + stulist.push(stuinfor[i].xuehao) + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), pyfa[month].zhuanyeclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } + //更新学生培养方案后加入学生已选课 + let xueke = []; + pyfa[0].systemchoose.map((value, index) => { + xueke.push(value.xkh); + }) + pyfa[0].studnetchoose.map((value, index) => { + xueke.push(value.xkh) + }) + for (let b = 0; b < xueke.length; b++) { + if (stuchoose[xueke[b]]) {//此课选课存在 + stukecbwb = await addkcbtojson(stukecbwb, stuchoose[xueke[b]]) + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [stuchoose[xueke[b]].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + stulist.push(stuinfor[0].xuehao) + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), stuchoose[xueke[b]].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + } + const updatesql = "UPDATE student SET kecb=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [stukecbwb, stulista[a]], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + + } + } +} +async function updatepyfabefore(zhuanyeid){ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[zhuanyeid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + const pyfa=JSON.parse(reasult[0].pyfa) + let kclist=[] + pyfa.map((yearvalue,yearindex)=>{ + yearvalue.publicclass.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + yearvalue.zhuanyeclass.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + yearvalue.systemchoose.map((kelist,kelistindex)=>{ + kelist.ke.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + }) + yearvalue.studnetchoose.map((kelist,kelistindex)=>{ + kelist.ke.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + }) + }) + const stulisttx=await getxueyuanzystu(zhuanyeid); + //先清除以前的本专业同学 + for(let b=0;b { + connection.query(sqlkcstu, [kclist[b]], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + //stulist.push(stuinfor[i].xuehao) + stulist=stulist.filter(item=>!stulisttx.includes(item)) + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), kclist[b]], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } +} +app.post("/apixueyuan/updatepyfa",async (req,res)=>{ + await updatepyfabefore(req.body.zhuanyeid) + const sqlupdate="UPDATE zhuanye SET pyfa=?,kclist=?,infor=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.xueyear),JSON.stringify(req.body.kclist),JSON.stringify(req.body.infor),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const stu=await getxueyuanzystu(req.body.zhuanyeid); + await updatekc(stu) + res.send({status:"ok"}) +}) +app.post("/apischool/updatestukb",async (req,res)=>{ + const sqlupdatekc="UPDATE kechengbiaotest SET kecb=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatekc,["[]"],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student" + const stu= await new Promise((resolve, reject) => { + connection.query(sqlstu,(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + let stulist=[]; + stu.map((value,index)=>{ + stulist.push(value.xuehao) + }) + await updatekc(stulist) + res.send({status:"ok"}) + +}) +app.get("/apixueyuan/getpyfastu",async(req,res)=>{ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasultA=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zhuanyeid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist=await getxueyuanzystu_xx(req.query.zhuanyeid) + let reasult=[] + if(reasultA.length!==0&&JSON.parse(reasultA[0].pyfa)!==null) { + JSON.parse(reasultA[0].pyfa).map((xueyear, index) => { + let sys = [...xueyear.systemchoose]; + for (let k = 0; k < sys.length; k++) { + sys[k].xueyearlimit = index + 1 + } + reasult = [...reasult, ...sys]; + + }) + for (let i = 0; i < reasult.length; i++) { + let ke = [] + for (let j = 0; j < reasult[i].ke.length; j++) { + + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + const kcreasult = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasult[i].ke[j].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + ke.push(kcreasult) + } + reasult[i].ke = ke; + let stu = [] + stulist.map((stuone, index) => { + let month = 1; + if (stuone.ruxuetime) { + let ruxueyear = moment(stuone.ruxuetime).year(); + let moment1 = moment(`${ruxueyear}-09-01`) + month = Math.ceil(moment().diff(moment1, 'months') / 6); + } + if (reasult[i].xueyearlimit === month) { + stu.push(stuone) + } + }) + reasult[i].stu = stu + } + + res.send(reasult) + }else{ + res.send({statu:"err"}) + } +}) +app.get("/apixueyuan/getpyfastuchoose",async(req,res)=>{ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasultA=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zhuanyeid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist=await getxueyuanzystu_xx(req.query.zhuanyeid) + let reasult=[] + if(reasultA.length!==0&&JSON.parse(reasultA[0].pyfa)!==null) { + JSON.parse(reasultA[0].pyfa).map((xueyear, index) => { + let sys = [...xueyear.studnetchoose]; + for (let k = 0; k < sys.length; k++) { + sys[k].xueyearlimit = index + 1 + } + reasult = [...reasult, ...sys]; + + }) + for (let i = 0; i < reasult.length; i++) { + let ke = [] + for (let j = 0; j < reasult[i].ke.length; j++) { + + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + const kcreasult = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasult[i].ke[j].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + ke.push(kcreasult) + } + reasult[i].ke = ke; + let stu = [] + stulist.map((stuone, index) => { + let month = 1; + if (stuone.ruxuetime) { + let ruxueyear = moment(stuone.ruxuetime).year(); + let moment1 = moment(`${ruxueyear}-09-01`) + month = Math.ceil(moment().diff(moment1, 'months') / 6); + } + if (reasult[i].xueyearlimit === month) { + stu.push(stuone) + } + }) + reasult[i].stu = stu + } + + res.send(reasult) + }else{ + res.send({statu:"err"}) + } +}) +app.post("/apixueyuan/saveteaxueke",async(req,res)=>{ + let stulisst=[...req.body.stu] + let addxiang={...req.body.ke} + for(let i=0;i { + connection.query(sqlselectstu,[stulisst[i]],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + let stukc= await addkcbtojson(stu[0].kecb, addxiang); + let choosestu={}; + if(stu[0].chooseke){ + choosestu=JSON.parse(stu[0].chooseke) + } + choosestu[req.body.xkh]=addxiang; + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[stukc,JSON.stringify(choosestu),stulisst[i]],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + } + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [addxiang.classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + stulist=[...stulist,...stulisst] + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), addxiang.classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({status:"ok"}) +}) +app.post("/apixueyuan/tuike",async(req,res)=>{ + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const resultstu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stuchoose=JSON.parse(resultstu[0].chooseke) + if(stuchoose[req.body.xkh]){ + delete stuchoose[req.body.xkh] + } + let jsonjs=JSON.parse(resultstu[0].kecb); + const sqlreadkc="SELECT * FROM kechengbiaotest WHERE classid=?" + const kcreasult=await new Promise((resolve, reject) => { + connection.query(sqlreadkc, [req.body.classid],(error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kclist=[] + JSON.parse(kcreasult[0].classzou).map((zou,zouindex)=>{ + zou.class.map((ke,keindex)=>{ + kclist.push(ke.ke) + }) + }) + jsonjs.map((keone,index)=>{ + if(kclist.includes(keone.time)) { + jsonjs[index].ke = 0 + } + }) + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(jsonjs),JSON.stringify(stuchoose),req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stukc=JSON.parse(kcreasult[0].student).filter(item=>item!==req.body.xuehao) + const updatekc="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatekc,[JSON.stringify(stukc),req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + + res.send({status:"ok"}) +}) +app.get("/apistu/getpyfa",async(req,res)=>{ + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const resultstu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + if(resultstu.length!==0) { + const resultbanji = await new Promise((resolve, reject) => { + connection.query(sqlbanji, [resultstu[0].nianjizhaungye], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlpyfa = "SELECT * FROM zhuanye WHERE id=?" + const resultpyfa = await new Promise((resolve, reject) => { + connection.query(sqlpyfa, [resultbanji[0].zhaunyeid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let pyfa = JSON.parse(resultpyfa[0].pyfa) + let pyfaall = [] + pyfa.map((xueyearvalue, xueyearindex) => { + let kconeyear = []; + xueyearvalue.publicclass.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = "公共课" + tempkc.kcchoose = "必修" + tempkc.banji = "yes" + kconeyear.push(tempkc) + }) + xueyearvalue.zhuanyeclass.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = "公共课" + tempkc.kcchoose = "必修" + tempkc.banji = "yes" + kconeyear.push(tempkc) + }) + xueyearvalue.systemchoose.map((choosevalue, chooseindex) => { + let prename = []; + choosevalue.ke.map((kcvalue, kcindex) => { + prename.push(kcvalue.classname) + }) + prename = [...new Set(prename)] + if (prename.length === 1) { + let tempkc = {...choosevalue.ke[0]} + tempkc.kclx = choosevalue.xklx; + tempkc.kcchoose = "必修" + tempkc.banji = "choose" + kconeyear.push(tempkc) + } else { + choosevalue.ke.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = choosevalue.xklx + tempkc.kcchoose = "限选" + tempkc.banji = "choose" + kconeyear.push(tempkc) + }) + } + }) + xueyearvalue.studnetchoose.map((choosevalue, chooseindex) => { + let prename = []; + choosevalue.ke.map((kcvalue, kcindex) => { + prename.push(kcvalue.classname) + }) + prename = [...new Set(prename)] + if (prename.length === 1) { + let tempkc = {...choosevalue.ke[0]} + tempkc.kclx = choosevalue.xklx; + tempkc.kcchoose = "必修" + tempkc.banji = "choose" + kconeyear.push(tempkc) + } else { + choosevalue.ke.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = choosevalue.xklx + tempkc.kcchoose = "自选" + tempkc.banji = "choose" + kconeyear.push(tempkc) + }) + } + }) + pyfaall.push({ + kclist: kconeyear, + sx: xueyearvalue.sx, + xuhao: xueyearvalue.xuhao + }) + }) + res.send({pyfa:pyfaall,infor:JSON.parse(resultpyfa[0].infor)}) + }else{ + res.send({pyfa:[],infor:{xuezhiyear:0}}) + } +}) +app.get("/apifdy/getbanji",async (req,res)=>{ + const sqlbj="SELECT * FROM banjiclass WHERE teacherid=?" + let bjresult=await new Promise((resolve, reject) => { + connection.query(sqlbj,[req.query.fdy], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlzy,[bjresult[i].zhaunyeid], (error, results, fields) => { + if(error)throw error; + resolve(results[0]); + }) + }) + bjresult[i].zyname=zy.name; + // const zyresult=await new Promise((resolve, reject) => {}) + } + res.send(bjresult); +}) + +app.get("/apifdy/getkclist",async (req,res)=>{ + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + const stu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.banji], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let stulist=[] + stu.map((stuone,index)=>{ + stulist.push(stuone.xuehao) + }) + const sqlkc="SELECT * FROM `kechengbiaotest` WHERE JSON_OVERLAPS1(student,?)" + const kcresult=await new Promise((resolve, reject) => { + connection.query(sqlkc, [JSON.stringify(stulist)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //课程开始 + for(let j=0;j { + connection.query(sqltea, [kcresult[j].teacher], (err, results, field) => { + if (err) throw err; + resolve(results); + }) + }) + if (tea.length > 0) { + kcresult[j].teachername = tea[0].name; + kcresult[j].status = "ok" + } + + + } + //课程结束 + let kclist=[] + let kclistwb=[] + kcresult.map((kcone,kcindex)=>{ + kclist.push(parseInt(kcone.teacherid)) + kclistwb.push(kcone.teacherid) + }) + const sqlcommit="SELECT * FROM `commitgroup` WHERE JSON_OVERLAPS1(fabukecheng,?)" + const resultcommit=await new Promise((resolve, reject) => { + connection.query(sqlcommit,[JSON.stringify(kclist)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //comit start + resultcommit.map((kspone,indexone)=>{ + const stutimu=JSON.parse(kspone.student) + let stukc=[]; + console.log(stutimu) + console.log(stulist) + stutimu.map((stuone,indexstuone)=>{ + if(stulist.includes(stuone)){ + stukc.push(stuone); + } + }) + resultcommit[indexone].sturea=stukc; + }) + for(let i=0;i { + connection.query(sqlcommit,[resultcommit[i].xuhao],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + const commitstu=[]; + const commit=[]; + reasultcommitxiang.map((valuecommit,indexcommit)=>{ + if(stulist.includes(valuecommit.xuehao)){ + commit.push(valuecommit) + commitstu.push(valuecommit.xuehao) + } + }) + resultcommit[i].commit=commit; + resultcommit[i].commitstu=commitstu + } + //commit end + const sqltmj="SELECT * FROM `perparetmj` WHERE JSON_OVERLAPS1(information->'$.class',?)" + const ksp=await new Promise((resolve, reject) => { + connection.query(sqltmj,[JSON.stringify(kclistwb)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlkc,[kspclass[j]],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + const stuone=JSON.parse(stureasult[0].student); + tmjstu=[...tmjstu,...stuone]; + + } + let stukc=[]; + tmjstu.map((stuone,indexstuone)=>{ + if(stulist.includes(stuone)){ + stukc.push(stuone); + } + }) + + ksp[i].sturea=stukc; + } + + const sqlks="SELECT * FROM `kaoshipaper` WHERE JSON_OVERLAPS1(fabukecheng,?)" + const resultks=await new Promise((resolve, reject) => { + connection.query(sqlks,[JSON.stringify(kclistwb)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + resultks.map((kspone,indexone)=>{ + const stutimu=JSON.parse(kspone.stu) + let stukc=[]; + console.log(stutimu) + console.log(stulist) + if(stutimu) { + stutimu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + } + resultks[indexone].sturea=stukc; + }) + let kechengnew=[]; + kcresult.map((kcone,index)=>{ + kechengnew.push(kcone.teacherid) + }) + res.send({tmj:ksp,ks:resultks,commit:resultcommit,kc:await huqoukecheng(kechengnew),stu:stu}); +}) + +app.get("/apistu/sendyzm",async(req,res)=>{ + const sql="SELECT * FROM student WHERE xuehao=?" + console.log(req.query) + const sjh=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + console.log(sjh[0].shoujihao) + const token =crypto.randomInt(100000, 999999).toString(); + console.log(token) + const uuid=uuidv4.v4(); + const sqlinsert="INSERT INTO yzm(uuid,yzm,xuehao) VALUES(?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[uuid,token,req.query.xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) +const result=await axios.post("http://106.ihuyi.com/webservice/sms.php?method=Submit",{ + account:"C08954976", + password:"7a668c9bb62aa8485ac91eef1bf82e9c", + mobile:sjh[0].shoujihao, + content:`您的验证码是:${token}。请不要把验证码泄露给其他人。` +},{ + headers:{ + "Content-Type": "application/x-www-form-urlencoded" + } +}) + console.log(result) + + res.send({yzm:uuid}) +}) +app.get("/apitea/sendyzm",async(req,res)=>{ + const sql="SELECT * FROM teacher WHERE xuegonghao=?" + console.log(req.query) + const sjh=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xgh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + console.log(sjh[0].iphone) + const token =crypto.randomInt(100000, 999999).toString(); + console.log(token) + const uuid=uuidv4.v4(); + const sqlinsert="INSERT INTO yzm(uuid,yzm,xuehao) VALUES(?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[uuid,token,req.query.xgh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const result=await axios.post("http://106.ihuyi.com/webservice/sms.php?method=Submit",{ + account:"C08954976", + password:"7a668c9bb62aa8485ac91eef1bf82e9c", + mobile:sjh[0].iphone, + content:`您的验证码是:${token}。请不要把验证码泄露给其他人。` + },{ + headers:{ + "Content-Type": "application/x-www-form-urlencoded" + } + }) + console.log(result) + + res.send({yzm:uuid}) +}) +app.get("/apistu/getpassword",async(req,res)=>{ + const yzmsql="SELECT * FROM yzm WHERE uuid=?" + const yzm=await new Promise((resolve, reject) => { + connection.query(yzmsql,[req.query.uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(yzm[0].yzm===req.query.yzm) { + const sql = "SELECT * FROM student WHERE xuehao=?" + const sjh = await new Promise((resolve, reject) => { + connection.query(sql, [yzm[0].xuehao], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({password: sjh[0].passage,status:"ok",xuehao:sjh[0].xuehao}) + }else{ + res.send({status:"err"}) + } +}) +app.get("/apitea/getpassword",async(req,res)=>{ + const yzmsql="SELECT * FROM yzm WHERE uuid=?" + const yzm=await new Promise((resolve, reject) => { + connection.query(yzmsql,[req.query.uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(yzm[0].yzm===req.query.yzm) { + const sql = "SELECT * FROM teacher WHERE xuegonghao=?" + const sjh = await new Promise((resolve, reject) => { + connection.query(sql, [yzm[0].xuehao], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + if(sjh[0].quexian===1) { + res.send({status: 'ok',zw:'任课老师',password: sjh[0].passage,xuehao:sjh[0].xuegonghao}) + }else if(sjh[0].quexian===2){ + res.send({status:'ok',zw:'辅导员',password: sjh[0].passage,xuehao:sjh[0].xuegonghao}) + } + + }else{ + res.send({status:"err"}) + } +}) +app.post("/apischool/addtea",async(req,res)=>{ + const tealist=req.body.tea + for(let i=0;i { + connection.query(sqlinsert,[teaone.name,teaone.iphone,md,teaone.zw,teaone.xuegonghao,teaone.sex,teaone.idcard,teaone.zzmm],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.get("/apschool/getteainfor",async(req,res)=>{ + const sql="SELECT * FROM teacher WHERE xuegonghao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error)throw error + resolve(results); + }) + }) + res.send(result[0]) +}) +app.post("/apitea/changinfor",async(req,res)=>{ + const teainfor=req.body.infor; + const updatesql="UPDATE teacher SET name=?,xinbian=?,idcard=?,iphone=?,zzmm=? WHERE xuegonghao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[teainfor.name,teainfor.xinbian,teainfor.idcard,teainfor.iphone,teainfor.zzmm,teainfor.xuegonghao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apitea/getpjbz",async(req,res)=>{ + const sqlkc="SELECT classid,classname,teacherid,classbh,pjbz FROM `kechengbiaotest` WHERE teacherid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlkc,[req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + if(result.length!==0) { + res.send(result[0]) + }else{ + res.send({err:"ok"}) + } + +}) +app.post("/apitea/savepjbz",async(req,res)=>{ + const sql="UPDATE kechengbiaotest SET pjbz=? WHERE teacherid=?" + await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.pjbz),req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + res.send({ok:"ok"}) +}) +app.get("/apistu/getstucjd",async(req,res)=>{ + const sqlkc="SELECT * FROM kechengbiaotest WHERE teacherid=?" + const kcresult=await new Promise((resolve, reject) => { + connection.query(sqlkc,[req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + if(kcresult.length!==0) { + const sqlstu = `SELECT * FROM student WHERE kecb LIKE \"%\\\"ke\\\": ${kcresult[0].classid}%\"` + const sturesult = await new Promise((resolve, reject) => { + connection.query(sqlstu, [req.query.bj], (error, results, fields) => { + if (error) throw error; + resolve(results) + }) + }) + for (let i = 0; i < sturesult.length; i++) { + sturesult[i].cjd = JSON.parse(sturesult[i].cjd) + } + res.send(sturesult) + }else{ + res.send([]); + } + +}) +app.post("/apitea/savecjd",async(req,res)=>{ + const stuall=[...req.body.stulist] + for(let i=0;i { + connection.query(sqlselect,[stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + const cjbjson=JSON.parse(result[0].cjd) + let all=0; + Object.entries(stuall[i].cjd).map((print,printindex)=>{ + if(print[0]!=='all'&&print[0]!=='zt') { + + all += print[1] + } + console.log(print) + }) + console.log(all) + cjbjson[req.body.teacherid]=stuall[i].cjd; + cjbjson[req.body.teacherid].all=all; + + const updatesql="UPDATE student SET cjd=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(cjbjson),stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.post("/apitea/fabucjd",async(req,res)=>{ + const stuall=[...req.body.stulist] + for(let i=0;i { + connection.query(sqlselect,[stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + const cjbjson=JSON.parse(result[0].cjd) + let all=0; + Object.entries(stuall[i].cjd).map((print,printindex)=>{ + if(print[0]!=="all") { + + all += print[1] + } + }) + cjbjson[req.body.teacherid]=stuall[i].cjd; + cjbjson[req.body.teacherid].all=all; + cjbjson[req.body.teacherid].zt="已发布" + const updatesql="UPDATE student SET cjd=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(cjbjson),stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.get("/apitea/getcjd",async(req,res)=>{ + const sqlkcb="SELECT * FROM kechengbiaotest WHERE teacher=?" + const cjdresult=await new Promise((resolve, reject) => { + connection.query(sqlkcb,[req.query.tea],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlstu,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let finish=0; + let allprint=0; + let zt=true + sturesult.map((stuone,stuindex)=>{ + if(stuone.cjd){ + const cjdjson=JSON.parse(stuone.cjd)[cjdresult[i].teacherid]; + if(cjdjson){ + finish++; + if(cjdjson.zt!=="已发布"){ + zt=false + } + allprint+=cjdjson.all + } + + } + }) + cjdresult[i].all=allprint + cjdresult[i].finish=finish; + if(zt===true&&sturesult.length===finish){ + cjdresult[i].zt="已完成" + }else{ + cjdresult[i].zt="未完成" + } + + } + res.send(cjdresult) +}) +app.get("/apistu/getcjd",async(req,res)=>{ + const kclist="SELECT * FROM kechengbiaotest WHERE JSON_CONTAINS(student,?, '$')"; + const stusql="SELECT * FROM student WHERE xuehao=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(stusql,[req.query.stu],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[sturesult[0].nianjizhaungye],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const zyresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[banjiresult[0].zhaunyeid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const pyfa=JSON.parse(zyresult[0].pyfa)[parseInt(req.query.year)] + + const teacherid=[] + + pyfa.publicclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + + const cjd=JSON.parse(sturesult[0].cjd) + + const kcresult=[]; + for(let i=0;i { + connection.query(sqlget,[teacherid[i]],(error, results, fields) => { + if(error)throw error; + resolve(results[0]); + }) + }) + kcresult.push(onekeresult) + } + // await new Promise((resolve, reject) => { + // connection.query(kclist,[`[\"${req.query.stu}\"]`],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + + // }) + let kcall=[]; + kcresult.map((kcone,kcindex)=>{ + const pjbz=JSON.parse(kcone.pjbz) + let printall=0; + if(pjbz) { + pjbz.map((pjbzone, indexpjbz) => { + printall += pjbzone.print; + }) + } + if(cjd) { + if (cjd[kcone.teacherid]) { + if (cjd[kcone.teacherid].zt === "已发布") { + let kctemp = {...kcone, ...cjd[kcone.teacherid], zf: printall} + delete kctemp.classtime; + delete kctemp.classzou; + delete kctemp.student; + kcall.push(kctemp) + } + } + } + }) + res.send({cjd:kcall,infor:JSON.parse(zyresult[0].infor)}); + +}) +app.get("/apistu/lurucj",async function(req,res){ + const fileContent = xlsx.readFile(req.query.xlsx); // 读取excel文件 + const name = fileContent.SheetNames[0] // 获取excel第一张sheet的名字 + const sheet = fileContent.Sheets[name] // 获取excel第一张sheet中的数据 + const jsonData = xlsx.utils.sheet_to_json(sheet) + res.send(jsonData) +}) +app.get("/apixueyuan/getzycjdyear",async function(req,res){ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const pyfaresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //teacheridlist + + const sqlbj="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbj,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //获取学生信息 + console.log(banjiresult) + let stulist=[]; + for(let bj_i=0;bj_i { + connection.query(sqlstu,[banjiresult[bj_i].classname1+banjiresult[bj_i].classname2],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + stulist=[...stulist,...stuonegroup] + } + let infor={} + stulist.map((stuone,stuindex)=>{ + let all=0; + let allnum=0 + + if(stuone.cjd){ + let ruxueyear=moment(stuone.ruxuetime).year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + const cjd=JSON.parse(stuone.cjd) + let teacherid=[] + infor=JSON.parse(pyfaresult[0].infor); + const pyfa=JSON.parse(pyfaresult[0].pyfa)[req.query.xq] + console.log(pyfa) + if(pyfa) { + pyfa.publicclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + } + teacherid=[...new Set(teacherid)] + teacherid.map((kcvalue,kcindex)=>{ + + + if(cjd[kcvalue]){ + if(cjd[kcvalue].zt==="已发布"){ + if(typeof cjd[kcvalue].all==="number"){ + all+=cjd[kcvalue].all; + allnum++; + } + } + } + }) + stulist[stuindex].all=all; + stulist[stuindex].allnum=allnum; + if(req.query.xq-1>month){ + stulist[stuindex].delete=true + } + delete stulist[stuindex].kecb + } + }) + stulist=stulist.filter(item=>item.delete!==true) + + res.send({cjd:stulist,infor:infor}) +}) +app.get("/apixueyuan/getzycjd",async function(req,res){ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const pyfaresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //teacheridlist + + const sqlbj="SELECT * FROM banjiclass WHERE zhaunyeid=?" + let banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbj,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //获取学生信息 + console.log(banjiresult) + banjiresult=banjiresult.filter(item=>item.classname1!==null&&item.classname2!==null) + let stulist=[]; + for(let bj_i=0;bj_i { + connection.query(sqlstu,[banjiresult[bj_i].classname1+banjiresult[bj_i].classname2],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + stulist=[...stulist,...stuonegroup] + } + let infor={} + stulist.map((stuone,stuindex)=>{ + let all=0; + let allnum=0 + + if(stuone.cjd){ + let ruxueyear=moment().year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + const cjd=JSON.parse(stuone.cjd) + let teacherid=[] + infor=JSON.parse(pyfaresult[0].infor); + if(JSON.parse(pyfaresult[0].pyfa)) { + const pyfa = JSON.parse(pyfaresult[0].pyfa)[month] + console.log(pyfa) + if (pyfa) { + pyfa.publicclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + } + } + teacherid=[...new Set(teacherid)] + teacherid.map((kcvalue,kcindex)=>{ + + + if(cjd[kcvalue]){ + if(cjd[kcvalue].zt==="已发布"){ + if(typeof cjd[kcvalue].all==="number"){ + all+=cjd[kcvalue].all; + allnum++; + } + } + } + }) + stulist[stuindex].all=all; + stulist[stuindex].allnum=allnum; + delete stulist[stuindex].kecb + } + }) + res.send({cjd:stulist,infor:infor}) + +}) +app.get("/apitea/getfdycjd",async function(req,res){ + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + console.log(req.query.banji) + let sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + // console.log(sturesult) + let ruxueyear=moment().year() + if(sturesult[0]) { + ruxueyear= moment(sturesult[0].ruxuetime).year(); + } + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + console.log(month) + if(month<0){ + month=0 + } + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + + const banji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlpyfa="SELECT * FROM zhuanye WHERE id=?" + if(banji.length!==0) { + const pyfaresult = await new Promise((resolve, reject) => { + connection.query(sqlpyfa, [banji[0].zhaunyeid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let teacherid = [] + const infor = JSON.parse(pyfaresult[0].infor); + const pyfa = JSON.parse(pyfaresult[0].pyfa)[month] + console.log(pyfa) + + pyfa.publicclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + teacherid = [...new Set(teacherid)] + + sturesult.map((stuone, stuindex) => { + let all = 0; + let allnum = 0 + if (stuone.cjd) { + + const cjd = JSON.parse(stuone.cjd) + teacherid.map((kcvalue, kcindex) => { + + + if (cjd[kcvalue]) { + if (cjd[kcvalue].zt === "已发布") { + if (typeof cjd[kcvalue].all === "number") { + all += cjd[kcvalue].all; + allnum++; + } + } + } + }) + sturesult[stuindex].all = all; + sturesult[stuindex].allnum = allnum; + } + }) + res.send({cjd:sturesult,infor:infor}) + }else{ + res.send({cjd:[],infor:{xuezhiyear:0}}) + } + +}) +app.get("/apitea/getfdycjdyear",async function(req,res){ + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + console.log(req.query.banji) + let sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + // console.log(sturesult) + let ruxueyear=moment(sturesult[0].ruxuetime).year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + console.log(month) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const banji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlpyfa="SELECT * FROM zhuanye WHERE id=?" + const pyfaresult=await new Promise((resolve, reject) => { + connection.query(sqlpyfa,[banji[0].zhaunyeid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let teacherid=[] + const pyfa=JSON.parse(pyfaresult[0].pyfa)[req.query.year] + console.log(pyfa) + pyfa.publicclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + teacherid=[...new Set(teacherid)] + + sturesult.map((stuone,stuindex)=>{ + let all=0; + let allnum=0 + if(stuone.cjd){ + + const cjd=JSON.parse(stuone.cjd) + teacherid.map((kcvalue,kcindex)=>{ + + + if(cjd[kcvalue]){ + if(cjd[kcvalue].zt==="已发布"){ + if(typeof cjd[kcvalue].all==="number"){ + all+=cjd[kcvalue].all; + allnum++; + } + } + } + }) + sturesult[stuindex].all=all; + sturesult[stuindex].allnum=allnum; + } + }) + + res.send(sturesult) +}) +app.get("/apitea/getstucjd",async function(req,res){ + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + console.log(req.query.xuehao) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[sturesult[0].nianjizhaungye],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const zyresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[banjiresult[0].zhaunyeid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const pyfa=JSON.parse(zyresult[0].pyfa)[parseInt(req.query.year)] + + const teacherid=[] + + pyfa.publicclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + + const cjd=JSON.parse(sturesult[0].cjd) + const kcresult=[]; + if(cjd) { + for (let i = 0; i < teacherid.length; i++) { + const sqlget = "SELECT * FROM kechengbiaotest WHERE teacherid=?" + const onekeresult = await new Promise((resolve, reject) => { + connection.query(sqlget, [teacherid[i]], (error, results, fields) => { + if (error) throw error; + resolve(results[0]); + }) + }) + kcresult.push(onekeresult) + } + // await new Promise((resolve, reject) => { + // connection.query(kclist,[`[\"${req.query.stu}\"]`],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + + // }) + let kcall = []; + kcresult.map((kcone, kcindex) => { + const pjbz = JSON.parse(kcone.pjbz) + let printall = 0; + if (pjbz) { + pjbz.map((pjbzone, indexpjbz) => { + printall += pjbzone.print; + }) + } + if (cjd[kcone.teacherid]) { + if (cjd[kcone.teacherid].zt === "已发布") { + let kctemp = {...kcone, ...cjd[kcone.teacherid], zf: printall} + delete kctemp.classtime; + delete kctemp.classzou; + delete kctemp.student; + + kcall.push(kctemp) + } + } + }) + res.send({cjd: kcall, infor: JSON.parse(zyresult[0].infor), stu: sturesult[0]}); + }else{ + for (let i = 0; i < teacherid.length; i++) { + const sqlget = "SELECT * FROM kechengbiaotest WHERE teacherid=?" + const onekeresult = await new Promise((resolve, reject) => { + connection.query(sqlget, [teacherid[i]], (error, results, fields) => { + if (error) throw error; + resolve(results[0]); + }) + }) + kcresult.push(onekeresult) + } + // await new Promise((resolve, reject) => { + // connection.query(kclist,[`[\"${req.query.stu}\"]`],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + + // }) + let kcall = []; + kcresult.map((kcone, kcindex) => { + const pjbz = JSON.parse(kcone.pjbz) + let printall = 0; + if (pjbz) { + pjbz.map((pjbzone, indexpjbz) => { + printall += pjbzone.print; + }) + } + + let kctemp = {...kcone, all:0, zf: 0} + delete kctemp.classtime; + delete kctemp.classzou; + delete kctemp.student; + + kcall.push(kctemp) + + + }) + res.send({cjd: kcall, infor: JSON.parse(zyresult[0].infor), stu: sturesult[0]}); + } + + +}) +app.post("/apitea/dyccjdxlsx",async (req,res)=>{ + const buffer=xlsxnode.build(req.body.xlsx) + fs.writeFileSync('node.xlsx',buffer); + res.send(buffer.toString("base64")) + + } +) +app.get("/apitea/kcstulist",async (req,res)=>{ + //const sqlstu="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE classid=?" + const sqlstu=`SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE kecb LIKE \"%\\\"ke\\\": ${req.query.classid}%\"` + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + res.send(sturesult) +}) +app.post("/api/addshixixm",async (req,res)=>{ + const uuid=uuidv4.v4(); + const sqlinsert="INSERT INTO shixi(starttime,endtime,cx,sflx,dz,shixihao,danwei,cxfs,sfhxzs,xiangxi,zt,xuehao,name) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.sx.startDatesx,req.body.sx.endDatesx,-1*moment(req.body.sx.startDatesx).diff(moment(req.body.sx.endDatesx),'day'), req.body.sx.Sflx,req.body.sx.dzsx,uuid,req.body.sx.danwei,req.body.sx.cxfssx,req.body.sx.sfhxzssx,req.body.sx.xiangxi,req.body.sx.zt,req.body.xuehao,req.body.sx.name],(error,result,field)=>{ + if(error)throw error + resolve(result) + }) + }) + res.send({uuid:uuid}) +}) +app.post("/api/updateshixixm",async (req,res)=>{ + const uuid=uuidv4.v4() + const sqlinsert="UPDATE shixi SET starttime=?,endtime=?,cx=?,sflx=?,dz=?,danwei=?,cxfs=?,sfhxzs=?,xiangxi=?,name=? WHERE shixihao=?" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.sx.startDatesx,req.body.sx.endDatesx,-1*moment(req.body.sx.startDatesx).diff(moment(req.body.sx.endDatesx),'day'), req.body.sx.Sflx,req.body.sx.dzsx,req.body.sx.danwei,req.body.sx.cxfssx,req.body.sx.sfhxzssx,req.body.sx.xiangxi,req.body.sx.name,req.body.uuid],(error,result,field)=>{ + if(error)throw error + resolve(result) + }) + }) + res.send({uuid:uuid}) +}) +app.get("/api/selectshixixm",async (req,res)=>{ + const sql="SELECT * FROM shixi WHERE shixihao=?" + const resultsx=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.shixi],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + resultsx[0].startDatesx=resultsx[0].starttime + resultsx[0].endDatesx=resultsx[0].endtime + resultsx[0].endDatesx=resultsx[0].endtime + resultsx[0].Sflx=resultsx[0].sflx + resultsx[0].dzsx=resultsx[0].dz + resultsx[0].cxfssx=resultsx[0].cxfs + resultsx[0].sfhxzssx=parseInt(resultsx[0].sfhxzs) + res.send(resultsx[0]) +}) +app.get("/api/getsxlist",async (req,res)=>{ + const sqlsx="SELECT * FROM shixi WHERE xuehao=?" + const sx=await new Promise((resolve, reject) => { + connection.query(sqlsx,[req.query.xuehao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send(sx) +}) +app.post("/api/changsxzt",async (req,res)=>{ + const updatesql="UPDATE shixi SET zt=? WHERE shixihao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[req.body.zt,req.body.shixihao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apitea/getsxlist",async (req,res)=>{ + const sqlstu="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE nianjizhaungye=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.bj],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + let xuehao=[]; + sturesult.map((stu,index)=>{ + xuehao.push(stu.xuehao) + }) + const sqlsxlsit="SELECT * FROM `shixi` WHERE JSON_CONTAINS(?,JSON_ARRAY(xuehao), '$')" + const sxlist=await new Promise((resolve, reject) => { + connection.query(sqlsxlsit,[JSON.stringify(xuehao)],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + sxlist.map((sxlistvalue,sxindex)=>{ + let index=sturesult.findIndex(x=>x.xuehao===sxlistvalue.xuehao) + if(index!==-1) { + sxlist[sxindex] = {...sxlist[sxindex], ...sturesult[index]} + } + }) + res.send(sxlist) +}) +app.get("/apixueyuan/getsxlist",async (req,res)=>{ + const sqlstu="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE xueyuan=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xueyuan],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + let xuehao=[]; + sturesult.map((stu,index)=>{ + xuehao.push(stu.xuehao) + }) + const sqlsxlsit="SELECT * FROM `shixi` WHERE JSON_CONTAINS(?,JSON_ARRAY(xuehao), '$')" + const sxlist=await new Promise((resolve, reject) => { + connection.query(sqlsxlsit,[JSON.stringify(xuehao)],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + sxlist.map((sxlistvalue,sxindex)=>{ + let index=sturesult.findIndex(x=>x.xuehao===sxlistvalue.xuehao) + if(index!==-1) { + sxlist[sxindex] = {...sxlist[sxindex], ...sturesult[index]} + } + }) + res.send(sxlist) +}) +app.post("/apistu/heshiqx",async (req,res)=>{ + const sql="SELECT passage FROM student WHERE xuehao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.xuehao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + if(result.length!==0) { + if (result[0].passage === req.body.passage) { + res.send("ok") + } else { + res.send("没有权限") + } + }else{ + res.send("请登录") + } +}) +app.post("/apitea/heshiqx",async (req,res)=>{ + const sql="SELECT passage FROM teacher WHERE xuegonghao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.xuegonghao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + if(result.length!==0) { + if (result[0].passage === req.body.passage) { + res.send("ok") + } else { + res.send("没有权限") + } + }else{ + res.send("请登录") + } +}) +app.get("/tool/bjidtoname",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE id=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + if(result[0].classname1&&result[0].classname2){ + //result[0] + res.send(result[0]) + }else{ + res.send(result[0]) + } +}) +app.post("/apixueyuan/banjiinfroupdate",async (req,res)=>{ + const sqlupdate="UPDATE banjiclass SET classname1=?,classname2=?,teacherid=?,teachername=? WHERE id=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.infor.classname1,req.body.infor.classname2,req.body.infor.teacherid,req.body.infor.teachername,req.body.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apixueyuan/fabubanji",async (req,res)=>{ + const sql="UPDATE banjiclass SET zt=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql,["已发布",req.body.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apischool/getkcall",async (req,res)=>{ + const sqlkc="SELECT * FROM kechengall " + const resultkc=await new Promise((resolve, reject) => { + connection.query(sqlkc,(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + const sqlkcone="SELECT * FROM kechengbiaotest" + const resultkcone=await new Promise((resolve, reject) => { + connection.query(sqlkcone,(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + resultkc.map((kcall,indexkc)=>{ + const kcnum=resultkcone.filter(item=>item.kechengid==kcall.id).length + resultkc[indexkc].kcclass=kcnum + let ks=0 + JSON.parse(resultkc[indexkc].kechenglist).map((zhou,zzhouindex)=>{ + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!==0){ + ks++; + } + }) + }) + }) + resultkc[indexkc].kechenglist=ks; + }) + res.send(resultkc) +}) +app.get("/apitea/newtmj" ,async (req,res)=>{ + const uuidid=uuidv4.v4() + const sqlinsert="INSERT INTO tmj_ex(id,tea,zt,information,starttime,endtime,student,fbkc,tmlist) VALUES(?,?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[uuidid,req.body.tea,"未发布","{}","no","no","[]","[]","[]"],(err, result)=>{ + if (err) throw err; + resolve(result); + // 处理查询结果 + console.log(result); + }) + }) + res.send({uuid:uuidid}) +}) +app.get("/apitea/zxdtget",async (req,res)=>{ + const sql="SELECT * FROM tmj_ex WHERE id=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send(result[0]) +}) +app.post("/apitea/zxdtupdateinfor",async (req,res)=>{ + const sqlupdate="UPDATE tmj_ex SET name=?,fbkc=?,starttime=?,endtime=?,information=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.name,JSON.stringify(req.body.fbkc),req.body.starttime,req.body.endtime,JSON.stringify(req.body.information),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apitea/zxdtupdatetm",async (req,res)=>{ + const sqlupdate="UPDATE tmj_ex SET tmlist=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.tmlist,null,4),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apitea/fabuzxdt",async (req,res)=>{ + const sqlupdatebefoe="UPDATE tmj_ex SET name=?,fbkc=?,starttime=?,endtime=?,information=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebefoe,[req.body.name,JSON.stringify(req.body.fbkc),req.body.starttime,req.body.endtime,JSON.stringify(req.body.information),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + const sqlselect="SELECT * FROM tmj_ex WHERE id=?" + const zxdt=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + //console.log(zxdt) + const stusql="SELECT * FROM `kechengbiaotest` WHERE JSON_CONTAINS(?,JSON_ARRAY(teacherid), '$')" + const sturesult=await new Promise((resolve, reject) => { + connection.query(stusql,[zxdt[0].fbkc], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + let stulist=[]; + sturesult.map((stuone,index)=>{ + // console.log(stuone) + stulist=[...stulist,...JSON.parse(stuone.student)] + }) + stulist=[...new Set(stulist)] + const sqlupdate="UPDATE `tmj_ex` SET student=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(stulist),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send(stulist) +}) +app.get("/api/stuinfor",async (req,res)=>{ + const sql="SELECT shoujihao,studentname FROM student WHERE xuehao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send(result[0]) +}) +app.get("/api/getptatmj",async (req,res)=>{ + const sqljue="SELECT * FROM tmj_ex WHERE `id`=?" + const jue=await new Promise((resolve, reject) => { + connection.query(sqljue,[req.query.ksh],(error,results,fields)=>{ + if(error)throw error + resolve(results[0]) + console.log(results) + }) + }) + if(jue){ + const sqlstu="SELECT * FROM tmj_stu WHERE xuehao=? AND ksh=?" + const stu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xuehao,req.query.ksh],(error,results,fields)=>{ + if(error)throw error + resolve(results[0]) + }) + }) + jue.status="ok" + if(stu){ + jue.ztstu=stu.zt; + jue.stustart=stu.starttime; + jue.tmlist=stu.zuodaxx; + + } + res.send(jue) + }else{ + res.send({status:"err"}) + } + + +}) +app.post("/api/kaishizxdt_ex",async (req,res)=>{ + const sqlzxdt="SELECT * FROM tmj_ex WHERE id=?" + const zxdt=await new Promise((resolve, reject) => { + connection.query(sqlzxdt,[req.body.uuid],(error,results,fields)=>{ + if(error)throw error + resolve(results[0]) + }) + }) + if(zxdt){ + const sqlupdate="INSERT INTO tmj_stu(zuodaxx,xuehao,ksh,id,zt,starttime) VALUES(?,?,?,?,?,?)" + const uuidv=uuidv4.v4(); + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[zxdt.tmlist,req.body.xuehao,req.body.uuid,uuidv,"已开始",moment().format()],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok",uuid:uuidv}) + }else{ + res.send({status:"err"}) + } +}) +app.post("/api/updatezxdt_ex", (req,res)=>{ + const sqlupdate="UPDATE tmj_stu SET zuodaxx=? WHERE xuehao=? AND ksh=?" + console.log(req.body.alltm) + connection.query(sqlupdate,[JSON.stringify(req.body.alltm,null,4),req.body.xuehao,req.body.ksh],(error,results,fields)=>{ + if(error)throw error + res.send({status:"ok"}) + }) +}) +app.listen(port, () => { + console.log(`Server listening on port ${port}`); +}) diff --git a/server/index1.js b/server/index1.js new file mode 100644 index 0000000..5e88647 --- /dev/null +++ b/server/index1.js @@ -0,0 +1,11960 @@ +const uuidv4 = require('uuid'); +const express = require('express'); +const multer = require('multer'); +const cors = require('cors'); +const app = express(); +const fs = require('fs'); +const zlib = require('zlib'); +const tar = require('tar'); +const axios = require('axios'); +const { promisify } = require('util'); +const {exec,execSync} = require('child_process'); +const moment=require('moment'); +var mysql = require('mysql'); +var q = require('qiao-zip'); +const qj=require('./shezhikecheng.js'); +const dabao=require('./dabao.js'); +const { basename, join, extname} = require("node:path"); +const {c, r} = require("tar"); +const {response} = require("express"); +const {homedir} = require("node:os"); +const readline = require("node:readline"); +const parsex=require('./parseexcel') +const crypto = require('crypto'); +const makeexcel=require('./makeexcel') +const speakeasy = require('speakeasy'); +const server=require('http').Server(app); +const QRCode = require('qrcode') +const io=require('socket.io')(server,{ + pingInterval: 10000, + pingTimeout: 5000, + + allowEIO3: true, // 如果你使用的是 Socket.io 3.x 或更高版本 + cors: { + origin: "http://localhost:3000", + methods: ["GET", "POST"] + }, + serveClient: false, + maxHttpBufferSize: 1e9, // 10 MB + perMessageDeflate: { + threshold: 1024 + } +}); +const xlsx = require('xlsx') +const xlsxnode=require('node-xlsx'); + +const pdfjs = require('pdfjs-dist/legacy/build/pdf'); +const { createCanvas } = require('@napi-rs/canvas'); +const child_process = require("node:child_process"); +console.log(uuidv4.v4()) +var connection = mysql.createConnection({ + host : 'localhost', + user : 'root', + password : '416416', + database : 'neigongda' +}); + +connection.connect(); +app.use(cors({ + origin: ['http://localhost:3000','http://localhost:89'], +})); + +app.use(express.urlencoded({extended: false})); // 现在就方便多了,express的两个方法一执行就行啦 +app.use(express.json({limit: '100mb', extended: true})); +const port = process.env.PORT || 3400; +const storage = multer.diskStorage({ + destination: function (req, file, cb) { + fs.mkdir('uploads/'+req.headers.xuehao, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + console.log('文件夹已存在或成功创建!'); + }); + cb(null, 'uploads/'+req.headers.xuehao+'/') // 确保这个文件夹已经存在 + }, + filename: function (req, file, cb) { + const xh=file.originalname; + console.log(xh); + cb(null, xh) + } +}) +const upload = multer({ storage: storage }); +async function newbug(bug,place,input){ + const sql="INSERT INTO errbug(time,bug,place) VALUES(?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sql, [moment().format(), JSON.stringify({ + message: bug.message, + stack: bug.stack, + input: input + }, null, 4), place], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + +} + +app.get('/apitea/allkezxdtlist',async function (req, res) { + const sqlzxdtlist = "SELECT * FROM kechengbiao WHERE teacher=" + req.query.tea;//查询课程信息 + const resultzxdtlistall = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let zxdtlist = []; + for(let j=0; j { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const tanme = resultzxdt.name; + const tid = resultzxdt.id; + const start = resultzxdt.start; + const end = resultzxdt.end; + const allth = JSON.parse(resultzxdt.timu).all.t0 + const sqlt0 = "SELECT * FROM tm WHERE id=\"" + allth + "\"" + const result0 = await new Promise((resolve, reject) => { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ydtx = result0.length; + const titea = { + name: tanme, + id: tid, + start: start, + end: end, + ydtx: ydtx, + all: allstu, + classname: classname + }; + zxdtlist.push(titea); + } + } + } + res.send(zxdtlist) +}) +app.get('/apitea/allkezxdtlist_new',async function (req, res) { + //req.query.tea;//查询课程信息 + const sqlselect="SELECT * FROM tmj_ex WHERE tea=?" + let result=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.query.tea], (error, results, fields) => { + if (error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(stusql,[result[i].fbkc], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + let wb=""; + sturesult.map((kcname,index)=>{ + wb+=kcname.classname+"," + }) + wb=wb.slice(0,-1) + result[i].kcwb=wb; + const studaansql="SELECT COUNT(*) AS num FROM tmj_stu WHERE ksh=? AND zt=?" + const daan=await new Promise((resolve, reject) => { + connection.query(studaansql,[result[i].id,"已提交"], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + const studaansql1="SELECT COUNT(*) AS num FROM tmj_stu WHERE ksh=?" + const start=await new Promise((resolve, reject) => { + connection.query(studaansql1,[result[i].id], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + result[i].finish=daan[0].num; + result[i].start=start[0].num + } + res.send(result); +}) +app.get("/apichat/getyhxx",async function (req, res) { + const sqlkc="SELECT * FROM kechengbiao WHERE teacherid=?" + const resultkc=await new Promise((resolve, reject) => { + connection.query(sqlkc,[req.query.teacherid], (error,results,fields)=>{ + resolve(results[0]); + }) + }) + let kcnumber=[]; + let kcstu=JSON.parse(resultkc.student) + for(let i=0;i { + connection.query(sqlstu,[kcstu[i]],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + if(sturesult){ + kcnumber.push({...sturesult,stu:kcstu[i]}) + } + + } + const sqltea="SELECT name AS studentname,touxiangcolor,touxiang FROM teacher WHERE xuegonghao=?" + const tearesult=await new Promise((resolve, reject) => { + connection.query(sqltea,[resultkc.teacher], (error,results,fields)=>{ + resolve(results[0]); + }) + }) + kcnumber.push({...tearesult,stu:resultkc.teacher}); + res.send(kcnumber); +}) + +app.get('/apitea/kezxdtlist_new',async function (req, res) { + //req.query.tea;//查询课程信息 + const sqlselect=`SELECT * FROM tmj_ex WHERE fbkc LIKE "%${req.query.teacherid}%"` + let result=await new Promise((resolve, reject) => { + connection.query(sqlselect, (error, results, fields) => { + if (error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(stusql,[result[i].fbkc], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + let wb=""; + sturesult.map((kcname,index)=>{ + wb+=kcname.classname+"," + }) + wb=wb.slice(0,-1) + result[i].kcwb=wb; + const studaansql="SELECT COUNT(*) AS num FROM tmj_stu WHERE ksh=? AND zt=?" + const daan=await new Promise((resolve, reject) => { + connection.query(studaansql,[result[i].id,"已提交"], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + const studaansql1="SELECT COUNT(*) AS num FROM tmj_stu WHERE ksh=?" + const start=await new Promise((resolve, reject) => { + connection.query(studaansql1,[result[i].id], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + result[i].finish=daan[0].num; + result[i].start=start[0].num + } + res.send(result); +}) +app.get('/apitea/zxdtlist',async function (req, res) { + const sqlzxdtlist = "SELECT * FROM kechengbiao WHERE classid=" + req.query.kc;//查询课程信息 + + const resultzxdtlist = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(JSON.parse(results[0].timu)); + }); + }); + const resultallinfor = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const classname=resultallinfor.classname + const allstu=JSON.parse(resultallinfor.student).length +// res.send(resultzxdtlist); + let zxdtlist=[]; + for (let i = 0; i < resultzxdtlist.length; i++) { + const sqlzxdtinfor = "SELECT * FROM timuji WHERE id=" + resultzxdtlist[i];//查询答题信息 + + const resultzxdt = await new Promise((resolve, reject) => { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const tanme=resultzxdt.name; + const tid=resultzxdt.id; + const start=resultzxdt.start; + const end=resultzxdt.end; + const allth=JSON.parse(resultzxdt.timu).all.t0 + const sqlt0="SELECT * FROM tm WHERE id=\""+allth+"\"" + const result0 = await new Promise((resolve, reject) => { + connection.query(sqlzxdtinfor, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ydtx=result0.length; + const titea={name:tanme,id:tid,start:start,end:end,ydtx:ydtx,all:allstu,class:classname}; + zxdtlist.push(titea); + } + res.send(zxdtlist) +}) +app.get('/apitea/zxdtlist_new',async function (req, res) { + const sqlzxdtlist = "SELECT * FROM kechengbiao WHERE classid=" + req.query.kc;//查询课程信息 + + const resultzxdtlist = await new Promise((resolve, reject) => { + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlselectzxdt="SELECT * FROM tmj_ex WHERE JSON_CONTAINS( "+`'["${resultzxdtlist.teacherid}"]'`+",fbkc,'$')" + let result=await new Promise((resolve, reject) => { + connection.query(sqlselectzxdt,[req.query.tea], (error, results, fields) => { + if (error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(stusql,[result[i].fbkc], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + let wb=""; + sturesult.map((kcname,index)=>{ + wb+=kcname.classname+"," + }) + wb=wb.slice(0,-1) + result[i].kcwb=wb; + const studaansql="SELECT COUNT(*) AS num FROM tmj_stu WHERE ksh=? AND zt=?" + const daan=await new Promise((resolve, reject) => { + connection.query(studaansql,[result[i].id,"已提交"], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + result[i].finish=daan[0].num; + } + res.send(result); +}) +app.get("/apitea/ptastu",async function (req,res){ + const sqlstd = "SELECT * FROM tm WHERE id=" + req.query.timu; + + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + + console.log(resultptastd); + const sql1t = "SELECT * FROM pta WHERE th=\'" +req.query.timu + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC";//查出已答同学 + console.log(sql1t) + const resultstuti= await new Promise((resolve, reject) => { + connection.query(sql1t, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const tname=resultptastd.tanme + const studaan=JSON.parse(resultstuti[0].daan).t; + const buffer = Buffer.from(resultptastd.pj, 'base64'); + const cacheDir = join(homedir(), '.cache'); + console.log(cacheDir); +// 将Buffer写入文件 + const uuid=uuidv4.v4() + fs.writeFileSync(cacheDir+"\\"+uuid+".zip", buffer); + fs.mkdirSync(cacheDir+"\\"+uuid); + await q.unzip(cacheDir+"\\"+uuid+".zip", cacheDir+"\\"+uuid); + const data = fs.readFileSync(cacheDir+"\\"+uuid+"\\tm.json", 'utf8'); + let daan=JSON.parse(data).t; + let plyl=[]; + + + let stdprintall=0; + let stuprintall=0; + const jgall=JSON.parse(resultstuti[0].daan).by + const memoryall=JSON.parse(resultstuti[0].daan).memory + const timeall=JSON.parse(resultstuti[0].daan).time.toFixed(2); + const tjsjall=JSON.parse(resultstuti[0].daan).tjsj + for(let i=0;i { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + if(resulttimuinfor.length>0) { + const tname = resulttimuinfor[0].tname + let allstu=JSON.parse(resulttimuinfor[0].all).stu + const tigroup = JSON.parse(resulttimuinfor[0].timu).allti + const tmprintall = JSON.parse(resulttimuinfor[0].timu).all.allprint; + const sql1 = "SELECT * FROM pta WHERE th=\'" + tmprintall + "\' ";//查出已答同学 + console.log(sql1) + const resultstuinfor = await new Promise((resolve, reject) => { + connection.query(sql1, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let daan = []; + let tistdprint = 0; + for (const titi of tigroup) { + const sqlstd = "SELECT * FROM tm WHERE id=" + titi; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tistdprint = tistdprint + resultptastd.fen + daan.push(resultptastd); + } + let stu = [] + console.log(resultstuinfor) + for (const tongxue of resultstuinfor) { + let stuti = {} + const sqlstu = "SELECT * FROM student WHERE xuehao=\'" + tongxue.xuehao + "\'";//查出已答同学 + const stuname = await new Promise((resolve, reject) => { + connection.query(sqlstu, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + + stuti.name = stuname.studentname; + stuti.xzb = stuname.nianjizhaungye;//行政班 + stuti.xuehao = tongxue.xuehao; + + allstu = allstu.filter(function(item) { + return item !== tongxue.xuehao + }); + stuti.start = JSON.parse(tongxue.daan).time//开始时间 + let ti = []; + const tigroup = JSON.parse(resulttimuinfor[0].timu).allti; + let allprint = 0; + for (const titi of tigroup) { + //查询学生对题目的作答 + + const sql1t = "SELECT * FROM pta WHERE th=\'" + titi + "\' and xuehao= \'" + tongxue.xuehao + "\' ORDER BY paixu DESC";//查出已答同学 + console.log(sql1t) + const resultstuti = await new Promise((resolve, reject) => { + connection.query(sql1t, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + console.log(resultstuti[0]) + const tistuda = resultstuti[0]; + let print + if (JSON.parse(resultstuti[0].daan).printall !== undefined) { + print = JSON.parse(resultstuti[0].daan).printall + } else { + print = JSON.parse(resultstuti[0].daan).defen + } + allprint = allprint + print; + tistuda.print = print + ti.push({ti: tistuda}); + } + stuti.print = allprint + stuti.t = ti + stu.push(stuti) + + } + let wdtx=[] + for (let k=0; k { + connection.query(sqlstu, (error, results, fields) => { + if (error) reject(error); + + if(results.length > 0) { + resolve(results[0]); + }else{ + resolve({xuehao:allstu[k]}); + } + }); + }); + wdtx.push(stuname) + + } + res.send({ti: resulttimuinfor, daan: daan, stu: stu, stdprint: tistdprint,stuno:wdtx}); + }else{ + res.send({ti: [], daan:[], stu: [], stdprint: -1}); + } +}) +app.get('/api/ptalisttm',async (req, res) => { + try{ + let duoxuetiprint=[] + let panduantiprint=[] + let danxuetiprint=[] + let tiankongtiprint=[] + let ptaprint=[] + let allfen=0; + let stufen=0; + let jd=0; + let allpta=0; + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let ptalist=JSON.parse(result[0].timu).pta; + + for (const element of ptalist) { + //查学生作答 + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={}; + if(resultpta!==undefined){ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).printall; + allfen=allfen+stdfen; + stufen=stufen+fen; + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + const memory= parseInt(JSON.parse(resultpta.daan).memory); + const time=parseInt(JSON.parse(resultpta.daan).time) + if(memory>63353){ + cl.color="purple" + cl.wb="内存超限" + } + if(time>600){ + cl.color="purple" + if(cl.wb==="内存超限") + {cl.wb="内存超限 时间超限"} + else{ + cl.wb="时间超限" + } + } + //cl.daan=JSON.parse(resultpta.daan) + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + }else{ + const stdfen=resultptastd.fen; + allfen=allfen+stdfen; + //stufen=stufen+fen; + //jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + } + ptaprint.push(cl); + //duoxuetiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={} + if(resultpta===undefined || resultpta.daan==="未作答"){ + const stdfen=resultptastd.fen; + allfen=allfen+stdfen; + //stufen=stufen+fen; + //jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + panduantiprint.push(cl) + } + console.log(0); + ptalist=JSON.parse(result[0].timu).danxueti; + + for (const element of ptalist) { + console.log(3); + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(4) + let cl={} + console.log(resultptastd) + if(resultpta===undefined || resultpta.daan==="未作答"){ + const stdfen=resultptastd.fen; + // const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + //stufen=stufen+parseInt(fen); + //jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + console.log(fen) + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + danxuetiprint.push(cl) + console.log(5) + } + console.log(1); + ptalist=JSON.parse(result[0].timu).tiankongti; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={} + if(resultpta===undefined || resultpta.daan==="未作答"){ + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + const stdfen=resultptastd.fen; + //const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + //stufen=stufen+parseInt(fen); + //jd++; + allpta++; + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + //const stdfen=resultptastd.fen; + //const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + tiankongtiprint.push(cl) + + } + ptalist=JSON.parse(result[0].timu).duoxueti; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + const sqlstd = "SELECT * FROM tm WHERE id=" +element ; + console.log(sql) + const resultptastd = await new Promise((resolve, reject) => { + connection.query(sqlstd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let cl={} + if(resultpta===undefined || resultpta.daan==="未作答"){ + const stdfen=resultptastd.fen; + //const fen=JSON.parse(resultpta.daan).defen; + + allfen=allfen+parseInt(stdfen); + // stufen=stufen+parseInt(fen); + // jd++; + allpta++; + cl.color="black" + cl.wb="未做答" + cl.tmid=element + cl.stdfen=" "; + cl.fen="-"; + cl.zt="未答" + }else{ + const stdfen=resultptastd.fen; + const fen=JSON.parse(resultpta.daan).defen; + + + allfen=allfen+parseInt(stdfen); + stufen=stufen+parseInt(fen); + jd++; + allpta++; + if(fen===0){ + cl.color="red" + cl.wb="答案错误" + }else if(stdfen===fen){ + cl.color="green" + cl.wb="答案正确" + }else { + cl.color="yellow" + cl.wb="答案部分正确" + } + cl.tmid=element + cl.fen=fen; + cl.stdfen=stdfen; + cl.zt="已答" + cl.stddaan=JSON.parse(resultptastd.tm).daan; + cl.daan=JSON.parse(resultpta.daan).xuexiang; + } + duoxuetiprint.push(cl) + + } + const alldate={jd:jd,allpta:allpta,allfen:allfen,stufen:stufen}; + res.send({ptaprint:JSON.stringify(ptaprint),duoxuetiprint:JSON.stringify(duoxuetiprint),danxuetiprint:JSON.stringify(danxuetiprint),panduantiprint:JSON.stringify(panduantiprint),tiankongtiprint:JSON.stringify(tiankongtiprint),alldate:alldate}); + + + } + + catch(err){} +}) +// 设置路由和上传字段 +app.post('/api/jdttj',async (req, res) => { + try{ + const sql = "SELECT * FROM pta WHERE xuehao = ? AND th=?"; + let result = await new Promise((resolve, reject) => { + connection.query(sql, [req.body.xuehao,req.body.th], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + console.log(result); + let jsonsj=result[0].daan; + const uuidv4=result[0].uuid; + const wjs=[]; + if(JSON.parse(jsonsj).sftj==="no"){ + //没提交 + const folderPath = 'nginx/html/homework/'+uuidv4; + + const folderList = fs.readdirSync(folderPath) + console.log(folderList); + folderList.forEach((item) => { + + const json64= fs.readFileSync('nginx/html/homework/'+uuidv4+'/'+item); + const base64Data = json64.toString('base64'); + const wjjson={file:basename(item),json64:base64Data}; + wjs.push(wjjson); + console.log(wjjson) + }) + let fh=JSON.parse(jsonsj); + fh.wj=JSON.stringify(wjs); + fh.sftj="no"; + const sql = 'UPDATE pta SET daan=? WHERE xuehao=? and th=?'; + await new Promise((resolve, reject) => { + connection.query(sql, [JSON.stringify(fh), req.body.xuehao, req.body.th], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + // console.log(results); + }); + }); + + } + }catch(err){ + console.log(err); + } +}) +app.post('/api/upload', upload.single('file'), (req, res) => { + const file = req.file; + console.log(file); + if (!file) { + return res.status(400).send('No file uploaded.'); + } + res.send('File uploaded successfully.'); +}); +const storagehw = multer.diskStorage({ + destination: function (req, file, cb) { + fs.mkdir('nginx/html/homework/'+req.headers.xuehao, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + console.log('文件夹已存在或成功创建!'); + }); + cb(null, 'nginx/html/homework/'+req.headers.xuehao+'/') // 确保这个文件夹已经存在 + }, + filename: function (req, file, cb) { + const xh=file.originalname; + console.log(xh); + cb(null, xh) + } +}) +const uploadhw = multer({ storage: storagehw }); +app.post('/api/hwdelete',(req, res) => { + const lj='nginx/html/homework/'+req.body.uuid+'/'+req.body.filename; + try { + fs.unlinkSync(lj); + console.log('文件已成功删除'); + } catch (err) { + console.error('删除文件时出错:', err); + } +}) +// 设置路由和上传字段 +app.post('/api/uploadhm', uploadhw.single('file'), (req, res) => { + const file = req.file; + console.log(file); + if (!file) { + return res.status(400).send('No file uploaded.'); + } + res.send('File uploaded successfully.'); +}); +app.get('/api/chaxujiatiao', (req, res) => { + stu=req.query.xuehao; + var sql = "SELECT * FROM jiatiao WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + connection.query(sql,function (err, result) { + res.send(result); + }) +}) + +app.get('/api/cxtm',(req, res) => { + const sql = "SELECT * FROM pta WHERE xuehao = ? AND th=? ORDER BY paixu DESC"; + console.log(sql); + console.log(req.params.xuehao); + console.log(req.params.th) + connection.query(sql, [req.query.xuehao,req.query.th], (err, results) => { + if(results.length === 0){ + res.send("未作答") + }else { + if (results[0].daan === "未作答") { + res.send("未作答"); + } else { + let daan = JSON.parse(results[0].daan); + console.log(daan); + res.send(results[0].daan); + } + } + }); + +}) +app.get('/api/print',async (req, res) => { + try{ + let duoxuetiprint=[] + let panduantiprint=[] + let danxuetiprint=[] + let tiankongtiprint=[] + let ptaprint=[] + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + let ptalist=JSON.parse(result[0].timu).duoxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + duoxuetiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + panduantiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).danxueti; + + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + danxuetiprint.push(JSON.parse(resultpta.daan).defen) + } + ptalist=JSON.parse(result[0].timu).tiankongti; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + tiankongtiprint.push(JSON.parse(resultpta.daan).defen) + + } + ptalist=JSON.parse(result[0].timu).pta; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let red=0; + let green=0; + ptaprint.push(JSON.parse(resultpta.daan).printall) + } + res.send({ptaprint:JSON.stringify(ptaprint),duoxuetiprint:JSON.stringify(duoxuetiprint),danxuetiprint:JSON.stringify(danxuetiprint),panduantiprint:JSON.stringify(panduantiprint),tiankongtiprint:JSON.stringify(tiankongtiprint)}); + + + } + + catch(err){} +}) +app.get('/api/ptacolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).pta; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" + element + "\' and xuehao= \'" + req.query.xuehao + "\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if (resultpta !== undefined) { + let red = 0; + let green = 0; + JSON.parse(resultpta.daan).t.forEach(daan => { + if (daan.print === 0) { + red++; + } else { + green++; + } + }) + if (green === 0) { + color.push("red"); + } else if (red === 0) { + color.push("green"); + } else { + color.push("yellow"); + } + }else{ + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/duoxueticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).duoxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/panduancolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/danxueticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).danxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/danxueticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).danxueti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/panduanticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).panduanti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resultpta.daan!=="未作答") { + if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("green"); + } + }else { + color.push("#000000"); + } + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/tiankongticolor', async (req, res) => { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const ptalist=JSON.parse(result[0].timu).tiankongti; + var color=[]; + for (const element of ptalist) { + const sql = "SELECT * FROM pta WHERE th=\'" +element + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + const resultpta = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + console.log(resultpta) + + if(resultpta.daan!=="未作答") { + const all=JSON.parse(resultpta.daan).xuexiang.length; + if (JSON.parse(resultpta.daan).defen === all) { + color.push("green"); + } else if (JSON.parse(resultpta.daan).defen === 0) { + color.push("red"); + } else { + color.push("yellow") + } + }else { + color.push("#000000"); + } + console.log(color) + } + res.send(color) + }catch(err){ + console.log(err); + } +}) +app.get('/api/dizhimoban', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM dizhimoban WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + jg=[]; + result.forEach(function(value, index) { + const json=JSON.parse(value.dizhijson); + jg[index] = json; + }); + + + res.send(jg); + }); +}) +app.get('/api/dizhimobanbing', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM dizhimobanbing WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + jg=[]; + result.forEach(function(value, index) { + const json=JSON.parse(value.dizhijson); + jg[index] = json; + }); + + + res.send(jg); + }); +}) +app.get('/api/shijiamoban', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM shijiamoban WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + jg=[]; + result.forEach(function(value, index) { + jg[index] = value.mobanjson; + jg[index].id=value.id; + }); + + + res.send(jg); + }); +}) + +app.get('/api/studentinformation',async (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM student WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); +let stuinfor=await new Promise((resolve,reject)=>{ + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + resolve(result[0]); + }); + }) + const sqlsx="SELECT * FROM shixi WHERE xuehao = ?"; + let stuinforsx=await new Promise((resolve,reject)=>{ + connection.query(sqlsx,[stu],function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + resolve(result); + }); + }) + stuinfor.shixihao=JSON.stringify(stuinforsx); + res.send(stuinfor); +}) + +app.get('/api/teacherinformation', (req, res) => { + tea=req.query.teacher; + + var sql = "SELECT * FROM teacher WHERE xuegonghao = "+"'"+tea+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result[0]); + }); +}) +app.get('/api/jiaqiluhu', (req, res) => { + //stu=req.query.student; + + var sql = "SELECT * FROM jiaqi"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + flag=1; + result.forEach(function(value, index) { + + const dateFormat = 'YYYY-MM-DD'; + const start=moment(value.lssj, dateFormat).subtract(7, 'days'); + const end=moment(value.endtime, dateFormat); + console.log(end); + console.log(start); + if(moment().isBetween(start,end)){ + console.log(end); + res.send(value); + flag=2; + } + }) + if(flag===1) { + res.send({}); + } + }); +}) +app.get('/api/parentsinformation', (req, res) => { + stu=req.query.student; + + var sql = "SELECT * FROM parents WHERE stdentid = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result); + }); +}) +app.get('/api/jiatiaocx', (req, res) => { + const stu=req.query.uuid; + + var sql = "SELECT * FROM jiatiao WHERE uuid = "+"'"+stu+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + if(result[0].leixing==='binjia'){ + fs.mkdir('uploads/'+req.query.uuid, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + JSON.parse(result[0].zzclbase64).map((value,index)=>{ + var dataBuffer = Buffer.from(value.base64, 'base64'); + fs.writeFile('uploads/'+req.query.uuid+"/"+value.wj, dataBuffer, function(err) { + + }); + + }); + console.log('文件夹已存在或成功创建!'); + }); + } + + if(result.length===0){ + res.send({zt:'错误'}); + }else { + result[0].zt="ok"; + res.send(result[0]); + } + }); +}) +function stucx(stu) { + + + var sql = "SELECT * FROM student WHERE xuehao = "+"'"+stu+"';"; + console.log(sql); + let yy={}; + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + + } + + return JSON.stringify(result[0]); + + + }); + console.log(yy); + +} +app.get('/api/jiatiaocxfdy', async (req, res) => { + try { + const fdy = req.query.fdy; + + // 创建目录 + if(!fs.existsSync(`nginx/html/${fdy}`)) { + await fs.mkdir(`nginx/html/${fdy}`, (err) => { + console.log(err); + }); + } + // 数据库查询 + const sql = "SELECT * FROM jiatiao WHERE fdy = ? AND tj !=2"; + const result = await new Promise((resolve, reject) => { + connection.query(sql, [fdy], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + // 处理查询结果 + const resultfdy = []; + for (const value of result) { + const stujt = { + jt: value.jtnr, + leixing: value.leixing, + uuid: value.uuid, + }; + + // 查询学生信息 + const sql1 = "SELECT * FROM student WHERE xuehao = ?"; + const resultxuesheng = await new Promise((resolve, reject) => { + connection.query(sql1, [value.xuehao], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + stujt.stu = JSON.stringify(resultxuesheng); + + // 处理特定类型的记录 + if (value.leixing === 'binjia') { + const uuidDir = `nginx/html/${fdy}/${value.uuid}`; + if(!fs.existsSync(uuidDir)) { + await fs.mkdir(uuidDir, (err) => { + console.log(err); + }); + } + + // 解析并写入文件 + const files = JSON.parse(value.zzclbase64); + const wj = []; + for (const file of files) { + const dataBuffer = Buffer.from(file.base64, 'base64'); + const filePath = `${uuidDir}/${file.wj}`; + await fs.writeFile(filePath, dataBuffer,(err) => { + console.log(err); + }); + const wjfile = { url: `localhost:89/${fdy}/${value.uuid}/${file.wj}` ,filePath:`${file.wj}` }; + wj.push(wjfile); + } + stujt.wj = wj; + } + + resultfdy.push(stujt); + } + + // 发送响应 + res.json(resultfdy); + } catch (err) { + console.error(err); + res.status(500).send('Internal Server Error'); + } +}); +app.get('/api/jiatiaocxfdylx', async (req, res) => { + try { + const fdy = req.query.fdy; + const leixing=req.query.leixing; + // 创建目录 + if(!fs.existsSync(`nginx/html/${fdy}`)) { + await fs.mkdir(`nginx/html/${fdy}`, (err) => { + console.log(err); + }); + } + // 数据库查询 + const sql = "SELECT * FROM jiatiao WHERE fdy = ? AND tj = ?"; + const result = await new Promise((resolve, reject) => { + connection.query(sql, [fdy,leixing], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + // 处理查询结果 + const resultfdy = []; + for (const value of result) { + const stujt = { + jt: value.jtnr, + leixing: value.leixing, + uuid: value.uuid, + }; + + // 查询学生信息 + const sql1 = "SELECT * FROM student WHERE xuehao = ?"; + const resultxuesheng = await new Promise((resolve, reject) => { + connection.query(sql1, [value.xuehao], (err, results) => { + if (err) reject(err); + else resolve(results); + }); + }); + + stujt.stu = JSON.stringify(resultxuesheng); + + // 处理特定类型的记录 + if (value.leixing === 'binjia') { + const uuidDir = `nginx/html/${fdy}/${value.uuid}`; + if(!fs.existsSync(uuidDir)) { + await fs.mkdir(uuidDir, (err) => { + console.log(err); + }); + } + + // 解析并写入文件 + const files = JSON.parse(value.zzclbase64); + const wj = []; + for (const file of files) { + const dataBuffer = Buffer.from(file.base64, 'base64'); + const filePath = `${uuidDir}/${file.wj}`; + await fs.writeFile(filePath, dataBuffer,(err) => { + console.log(err); + }); + const wjfile = { url: `localhost:89/${fdy}/${value.uuid}/${file.wj}` ,filePath:`${file.wj}` }; + wj.push(wjfile); + } + stujt.wj = wj; + } + + resultfdy.push(stujt); + } + + // 发送响应 + res.json(resultfdy); + } catch (err) { + console.error(err); + res.status(500).send('Internal Server Error'); + } +}); +app.get('/api/sjmobancx', (req, res) => { + id=req.query.uuid; + + var sql = "SELECT * FROM shijiamoban WHERE id = "+"'"+id+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + if(result.length===0){ + res.send({zt:'错误'}); + }else { + result[0].zt="ok"; + res.send(result[0]); + } + }); +}) +app.get('/api/shixiinformation', (req, res) => { + sx=req.query.shixi; + + var sql = "SELECT * FROM shixi WHERE shixihao = "+"'"+sx+"';"; + console.log(sql); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result[0]); + }); +}); +app.get('/api/ptatm', (req, res) => { + id=req.query.id; + + var sql = "SELECT * FROM tm WHERE id = "+"'"+id+"';"; + console.log(sql+"1234"); + + connection.query(sql,function (err, result) { + if(err){ + console.log('[SELECT ERROR] - ',err.message); + return; + } + + + + res.send(result[0]); + }); +}); +app.post('/api/ptadaan', (req, res) => { + const sql = 'UPDATE pta SET daan=? WHERE xuehao=? and th=?'; + connection.query(sql, [req.body.daan,req.body.xuehao,req.body.th], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/fabucommit', (req, res) => { + const sql = 'INSERT INTO commit(uuid,likes,dislikes,author,neirong,fabutime,xuehao,xuhao,filelist) VALUES(?,?,?,?,?,?,?,?,?)'; + + connection.query(sql, [uuidv4.v4(),JSON.stringify(req.body.likes),JSON.stringify(req.body.dislikes),req.body.author,req.body.neirong,req.body.fabutime,req.body.xuehao,req.body.xuhao,JSON.stringify(req.body.filelist)], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + res.send({status:"ok"}) +}) +app.post('/api/newcommitgroup', async (req, res) => { + const sql="SELECT COUNT(*) AS rows FROM commitgroup;" + const rownum=await new Promise((resolve, reject) => { + connection.query(sql,(err, result) => { + resolve(result); + }) + }) + const sqlinsert="INSERT INTO commitgroup(xuhao,teacher,zhuti,student,fabukecheng) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[rownum[0].rows+1,req.body.tea,"[]","[]","[]"],(err, result)=>{ + if (err) throw err; + resolve(result); + // 处理查询结果 + console.log(result); + }) + }) + res.send(rownum) +}) +app.post('/api/updatelike',async (req, res) => { + const sql = "SELECT * FROM commit WHERE uuid=\'" + req.body.uuid + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + let likes=JSON.parse(result[0].likes); + if(!likes.includes(req.body.xuehao)){ + likes.push(req.body.xuehao); + }else{ + likes=likes.filter(item => item !== req.body.xuehao); + } + + const sqlupdate = 'UPDATE commit SET likes=? WHERE uuid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(likes),req.body.uuid], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + res.send(likes); +}) +app.get('/api/cxcommittimu', (req, res) => { + const sql="SELECT * FROM commitgroup WHERE xuhao=?"; + connection.query(sql,[req.query.xuhao],function (err, result) { + if (err){ + throw err; + + } + if(result.length>0) { + res.send(result[0]); + }else{ + res.send("nocommit") + } + }) + +}) +app.post('/api/updatedislike',async (req, res) => { + const sql = "SELECT * FROM commit WHERE uuid=\'" + req.body.uuid + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + let likes=JSON.parse(result[0].dislikes); + if(!likes.includes(req.body.xuehao)){ + likes.push(req.body.xuehao); + }else{ + likes=likes.filter(item => item !== req.body.xuehao); + } + + const sqlupdate = 'UPDATE commit SET dislikes=? WHERE uuid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(likes),req.body.uuid], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + res.send(likes); +}) +app.get("/apitea/classlist_ex",async (req, res) => { + const sql="SELECT classid,classname,teacherid,classbh FROM kechengbiao WHERE teacher=?" + const claasslist=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + res.send(claasslist); +}) +app.get('/apitea/gettaolong',async (req, res) => { + const sql="SELECT * FROM commitgroup WHERE xuhao=?" + let results = await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuhao],(error, results, fields) => { + resolve(results[0]); + }) + }) + if(results) { + let fabuclass = JSON.parse(results.fabukecheng); + console.log(fabuclass) + const sqlclass = "SELECT classid,classname,teacherid,classbh FROM kechengbiao WHERE teacher=?" + let claasslist = await new Promise((resolve, reject) => { + connection.query(sqlclass, [req.query.tea], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + for (let i = 0; i < claasslist.length; i++) { + console.log(123) + if (fabuclass.includes(parseInt(claasslist[i].teacherid))) { + console.log("yes") + claasslist[i].choose = true; + } + } + results.fabu = claasslist; + res.send(results); + } + +}) +app.post("/apitea/fabukaoshi",async (req, res) => { + let student=[]; + const fabuclass=req.body.fabuclass;//获取发布班级 + for(let i=0;i { + connection.query(sqlclass,[fabuclass[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + student=[...student,...JSON.parse(claasslist.student)]; + + + } + + student=[...new Set(student)]; + console.log(student); + const sqlupdate = 'UPDATE kaoshipaper SET paper=?,std=?,xx=?,stu=? WHERE uuid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.paper),JSON.stringify(req.body.std),JSON.stringify(req.body.xx),JSON.stringify(student),req.body.xuhao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); +}) +app.post("/aptea/fabutaolong",async (req, res) => { + const sql="SELECT * FROM commitgroup WHERE xuhao=?" + let results = await new Promise((resolve, reject) => { + connection.query(sql,[req.body.xuhao],(error, results, fields) => { + resolve(results[0]); + }) + }) + let student=[]; + const fabuclass=JSON.parse(results.fabukecheng); + for(let i=0;i { + connection.query(sqlclass,[fabuclass[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + student=[...student,...JSON.parse(claasslist.student)]; + + + } + student=[...new Set(student)]; + const sqlupdate = 'UPDATE commitgroup SET student=? WHERE xuhao=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(student),req.body.xuhao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + res.send(student); +}) +app.post("/apitea/updatetaolong",async (req, res) => { + let fabuclass=[]; + + req.body.classinfor.map((value,index)=>{ + if(value.choose===true){ + fabuclass.push(parseInt(value.teacherid)) + } + }) + const sql = 'UPDATE commitgroup SET title=?,zhuti=?,fabukecheng=? WHERE xuhao=?'; + console.log(req.body.seconds); + connection.query(sql, [req.body.title,JSON.stringify(req.body.zhuti),JSON.stringify(fabuclass),req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) + +app.get('/api/taolong',async (req, res) => { + const sql="SELECT * FROM commitgroup WHERE teacher=?"; + let reasult = await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error) reject(error); + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlcommit,[reasult[i].xuhao],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + let stufinish=[] + resultcommit.map((value) => { + stufinish.push(value.xuehao) + }) + stufinish=[...new Set(stufinish)]; + reasult[i].stufinish=stufinish; + for(let j=0;j { + connection.query(sqlclass, [JSON.parse(reasult[i].fabukecheng)[j]], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + console.log(resultclass) + resultclass.map((value,index)=>{ + kechengname=kechengname+" "+value.classname+"@"+value.classbh + const temp=JSON.parse(value.student); + stu=[...stu,...temp] + }) + + + + } + let uniqueArr = [...new Set(stu)]; + reasult[i].studentshiji=uniqueArr; + + reasult[i].classnamelist=kechengname; + } + res.send(reasult); +}) +app.get('/api/getstucommit',async (req, res) => { + const sql = "SELECT xuhao,teacher,title,zhuti,student,teacher.name AS teaname\n" + + "FROM commitgroup\n" + + "LEFT JOIN teacher ON teacher.xuegonghao = commitgroup.teacher\n" + + "WHERE JSON_CONTAINS(student, "+`'["${req.query.xuehao}"]'`+", '$');" ; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }); + const temp=[...result]; + for(let i=0;i { + connection.query(sql, [req.query.xuehao,temp[i].xuhao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + if(stu.length===0){ + temp[i].zt="nofinish" + }else{ + temp[i].zt="finish" + } + } + + res.send(temp); + +}) +app.get("/apitea/askks",async (req, res) => { + //WHERE JSON_CONTAINS(stu,?, '$'); + const sqlpaper="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(tea,?, '$')" + // const sqllist="SELECT * FROM askforks WHERE xuehao = ? ;" + const resultkslist=await new Promise((resolve, reject) => { + connection.query(sqlpaper, ["["+req.query.tea+"]"], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + let resultlist=[]; + for(let i=0;i { + connection.query(sqllist, [resultkslist[i].uuid], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + resultlist=[...resultlist,...resultone]; + } + console.log(resultlist) + const askks=[...resultlist]; + for(let i=0;i { + connection.query(sqltm, [resultlist[i].ksh], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + askks[i].tm=JSON.parse(resultm[0].paper)[resultlist[i].th] + askks[i].daan=JSON.parse(resultm[0].std)[resultlist[i].th] + askks[i].showdaan=false; + + } + res.send(askks); +}) +app.post("/api/updateksask",async (req, res) => { + const sql = 'UPDATE askforks SET filelist=?,neirong=? WHERE id=?'; + console.log(req.body.seconds); + connection.query(sql, [req.body.filelist,req.body.neirong,req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.get("/api/selectaskforks",async (req, res) => { + const sqllist="SELECT * FROM askforks WHERE xuehao = ? ;" + const resultlist=await new Promise((resolve, reject) => { + connection.query(sqllist, [req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + let temp=[...resultlist] + for(let i=0;i { + connection.query(sqltm, [temp[i].ksh], (error, results, fields) => { + if (error) reject(error); + + resolve(results); + }); + + }) + temp[i].tm=JSON.parse(resulttimu[0].paper)[temp[i].th]; + } + res.send(temp); +}) +app.get("/kaoshi/selectlist",async (req, res) => { + const sqllist="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(stu,?, '$');" + const resultlist=await new Promise((resolve, reject) => { + connection.query(sqllist, ["[\""+req.query.xuehao+"\"]"], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + let temp=[...resultlist] + let allprint=-1; + let stuprint=-1; + for(let i=0;i0){ + const sqlend = "SELECT * FROM kaoshiend WHERE ks=? AND xuehao=?" + const resultend=await new Promise((resolve, reject) => { + connection.query(sqlend, [resultlist[i].uuid,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + const stddaan=JSON.parse(resultlist[i].std) + + let jue=[] + if(resultend[0]) { + jue=JSON.parse(resultend[0].ksdaan); + } + let needteacher=false;//是否需要老师阅卷 + let finishteacher=true//老师是否完成阅卷 + + for(let i=0;i { + connection.query(sqlend, [resultlist[i].uuid,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + if(resultend.length>0){ + zt="已提交" + }else{ + const sqling = "SELECT * FROM kaoshing WHERE ks=? AND xuehao=?" + const resulting=await new Promise((resolve, reject) => { + connection.query(sqlend, [resultlist[i].uuid,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + if(resulting.length>0){ + zt="已开始作答" + }else{ + zt="未开始作答" + } + } + + } + console.log(zt) + if(allprint!==-1){ + temp[i].alllprint=allprint; + temp[i].printstu=stuprint; + }else{ + temp[i].alllprint="_"; + temp[i].printstu="_"; + } + temp[i].zt=zt; + } + res.send(temp); +}) +app.get('/api/selectcommit', (req, res) => { + const sql='SELECT * FROM commit WHERE xuhao=?'; + connection.query(sql,[req.query.xuhao],function (err, result) { + if(err){throw err} + const temp=[...result]; + for(let i=0;i { + const sql = 'INSERT INTO sp(uuid,starttime,xuehao,spxh) VALUES(?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.starttime,req.body.xuehao,req.body.spxh], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/xgymk', (req, res) => { + const sql = 'UPDATE sp SET seconds=?,endtime=? WHERE uuid=?'; + console.log(req.body.seconds); + connection.query(sql, [req.body.seconds,req.body.endtime,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/changemobansj', (req, res) => { + const sql = 'UPDATE shijiamoban SET mobanjson=?,mobanmc=? WHERE id=?'; + connection.query(sql, [req.body.moban,req.body.mobanmc,req.body.id1], (error, results, fields) => { + if (error) throw error; + res.send({status:"ok"}) + // 处理查询结果 + console.log(results); + }); +}) + +app.post('/api/fdycl', (req, res) => { + const sql = 'UPDATE jiatiao SET tj=?,huifunr=? WHERE uuid=?'; + connection.query(sql, [req.body.hf,req.body.tj,req.body.id1], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post('/api/tijiaoshijia', (req, res) => { + // let xuehao=req + console.log(req.body); + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,leixing) VALUES(?,?,?,?,?,"shijia")'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + if(req.body.azq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "z", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "z", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"z", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"A" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["A",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.ayq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).date(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).date(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "y", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "y", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"y", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"Y" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["Y",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.anq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startmonth=moment(jsonsql.startdate).month(); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const endmonth=moment(jsonsql.enddate).month(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "n", + "day":startdays.toString(), + "month":startmonth.toString(), + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "n", + "day":enddays.toString(), + "hour": enddays.toString(), + "month":endmonth.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"n", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"C" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["C",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if(results.length===0){ + const dizhi= { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc":"dzA", + "mdd":"目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao,"dzA",JSON.stringify(dizhi),req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + // 处理查询结果 + console.log(results); + }); + +}) +//修改 +app.post('/api/kecb',(req,res)=>{ + const start=req.body.start; + const end=req.body.end; + const xuehao=req.body.xuehao; + console.log(1367); + const startxueiq=moment("2024-09-02T00:00:27+08:00"); + const daystart=moment(start).diff(startxueiq,"days"); + const dayend=moment(end).diff(startxueiq,"days"); + console.log(daystart); + const minutestart=moment(start).minutes()+moment(start).hours()*60; + const minutesend=moment(end).minutes()+moment(end).hours()*60; + let kestart=0; + if(minutestart<500){ + kestart=1; + }else if(minutestart<620){ + kestart=2; + }else if(minutestart<840){ + kestart=3; + }else if(minutestart<960){ + kestart=4; + }else { + kestart=5; + } + let keend=0; + if(minutesend>1060){ + keend=4; + }else if(minutesend<940){ + keend=3; + }else if(minutesend<720){ + keend=2; + }else if(minutesend<600){ + keend=1; + }else { + keend=0; + } + const kaishi=daystart*4+kestart; + const jieshu=dayend*4+keend; + const sql = 'SELECT xunhuan(?,?,?)'; + + + connection.query(sql, [kaishi,jieshu,xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + console.log(dayend); + +}) +app.post('/api/changeshijia', (req, res) => { + // let xuehao=req + console.log(req.body); + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, [req.body.jtnr,req.body.tj,"shijia",req.body.uuid], (error, results, fields) => { + if (error) throw error; + res.send({status:"ok"}) + // 处理查询结果 + console.log(results); + }); + if(req.body.azq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "z", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "z", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"z", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"A" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["A",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.ayq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startdays=moment(jsonsql.startdate).date(); + const starthours=moment(jsonsql.startdate).hours(); + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const enddays=moment(jsonsql.enddate).date(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "y", + "day":startdays.toString(), + + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "y", + "day":enddays.toString(), + "hour": enddays.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"y", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"Y" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["Y",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + if(req.body.anq==='true'){ + + jsonsql=JSON.parse(req.body.jtnr); + const startmonth=moment(jsonsql.startdate).month(); + const startdays=moment(jsonsql.startdate).days(); + const starthours=moment(jsonsql.startdate).hours(); + + const startminutes=moment(jsonsql.startdate).minutes(); + const startseconds=moment(jsonsql.startdate).seconds(); + const endmonth=moment(jsonsql.enddate).month(); + const enddays=moment(jsonsql.enddate).days(); + const endhours=moment(jsonsql.enddate).hours(); + const endminutes=moment(jsonsql.enddate).minutes(); + const endseconds=moment(jsonsql.enddate).seconds(); + const startj={ + "qf": "n", + "day":startdays.toString(), + "month":startmonth.toString(), + "hour": starthours.toString(), + "minute": startminutes.toString(), + }; + const endj={ + "qf": "n", + "day":enddays.toString(), + "hour": enddays.toString(), + "month":endmonth.toString(), + "minute": enddays.toString(), + } + const mobanjson={ + "start":startj, + "end":endj, + "sfhxzs":jsonsql.sfhxzs, + "cxfs":jsonsql.cxfs, + "xxdz":jsonsql.xxdz, + "sflx":jsonsql.sflx, + "xxyy":jsonsql.xxyy, + "qf":"n", + "cx":moment(jsonsql.enddate).diff(moment(jsonsql.startdate),'days').toString(), + "daynum":moment(jsonsql.enddate).diff(moment(jsonsql.startdate)).toString(), + "mbmc":"C" + } + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql, ["C",JSON.stringify(mobanjson),req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + console.log(startdays); + } + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if(results.length===0){ + const dizhi= { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc":"dzA", + "mdd":"目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao,"dzA",JSON.stringify(dizhi),req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + // 处理查询结果 + console.log(results); + }); + +}) +app.post("/api/tijiaobing", function (req, res) { + try{ + const filenames = fs.readdirSync(__dirname+'/uploads/'+req.body.uuid); + + + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,zzcl,zzclbase64,leixing) VALUES(?,?,?,?,?,?,?,"binjia")'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + const wjgroup=[]; + filenames.forEach(filename=>{ + const data = fs.readFileSync(__dirname+'/uploads/'+req.body.uuid+'/'+filename); + data.toString('base64'); + const wj={ + wj:filename, + base64:data.toString('base64'), + } + wjgroup.push(wj); + }) + + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj,JSON.stringify(filenames),JSON.stringify(wjgroup)], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + + + }); + + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + // 处理查 + const sql2 = 'SELECT * FROM dizhimobanbing WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql2, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimobanbing(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + console.log(req.body) + } catch (err) { + console.error(err); + } + + +}) +function executeCommandWithTimeout(command, timeout) { + // 创建一个promise + return new Promise((resolve, reject) => { + // 设置定时器来超时终止命令 + const timer = setTimeout(() => { + reject(new Error('Command execution timed out.')); + if (childProcess) { + childProcess.kill(); // 终止命令执行 + } + }, timeout); + + // 执行命令 + const startTime = process.hrtime(); + const childProcess = exec(command, (error, stdout, stderr) => { + // 清除定时器 + clearTimeout(timer); + + if (error) { + reject(error); + return; + } + + resolve({ stdout, stderr }); + }); + const endTime = process.hrtime(startTime); + +// 计算总的纳秒数 + const timeInNanoSeconds = endTime[0] * 1e9 + endTime[1]; + +// 转换为秒 + const timeInSeconds = timeInNanoSeconds / 1e9; + + console.log(`程序运行时间: ${timeInSeconds} 秒`); + }); +} +app.post("/api/ptatj", function (req, res) { + fs.writeFile(req.body.uuid+'.c', req.body.code, (err) => { + if (err) throw err; + exec(`gcc ${req.body.uuid}.c -o${req.body.uuid}.exe`, (error, stdout, stderr) => { + if (error) { + console.error(`执行的错误: ${error}`); + return; + } + + const startTime = process.hrtime(); + executeCommandWithTimeout(`${req.body.uuid}.exe re1.out`, 5000) + .then(({ stdout, stderr }) => { + console.log(stdout); + console.error(stderr); + }) + .catch(error => { + console.error(error.message); + }); + const endTime = process.hrtime(startTime); + +// 计算总的纳秒数 + const timeInNanoSeconds = endTime[0] * 1e9 + endTime[1]; + +// 转换为秒 + const timeInSeconds = timeInNanoSeconds / 1e9; + + console.log(`程序运行时间: ${timeInSeconds} 秒`); + // exec(`${req.body.uuid}.exe re.out`) + console.log(`stdout: ${stdout}`); + if (stderr) { + console.log(`stderr: ${stderr}`); + } + }); + console.log('数据已成功写入文件'); + }); +}) +app.post("/api/changebing", function (req, res) { + try{ + const filenames = fs.readdirSync(__dirname+'/uploads/'+req.body.uuid); + + + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=?,zzcl=?,zzclbase64=? WHERE uuid=?'; + let jsonsql={}; +// 执行预编译的SQL语句,并传入参数 + const wjgroup=[]; + filenames.forEach(filename=>{ + const data = fs.readFileSync(__dirname+'/uploads/'+req.body.uuid+'/'+filename); + data.toString('base64'); + const wj={ + wj:filename, + base64:data.toString('base64'), + } + wjgroup.push(wj); + }) + + connection.query(sql, [req.body.jtnr,req.body.tj,req.body.leixing,JSON.stringify(filenames),JSON.stringify(wjgroup),req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + + }); + + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + // 处理查 + const sql2 = 'SELECT * FROM dizhimobanbing WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql2, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimobanbing(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + console.log(req.body) + } catch (err) { + console.error(err); + } + + +}) +app.post("/api/includemobansj", function (req, res) { + const sql = 'INSERT INTO shijiamoban(mobanmc,mobanjson,xuehao) VALUES(?,?,?)'; + +console.log(req.body.moban); + connection.query(sql, [req.body.mobanmc,req.body.moban,req.body.xuehao], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + + + }); +}) +app.get("/api/denglu", function (req, res) { + const sql="SELECT * FROM student WHERE xuehao=\'"+req.query.xuehao+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + console.log(results); + if(results.length === 0) { + res.send({mes:'wuzhanghao'})//无账号 + }else if(results[0].passage===req.query.mima){ + res.send({mes:'ok'}) + }else { + res.send({mes:'mimachuowu'})//密码错误 + } + }) +}) +app.get("/api/splist", function (req, res) { + const sql="SELECT * FROM splist WHERE id=\'"+req.query.id1+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + res.send(results[0].list); + //if(error)console.log(error); + console.log(results[0].list); + + }) +}) +app.get("/api/tmlist", function (req, res) { + const sql="SELECT * FROM timuji WHERE id=\'"+req.query.id+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(results.length >0) { + res.send(results[0].timu); + console.log(results[0].timu); + //if(error)console.log(error); + console.log(results[0].timu); + }else{ + res.send("题目错误") + } + }) +}) + +app.get("/api/createtime", async function (req, res) { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); +if(result.length !== 0) { + const t0 = JSON.parse(result[0].timu).all.t0; + const limittime = JSON.parse(result[0].timu).all.seconds; + const sql1 = "SELECT * FROM pta WHERE th=\'" + t0 + "\' AND xuehao = \'" + req.query.xuehao + "\'"; + console.log(sql1) + const resultt0 = await new Promise((resolve, reject) => { + connection.query(sql1, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + if (resultt0.length !== 0) { + res.send({timestart: JSON.parse(resultt0[0].daan), limittime: limittime}); + } else { + const timestart = moment().format('YYYY-MM-DD HH:mm:ss'); + const inset = "INSERT INTO pta (xuehao,daan,th,class,tmjth) VALUES (?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [req.query.xuehao, JSON.stringify({time: timestart}), t0, req.query.class, 0], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + res.send({timestart: timestart, limittime: limittime}); + } +}else{ + res.send({timestart: "无", limittime: "无"}); +} +}) +app.get("/api/createsql", async function (req, res) { + try { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const limittime = JSON.parse(result[0].timu).all.seconds; + const t0 = JSON.parse(result[0].timu).all.t0; + JSON.parse(result[0].timu).danxueti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + JSON.parse(result[0].timu).duoxueti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + JSON.parse(result[0].timu).panduanti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + JSON.parse(result[0].timu).tiankongti.map(async (valuepta, index) => { + const inset = "INSERT INTO pta (uuid,xuehao,daan,th,class,tmjth,timuji) VALUES (?,?,?,?,?,?,?);" + await new Promise((resolve, reject) => { + connection.query(inset, [uuidv4.v4(),req.query.xuehao, "未作答", valuepta, req.query.class, 0,req.query.timuji], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + }) + res.send("ok") + }catch (e) { + console.log(e); + } + +}) +app.get("/api/checktime", async function (req, res) { + const sql = "SELECT * FROM timuji WHERE id=\'" + req.query.id + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + if(result.length > 0) { + const starttime = moment(result[0].start); + const endtime = moment(result[0].end); + const t0 = JSON.parse(result[0].timu).all.t0; + const limittime = JSON.parse(result[0].timu).all.seconds; + const sql1 = "SELECT * FROM pta WHERE th=\'" + t0 + "\' AND xuehao = \'" + req.query.xuehao + "\'"; + console.log(sql1) + const resultt0 = await new Promise((resolve, reject) => { + connection.query(sql1, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + console.log(resultt0) + if (moment().diff(starttime, 'seconds') < 0) { + res.send({ + timestart: JSON.parse(resultt0[0].daan), + limittime: limittime, + zt: "beforestart", + starttime: starttime, + endtime: endtime + }); + + } else if (moment().diff(endtime, 'seconds') > 0) { + res.send({ + timestart: JSON.parse(resultt0[0].daan), + limittime: limittime, + zt: "finish", + starttime: starttime, + endtime: endtime + }); + } else { + + if (resultt0.length !== 0) { + res.send({ + timestart: JSON.parse(resultt0[0].daan), + limittime: limittime, + zt: "start", + starttime: starttime, + endtime: endtime + }); + } else { + res.send({zt: "nostart", starttime: starttime, endtime: endtime, limittime: limittime}); + } + } + }else{ + res.send({zt: "errornopiece"}); + } +}) +app.get("/api/jiaotiaoteachercx", function (req, res) { + const sql="SELECT * FROM kechengbiao WHERE teacher=\'"+req.query.teacher+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + // console.log(results); + res.send(JSON.stringify(results)); + }) +}) +app.get("/api/kechengcx1", function (req, res) { + const sql="SELECT * FROM kechengbiao WHERE classid=\'"+req.query.xuehao+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + // console.log(results); + res.send(JSON.stringify(results[0])); + }) +}) + +app.get("/api/dengluteacher", function (req, res) { + const sql="SELECT * FROM teacher WHERE xuegonghao=\'"+req.query.teacher+"\'"; + console.log(sql) + connection.query(sql,(error, results, fields) => { + if(error)throw error; + console.log(results); + if(results.length === 0) { + res.send({mes:'wuzhanghao'})//无账号 + }else if(results[0].passage===req.query.mima){ + if(results[0].quexian===1) { + res.send({mes: 'ok',zw:'任课老师'}) + }else if(results[0].quexian===2){ + res.send({mes:'ok',zw:'辅导员'}) + } + }else { + + + res.send({mes:'mimachuowu'})//密码错误 + } + }) +}) +app.post("/api/tijiaoshixi", function (req, res) { + try{ + + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,leixing) VALUES(?,?,?,?,?,"shixi")'; + + + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) +app.post("/api/xiugaimima",function (req, res) { + const sql='UPDATE student SET passage=? WHERE xuehao=?'; + console.log(sql); + connection.query(sql,[req.body.pass,req.body.xuehao],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/xiugaimimatea",function (req, res) { + const sql='UPDATE student SET passage=? WHERE xuegonghao=?'; + console.log(sql); + connection.query(sql,[req.body.pass,req.body.xuehao],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/xiugaizt1",function (req, res) { + const sql='UPDATE jiatiao SET tj=? WHERE uuid=?'; + console.log(sql); + connection.query(sql,[req.body.zx,req.body.uuid],(error, results, fields) => { + if (error) throw error; + }) + res.send({mes:'修改成功'}) +}) +app.post("/api/deletemoban1",function (req, res) { + const sql='DELETE FROM shijiamoban WHERE id=?'; + console.log(sql); + connection.query(sql,[req.body.uuid],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/deletezt1",function (req, res) { + const sql='DELETE FROM jiatiao WHERE uuid=?'; + console.log(sql); + connection.query(sql,[req.body.uuid],(error, results, fields) => { + if (error) throw error; + }) +}) +app.post("/api/changeshixi", function (req, res) { + try{ + + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + + + connection.query(sql, [req.body.jtnr,req.body.tj,"shixi",req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), req.body.xuexxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) + +app.post("/api/tijiaojqlh", function (req, res) { + try{ + + const sql = 'INSERT INTO jiatiao(uuid,jtnr,xuehao,fdy,tj,leixing) VALUES(?,?,?,?,?,"jqlh")'; + + + connection.query(sql, [req.body.uuid,req.body.jtnr,req.body.xuehao,req.body.fdy,req.body.tj], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'INSERT INTO dizhimoban(xuehao,mobanmc,dizhijson,xxdz) VALUES(?,?,?,?)'; + connection.query(sql, [req.body.xuehao, "dzA", JSON.stringify(dizhi), jsonsql.xxdz], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) +app.post("/api/changejqlh", function (req, res) { + try{ + + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + + + connection.query(sql, [req.body.jtnr,req.body.tj,"jqlh",req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + res.send({status:"ok"}) + + }); + const jsonsql=JSON.parse(req.body.jtnr); + const sql1 = 'SELECT * FROM dizhimoban WHERE xxdz = \''+jsonsql.xxdz+'\';'; + +// 执行预编译的SQL语句,并传入参数 + connection.query(sql1, (error, results, fields) => { + if (error) throw error; + if (results.length === 0) { + const dizhi = { + "sfhxzs": jsonsql.sfhxzs, + "cxfs": jsonsql.cxfs, + "xxdz": jsonsql.xxdz, + "sflx": jsonsql.sflx, + "mbmc": "dzA", + "mdd": "目的地" + } + const sql = 'UPDATE jiatiao SET jtnr=?,tj=?,leixing=? WHERE uuid=?'; + + + connection.query(sql, [req.body.jtnr,req.body.tj,"jqlh",req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + }) + } catch (err) { + console.error(err); + } + console.log(req.body) + + + +}) +app.get("/api/chaxunptacode",function (req, res) { + const sql = "SELECT * FROM pta WHERE th=\'" +req.query.th + "\' and xuehao= \'"+ req.query.xuehao +"\' ORDER BY paixu DESC"; + console.log(sql) + + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + res.send(results[0]); + }); + +}) +app.get("/api/timujistu",async function (req, res) { + const sql = "SELECT * FROM student WHERE xuehao=\'" + req.query.xuehao + "\'"; + console.log(sql) + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const timuji=JSON.parse(result[0].timuji); + console.log(timuji) + const timu1=[] + timuji.map(async (value, index) => { + const sql = "SELECT * FROM timuji WHERE id=\'" + value + "\'"; + console.log(sql) + const resulttimuji = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }); + const t=JSON.parse(resulttimuji[0].timu); + let tsum=0; + // "pta": [1], "danxueti": [2], "duoxueti": [4], "panduanti": [5], "tiankongti": [3]} + //tsum=t. + if(t.pta!==undefined){ + tsum=tsum+t.pta.length + } + if(t.danxueti!==undefined){ + tsum=tsum+t.danxueti.length + } + if(t.duoxueti!==undefined){ + tsum=tsum+t.duoxueti.length + } + if(t.panduanti!==undefined){ + tsum=tsum+t.panduanti.length + } + if(t.tiankongti!==undefined){ + tsum=tsum+t.tiankongti.length + } + const teacher=JSON.parse(resulttimuji[0].all).teacher; + const school=JSON.parse(resulttimuji[0].all).danwei; + const class1=JSON.parse(resulttimuji[0].all).class; + const timujiall={sum:tsum,ti:t,teacher:teacher,danwei:school,class:class1,starttime:resulttimuji[0].start,endtime:resulttimuji[0].end}; + // console.log(timujiall) + timu1.push(JSON.stringify(timujiall)); + }) + console.log(timu1) + res.send(timu1); +}) +app.get("/api/timujistunew", async function (req, res) { + try { + const xuehao = req.query.xuehao; + if (!xuehao) { + return res.status(400).send('xuehao is required'); + } + + const studentResult = await queryDatabase(`SELECT * FROM student WHERE xuehao=?`, [xuehao]); + if (studentResult.length === 0) { + return res.status(404).send('Student not found'); + } + + const timuji = JSON.parse(studentResult[0].timuji); + if(timuji) { + const timuPromises = timuji.map(async (value) => { + const timujiResult = await queryDatabase(`SELECT * FROM timuji WHERE id=?`, [value]); + if (timujiResult.length === 0) { + return null; + } + + const t = JSON.parse(timujiResult[0].timu); + const all = JSON.parse(timujiResult[0].all); + const tstart = timujiResult[0].start; + const tend = timujiResult[0].end; + const tname = timujiResult[0].name; + const tsum = (t.pta || []).length + (t.danxueti || []).length + (t.duoxueti || []).length + + (t.panduanti || []).length + (t.tiankongti || []).length; + + return { + id: timujiResult[0].id, + sum: tsum, + ti: t, + teacher: all.teacher, + danwei: all.danwei, + class: all.class, + kemu: all.kemu, + starttime: timujiResult[0].start, + endtime: timujiResult[0].end, + name: tname, + }; + }); + const timu1 =await Promise.all(timuPromises); + res.send(timu1); + }else{ + res.send([]) + } + + + } catch (error) { + console.error(error); + res.status(500).send('Internal Server Error'); + } +}); + +async function queryDatabase(sql, params) { + return new Promise((resolve, reject) => { + connection.query(sql, params, (error, results, fields) => { + if (error) { + reject(error); + } else { + resolve(results); + } + }); + }); +} +//上传与处理题目 +const storagetm = multer.diskStorage({ + destination: function (req, file, cb) { + fs.mkdir('nginx/html/'+req.headers.th, { recursive: true }, (err) => { + if (err) { + console.error(err); + return; + } + console.log('文件夹已存在或成功创建!'); + }); + cb(null, 'nginx/html/'+req.headers.th+'/') // 确保这个文件夹已经存在 + }, + filename: function (req, file, cb) { + const th=req.headers.xx;//选项 + console.log(th); + cb(null, th+extname(file.originalname)) + if(req.headers.lx==="xx"){ + + var contentText = fs.readFileSync('nginx/html/'+req.headers.th+'/tm.json','utf-8'); + var content = JSON.parse(contentText); + content.xuexiang.push('/'+th+extname(file.originalname)) + fs.writeFileSync('nginx/html/'+req.headers.th+'/tm.json',JSON.stringify(content)); + }else if(req.headers.lx==="tm"){ + var contentText1 = fs.readFileSync('nginx/html/'+req.headers.th+'/tm.json','utf-8'); + var content1 = JSON.parse(contentText1); + console.log(); + content1.tm='/'+th+extname(file.originalname); + fs.writeFileSync('nginx/html/'+req.headers.th+'/tm.json',JSON.stringify(content1)); + } + + } +}) +const uploadtm = multer({ storage: storagetm }); +app.post('/api/uploadtm', uploadtm.single('file'), (req, res) => { + const file = req.file; + console.log(file); + if (!file) { + return res.status(400).send('No file uploaded.tm'); + } + res.send('File uploaded successfully.'); +}); +app.post('/apitea/deletexuexiang',function(req,res){ + var contentText1 = fs.readFileSync('nginx/html/'+req.body.th+'/tm.json','utf-8'); + var content1 = JSON.parse(contentText1); + console.log(req.body.xx) + var file = content1.xuexiang[req.body.xx]; + console.log(file); + fs.unlinkSync('nginx/html/'+req.body.th+file) + content1.xuexiang.splice(req.body.xx,1); + fs.writeFileSync('nginx/html/'+req.body.th+'/tm.json',JSON.stringify(content1)); +}) +app.post('/apitea/uplatetm',function(req,res){ + + console.log(req.body) + if(req.body.leixing==="编程题") { + + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + + // res.send({mes:"yes"}); + }else if(req.body.leixing==="单选题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + }else if(req.body.leixing==="多选题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + }else if(req.body.leixing==="填空题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + }else if(req.body.leixing==="判断题"){ + const jsontest=fs.readFileSync('nginx/html/'+req.body.id+'/tm.json') + JSONpa=JSON.parse(jsontest); + let infor=req.body.infor; + infor.tm=JSONpa.tm; + //infor.xuexiang=JSONpa.xuexiang; + const sql = 'UPDATE prepletimu SET information=? WHERE id=?'; + connection.query(sql, [JSON.stringify(req.body.infor), req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + + // res.send({mes:"no"}); +}) +app.get('/apitea/gettm',function(req,res){ + const sqlzxdtlist = "SELECT * FROM prepletimu WHERE id=" + req.query.id;//查询课程信息 + + connection.query(sqlzxdtlist, (error, results, fields) => { + if (error) throw error; + console.log(results); + res.send(results[0]); + }); + +}) +app.get('/apitea/gettmj',async function(req,res){ + const sql = "SELECT * FROM perparetmj WHERE id=\'" + req.query.th + "\'"; + console.log(sql) + try { + const result = await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqltm = "SELECT * FROM prepletimu WHERE tmj=\'" + req.query.th + "\'"; + console.log(sqltm) + const tmj = JSON.parse(result.timu); + let tmlist = []; + for (let i = 0; i < tmj.length; i++) { + const sqltm = "SELECT * FROM prepletimu WHERE id=\'" + tmj[i] + "\'"; + const resulttm = await new Promise((resolve, reject) => { + connection.query(sqltm, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tmlist.push(resulttm); + + } + + + result.tm = tmlist + res.send(result) + }catch (e) { + console.log(e) + } +}) +app.post('/apitea/updatename',function(req,res){ + const sql = 'UPDATE prepletimu SET tname=? WHERE id=?'; + connection.query(sql, [req.body.tname, req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.get('/apitea/getclass',function(req,res){ + const sql = "SELECT * FROM kechengbiao WHERE teacher=\'" + req.query.tea + "\'"; + console.log(sql) + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + res.send(results) + }); + +}) +app.post('/apitea/updattmj',function(req,res){ + const sql = 'UPDATE perparetmj SET tname=?,information=?,`limit`=?,starttime=?,endtimw=? WHERE id=?'; + connection.query(sql, [req.body.tname,JSON.stringify(req.body.information),req.body.limit,req.body.start,req.body.end,req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.get('/apitea/gettmjlist',function(req,res){ + const sql = "SELECT * FROM perparetmj WHERE tea=\'" + req.query.tea + "\'"; + console.log(sql) + connection.query(sql, (error, results, fields) => { + if (error) throw error; + res.send(results) + }); + +}) +app.post('/apitea/newtimu',async function(req,res){ + let tid=0; + if(req.body.tlx==="编程题"){ + const infor={"tmname":" ", + "srgs":[""], + "scgs":[" "], + "sryl":"", + "scyl":" ", + "stdcode":" ", + "testprint":[] + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["编程题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="单选题"){ + const infor={ + xuexiang:[], + daan:" ", + tm:"/tm.png" + + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["单选题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="多选题"){ + const infor={ + xuexiang:[], + daan:[], + tm:"/tm.png" + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["多选题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="填空题"){ + const infor={ + tm:"/tm.png", + daan:[ ], + + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["填空题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + }else if(req.body.tlx==="判断题"){ + const infor={ + + daan:" ", + tm:"/tm.png" + } + const sql="INSERT INTO prepletimu (leixing,information,teacher,tmj,tname) VALUES (?,?,?,?,?)" + const result = await new Promise((resolve, reject) => { + connection.query(sql,["判断题",JSON.stringify(infor),req.body.tea,req.body.tmj," "], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const sqlid="SELECT * FROM prepletimu WHERE id = LAST_INSERT_ID();" + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + tid=resultid.id + } + const sqlid=`SELECT * FROM perparetmj WHERE id = ${req.body.tmj}` + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let timu=JSON.parse(resultid.timu); + timu.push(tid) + const sqlupdate = 'UPDATE perparetmj SET timu=? WHERE id=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(timu),req.body.tmj], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + fs.mkdirSync("nginx/html/"+tid.toString()); + const tm={ + tm:"/tm.png", + xuexiang:[] + } + fs.copyFileSync("nginx/html/tmbefore.png","nginx/html/"+tid.toString()+"/tm.png") + fs.writeFileSync("nginx/html/"+tid.toString()+"/tm.json",JSON.stringify(tm)); + const sqladd=`SELECT * FROM prepletimu WHERE id = ${tid}` + const resultadd = await new Promise((resolve, reject) => { + connection.query(sqladd, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + res.send(resultadd); + +}) +app.post("/apitea/fabu",async function(req,res){ + const sqlid=`SELECT * FROM perparetmj WHERE id = ${req.body.tmj}` + const resultid = await new Promise((resolve, reject) => { + connection.query(sqlid, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let pta=[];//编程题 + let danxueti=[];//单选题 + let duoxueti= [];//多选题 + let panduanti=[];//判断题 + let tiankongti= [];//填空题 + let allprint=0; + + const timu=JSON.parse(resultid.timu)//查询题目 + for(let i=0;i { + connection.query(sqltm, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + if(resulttm.leixing==="编程题"){ + pta.push(timu[i]) + // { + // "tmname": "在未来的智慧城市中,有一家名为“智停无忧”的智能停车场,它采用先进的技术来管理车辆进出,并根据停车时长自动计算费用。请你编写一个C语言程序,实现停车场收费计算,需要处理以下几种情况:如果停车时间为1小时以内(含1小时),免费; 如果停车时间1小时以上,8小时以内(含8小时),则按照每小时5元的价格收费; 如果停车时间为8小时以上,前8小时按照每小时5元的价格收费,超过8小时后,每增加1小时,按照每小时10元的价格收费。停车费用封顶为300元。", + // "srgs": "输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。", + //"scgs": "输出包括多行,每行对应输入的一行,为翻转后的字符串。输出时去掉多余的空格。只在每个单词之前以1个空格间隔。输出的每行末尾没有空格。", + // "sryl": ["9","10"], + //"scyl": ["您停车9小时,需要支付50元","您停车9小时,需要支付50元test"] + // } + // {"tmname":"QWERTYUIO","srgs":["2","3","4","","","","","","","","","","",""],"scgs":["4","5","6","","","","","","","","","","",""],"sryl":"2\n4\n55555555555\n3\n4","scyl":"2\n3\n4","stdcode":"#include\nint main()","testprint":[{"tname":" 123","stdout":" 4567","stdin":" 1243","print":"5"}]} + const ptatm={ + tmname:JSON.parse(resulttm.information).tmname, + sryl:JSON.parse(resulttm.information).srgs, + scyl:JSON.parse(resulttm.information).scgs, + srgs:JSON.parse(resulttm.information).sryl, + scgs:JSON.parse(resulttm.information).scyl, + } + let fen=0; + const tname=resulttm.tname; + const leixing=1;//编程题 + const stdcode=JSON.parse(resulttm.information).stdcode; + const csd=JSON.parse(resulttm.information).testprint; + let tm=[]; + const uuid=uuidv4.v4(); + fs.mkdirSync(`tmtemp/${uuid}/`) + for(let j=0;j { + connection.query(sqladd,[leixing,pj,JSON.stringify(ptatm),timu[i],stdcode,fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + }else if(resulttm.leixing==="单选题"){ + danxueti.push(timu[i]); + let xuexiang=[] + JSON.parse(resulttm.information).xuexiang.map((value,index)=>{ + xuexiang.push(`/${timu[i]}/${value}`) + }) + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + xuexiang:xuexiang, + tm:tm, + daan:daan, + } + const leixing=2; + const fen=5; + allprint+=fen; + const tname=resulttm.tname; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + }else if(resulttm.leixing==="多选题"){ + let xuexiang=[] + duoxueti.push(timu[i]); + JSON.parse(resulttm.information).xuexiang.map((value,index)=>{ + xuexiang.push(`/${timu[i]}/${value}`) + }) + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + xuexiang:xuexiang, + tm:tm, + daan:daan, + } + const leixing=4;//多选题 + const fen=5; + const tname=resulttm.tname; + allprint+=fen; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + }else if(resulttm.leixing==="填空题"){ + tiankongti.push(timu[i]); + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + tk:{A0:" "}, + tm:tm, + daan:daan, + } + const leixing=3;//填空题 + const fen=daan.length; + allprint+=fen; + const tname=resulttm.tname; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + }else if(resulttm.leixing==="判断题"){ + panduanti.push(timu[i]); + const tm=`/${timu[i]}${JSON.parse(resulttm.information).tm}`; + const daan=JSON.parse(resulttm.information).daan; + const information={ + + tm:tm, + daan:daan, + } + const leixing=5;//判断题 + const fen=5; + allprint+=fen; + const tname=resulttm.tname; + const sqladd = 'INSERT INTO tm(leixing,tm,id,fen,tanme) VALUES(?,?,?,?,?)'; + await new Promise((resolve, reject) => { + connection.query(sqladd,[leixing,JSON.stringify(information),timu[i],fen,tname], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + + } + + } + const seconds=resultid.limit; + let limit; + if(resultid.limit<0){ + limit="time" + }else{ + limit="none" + } + const t0=1000+parseInt(req.body.tmj) + const timusql={ + all: {t0: t0, + limit: limit, + seconds: seconds, + allprint: allprint}, + pta: pta, + allti: timu, + danxueti: danxueti, + duoxueti: duoxueti, + panduanti: panduanti, + tiankongti: tiankongti + } + const name=resultid.tname; + const start=moment(resultid.starttime).format('YYYY-MM-DD HH:MM:SS'); + const end=moment(resultid.endtime).format('YYYY-MM-DD HH:MM:SS'); + const sqltea=`SELECT * FROM teacher WHERE id = ${resultid.tea}` + const resulttea = await new Promise((resolve, reject) => { + connection.query(sqltea, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const teachername=resulttea.name; + const banji=JSON.parse(resultid.information).class; + for(let k=0;k { + connection.query(sqlclass, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + const stu=JSON.parse(resultclass.student); + const kemu=resultclass.classname; + const class1=resultclass.classname; + const allinfor={ + stu: stu, + kemu:kemu, + class: class1, + "danwei": "内蒙古工业大学", + "teacher": teachername + }; + const sqladd = 'INSERT INTO timuji(name,id,timu,all,start,end) VALUES(?,?,?,?,?,?)'; + timusql.all.t0=timusql.all.t0+banji[k]; + await new Promise((resolve, reject) => { + connection.query(sqladd,[resultid.tname,resultid.id*10+k,timusql,allinfor,start,end], (error, results, fields) => { + if (error) reject(error); + resolve(0); + }); + }); + //添加题目集号到课程表 + const sqlread=`SELECT * FROM kechengbiao WHERE teacherid = ${banji[k]}` + const resultread = await new Promise((resolve, reject) => { + connection.query(sqlread, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let timu=JSON.parse(resultread.timu); + timu.push(resultid.id*10+k); + const sqlwrite=`UPDATE kechengbiao SET timu=? WHERE teacherid = ${banji[k]}` + await new Promise((resolve, reject) => { + connection.query(sqlwrite,[JSON.stringify(timu)], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + for(let j=0;j { + connection.query(sqlreadstu, (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + let timustu=JSON.parse(resultreadstu.timuji); + timustu.push(resultid.id*10+k); + const sqlwritestu=`UPDATE student SET timuji=? WHERE xuehao = ${stu[j]}` + await new Promise((resolve, reject) => { + connection.query(sqlwritestu,[JSON.stringify(timustu)], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }); + } + //添加题目集给同学 + } + res.send({AB:123}) + +}) +app.post("/api/askfortea",function(req,res){ + const sql = 'INSERT INTO askfortea(`uuid`,tmj,th,filelist,neirong,xuehao,`return`,returnlist) VALUES(?,?,?,?,?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.tmj,req.body.th,JSON.stringify(req.body.filelist),req.body.neirong,req.body.xuehao,"no","no"], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) + +const removeDuplicatesByUUID = (items) => { + const seenUUIDs = {}; + const filteredItems = []; + + for (const item of items) { + if (!seenUUIDs[item.uuid]) { + filteredItems.push(item); + seenUUIDs[item.uuid] = true; + } + } + + return filteredItems; +}; +app.get("/api/askfortea",function(req,res){ + const sql="SELECT `uuid`,askfortea.tmj,askfortea.th,filelist,neirong,xuehao,`return`,returnlist,tm.tanme AS tname,timuji.name AS tmjname FROM askfortea INNER JOIN tm ON tm.id = askfortea.th INNER JOIN timuji ON timuji.id = askfortea.tmj\n" + + "WHERE xuehao=\""+req.query.xuehao+"\""; + connection.query(sql, (error, results, fields) => { + if (error) throw error; + const uniqueArray = removeDuplicatesByUUID(results) + // 处理查询结果 + res.send(uniqueArray); + }); +}) +app.get('/api/getkc', (req, res) => { + + var sql = "SELECT * FROM kcxx WHERE kch = "+"'"+req.query.kch+"' AND teacherid= '"+req.query.teacherid+"';"; + console.log(sql); + connection.query(sql,function (err, result) { + if(result.length > 0) { + res.send(result[0]); + }else{ + res.send("no"); + } + }) +}) +app.post("/api/askkcbnew",(req,res)=>{ + // temp.push({filelist:[],uuid:uid,neirong:" ",title:"提问1",return:"no",returnlist:"no",tea:teaask}); + const sql = 'INSERT INTO askforteakcb(uuid,xuehao,tea,kch,title,filelist,neirong,`return`,returnlist,teacherid) VALUES(?,?,?,?,?,?,?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.xuehao,req.body.tea,req.body.kch,req.body.title,JSON.stringify(req.body.filelist), + req.body.neirong,req.body.returnpost,req.body.returnlist,req.body.teacherid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/kaoshi/askks",(req,res)=>{ + // temp.push({filelist:[],uuid:uid,neirong:" ",title:"提问1",return:"no",returnlist:"no",tea:teaask}); + const sql = 'INSERT INTO askforks(uuid,ksh,th,xuehao,filelist,neirong,`return`,returnlist) VALUES(?,?,?,?,?,?,?,?)'; + + connection.query(sql, [req.body.uuid,req.body.ksh,req.body.th,req.body.xuehao,JSON.stringify(req.body.filelist), + req.body.neirong,"no","no"], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + res.send("no") +}) +app.post("/api/uddateaskforkc",(req,res)=>{ + var sql = "UPDATE askforteakcb SET filelist = ?, neirong = ?,title=? WHERE uuid=?;"; + connection.query(sql, [JSON.stringify(req.body.filelist),req.body.neirong,req.body.title,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/api/uddateaskfortm",(req,res)=>{ + var sql = "UPDATE askfortea SET filelist = ?, neirong = ? WHERE uuid=?;"; + connection.query(sql, [JSON.stringify(req.body.filelist),req.body.neirong,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/apitea/returnaskfortm",(req,res)=>{ + var sql = "UPDATE askfortea SET returnlist = ?, `return` = ? WHERE uuid=?;"; + + + connection.query(sql, [req.body.returnlist,req.body.return,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/apitea/returnaskks",(req,res)=>{ + var sql = "UPDATE askforks SET returnlist = ?, `return` = ? WHERE `id`=?;"; + + + connection.query(sql, [req.body.returnlist,req.body.return,req.body.id], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); +}) +app.post("/apitea/returnaskforkc",(req,res)=>{ + var sql = "UPDATE askforteakcb SET returnlist = ?, `return` = ? WHERE uuid=?;"; + + + connection.query(sql, [req.body.returnlist,req.body.return,req.body.uuid], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results) + res.send(results[0]); + }); +}) +app.post("/kaoshi/update",(req,res)=>{ + const sql = 'UPDATE kaoshing SET infor=? WHERE xuehao=? and ks=?'; +console.log(sql) + connection.query(sql, [JSON.stringify(req.body.date), req.body.xuehao, req.body.ks], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + // console.log(results); + }); +res.send({status:"ok"}) + +}) +app.get("/kaoshi/selectfirst",async (req,res)=> { + //看有没有被提交 + const sqlpaper = "SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultpaper = await new Promise((resolve, reject) => { + connection.query(sqlpaper, [req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + //看是否开始答题 + + const sqlstutm = "SELECT * FROM kaoshing WHERE xuehao=? and ks=?;"; + const resulttm = await new Promise((resolve, reject) => { + connection.query(sqlstutm, [req.query.xuehao, req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const sqlstuend = "SELECT * FROM kaoshiend WHERE xuehao=? and ks=?;"; + const resultend = await new Promise((resolve, reject) => { + connection.query(sqlstuend, [req.query.xuehao, req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + let stu; + let end; + if(resulttm.length>0){ + stu = resulttm[0] + }else { + stu="no" + } + if(resultend.length>0){ + end = resultend[0] + }else { + end="no" + } + res.send({paper:resultpaper[0],stu:stu,end:end}) + + + +}) +app.get("/kaoshi/select",async (req,res)=>{ + //看有没有被提交 + const sqlstuend = "SELECT * FROM kaoshiend WHERE xuehao=? and ks=?;"; + const resultend = await new Promise((resolve, reject) => { + connection.query(sqlstuend,[req.query.xuehao,req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + //看是否开始答题 + const sqlstutm = "SELECT * FROM kaoshing WHERE xuehao=? and ks=?;"; + const resulttm = await new Promise((resolve, reject) => { + connection.query(sqlstutm,[req.query.xuehao,req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + + if (resulttm.length > 0) { + if(resultend.length > 0) { + resulttm[0].end="end" + }else { + resulttm[0].end="noend" + } + resulttm[0].infor=JSON.parse(resulttm[0].infor); + res.send(resulttm[0]); + }else{ + const sqlpaper = "SELECT * FROM kaoshipaper WHERE uuid=?;"; + const resultpaper = await new Promise((resolve, reject) => { + connection.query(sqlpaper,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + + }) + console.log(resultpaper); + let xx=JSON.parse(resultpaper.xx) + xx.start=moment().format(); + const ks=resultpaper.uuid; + const sql = 'INSERT INTO kaoshing(ks,xuehao,infor,xx) VALUES(?,?,?,?)'; + const resultinsert = await new Promise((resolve, reject) => { + connection.query(sql, [ks, req.query.xuehao, resultpaper.paper, JSON.stringify(xx)], (error, results, fields) => { + if (error) throw error; + resolve(123); + // 处理查询结果 + console.log(124); + }); + }) + console.log(123) + res.send({ + ks:ks, + xuehao:req.query.xuehao, + infor:JSON.parse(resultpaper.paper), + xx:JSON.stringify(xx) + }) + } + +}) +app.get("/kaoshi/showtea",async (req,res)=>{ + //看有没有被提交 + const sqlstuend = "SELECT * FROM kaoshiend WHERE xuehao=? and ks=?;"; + const resultend = await new Promise((resolve, reject) => { + connection.query(sqlstuend,[req.query.xuehao,req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + //看是否开始答题 + const stuql="SELECT studentname,shoujihao,nianjizhaungye,xueyuan FROM student WHERE xuehao=\""+req.query.xuehao+"\""; + const sturesults= await new Promise((resolve, reject) => { + connection.query(stuql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + + + const sqlpaper = "SELECT * FROM kaoshipaper WHERE uuid=?;"; + const resultpaper = await new Promise((resolve, reject) => { + connection.query(sqlpaper,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + + }) + // console.log(resultpaper); + let xx=JSON.parse(resultpaper.xx) + // xx.start=moment().format(); + const ks=resultpaper.uuid; + + console.log(123) + res.send({ + ks:ks, + xuehao:req.query.xuehao, + infor:JSON.parse(resultend[0].ksdaan), + stu:sturesults[0], + + allprint:resultend[0].allprint, + xx:JSON.stringify(xx), + std:JSON.parse(resultpaper.std), + }) + + +}) +app.get("/api/getkcaskfortea",(req,res)=>{ + var sql = "SELECT * FROM askforteakcb WHERE xuehao = "+"'"+req.query.xuehao+"' AND kch = '"+req.query.kch+"'"; + console.log(sql); + + connection.query(sql,function (err, result) { + const temp=[...result]; + result.map((value,index)=>{ + temp[index].filelist=JSON.parse(value.filelist); + }) + if(result.length > 0) { + res.send(temp); + }else{ + res.send([]); + } + }) +}) + +app.get("/api/askfortealist",async function(req,res){ + const sql="SELECT `uuid`,askfortea.tmj,askfortea.th,filelist,neirong,xuehao,`return`,returnlist,tm.tanme AS tname,timuji.name AS tmjname FROM askfortea INNER JOIN tm ON tm.id = askfortea.th INNER JOIN timuji ON timuji.id = askfortea.tmj\n" + + "WHERE xuehao=\""+req.query.xuehao+"\""; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const uniqueArray = removeDuplicatesByUUID(results) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(sqltm,[uniqueArray[i].th], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }) + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist); + uniqueArray[i].tminfor=resulttm; + } + res.send(uniqueArray); +}) +app.get("/api/askforteakclist",async function(req,res){ + const sql="SELECT * FROM askforteakcb WHERE xuehao=\""+req.query.xuehao+"\""; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const uniqueArray = removeDuplicatesByUUID(results) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(classsql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + uniqueArray[i].kc=kcresults[0]; + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist) + } + res.send(uniqueArray); +}) +app.get("/kaoshi/result",async function(req,res){ + const sql="SELECT * FROM kaoshing WHERE ks=? AND xuehao=?"; + const resulting= await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ks,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + console.log(results) + resolve(results); + + }); + }) + if(resulting.length===0){ + //未作答 + console.log("未作答") + const sql="SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultpaper= await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + })//查出原卷 + const jue=JSON.parse(resultpaper[0].paper)//原卷 + const stddaan=JSON.parse(resultpaper[0].std)//标准答案 + let jueres=[] + for(let i=0;i { + connection.query(sql,[req.query.ks,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + })//查出原卷 + if(resultend.length!==0){ + //学生已提交 + stupaper=resultend[0]; + }else{ + const sqltj = 'INSERT INTO kaoshiend(ks,ksdaan,infor,xuehao,tijiaotime) VALUES(?,?,?,?,?)'; + //补充提交 + await new Promise((resolve, reject) => { + connection.query(sqltj, [req.query.ks, resulting[0].infor, resulting[0].xx, req.query.xuehao, moment().format()], (error, results, fields) => { + if (error) throw error; + resolve(results); + // 处理查询结果 + console.log(results); + }); + //提交后在查询 + }) + const sqlcx="SELECT * FROM kaoshiend WHERE ks=? AND xuehao=?"; + const resultend= await new Promise((resolve, reject) => { + connection.query(sqlcx,[req.query.ks,req.query.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + stupaper=resultend[0]; + + } + //得到学生卷 + const sqlpaper="SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultpaper= await new Promise((resolve, reject) => { + connection.query(sqlpaper,[req.query.ks], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + })//查出原卷 + + const stddaan=JSON.parse(resultpaper[0].std)//标准答案 + const jue=JSON.parse(stupaper.ksdaan); + let printall=0;//总分 + let stdprint=0;//总分 + let jueall= []; + let needteacher=false;//是否需要老师阅卷 + let finishteacher=true//老师是否完成阅卷 + for(let i=0;i { + connection.query(sql,[req.body.ks,req.body.xuehao], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + console.log(results) + if(results.length === 0){ + //未提交重新提交 + const sql = 'INSERT INTO kaoshiend(ks,ksdaan,infor,xuehao,tijiaotime) VALUES(?,?,?,?,?)'; + console.log(sql) + connection.query(sql, [req.body.ks,JSON.stringify(req.body.ksdaan),JSON.stringify(req.body.infor),req.body.xuehao,moment().format()], (error, results, fields) => { + if (error) throw error; + + // 处理查询结果 + console.log(results); + }); + } + res.send({status:"ok"}) +}) +app.get("/apitea/askforteakclist",async function(req,res){ + const sql="SELECT * FROM askforteakcb WHERE tea=\""+req.query.teacher+"\""; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const uniqueArray = removeDuplicatesByUUID(results) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(classsql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const stuql="SELECT studentname,shoujihao,nianjizhaungye FROM student WHERE xuehao=\""+uniqueArray[i].xuehao+"\""; + const sturesults= await new Promise((resolve, reject) => { + connection.query(stuql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + uniqueArray[i].kc=kcresults[0]; + uniqueArray[i].stu=sturesults[0]; + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist) + } + res.send(uniqueArray); +}) +app.get("/apitea/askforti", async function(req,res){ + const sql="SELECT * FROM kechengbiao WHERE teacher=\""+req.query.teacher+"\""; + let timujigroup=[]; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + for(i=0;i arr.indexOf(item) === index); + let askforti=[]; + for(let i=0;i { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + + }) + + Array.prototype.push.apply(askforti,resultti); + } + //console.log(uniqueArray); // 输出: [1, 2, 3, 4] + const uniqueArray = removeDuplicatesByUUID(askforti) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(sqltm,[uniqueArray[i].th], (error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }); + }) + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist); + uniqueArray[i].tminfor=resulttm; + } + res.send(uniqueArray); + +}) +app.get("/apitea/taolongstu",async function(req,res){ + const sql="SELECT * FROM commitgroup WHERE xuhao=\""+req.query.xuhao+"\""; + let stulist=[]; + const results= await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const stu=JSON.parse(results[0].student); + console.log(stu) + for(let i=0;i { + connection.query(sqlstu, [stu[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + if(sture.length>0) { + console.log(sture) + stulist.push(sture[0]) + } + } + const sqlcommit="SELECT * FROM commit WHERE xuhao=\""+req.query.xuhao+"\""; +let finish=[]; +let nofinish=[...stu] + console.log(nofinish) + const resultscommit= await new Promise((resolve, reject) => { + connection.query(sqlcommit, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + resultscommit.map((value,index)=>{ + if(!finish.includes(value.xuehao)){ + finish.push(value.xuehao); + } + if(nofinish.includes(value.xuehao)){ + nofinish=nofinish.filter((item,index)=>item!==value.xuehao.toString()); + console.log(nofinish); + } + }) + let finishlist=[]; + for (let i=0;i { + connection.query(sqlstu, [finish[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + if(stu) + finishlist.push(stu) + } + let nofinishlist=[]; + for (let i=0;i { + connection.query(sqlstu, [nofinish[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results[0]); + }) + }) + nofinishlist.push(stu) + } + res.send({all:stulist,finish:finishlist,nofinish:nofinishlist}); +}) +app.post("/kaoshi/teauplate",async function(req,res){ + let tea=[]; + req.body.teapanjue.map((value,index)=>{ + tea.push(parseInt(value.xuegonghao)); + }) + const sql="UPDATE kaoshipaper SET paperbj=?,stdbj=?,xxbj=?,fabukecheng=?,tea=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.paper,null,4),JSON.stringify(req.body.std,null,4),JSON.stringify(req.body.xx,4),JSON.stringify(req.body.fabu),JSON.stringify(tea),req.body.uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + console.log(results); + console.log(1345) + }) + }) + res.send({status:"ok"}) +}) +app.get("/api/teaselect",async function(req,res){ + const sqltea="SELECT name,xuegonghao,iphone FROM teacher WHERE xuegonghao=?"; + const tea=await new Promise((resolve, reject) => { + connection.query(sqltea,[req.query.tea],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + if(tea.length>0){ + res.send(tea[0]) + }else{ + res.send("error") + } +}) +app.get("/kaoshi/teaget",async function(req,res){ + const sqltea="SELECT name,xuegonghao,iphone FROM teacher WHERE xuegonghao=?"; + const tea=await new Promise((resolve, reject) => { + connection.query(sqltea,[req.query.tea],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + const sql="SELECT * FROM kaoshipaper WHERE uuid=?"; + const paper=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ksh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + console.log(tea) + if(paper.length>0){ + let temppaper={...paper[0]} + let tealist=[] + for(let i=0;i { + connection.query(sqltea,[JSON.parse(temppaper.tea)[i]],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + tealist.push(tea[0]); + + } + temppaper.tea=tealist; + res.send(temppaper); + }else{ + const sqlinsert = 'INSERT INTO kaoshipaper(`uuid`,paperbj,tea,`stdbj`,xxbj,maintea) VALUES(?,?,?,?,?,?)'; + const re=new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.query.ksh,"[]",JSON.stringify([parseInt(tea[0].xuegonghao)]),"[]",JSON.stringify({ + limit:-1, + name:" ", + timestart:" ", + timeend:" ", + }),req.query.tea], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + + res.send({ + uuid:req.query.ksh, + paperbj:"[]", + tea:[parseInt(tea[0].xuegonghao)], + stdbj:"[]", + xxbj:JSON.stringify({ + limit:-1, + name:" ", + timestart:" ", + timeend:" ", + }) + }); + + } +}) +app.get("/kaoshi/teafajaun",async function(req,res){ + const sql="SELECT * FROM kaoshipaper WHERE uuid=?"; + const paper=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ksh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) +}) +app.get("/kaoshi/teatilist",async function(req,res){ + const sql="SELECT `id`,ksdaan FROM kaoshiend WHERE ks=?"; + const resulttimu=await new Promise((resolve, reject) => { + connection.query(sql,[parseInt(req.query.ksh)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let ksdaan=[]; + for(let i=0;i { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + }else if(studaan.lx==="填空题"){ + if (studaan.sr ==="") { + let temp = JSON.parse(resulttimu[i].ksdaan); + temp[parseInt(req.query.tid)].teacherprint = 0; + temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=? WHERE id=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + } + } + let infor={}; + let flag=false; + let all=0; + let now;//发送的时候在第几个 + ksdaan.map((value,index)=>{ + if(value.teacherid===undefined||value.teacherid===req.query.teacherid) { + all++; + } + if(value.teacherid===undefined&&flag===false){ + flag=true; + now=all; + infor.ti=value; + } + + }) + if(infor.ti===undefined){ + ksdaan.map((value,index)=>{ + if(value.teacherid===req.query.teacherid){ + //flag=true; + now=all; + infor.ti=value; + } + }) + } + infor.all=all; + infor.now=now; + res.send(infor); +}) +app.get("/kaoshi/teatiafter",async function(req,res){ + const sql="SELECT `id`,ksdaan FROM kaoshiend WHERE ks=?"; + const resulttimu=await new Promise((resolve, reject) => { + connection.query(sql,[parseInt(req.query.ksh)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let ksdaan=[]; + for(let i=0;i { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + }else if(studaan.lx==="填空题"){ + if (studaan.sr ==="") { + let temp = JSON.parse(resulttimu[i].ksdaan); + temp[parseInt(req.query.tid)].teacherprint = 0; + temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=? WHERE id=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + } + } + let infor={}; + let flag=false; + let all=0; + let now;//发送的时候在第几个 + + let muqian; + for(let i=0;i { + connection.query(sql, [req.body.id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let json1=JSON.parse(result[0].ksdaan) + if(json1[req.body.tid].teacherid===undefined||json1[req.body.tid].teacherid==req.query.teacherid){ + json1[req.body.tid].teacherid=req.body.teacherid; + json1[req.body.tid].teacherprint=parseInt(req.body.print); + console.log(json1) + const sql="UPDATE kaoshiend SET ksdaan=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql, [JSON.stringify(json1,null,4),req.body.id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send("yes") + }else{ + res.send("已判") + } + + + +}) +app.get("/kaoshi/teatibefore",async function(req,res){ + const sql="SELECT `id`,ksdaan FROM kaoshiend WHERE ks=?"; + // temp[parseInt(req.query.tid)].teacherprint = 0; + //temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const resulttimu=await new Promise((resolve, reject) => { + connection.query(sql,[parseInt(req.query.ksh)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let ksdaan=[]; + for(let i=0;i { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + }else if(studaan.lx==="填空题"){ + if (studaan.sr ==="") { + let temp = JSON.parse(resulttimu[i].ksdaan); + temp[parseInt(req.query.tid)].teacherprint = 0; + temp[parseInt(req.query.tid)].teacherid=202413501062//机器对空白自动打零 + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=? WHERE id=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(temp, null, 4), resulttimu[i].id], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } else { + let temp = {...studaan}; + temp.id = resulttimu[i].id; + ksdaan.push(temp); + + } + } + } + let infor={}; + let flag=false; + let all=0; + let now;//发送的时候在第几个 + + let muqian; + for(let i=0;i=0;i--){ + console.log(12) + let value=ksdaan[i]; + console.log(1233) + console.log(ksdaan[i]); + + if(value.teacherid===undefined||value.teacherid==req.query.teacherid) { + all--; + } + if((value.teacherid===undefined||value.teacherid==req.query.teacherid)&&flag===false){ + flag=true; + now=all; + infor.ti=value; + } + } + all=0; + for (let i=0;i{ + const sqlstd="SELECT * FROM kaoshipaper WHERE uuid=?"; + const resultstd=await new Promise((resolve, reject) => { + connection.query(sqlstd,[req.query.ksh],(error, results, fields) => { + if(error)throw error; + resolve(results[0]); + }) + }) + if(JSON.parse(resultstd.xx).pan_jue_finsih===false) { + const sql = "SELECT * FROM kaoshiend WHERE ks=?"; + const resultksdaan = await new Promise((resolve, reject) => { + connection.query(sql, [parseInt(req.query.ksh)], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let finish = true; + for (let i = 0; i < resultksdaan.length; i++) { + const ksdaan = JSON.parse(resultksdaan[i].ksdaan); + + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[i].panjaun === "teacher") { + if (value.teacherid === undefined) { + finish = false + } + } + } + if (value.lx === "简答题") { + if (value.teacherid === undefined) { + finish = false + } + } + }) + + } + if(finish===true){ + let jsonxx=JSON.parse(resultstd.xx); + jsonxx.pan_jue_finsih=true + const sqlupdate = 'UPDATE kaoshipaper SET xx=? WHERE `uuid`=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(jsonxx, null, 4), req.query.ksh], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + let infor=[] + let allprint=[] + if(finish===true){ + + for (let i = 0; i < resultksdaan.length; i++) { + const ksdaan = JSON.parse(resultksdaan[i].ksdaan); + let num=0; + let ksdaantemp=[...ksdaan] + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[index].panjaun === "teacher") { + num=num+value.teacherprint + ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else{ + if(value.sr.trimStart()===stddaan[index].std.trimStart()){ + num=num+stddaan[index].print + ksdaantemp[index].way="computer" + ksdaantemp[index].printstu=stddaan[index].print + } + } + } + else if (value.lx === "简答题") { + const stddaan = JSON.parse(resultstd.std); + num=num+value.teacherprint + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else if(value.lx==="多选题"){ + let zq=true + const stddaan = JSON.parse(resultstd.std); + value.daan.map((item,xuaho)=>{ + if(!stddaan[index].std.includes(item)){} + zq=false + }) + if(value.daan.length!==stddaan[index].std.length){ + zq=false + } + if(zq){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + + + }else if(value.lx==="单选题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + num=num+0 + } + }else if(value.lx==="判断题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + } + + }) + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=?,allprint=? WHERE id=?'; + //resultksdaan[i]. + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(ksdaantemp,null,4),num,resultksdaan[i].id],(error, results) => { + if (error) throw error; + resolve(results); + + }) + }) + allprint.push(num) + infor.push({infor:ksdaantemp,num:num}) + } + } + + res.send({finish: finish}) + }else{ + res.send({finish: true}) + } + +}) +app.get("/teaapi/kaoshishow",async (req,res)=>{ + //查考试已完成阅卷和正在阅卷 + const sql="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(tea, "+`'[${req.query.tea}]'`+", '$');" + let result=await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i0){ + //考试未开始 + result[i].zt="test_no_start" + }else if(moment().diff(moment(xx.timeend),'s')<0){ + //考试未结束 + result[i].zt="testing" + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + }else{ + let pan_jue_finish; + //考试已结束 + let resultstd=result[i] + if(JSON.parse(result[i].xx).pan_jue_finsih===false) { + const sql = "SELECT * FROM kaoshiend WHERE ks=?"; + const resultksdaan = await new Promise((resolve, reject) => { + connection.query(sql, [parseInt(result[i].uuid)], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let finish = true; + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[j].panjaun === "teacher") { + if (value.teacherid === undefined) { + finish = false + } + } + } + if (value.lx === "简答题") { + if (value.teacherid === undefined) { + finish = false + } + } + }) + + } + if(finish===true){ + let jsonxx=JSON.parse(resultstd.xx); + jsonxx.pan_jue_finsih=true + const sqlupdate = 'UPDATE kaoshipaper SET xx=? WHERE `uuid`=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(jsonxx, null, 4), result[i].uuid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + let infor=[] + let allprint=[] + if(finish===true){ + + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + let num=0; + let ksdaantemp=[...ksdaan] + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[index].panjaun === "teacher") { + num=num+value.teacherprint + ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else{ + if(value.sr.trimStart()===stddaan[index].std.trimStart()){ + num=num+stddaan[index].print + ksdaantemp[index].way="computer" + ksdaantemp[index].printstu=stddaan[index].print + } + } + } + else if (value.lx === "简答题") { + const stddaan = JSON.parse(resultstd.std); + num=num+value.teacherprint + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else if(value.lx==="多选题"){ + let zq=true + const stddaan = JSON.parse(resultstd.std); + value.daan.map((item,xuaho)=>{ + if(!stddaan[index].std.includes(item)){} + zq=false + }) + if(value.daan.length!==stddaan[index].std.length){ + zq=false + } + if(zq){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + + + }else if(value.lx==="单选题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + num=num+0 + } + }else if(value.lx==="判断题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + } + + }) + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=?,allprint=? WHERE id=?'; + //resultksdaan[i]. + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(ksdaantemp,null,4),num,resultksdaan[i].id],(error, results) => { + if (error) throw error; + resolve(results); + + }) + }) + allprint.push(num) + infor.push({infor:ksdaantemp,num:num}) + } + } + pan_jue_finish=finish + // res.send({finish: finishr}) + }else{ + pan_jue_finish=true + // res.send({finish: true}) + } + //判断完成 + if(pan_jue_finish===true) { + result[i].zt = "finish_pan_jue" + }else{ + result[i].zt = "pan_jue" + } + + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + + } + if(!result[i].std){ + result[i].zt="wei_fa_bu" + } + + } + res.send(result); +}) +app.get("/kaoshi/teaprint",async (req,res)=>{ + const sql="SELECT * FROM kaoshiend WHERE ks=? ORDER BY allprint DESC"; + const chengji=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.ksh],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let printA=0 + if(chengji.length>0) { + printA=chengji[0].allprint; + } + let paiming=1 + chengji.map((value,index)=>{ + + + if(value.allprint===printA){ + chengji[index].paiming=paiming; + + }else{ + printA=value.allprint; + paiming=index+1; + chengji[index].paiming=paiming; + } + + }) + for (let i=0;i { + connection.query(sqlinfor,[chengji[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + chengji[i].stuinfor=stu[0] + + } + const sqlupdate="SELECT * FROM kaoshipaper WHERE uuid=?"; + const std=await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.query.ksh],(error, results, fields) => { + if (error) throw error; + resolve(results[0]); + }) + }) + res.send({chengji:chengji,std:std}) +}) +app.get("/apitea/teakechengbiao",async (req,res)=>{ + const sql="SELECT * FROM kechengbiao WHERE teacher=?"; + const kecheng=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let kechengbiao=[]; + for(let i=0;i<31;i++){ + let zhou=[]; + for (let j=0;j<7;j++){ + const day=[ + { + zhou:i,//第几周 + day:j,//每周第几天 + jie:1, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:2, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:3, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:4, + classid:0//class号 + + } + ] + zhou.push(day) + } + kechengbiao.push(zhou) + } + kecheng.map((ke,indexke)=>{ + const kelist=JSON.parse(ke.classzou); + kelist.map((kezhou,indexzhou)=>{ + kezhou.class.map((keday,indexday)=>{ + kechengbiao[parseInt(kezhou.zhou)-1][parseInt(keday.day)-1][parseInt(keday.jie)-1].classid={ + name:ke.classname, + id:ke.classid, + teacherid:ke.teacherid, + classbh:ke.classbh, + place:ke.place, + color:ke.color, + } + kechengbiao[parseInt(kezhou.zhou)-1][parseInt(keday.day)-1][parseInt(keday.jie)-1].kch=keday.ke + }) + }) + }) + fs.writeFileSync("1.json",JSON.stringify(kechengbiao,null,3)) + res.send(kechengbiao) +}) +app.get("/apitea/getclassinfor",async (req,res)=>{ + const sql="SELECT * FROM kcxx WHERE kch=? AND teacherid=?"; + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.kch,req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(result.length===0){ + res.send("no") + }else{ + result[0].xkh=JSON.parse(result[0].xkh) + result[0].skq=JSON.parse(result[0].skq) + res.send(result[0]) + } +}) +app.post("/apitea/addkcxx",async (req,res)=>{ + const informoban={ + "filelist": [ + + ], + "preparebeizhu": "练习题", + "timu": [ + + ] + + } + const sql = 'INSERT INTO kcxx(tea,kch,skq,xkh,teacherid) VALUES(?,?,?,?,?)'; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.tea,req.body.kch,JSON.stringify(informoban),JSON.stringify(informoban),req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) +}) +app.post("/apitea/uplatekcxxskq",async (req,res)=>{ + const sql="UPDATE kcxx SET skq=? WHERE kch=? and teacherid=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.infor),req.body.kch,req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) +}) +app.post("/apitea/uplatekcxxxkq",async (req,res)=>{ + const sql="UPDATE kcxx SET xkh=? WHERE kch=? and teacherid=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.infor),req.body.kch,req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) +}) +app.get("/apitea/cxtimuji",async (req,res)=>{ + const sqlcx="SELECT * FROM timuji WHERE `name` REGEXP ?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlcx,[`.*${req.query.name}.*`],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + + for(let i=0;i { + connection.query(sqlkechengbiao, (err, results, fields) => { + if (err) throw err; + console.log(results); + resolve(results) + }); + }) + let kename=""; + let classid=[]; + kecheng.map((value,index)=>{ + kename+=","+value.classname; + classid.push(value.teacherid); + }) + if(kename.length>3){ + kename=kename.substring(1) + } + result[i].kename=kename; + result[i].classid=classid; + } + + res.send(result) +}) +app.get("/teaapi/askforkckcb",async (req,res)=>{ + const sql="SELECT * FROM askforteakcb WHERE kch=? AND teacherid=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.kch,req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const uniqueArray = removeDuplicatesByUUID(reasult) + const temparray=[...uniqueArray]; + for(let i=0;i { + connection.query(classsql, (error, results, fields) => { + if (error) reject(error); + resolve(results); + }); + }) + const stusql="SELECT studentname,xuehao,shoujihao,xueyuan,nianjizhaungye FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(stusql, [temparray[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + uniqueArray[i].stu=stureasult[0] + uniqueArray[i].kc=kcresults[0]; + uniqueArray[i].filelist=JSON.parse(uniqueArray[i].filelist) + } + res.send(uniqueArray) +}) +app.get("/apischool/addschoolxlsx",async (req,res)=>{ + const school=await parsex.sheetlist(req.query.xlsx) ; + res.send(school); +}) +async function addkcbtojson(jsonwb,kch){ + let jsonjs=JSON.parse(jsonwb); + const sqlreadkc="SELECT * FROM kechengbiaotest WHERE teacherid=?" + const kcreasult=await new Promise((resolve, reject) => { + connection.query(sqlreadkc, [kch.teacherid],(error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kclist=[] + JSON.parse(kcreasult[0].classzou).map((zou,zouindex)=>{ + zou.class.map((ke,keindex)=>{ + kclist.push(ke.ke) + }) + }) + jsonjs.map((keone,index)=>{ + if(kclist.includes(keone.time)) { + jsonjs[index].ke = parseInt(kch.classid) + } + }) + return JSON.stringify(jsonjs) +} +app.post("/apischool/addstudent",async (req,res)=>{ + const stuinfor=req.body.stu + console.log(stuinfor) + let stuexcel=await makeexcel.makeExcel(stuinfor) + + for(let i=0;i { + connection.query(sqlbanji,[stuinfor[i].classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlkecheng="SELECT * FROM zhuanye WHERE id=?" + const kecheng=await new Promise((resolve, reject) => { + connection.query(sqlkecheng,[reasultbanji[0].zhaunyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stukecb=[]; + for(let i=0;i<31;i++){ + for(let j=1;j<7;j++){ + for(let k=1;k<4;k++){ + stukecb.push({ + ke:0, + time:`n${i}z${j}A${k}` + }) + } + } + } + let stukecbwb=JSON.stringify(stukecb) + const pyfa=JSON.parse(kecheng[0].pyfa); + for(let i=0;i { + connection.query(sqlkcstu,[pyfa[0].publicclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + let stulist=[]; + if(stu[0].student) { + stulist=JSON.parse(stu[0].student) + } + stulist.push(stuinfor[i].xuehao) + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),pyfa[0].publicclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + } + for(let i=0;i { + connection.query(sqlkcstu,[pyfa[0].zhuanyeclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + let stulist=[]; + if(stu[0].student) { + stulist=JSON.parse(stu[0].student) + } + stulist.push(stuinfor[i].xuehao) + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),pyfa[0].zhuanyeclass[i].classid],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + } + const sqlinsert="INSERT INTO student (fudaoyaunid,kecb,studentname, xuehao, shoujihao, xingbian, xueyuan, nianjizhaungye, passage, morenpassword, ruxuetime,idcard)\n" + + "SELECT ?,?,?,?,?,?,?,?,?,?,?,?" + + + "WHERE NOT EXISTS (\n" + + " SELECT 1\n" + + " FROM student\n" + + " WHERE shoujihao = ?\n" + + ");\n" + console.log(123) + const result=await new Promise((resolve, reject) => { + connection.query(sqlinsert,[reasultbanji[0].teacherid,stukecbwb,stuinfor[i].name,stuinfor[i].xuehao,stuinfor[i].iphone,stuinfor[i].xingbian,stuinfor[i].xueyuan,stuinfor[i].classid,stuinfor[i].passage,stuinfor[i].morenpassword,stuinfor[i].ruxuetime,stuinfor[i].idcard,stuinfor[i].iphone],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + + } +res.send({stu:stuexcel}) + //console.log(stuinfor.length) +}) +app.get("/apischool/selectteacher",async (req,res)=>{ + const sql="SELECT name,iphone FROM teacher WHERE xuegonghao=?" + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error)throw error; + if(results.length===0){ + res.send("no"); + }else{ + res.send(results[0]); + } + }) +}) +app.post("/apischool/uplatekcbkc",async (req,res)=>{ + const sql="UPDATE kechengbiao SET bianjikc=? WHERE classid=?" + console.log(req.body) + connection.query(sql,[JSON.stringify(req.body.bianjikc,null,4),req.body.classid],(error, results, fields) => { + + + }) +}) +app.post("/apischool/uplatekcinfor",(req,res)=>{ + const sql="UPDATE kechengbiao SET classname=?,teacherid=?,classbh=?,teacher=?,color=?,place=? WHERE classid=?" + connection.query(sql,[req.body.classname,req.body.teacherid,req.body.classbh,req.body.teacher,req.body.color,req.body.place,req.body.classid],(error,reasult,field)=>{ + + }) +}) +app.get("/apischool/getkcinfor_bianji",(req,res)=>{ + const sql="SELECT * FROM kechengbiao WHERE classid=?" + connection.query(sql,[req.query.classid],(error, results, fields) => { + res.send(results[0]); + }) +}) +app.get("/apischool/getkechenglist",async (req,res)=>{ + const sql="SELECT * FROM kechengbiao " + let result=await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqltea,[result[i].teacher],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(tea.length===0){ + result[i].teaname="no"; + }else{ + result[i].teaname=tea[0].name; + } + } + res.send(result) +}) +app.get("/apischool/newkcb",async (req,res)=>{ + const sqlnum="SELECT * FROM kechengall" + const resultnum=await new Promise((resolve, reject) => { + connection.query(sqlnum,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let num=resultnum.length; + let sqlinsert="INSERT INTO kechengall(id,kechenglist) VALUES(?,?)" + let kechengbiao=[]; + for(let i=0;i<31;i++){ + let zhou=[]; + for (let j=0;j<7;j++){ + const day=[ + { + zhou:i,//第几周 + day:j,//每周第几天 + jie:1, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:2, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:3, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:4, + classid:0//class号 + + } + ] + zhou.push(day) + } + kechengbiao.push(zhou) + } + const resultinsert=await new Promise((resolve, reject) => { + connection.query(sqlinsert,[num+1,JSON.stringify(kechengbiao)],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + res.send({num:num}) +}) +app.post("/apischool/fabukc",async (req,res)=>{ + const sqlselect="SELECT * FROM kechengbiaotest WHERE kechengid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.classid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + let zhoukc = []; + zhou.map((day, dayindex) => { + day.map((ke, keindex) => { + if (ke.classid != 0) { + let keone = {ke: `n${ke.zhou}z${ke.day + 1}A${ke.jie}`, day: ke.day + 1, jie: ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day + 1}A${ke.jie}`] = []; + } + }) + }) + if (zhoukc.length !== 0) { + const kcone = { + zhou: zhouindex + 1, + class: zhoukc + } + kc.push(kcone) + } + + + }) + //console.log(qj); + //console.log(kc) + const sqlupdate = 'UPDATE kechengbiaotest SET classtime=?,classzou=?,timu=? WHERE classid=?'; + await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(qj), JSON.stringify(kc), req.body.classid, "[]"], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + const sqlfabu="UPDATE kechengall SET fabu=? WHERE id=?"; + await new Promise((resolve, reject) => { + connection.query(sqlfabu,["已发布",req.body.classid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({status:"ok"}) + +}) +app.get("/apischool/getstudent",async (req,res)=>{ + const sql="SELECT * FROM student"; + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,fields)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) +}) +app.get("/apischool/getteacher",async (req,res)=>{ + const sql="SELECT * FROM teacher"; + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,fields)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) +}) +app.get("/apischool/paixustudent",async (req,res)=>{ + if(req.query.search==="") { + + const sql = `SELECT * FROM studenttest ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM \`studenttest\` WHERE CONCAT(studentname,xuehao,shoujihao,xueyuan,nianjizhaungye) LIKE ? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + } +}) +app.get("/apischool/paixuteacher",async (req,res)=>{ + if(req.query.search==="") { + + const sql = `SELECT * FROM teacher ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM teacher WHERE CONCAT(name,xuegonghao,zzmm,iphone) LIKE ? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + } +}) +app.post("/apischool/addxueyuan",async (req,res)=>{ + try { + const md5 = crypto.createHash('md5'); + md5.update(req.body.password); + //const password = md5.digest('hex'); + const sqlchaxun = "SELECT * FROM xueyuan WHERE id=?"; + const result = await new Promise((resolve, reject) => { + connection.query(sqlchaxun, [req.body.xueyuanid], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + if (result.length === 0) { + const password = md5.digest('hex'); + const sqlinsertxueyuan = "INSERT INTO xueyuan(id,name,zhuanye,password,leaderid,leadername,jiejian,zt) VALUES(?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsertxueyuan, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian, "已发布"], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + } else { + + const updatesql = "UPDATE xueyuan SET id=?,name=?,zhuanye=?,password=?,leaderid=?,leadername=?,jiejian=?,zt=? WHERE id=?"; + const password = md5.digest('hex'); + console.log(updatesql) + await new Promise((resolve, reject) => { + connection.query(updatesql, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian, "已发布", req.body.xueyuanid], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + } + const xid = req.body.xueyuanid; + const zhuanye = req.body.zhuanye; + for (let i = 0; i < zhuanye.length; i++) { + try { + const sqlinsertzhaunye = "INSERT INTO zhuanye(id,name,jianjie,xueyuanid,classs) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsertzhaunye, [xid.toString() + zhuanye[i].zyid, zhuanye[i].title, zhuanye[i].jianjie, req.body.xueyuanid, "[]"], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + }catch (e) { + console.log(e) + } + } + res.send({status:"ok"}) + }catch (e) { + console.error(e); + } +}) +app.post("/apischool/baochunxueyuan",async (req,res)=>{ + const md5 = crypto.createHash('md5'); + md5.update(req.body.password); + const sqlchaxun="SELECT * FROM xueyuan WHERE id=?"; + const result=await new Promise((resolve, reject) => { + connection.query(sqlchaxun,[req.body.xueyuanid],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + if (result.length===0) { + const password = md5.digest('hex'); + const sqlinsertxueyuan = "INSERT INTO xueyuan(id,`name`,zhuanye,`password`,leaderid,leadername,jiejian,zt) VALUES(?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsertxueyuan, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian, "未发布"], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + }else{ + const updatesql="UPDATE xueyuan SET id=?,name=?,zhuanye=?,password=?,leaderid=?,leadername=?,jiejian=?,zt=? WHERE id=?"; + const password = md5.digest('hex'); + + await new Promise((resolve, reject) => { + connection.query(updatesql, [req.body.xueyuanid, req.body.xueyuanname, JSON.stringify(req.body.zhuanye), password, req.body.leaderid, req.body.leadername, req.body.jiejian,"未发布",req.body.xueyuanid], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + } + res.send({status:"ok"}) + +}) +app.get("/apischool/getbjxueyuan",async (req,res)=>{ + const sql="SELECT * FROM xueyuan WHERE id=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuanid],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(reasult) +}) +app.get("/apischool/getxueyuanlist",async (req,res)=>{ + const sql="SELECT * FROM xueyuan"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(reasult) +}) +app.get("/apixueyuan/getxueyuaname",async (req,res)=>{ + const sql="SELECT name FROM xueyuan WHERE id=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(reasult[0]) +}) +app.post("/apixueyuan/password",async(req,res)=>{ + const sql="SELECT * FROM xueyuan WHERE id=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length===0){ + res.send({status:"系统错误 无此学院"}) + }else { + if (req.body.password === reasult[0].password) { + res.send({status:"ok",name:reasult[0].name}) + }else{ + res.send({status:"err"}); + } + } +}) +app.post("/apixueyuanany/password",async(req,res)=>{ + const sql="SELECT * FROM xueyuan WHERE name=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.name],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length===0){ + res.send({status:"系统错误 无此学院"}) + }else { + if (req.body.password === reasult[0].password) { + res.send({status:"ok",xyid:reasult[0].id}) + }else{ + res.send({status:"err"}); + } + } +}) +app.post("/apischool/password",async(req,res)=>{ + const sql="SELECT * FROM information WHERE xiang='password'"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.name],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length===0){ + res.send({status:"系统错误 无此学院"}) + }else { + if (req.body.password === reasult[0].value) { + res.send({status:"ok",xyid:reasult[0].id}) + }else{ + res.send({status:"err"}); + } + } +}) +app.get("/apixueyuan/getzhuanye",async (req,res)=>{ + const sql="SELECT * FROM zhuanye WHERE xueyuanid=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyaunid],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlclsss,[reasult[i].id],(err,results,field)=>{ + resolve(results); + }) + }) + reasult[i].classcout=reasultclass.length; + } + + res.send(reasult) +}) +app.get("/apixueyuan/getkechengbiao",async (req,res)=>{ + const sql="SELECT classname,teacher,place FROM kechengbiao WHERE teacherid=? AND classzou IS NOT NULL"; + let result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(result.length>0) { + const sqltea = "SELECT * FROM teacher WHERE xuegonghao=?" + let tea = await new Promise((resolve, reject) => { + connection.query(sqltea, [result[0].teacher], (err, results, field) => { + if(err)throw err; + resolve(results); + }) + }) + if(tea.length>0) { + result[0].teachername = tea[0].name; + result[0].status = "ok" + } + res.send(result[0]) + }else{ + res.send({status:"err"}) + } +}) +app.post("/apixueyuan/saveclass",async (req,res)=>{ + const sql="UPDATE banjiclass SET classname1=?,classname2=?,kclist=?,teacherid=?,teachername=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.classname1,req.body.classname2,JSON.stringify(req.body.kclist),req.body.teacherid,req.body.teachername,req.body.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send({status:"ok"}) +}) +app.get("/apixueyuan/getbjclass",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE id=?" + let reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasult.length>0){ + const sqltea="SELECT * FROM teacher WHERE xuegonghao=?"; + const reasulttea=await new Promise((resolve, reject) => { + connection.query(sqltea,[reasult[0].teacherid],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + if(reasulttea.length>0) { + reasult[0].teachername = reasulttea[0].name; + } + } + res.send(reasult[0]) +}) +app.post("/apixueyuan/fubuclass",async (req,res)=>{ + const sql="UPDATE banjiclass SET zt=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql,["已发布",req.body.id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) +}) +app.get("/apixueyuan/newclassid",async (req,res)=>{ + const sqlgetlength="SELECT COUNT(*) AS leng FROM banjiclass" + const resultlength=await new Promise((resolve, reject) => { + connection.query(sqlgetlength,(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + const len=resultlength[0].leng; + const sql="INSERT INTO banjiclass(id,xueyuanid,zhaunyeid,zt) VALUES(?,?,?,?)"; + await new Promise((resolve, reject) => { + connection.query(sql,[len+1,req.query.xueyuan,req.query.zhuanye,"未发布"],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(resultlength) + +}) +app.post('/apitea/fabuinclass',async (req,res)=>{ + const sqlfabu="INSERT INTO inclassactive(uuid,lx,infor,kctime,teacherid,teacher,time)VALUES(?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlfabu,[req.body.uuid,req.body.lx,JSON.stringify(req.body.infor,null,4),req.body.kctime,req.body.teacherid,req.body.teacher,moment().format()],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send("ok") +}) +app.post('/apitea/updatetiwenjiafen',async (req,res)=>{ + const sqlselect="SELECT * FROM inclassactive WHERE uuid=?" + const resultstu=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.uuid],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + console.log(req.body) + if(resultstu.length>0){ + let infor=JSON.parse(resultstu[0].infor) + infor.stu=req.body.updatestu; + const sqlupdate="UPDATE inclassactive SET infor=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(infor,null,4),req.body.uuid],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send("ok") + } +}) +app.post('/apiclass/kcqdcode',async (req,res)=>{ + let text=JSON.stringify(req.body,null,3) + await new Promise((resolve, reject) => { + + const folderPath = 'nginx/html/qr/'+req.body.uuid+'.png' + QRCode.toFile(folderPath, text, { + color: { + dark: '#000', // 二维码颜色 + light: '#FFF' // 二维码背景色 + } + }, function (err) { + if (err) throw err; + console.log('二维码已生成'); + resolve(""); + }); + + }) + let html=`http://localhost:89/qr/${req.body.uuid}.png` + res.send(html) + +}) +app.get('/apitea/getketangtmonelist',async (req,res)=>{ + const sqllist="SELECT * FROM tmone WHERE kch=? AND kctime=?" + let result=await new Promise((resolve, reject) => { + connection.query(sqllist,[req.query.kch,req.query.kctime],(err,results,field)=>{ + resolve(results); + }) + }) + let tmonelist=[]; + result.map((item,index)=>{ + let one={...item,...JSON.parse(item.infor)} + tmonelist.push(one) + }) +res.send(tmonelist) +}) +app.get("/apixueyuan/getclass_zhuanye",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + + let reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqllist,[reasult[i].classname1+reasult[i].classname2],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + console.log(stucount) + reasult[i].stulen=stucount[0].jishu + } + res.send(reasult) +}) +app.get("/apischool/getclass_newstu",async (req,res)=>{ + const sqlxueyuan ="SELECT * FROM xueyuan" + const xueyuan=await new Promise((resolve, reject) => { + connection.query(sqlxueyuan,(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + const xueyuanlist={}; + for(let i=0;i { + connection.query(sql,[xueyuan[i].id],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + xueyuanlist[xueyuan[i].name]=classxx + } + res.send(xueyuanlist) +}) +app.get("/apixueyuan/get_allstu",async (req,res)=>{ + const sqlstu="SELECT * FROM student WHERE xueyuan=?" + const reastudent=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xueyuan],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + res.send(reastudent) +}) +app.get("/apixueyuan/get_stulist",async (req,res)=>{ + const sqlclass="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sqlclass,[req.query.zhuanye],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + let stu=[]; + for(let i=0;i { + connection.query(sqlstu,[req.query.xueyuan,reasultclass[i].classname1+reasultclass[i].classname2],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + stu=[...stu,...reastudent] + + } + res.send(stu) +}) +app.get("/apixueyuan/getpaixu_allstu",async (req,res)=>{ + if(req.query.search==="") { + + const sql = `SELECT * FROM student WHERE xueyuan=? ORDER BY ${req.query.px} ${req.query.sxnx} ` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + // stu=[...stu,...result] + res.send(result) + //console.log(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM \`student\` WHERE CONCAT(studentname,xuehao,shoujihao,xueyuan,nianjizhaungye) LIKE ? AND xueyuan=? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`,req.query.xueyuan],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + res.send(result) + //stu=[...stu,...result] + } + //res.send(result); +}) +app.get("/apixueyuan/getpaixu_stulist",async (req,res)=>{ + const sqlclass="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sqlclass,[req.query.zhuanye],(err,results,field)=>{ + if(err)throw err; + resolve(results); + }) + }) + let stu=[]; + console.log(reasultclass) + for(let i=0;i { + connection.query(sql,[req.query.xueyuan,reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stu=[...stu,...result] + //res.send(result) + console.log(result) + }else{ + const fg=req.query.search.replace(/ /g,"%") + const sql=`SELECT * FROM \`student\` WHERE CONCAT(studentname,xuehao,shoujihao,xueyuan,nianjizhaungye) LIKE ? AND xueyuan=? AND nianjizhaungye=? ORDER BY ${req.query.px} ${req.query.sxnx}` + const result=await new Promise((resolve, reject) => { + connection.query(sql,[`%${fg}%`,req.query.xueyuan,reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + //res.send(result) + stu=[...stu,...result] + } + + + } + res.send(stu) +}) +app.get("/apixueyuan/getkslist",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + reasultclass.map((banji,index)=>{ + + const kc=JSON.parse(banji.kclist); + if(kc) { + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + } + }) + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) + + let kechengnew=[]; + if(JSON.parse(kechengnewlist.kclist)) { + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + kecheng = [...new Set(kechengnew)] + let ksp = []; + for (let i = 0; i < kecheng.length; i++) { + const kc = "SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(fabukecheng, " + `'["${kecheng[i]}"]'` + ", '$');" + const kspaper = await new Promise((resolve, reject) => { + connection.query(kc, (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + + ksp = [...ksp, ...kspaper]; + } + ksp.map((kspone, indexone) => { + const stutimu = JSON.parse(kspone.stu) + let stukc = []; + console.log(stutimu) + console.log(stulist) + stutimu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + ksp[indexone].sturea = stukc; + }) + res.send(ksp) + }else{ + res.send([]) + } +}) +app.get("/apixueyuan/gettaolonglist",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + reasultclass.map((banji,index)=>{ + + const kc=JSON.parse(banji.kclist); + if(kc) { + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + } + }) + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) + + let kechengnew=[]; + if(JSON.parse(kechengnewlist.kclist)) { + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + kecheng = [...new Set(kechengnew)] + let ksp = []; + for (let i = 0; i < kecheng.length; i++) { + const kc = "SELECT * FROM commitgroup WHERE JSON_CONTAINS(fabukecheng, " + `'[${kecheng[i]}]'` + ", '$');" + console.log(kc) + const kspaper = await new Promise((resolve, reject) => { + connection.query(kc, (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + + ksp = [...ksp, ...kspaper]; + } + ksp.map((kspone, indexone) => { + const stutimu = JSON.parse(kspone.student) + let stukc = []; + console.log(stutimu) + console.log(stulist) + stutimu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + ksp[indexone].sturea = stukc; + }) + for (let i = 0; i < ksp.length; i++) { + const sqlcommit = "SELECT * FROM commit WHERE xuhao=?" + const reasultcommit = await new Promise((resolve, reject) => { + connection.query(sqlcommit, [ksp[i].xuhao], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + const commitstu = []; + const commit = []; + reasultcommit.map((valuecommit, indexcommit) => { + if (stulist.includes(valuecommit.xuehao)) { + commit.push(valuecommit) + commitstu.push(valuecommit.xuehao) + } + }) + ksp[i].commit = commit; + ksp[i].commitstu = commitstu + } + res.send(ksp) + }else{ + res.send([]) + } +}) +app.get("/apixueyuan/gettmjlist",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + reasultclass.map((banji,index)=>{ + + const kc=JSON.parse(banji.kclist); + if(kc) { + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + } + }) + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) +if(JSON.parse(kechengnewlist.kclist)) { + let kechengnew = []; + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + kecheng = [...new Set(kechengnew)] + let ksp = []; + for (let i = 0; i < kecheng.length; i++) { + const kc = "SELECT * FROM perparetmj WHERE JSON_CONTAINS(information, " + `'["${kecheng[i]}"]'` + ", '$.class');" + const kspaper = await new Promise((resolve, reject) => { + connection.query(kc, (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + + ksp = [...ksp, ...kspaper]; + } + for (let i = 0; i < ksp.length; i++) { + const kspone = ksp[i]; + const kspclass = JSON.parse(kspone.information).class; + let tmjstu = [] + for (let j = 0; j < kspclass.length; j++) { + const sqlkc = "SELECT * FROM kechengbiao WHERE teacherid=?"; + const stureasult = await new Promise((resolve, reject) => { + connection.query(sqlkc, [kspclass[j]], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + const stuone = JSON.parse(stureasult[0].student); + tmjstu = [...tmjstu, ...stuone]; + + } + let stukc = []; + tmjstu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + + ksp[i].sturea = stukc; + } + + res.send(ksp) +}else{ + res.send([]) +} +}) + +app.post("/apixueyuan/changepassword",async (req,res)=>{ + try { + const sql = "SELECT password FROM xueyuan WHERE id=?" + const pass = await new Promise((resolve, reject) => { + connection.query(sql, [req.body.xueyuan], (error, results, field) => { + // if (error) throw error; + resolve(results); + }) + }) + if (pass.length === 0) { + res.send({status: "无此学院"}) + } else { + const md5 = crypto.createHash('md5'); + const yuan = md5.update(req.body.yuanpass).digest('hex'); + if (yuan === pass[0].password) { + const sqlupdate = "UPDATE xueyuan SET password=? WHERE id=?" + const md51 = crypto.createHash('md5'); + await new Promise((resolve, reject) => { + connection.query(sqlupdate, [md51.update(req.body.newpass).digest('hex'), req.body.xueyuan], (error, results, field) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({status: "ok"}) + } else { + res.send({status: "原密码错误"}) + } + } + }catch (e) { + //throw e; + await newbug(e,"/apixueyuan/changepassword",req.body); + console.log(e); + } +}) +app.get("/apitea/stumanageinfor",async(req,res)=>{ + try { + const sqlstu = "SELECT * FROM student WHERE xuehao=?" + const reasult = await new Promise((resolve, reject) => { + connection.query(sqlstu, [req.query.stu], (error, results, field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + console.log(123) + if (reasult.length > 0) { + const sql = "SELECT * FROM teacher WHERE id=?" + const teareasult = await new Promise((resolve, reject) => { + connection.query(sql, [reasult[0].fudaoyaunid], (error, results, field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + if(teareasult.length > 0) { + reasult[0].fdyname = teareasult[0].name; + } + const sqlbanji="SELECT * FROM `banjiclass` WHERE CONCAT(classname1,classname2)=?" + const banjireasult=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[reasult[0].nianjizhaungye],(error, results, field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const zyreasult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[banjireasult[0].zhaunyeid],(error,results,field) => { + if (error) { + newbug(error, "/apitea/stuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + reasult[0].zy=zyreasult[0].name + + delete reasult[0].kecb + res.send(reasult[0]) + console.log(1234) + }else{ + res.send({err:"yes"}) + } + + }catch (e) { + console.log(e) + if (e) { + newbug(e, "/apitea/stuinfor", req.query) + } + res.send({err:"ok"}) + } +}) +app.post("/apitea/updatestuinfor",async(req,res)=>{ + const sql="UPDATE student SET studentname=?,shoujihao=?,xingbian=?,gongyumingche=?,shushemc=?,ruxuetime=?,idcard=?,zzmm=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.infor.studentname,req.body.infor.shoujihao,req.body.infor.xingbian,req.body.infor.gongyumingche,req.body.infor.shushemc,req.body.infor.ruxuetime,req.body.infor.idcard,req.body.infor.zzmm,req.body.infor.xuehao],(error,results,field)=>{ + if (error) { + newbug(error, "/apitea/updatestuinfor", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send({err:"ok"}) + // console.log(req.body); +}) +app.get("/apitea/getteaparent",async(req,res)=>{ + const sql="SELECT * FROM parents WHERE stdentid=?"; + const reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.stu],(error, results, fields) => { + if (error) { + newbug(error, "/apitea/getteaparent", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(reasult) +}) +app.post("/apitea/updateparents",async(req,res)=>{ + const sql="UPDATE parents SET name=?,iphone=?,guanxi=? WHERE id=?"; + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.parents.name,req.body.parents.iphone,req.body.parents.guanxi,req.body.parents.id],(error, results, fields) => { + if (error) { + newbug(error, "/apitea/updateparents", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send({ok:"ok"}) +}) +app.get("/apitea/stunewparent",async(req,res)=>{ + const sqllen="SELECT COUNT(*) AS leng FROM parents" + const reasultlen=await new Promise((resolve, reject) => { + connection.query(sqllen,(error,results,fields) => { + if (error) { + newbug(error, "/apitea/stunewparent", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlinsert="INSERT INTO parents(id,stdentid) VALUES(?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[parseInt(reasultlen[0].leng+1),req.query.xuehao],(error,results,fields) => { + if (error) { + newbug(error, "/apitea/stunewparent", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send({length:reasultlen[0].leng+1}) +}) +app.post("/apixueyuan/changezhuanye",async (req,res)=>{ + const sql="UPDATE zhuanye SET name=?,jianjie=? WHERE id=?" + + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.name,req.body.jianjie,req.body.id],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/changezhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + +}) +app.post("/apixueyuan/addzhuanye",async (req,res)=>{ + const sqlinsert="INSERT INTO zhuanye(id,name,jianjie,xueyuanid,classs) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.id,req.body.name,req.body.jianjie,req.body.xueyuanid,req.body.classs],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlselect="SELECT * FROM xueyuan WHERE id=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.xueyuanid],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let zhuanye=JSON.parse(reasult[0].zhuanye); + zhuanye.push({zyid: req.body.id, title: req.body.name, jianjie:req.body.jianjie}) + const sqlupdate="UPDATE xueyuan SET zhuanye=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(zhuanye,null,4),req.body.xueyuanid],(error,results,fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) +}) +async function huqoukecheng(kecheng){ + let kechenglist=[] + + for(let i=0;i { + connection.query(sqlkc,[kecheng[i]],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results[0]) + }) + }) + if(kc) { + delete kc.classzou + delete kc.classtime + const sqltea = "SELECT * FROM teacher WHERE xuegonghao=?" + const teareasult = await new Promise((resolve, reject) => { + connection.query(sqltea, [kc.teacher], (error, results, fields) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + if(teareasult.length>0) { + kc.teaname = teareasult[0].name; + const sqlstu = "SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM `student` WHERE kecb LIKE ?" + const stureasult = await new Promise((resolve, reject) => { + connection.query(sqlstu, [`%"ke": ${kc.classid}%`], (error, results, field) => { + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + kc.stulist = stureasult; + kechenglist.push(kc); + } + }else{ + kechenglist.push("nokecheng") + } + } + return kechenglist +} +app.get("/apixueyuan/addclassinfor",async(req,res)=>{ + const result=await huqoukecheng([req.query.teacherid]); + res.send(result[0]); +}) +app.get("/apixueyuan/getkecheng",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + stulist.push(stuname.xuehao) + }) + } + //旧代码废弃开始 + if(1===2) { + reasultclass.map((banji, index) => { + + const kc = JSON.parse(banji.kclist); + + kc.zhuanyeclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + + kc.publicclass.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + kc.stuchoose.map((choose, indexchoose) => { + choose.kechenglist.map((zyk, indexzyk) => { + kecheng.push(zyk.classid) + }) + }) + }) + kecheng = [...new Set(kecheng)] + } + //旧代码废弃 结束 + const sqlkclist="SELECT * FROM zhuanye WHERE id=?" + const kechengnewlist=await new Promise((resolve, reject) => { + connection.query(sqlkclist,[req.query.zhuanye],(error,results,field)=>{ + if(error)throw error; + resolve(results[0]); + }) + }) + + let kechengnew=[]; + if(JSON.parse(kechengnewlist.kclist)) { + JSON.parse(kechengnewlist.kclist).map((value, index) => { + kechengnew.push(value.teacherid) + }) + console.log(kechengnew) + kechengnew = [...new Set(kechengnew)] + res.send(await huqoukecheng(kechengnew)) + } +}) +app.get("/apixueyuan/get_addstu",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE xueyuanid=? AND zhaunyeid=?" + const reasultclass=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xueyuan,req.query.zhuanye],(err,result,field)=>{ + if(err)throw err; + resolve(result); + }) + }) + let kecheng=[] + + + let stulist=[] + for(let i=0;i { + connection.query(sqlstuclass,[reasultclass[i].classname1+reasultclass[i].classname2],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + stureasultclass.map((stuname,indexstu)=>{ + if(!JSON.parse(req.query.readystu).includes(stuname.xuehao)) { + stuname.choose = false + stulist.push(stuname) + } + }) + } + res.send(stulist); +}) +app.post("/apixueyuan/addstutokc",async (req,res)=>{ + const sqlkcb="SELECT * FROM kechengbiao WHERE classid=?" + + const kcb=await new Promise((resolve, reject) => { + connection.query(sqlkcb,[req.body.classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kctime=JSON.parse(kcb[0].classzou) + let kcbiao=[]; + kctime.map((valuezou,indexzou)=>{ + valuezou.class.map((valueke,indexke)=>{ + kcbiao.push(valueke.ke) + }) + }) + const stu=JSON.parse(req.body.stu); + for(let i=0;i { + connection.query(sqlstu,[stu[i]],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let kclisttemp=[]; + if(stureasult[0].kecb) { + kclisttemp=JSON.parse(stureasult[0].kecb) + }else{ + for(let i=0;i<31;i++){ + for(let j=1;j<=7;j++){ + for(let k=1;k<=4;k++){ + kclisttemp.push({ + ke: 0, + time: `n${i}z${j}A${k}` + }) + } + } + } + } + let kclisttemp2=[...kclisttemp]; + kclisttemp.map((value1,index)=>{ + // console.log(value1) + if(kcbiao.includes(value1.time)){ + // console.log(123) + kclisttemp2[index].ke=parseInt(kcb[0].classid) + } + }) + const sqlupdate="UPDATE student SET kecb=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(kclisttemp2),stureasult[0].xuehao],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + + //res.send({ke:kclisttemp2,kek:kcbiao}); + + + } + let stukc=JSON.parse(kcb[0].student) + stukc=[...stukc,...stu]; + stukc=[...new Set(stukc)] + //res.send(stukc); + const sqlupdatestu="UPDATE kechengbiao SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatestu,[JSON.stringify(stukc),kcb[0].classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({status:"ok"}) + +}) +app.post("/apixueyuan/yuantuike",async(req,res)=>{ + const sqlkcb="SELECT * FROM kechengbiao WHERE classid=?" + + const kcb=await new Promise((resolve, reject) => { + connection.query(sqlkcb,[req.body.classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kctime=JSON.parse(kcb[0].classzou) + let kcbiao=[]; + kctime.map((valuezou,indexzou)=>{ + valuezou.class.map((valueke,indexke)=>{ + kcbiao.push(valueke.ke) + }) + }) + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.stu],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let kclisttemp=[]; + if(stureasult[0].kecb) { + kclisttemp=JSON.parse(stureasult[0].kecb) + }else{ + for(let i=0;i<31;i++){ + for(let j=1;j<=7;j++){ + for(let k=1;k<=4;k++){ + kclisttemp.push({ + ke: 0, + time: `n${i}z${j}A${k}` + }) + } + } + } + } + let kclisttemp2=[...kclisttemp]; + kclisttemp.map((value1,index)=>{ + // console.log(value1) + if(kcbiao.includes(value1.time)){ + // console.log(123) + kclisttemp2[index].ke=0 + } + }) + + const sqlupdate="UPDATE student SET kecb=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(kclisttemp2),stureasult[0].xuehao],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + let stukc=JSON.parse(kcb[0].student) + stukc=stukc.filter(stu=>stu!==req.body.stu) + const sqlupdatestu="UPDATE kechengbiao SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatestu,[JSON.stringify(stukc),kcb[0].classid],(error,results,field)=>{ + if (error) { + newbug(error, "/apixueyuan/addzhuanye", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apiclass/getxueke",async(req,res)=>{ + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + + const banji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.query.banji],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results[0]) + }) + }) + if(banji) { + const sqlstubanji = "SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist = await new Promise((resolve, reject) => { + connection.query(sqlstubanji, [banji.classname1 + banji.classname2], (error, results, field) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kcall = JSON.parse(banji.kclist); + //系统自选 + if (kcall) { + let systemkcall = kcall.systemchoose; + for (let i = 0; i < systemkcall.length; i++) { + const systemonekc = systemkcall[i].kechenglist; + let kc = [] + systemonekc.map((valuekc, index) => { + kc.push(valuekc.classid) + }) + systemkcall[i].kcinfor = await huqoukecheng(kc); + let stu = []; + systemkcall[i].kcinfor.map((valuekc, indexkc) => { + valuekc.stulist.map((valuestu, indexstu) => { + + stu.push(valuestu.xuehao) + }) + }) + let stuallno = stulist.filter(word => !stu.includes(word.xuehao)) + systemkcall[i].nostu = stuallno + systemkcall[i].addsystemchoose = {stulist: []} + } + let studentkcall = kcall.stuchoose + for (let i = 0; i < studentkcall.length; i++) { + const stuonekc = studentkcall[i].kechenglist; + let kc = [] + stuonekc.map((valuekc, index) => { + kc.push(valuekc.classid) + + }) + studentkcall[i].kcinfor = await huqoukecheng(kc); + let stu = []; + studentkcall[i].kcinfor.map((valuekc, indexkc) => { + valuekc.stulist.map((valuestu, indexstu) => { + stu.push(valuestu.xuehao) + }) + }) + let stuallno = stulist.filter(word => !stu.includes(word.xuehao)) + studentkcall[i].nostu = stuallno + studentkcall[i].addsystemchoose = {stulist: []} + } + let publickc = kcall.publicclass; + let kclist = []; + publickc.map((kc, kcindex) => { + kclist.push(kc.classid) + + }) + let publickcinfor = await huqoukecheng(kclist) + let zhuanyekc = kcall.zhuanyeclass + kclist = []; + zhuanyekc.map((zy, zyindex) => { + kclist.push(zy.classid) + }) + let zhaunyekcinfor = await huqoukecheng(kclist) + res.send({ + systemchoose: systemkcall, + studentchoose: studentkcall, + publickc: publickcinfor, + zhaunyekc: zhaunyekcinfor + }) + } else { + res.send({ + systemchoose: [], + studentchoose: [], + publickc: [], + zhaunyekc: [] + }) + } + }else { + res.send({ + systemchoose: [], + studentchoose: [], + publickc: [], + zhaunyekc: [] + }) + } +}) +app.post("/apiclass/addsyschoosekc",async(req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.systemchoose[req.body.index].kechenglist.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apiclass/addstuchoosekc",async(req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.stuchoose[req.body.index].kechenglist.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apiclass/addpublickc",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.publicclass.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apiclass/addzhuanyekc",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.zhuanyeclass.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(JSON.stringify(kclist)) +}) +app.post("/apibanji/addsystemchoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.post("/apibanji/addstuchoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.post("/apibanji/changestuchoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + //kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + kclist.systemchoose[req.body.index].kechengname=req.body.name + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.post("/apibanji/changesyschoose",async (req,res)=>{ + const sqlsselect="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlsselect,[req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + console.log(reasult) + let kclist=JSON.parse(reasult[0].kclist) + //kclist.systemchoose.push(JSON.parse(req.body.addsystem)); + kclist.stuchoose[req.body.index].kechengname=req.body.name + const sqlupdatebanji="UPDATE banjiclass SET kclist=? WHERE CONCAT(classname1,classname2)=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebanji,[JSON.stringify(kclist),req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstubanji="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,zzmm FROM student WHERE nianjizhaungye=?" + const stulist=await new Promise((resolve, reject) => { + connection.query(sqlstubanji,[req.body.classname],(error,results,field)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(stulist) +}) +app.get("/apiclass/chaxunsyj",async(req,res)=>{ + const sqlclass="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasultclass =await new Promise((resolve, reject) => { + connection.query(sqlclass,[req.query.classname],(error,results,fields)=>{ + + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + + }) + }) + console.log(reasultclass) + const sqlxueyuan="SELECT * FROM xueyuan WHERE id=?" + if(reasultclass[0]) { + const xueyuan = await new Promise((resolve, reject) => { + connection.query(sqlxueyuan, [reasultclass[0].xueyuanid], (error, results, field) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(xueyuan[0]) + } +}) +app.post("/apixueyuan/savekcallinfor",async(req,res)=>{ + const sqlupdate="UPDATE kechengall SET name=?,kch=?,jianjie=?,color=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.name,req.body.kch,req.body.jianjie,req.body.color,req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlupdatekc="UPDATE kechengbiaotest SET color=?,classname=? WHERE kechengid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatekc,[req.body.color,req.body.name,req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) +}) +app.post("/apixueyuan/savekcallkcb",async(req,res)=>{ + const sqlupdate="UPDATE kechengall SET kechenglist=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + const sqlupdatetime="UPDATE kechengbiaotest SET classzou=?,bianjikc=? WHERE kechengid=?" + + await new Promise((resolve, reject) => { + connection.query(sqlupdatetime,[JSON.stringify(kc),JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM kechengbiaotest WHERE kechengid=?" + let banjilist=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }); + console.log(banjilist.length) + for(let i=0;i { + connection.query(sqlupdateclasstime,[JSON.stringify(classtimeqj),banjilist[i].classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + } + + + +}) +app.post("/apixueyuan/savekcallkcb_add_stu",async(req,res)=>{ + const sqlselect_old="SELECT * FROM kechengall WHERE id=?" + const old_result=await new Promise((resolve, reject) => { + connection.query(sqlselect_old,[req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const timekc_old=[]; + old_result.map((zhouvalue,zhouindex)=>{ + zhouvalue.map((dayvalue,dayindex)=>{ + dayvalue.map((kevalue,keindex)=>{ + timekc_old.push(`n${kevalue.zhou}z${kevalue.day+1}A${kevalue.jie}`) + }) + }) + }) + const sqlupdate="UPDATE kechengall SET kechenglist=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + let kcnew=[] + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + kcnew.push(`n${ke.zhou}z${ke.day+1}A${ke.jie}`) + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + const sqlupdatetime="UPDATE kechengbiaotest SET classzou=?,bianjikc=? WHERE kechengid=?" + + await new Promise((resolve, reject) => { + connection.query(sqlupdatetime,[JSON.stringify(kc),JSON.stringify(req.body.kcb),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM kechengbiaotest WHERE kechengid=?" + let banjilist=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }); + console.log(banjilist.length) + for(let i=0;i { + connection.query(sqlstu, (error, results, fields) => { + if (error) throw error; + resolve(results) + }) + }) + const sturesult_temp=[...sturesult] + for(let stu_i=0;stu_i{ + if(kcnew.includes(keone.time)){ + kcstu[keindex].ke=parseInt(banjilist[0].classid) + }else if(timekc_old.includes(keone.time)){ + kcstu[keindex].ke=0 + + } + }) + const sqlupdate_stu="UPDATE student SET kecb=? WHERE studentid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate_stu,[JSON.stringify(kcstu),sturesult[stu_i].studentid], (error,results,fields)=>{ + if (error) throw error; + resolve(results) + }) + }) + } + const xiang=banjilist[i] + + console.log(i) + //console.log(xiang) + let classtimeqj=JSON.parse(xiang.classtime) + classtimeqj={...qj,...classtimeqj}; + const sqlupdateclasstime="UPDATE kechengbiaotest SET classtime=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdateclasstime,[JSON.stringify(classtimeqj),banjilist[i].classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + } + + res.send({status:"ok"}) +}) +app.post("/apixueyaun/addbanjitokc",async(req,res)=>{ + const sqlcount="SELECT * FROM `kechengbiaotest` ORDER BY classid DESC LIMIT 1;" + let len=await new Promise((resolve, reject) => { + connection.query(sqlcount,(error,results,fields)=>{ + resolve(results[0].classid) + }) + }) + let length=parseInt(len)+1 + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + //console.log(qj); + //console.log(kc) + // const sqlupdate= 'UPDATE kechengbiao SET classtime=?,classzou=?,timu=? WHERE classid=?' ; + //await new Promise((resolve, reject) => { + // connection.query(sqlupdate,[JSON.stringify(qj),JSON.stringify(kc),req.body.classid,"[]"],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + // }) + const sqlinsert="INSERT INTO kechengbiaotest(student,classtime,classzou,color,timu,kechengid,bianjikc,classid) VALUES(?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,["[]",JSON.stringify(qj),JSON.stringify(kc),req.body.color,"[]",req.body.kechengid,JSON.stringify(req.body.kcb),length+1],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({id:length+1,studentnum:120}) +}) +app.post("/apixueyaun/addbanjitokcupdate",async(req,res)=>{ + const sqlcount="SELECT * FROM `kechengbiaotest` ORDER BY classid DESC LIMIT 1;" + let len=await new Promise((resolve, reject) => { + connection.query(sqlcount,(error,results,fields)=>{ + resolve(results[0].classid) + }) + }) + let length=parseInt(len)+1 + const kecheng=req.body.kcb; + let qj={}; + let kc=[]; + kecheng.map((zhou,zhouindex)=>{ + let zhoukc=[]; + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!=0){ + let keone={ke:`n${ke.zhou}z${ke.day+1}A${ke.jie}`,day:ke.day+1,jie:ke.jie} + zhoukc.push(keone); + qj[`n${ke.zhou}z${ke.day+1}A${ke.jie}`]=[]; + } + }) + }) + if(zhoukc.length!==0){ + const kcone={ + zhou:zhouindex+1, + class:zhoukc + } + kc.push(kcone) + } + + + }) + //console.log(qj); + //console.log(kc) + // const sqlupdate= 'UPDATE kechengbiao SET classtime=?,classzou=?,timu=? WHERE classid=?' ; + //await new Promise((resolve, reject) => { + // connection.query(sqlupdate,[JSON.stringify(qj),JSON.stringify(kc),req.body.classid,"[]"],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + // }) + const sqlinsert="INSERT INTO kechengbiaotest(student,classtime,classzou,color,timu,kechengid,bianjikc,classid,place,studentnum,teaname,teacherid,teacher,classbh,classname) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,["[]",JSON.stringify(qj),JSON.stringify(kc),req.body.color,"[]",req.body.kechengid,JSON.stringify(req.body.kcb),length+1,req.body.place,req.body.studentnum,req.body.teaname,req.body.teacherid,req.body.teacher,req.body.classbh,req.body.classname],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({id:length+1,studentnum:120}) +}) +async function getkcks(kcteacherid){ + const sql="SELECT * FROM kaoshipaper WHERE JSON_CONTAINS(fabukecheng, "+`'["${kcteacherid}"]'`+", '$');" + let result=await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i0){ + //考试未开始 + result[i].zt="test_no_start" + }else if(moment().diff(moment(xx.timeend),'s')<0){ + //考试未结束 + result[i].zt="testing" + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + }else{ + let pan_jue_finish; + //考试已结束 + let resultstd=result[i] + if(JSON.parse(result[i].xx).pan_jue_finsih===false) { + const sql = "SELECT * FROM kaoshiend WHERE ks=?"; + const resultksdaan = await new Promise((resolve, reject) => { + connection.query(sql, [parseInt(result[i].uuid)], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + let finish = true; + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[j].panjaun === "teacher") { + if (value.teacherid === undefined) { + finish = false + } + } + } + if (value.lx === "简答题") { + if (value.teacherid === undefined) { + finish = false + } + } + }) + + } + if(finish===true){ + let jsonxx=JSON.parse(resultstd.xx); + jsonxx.pan_jue_finsih=true + const sqlupdate = 'UPDATE kaoshipaper SET xx=? WHERE `uuid`=?'; + const up = await new Promise((resolve, reject) => { + connection.query(sqlupdate, [JSON.stringify(jsonxx, null, 4), result[i].uuid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + let infor=[] + let allprint=[] + if(finish===true){ + + for (let j = 0; j < resultksdaan.length; j++) { + const ksdaan = JSON.parse(resultksdaan[j].ksdaan); + let num=0; + let ksdaantemp=[...ksdaan] + ksdaan.map((value, index) => { + if (value.lx === "填空题") { + console.log(resultstd) + const stddaan = JSON.parse(resultstd.std); + if (stddaan[index].panjaun === "teacher") { + num=num+value.teacherprint + ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else{ + if(value.sr.trimStart()===stddaan[index].std.trimStart()){ + num=num+stddaan[index].print + ksdaantemp[index].way="computer" + ksdaantemp[index].printstu=stddaan[index].print + } + } + } + else if (value.lx === "简答题") { + const stddaan = JSON.parse(resultstd.std); + num=num+value.teacherprint + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=value.teacherprint + }else if(value.lx==="多选题"){ + let zq=true + const stddaan = JSON.parse(resultstd.std); + value.daan.map((item,xuaho)=>{ + if(!stddaan[index].std.includes(item)){} + zq=false + }) + if(value.daan.length!==stddaan[index].std.length){ + zq=false + } + if(zq){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + + + }else if(value.lx==="单选题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + num=num+0 + } + }else if(value.lx==="判断题"){ + const stddaan = JSON.parse(resultstd.std); + if(value.daan===stddaan[index].std){ + num=num+stddaan[index].print + //ksdaantemp[index].way="teacher" + ksdaantemp[index].printstu=stddaan[index].print + }else{ + ksdaantemp[index].printstu=0 + } + } + + }) + const sqlupdate = 'UPDATE kaoshiend SET ksdaan=?,allprint=? WHERE id=?'; + //resultksdaan[i]. + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(ksdaantemp,null,4),num,resultksdaan[i].id],(error, results) => { + if (error) throw error; + resolve(results); + + }) + }) + allprint.push(num) + infor.push({infor:ksdaantemp,num:num}) + } + } + pan_jue_finish=finish + // res.send({finish: finishr}) + }else{ + pan_jue_finish=true + // res.send({finish: true}) + } + //判断完成 + if(pan_jue_finish===true) { + result[i].zt = "finish_pan_jue" + }else{ + result[i].zt = "pan_jue" + } + + const entersql="SELECT * FROM kaoshing WHERE ks=?" + const enterresult=await new Promise((resolve, reject) => { + connection.query(entersql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newenterresult = Array.from(new Set(enterresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + const endsql="SELECT * FROM kaoshiend WHERE ks=?" + const endresult=await new Promise((resolve, reject) => { + connection.query(endsql,[result[i].uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const newendresult = Array.from(new Set(endresult.map(item => item.xuehao))).map(xuehao => { + return enterresult.find(item => item.xuehao === xuehao); + }); + result[i].enterstu=newenterresult.length; + result[i].endstu=newendresult.length; + + + } + if(!result[i].std){ + result[i].zt="wei_fa_bu" + } + + } + return result; +} +async function getkcleaarntaolong(kcteacherid){ + const sql="SELECT * FROM commitgroup WHERE JSON_CONTAINS(fabukecheng, "+`'[${kcteacherid}]'`+", '$')"; + let reasult = await new Promise((resolve, reject) => { + connection.query(sql,(error, results, fields) => { + if(error) reject(error); + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlcommit,[reasult[i].xuhao],(error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + let stufinish=[] + resultcommit.map((value) => { + stufinish.push(value.xuehao) + }) + stufinish=[...new Set(stufinish)]; + reasult[i].stufinish=stufinish; + for(let j=0;j { + connection.query(sqlclass, [JSON.parse(reasult[i].fabukecheng)[j]], (error, results, fields) => { + if (error) reject(error); + resolve(results); + }) + }) + console.log(resultclass) + resultclass.map((value,index)=>{ + kechengname=kechengname+" "+value.classname+"@"+value.classbh + const temp=JSON.parse(value.student); + stu=[...stu,...temp] + }) + + + + } + let uniqueArr = [...new Set(stu)]; + reasult[i].studentshiji=uniqueArr; + + reasult[i].classnamelist=kechengname; + } + return reasult; +} +async function getkctmj(kcteacheid){ + const sql = `SELECT * FROM perparetmj WHERE information LIKE "%\\\"${kcteacheid}\\\"%"`; + console.log(sql) + const kctmj=await new Promise((resolve, reject) => { + connection.query(sql, (error, results, fields) => { + if (error) throw error; + resolve(results) + }); + }) + return kctmj +} +app.get("/apixueyaun/getkechengmanage",async(req,res)=>{ + const sqlkcall="SELECT * FROM kechengall WHERE id=?" + const kcallresult=await new Promise((resolve, reject) => { + connection.query(sqlkcall,[req.query.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const kcb=JSON.parse(kcallresult[0].kechenglist); + const sqlkc="SELECT * FROM kechengbiaotest WHERE kechengid=?" + const kclist=await new Promise((resolve, reject) => { + connection.query(sqlkc,[req.query.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + for(let kc_i=0;kc_i{ + const sqlupdate="UPDATE kechengbiaotest SET teacherid=?,teacher=?,teaname=?,place=?,studentnum=?,classbh=? WHERE classid=?" + console.log(req.body) + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.teacherid,req.body.teacher,req.body.teaname,req.body.place,req.body.studentnum,req.body.classbh,req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) +}) +app.post("/apixueyuan/deletekcbanji",async(req,res)=>{ + const sql="DELETE FROM kechengbiaotest WHERE classid=?" + console.log(req.body) + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) +}) +}) +app.get("/apixueyuan/newkcall",async(req,res)=>{ + let kechengbiao=[]; + for(let i=0;i<31;i++){ + let zhou=[]; + for (let j=0;j<7;j++){ + const day=[ + { + zhou:i,//第几周 + day:j,//每周第几天 + jie:1, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:2, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:3, + classid:0//class号 + + },{ + zhou:i,//第几周 + day:j,//每周第几天 + jie:4, + classid:0//class号 + + } + ] + zhou.push(day) + } + kechengbiao.push(zhou) + } + const sqlinsert="INSERT INTO kechengall (kechenglist) VALUES(?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[JSON.stringify(kechengbiao)],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlread="SELECT * FROM kechengall ORDER BY id DESC LIMIT 1" + const newid=await new Promise((resolve, reject) => { + connection.query(sqlread,(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(newid[0]); +}) +app.get("/apixueyuan/getkechengbiaotestinfor",async(req,res)=>{ + const sql="SELECT * FROM kechengbiaotest WHERE teacherid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.teacherid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send(result[0]); +}) +app.post("/apixueyuan/savepyfa",async (req,res)=>{ + const sqlupdate="UPDATE zhuanye SET pyfa=?,kclist=?,infor=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.xueyear),JSON.stringify(req.body.kclist),JSON.stringify(req.body.infor),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apixueyuan/openpyfa",async (req,res)=>{ + const sqlrea="SELECT * FROM zhuanye WHERE id=?" + let reasultA=await new Promise((resolve, reject) => { + connection.query(sqlrea,[req.query.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + if(reasultA[0].pyfa) { + let reasult = JSON.parse(reasultA[0].pyfa); + console.log(reasult) + const reasulttemp = [...reasult]; + for (let i = 0; i < reasult.length; i++) { + const pyfaone = reasult[i]; + for (let j = 0; j < pyfaone.publicclass.length; j++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].publicclass[j] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].publicclass[j].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + + } + for (let j = 0; j < pyfaone.zhuanyeclass.length; j++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].zhuanyeclass[j] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].zhuanyeclass[j].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + + } + for (let j = 0; j < pyfaone.systemchoose.length; j++) { + const onechoose = pyfaone.systemchoose[j]; + for (let k = 0; k < onechoose.ke.length; k++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].systemchoose[j].ke[k] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].systemchoose[j].ke[k].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + } + } + for (let j = 0; j < pyfaone.studnetchoose.length; j++) { + const onechoose = pyfaone.studnetchoose[j]; + for (let k = 0; k < onechoose.ke.length; k++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + reasulttemp[i].studnetchoose[j].ke[k] = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasulttemp[i].studnetchoose[j].ke[k].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + } + } + + } + reasultA[0].pyfa = JSON.stringify(reasulttemp) + let kclist = []; + const kcold = JSON.parse(reasultA[0].kclist); + for (let i = 0; i < kcold.length; i++) { + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + const kcone = await new Promise((resolve, reject) => { + connection.query(sqlselect, [kcold[i].classid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + kclist.push(kcone) + } + reasultA[0].kclist = kclist + console.log(12) + res.send(reasultA[0]); + }else{ + res.send({ststus:"new"}) + + } +}) +app.get("/apixueyuan/readxueke",async (req,res)=>{ + const sql="SELECT * FROM student WHERE xuehao=?" + const reasultstu=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasultbanji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[reasultstu[0].nianjizhaungye],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlkecheng="SELECT * FROM zhuanye WHERE id=?" + const kecheng=await new Promise((resolve, reject) => { + connection.query(sqlkecheng,[reasultbanji[0].zhaunyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let ruxueyear=moment(reasultstu[0].ruxuetime).year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + if(month<1){ + month=1; + } + let xueke=JSON.parse(kecheng[0].pyfa)[month-1].studnetchoose + for(let i=0;i { + connection.query(sqlke,[xuekeone.ke[j].teacherid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results[0]) + }) + }) + delete reasultke.classtime; + xueke[i].ke[j]={...reasultke} + //reasult[a].ke[j] + } + } + res.send({month:month,xueke:xueke}) +}) +app.get("/apistu/xueke",async (req,res)=>{ + const sql="SELECT * FROM student WHERE xuehao=?" + let reasult=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + +//console.log(reasult[0].chooseke) + res.send(reasult[0].chooseke) + +}) +app.post("/api/xuekesave",async (req,res)=>{ + const sqlkcget="SELECT * FROM kechengbiaotest WHERE classid=?" + const kc=await new Promise((resolve, reject) => { + connection.query(sqlkcget,[req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kecheng=[]; + let kclist=JSON.parse(kc[0].classzou) + kclist.map((zouvalue,zouindex)=>{ + zouvalue.class.map((kevalue,keindex)=>{ + kecheng.push( + kevalue.ke + ) + }) + }) + let stulist=JSON.parse(kc[0].student); + // stulist=stulist.filter(item=>item!==req.body.xuehao) + stulist.push(req.body.xuehao); + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + console.log(stureasult) + let temp=[...JSON.parse(stureasult[0].kecb)] + JSON.parse(stureasult[0].kecb).map((kcvalue,indexke)=>{ + if(kecheng.includes(kcvalue.time)){ + temp[indexke].ke=parseInt(req.body.classid); + } + }) + console.log(temp); + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(temp),JSON.stringify(req.body.chooseke),req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(temp); +}) +app.post("/api/xueketuike",async (req,res)=>{ + const sqlkcget="SELECT * FROM kechengbiaotest WHERE classid=?" + const kc=await new Promise((resolve, reject) => { + connection.query(sqlkcget,[req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kecheng=[]; + let kclist=JSON.parse(kc[0].classzou) + kclist.map((zouvalue,zouindex)=>{ + zouvalue.class.map((kevalue,keindex)=>{ + kecheng.push( + kevalue.ke + ) + }) + }) + let stulist=JSON.parse(kc[0].student); + // stulist.push(req.body.xuehao); + stulist=stulist.filter(item=>item!==req.body.xuehao) + const updatesql="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(stulist),req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const stureasult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + console.log(stureasult) + let temp=[...JSON.parse(stureasult[0].kecb)] + JSON.parse(stureasult[0].kecb).map((kcvalue,indexke)=>{ + if(kecheng.includes(kcvalue.time)){ + temp[indexke].ke=0; + } + }) + console.log(temp); + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(temp),JSON.stringify(req.body.chooseke),req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(temp); +}) +app.get("/apixueyuan/zyinfor",async(req,res)=>{ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zhuanye],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + res.send(reasult[0]); +}) + +async function getxueyuanzystu(zhuanyeid){ + const sqlbanji="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const zybj=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[zhuanyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + let stulist=[] + for(let i=0;i { + connection.query(sqlstu,[zybj[i].classname1+zybj[i].classname2],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + stuone.map((stua,indexa)=>{ + stulist.push(stua.xuehao) + }) + + } + return stulist +} +async function getxueyuanzystu_xx(zhuanyeid){ + const sqlbanji="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const zybj=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[zhuanyeid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + let stulist=[] + for(let i=0;i { + connection.query(sqlstu,[zybj[i].classname1+zybj[i].classname2],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + stuone.map((stua,indexa)=>{ + let temp={...stua} + if(stua.chooseke){ + temp.chooseke=JSON.parse(stua.chooseke) + }else{ + temp.chooseke={status:"no"} + } + delete temp.kecb + delete temp.morenpassword + stulist.push(temp) + }) + + } + return stulist +} +async function updatekc(xuehao){ + let stulista=[...xuehao] + let kestu={} + for(let a=0;a { + connection.query(sqlstu,[stulista[a]],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji = "SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const reasultbanji = await new Promise((resolve, reject) => { + connection.query(sqlbanji, [stuinfor[0].nianjizhaungye], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + if(reasultbanji[0]) { + const sqlkecheng = "SELECT * FROM zhuanye WHERE id=?" + const kecheng = await new Promise((resolve, reject) => { + connection.query(sqlkecheng, [reasultbanji[0].zhaunyeid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stukecb = []; + for (let i = 0; i < 31; i++) { + for (let j = 1; j < 7; j++) { + for (let k = 1; k < 4; k++) { + stukecb.push({ + ke: 0, + time: `n${i}z${j}A${k}` + }) + } + } + } + let stukecbwb = JSON.stringify(stukecb) + let stuchoose = {} + if (JSON.parse(stuinfor[0].chooseke)) { + stuchoose = JSON.parse(stuinfor[0].chooseke) + } + let month=0; + if(stuinfor[0].ruxuetime) { + let ruxueyear = moment(stuinfor[0].ruxuetime).year(); + let moment1 = moment(`${ruxueyear}-09-01`) + month = Math.ceil(moment().diff(moment1, 'months') / 6); + } + console.log(month) + if(month<0){ + month=0; + } + const pyfa = JSON.parse(kecheng[0].pyfa); + + for (let i = 0; i < pyfa[month].publicclass.length; i++) { + stukecbwb = await addkcbtojson(stukecbwb, pyfa[month].publicclass[i]) + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [pyfa[month].publicclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + + stulist.push(stuinfor[i].xuehao) + + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), pyfa[month].publicclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + for (let i = 0; i < pyfa[0].zhuanyeclass.length; i++) { + stukecbwb = await addkcbtojson(stukecbwb, pyfa[month].zhuanyeclass[i]) + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [pyfa[month].zhuanyeclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + stulist.push(stuinfor[i].xuehao) + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), pyfa[month].zhuanyeclass[i].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + } + //更新学生培养方案后加入学生已选课 + let xueke = []; + pyfa[0].systemchoose.map((value, index) => { + xueke.push(value.xkh); + }) + pyfa[0].studnetchoose.map((value, index) => { + xueke.push(value.xkh) + }) + for (let b = 0; b < xueke.length; b++) { + if (stuchoose[xueke[b]]) {//此课选课存在 + stukecbwb = await addkcbtojson(stukecbwb, stuchoose[xueke[b]]) + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [stuchoose[xueke[b]].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + stulist.push(stuinfor[0].xuehao) + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), stuchoose[xueke[b]].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } + } + const updatesql = "UPDATE student SET kecb=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [stukecbwb, stulista[a]], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + + + } + } +} +async function updatepyfabefore(zhuanyeid){ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[zhuanyeid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + const pyfa=JSON.parse(reasult[0].pyfa) + let kclist=[] + pyfa.map((yearvalue,yearindex)=>{ + yearvalue.publicclass.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + yearvalue.zhuanyeclass.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + yearvalue.systemchoose.map((kelist,kelistindex)=>{ + kelist.ke.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + }) + yearvalue.studnetchoose.map((kelist,kelistindex)=>{ + kelist.ke.map((kevalue,indexke)=>{ + kclist.push(kevalue.classid) + }) + }) + }) + const stulisttx=await getxueyuanzystu(zhuanyeid); + //先清除以前的本专业同学 + for(let b=0;b { + connection.query(sqlkcstu, [kclist[b]], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + //stulist.push(stuinfor[i].xuehao) + stulist=stulist.filter(item=>!stulisttx.includes(item)) + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), kclist[b]], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + } +} +app.post("/apixueyuan/updatepyfa",async (req,res)=>{ + await updatepyfabefore(req.body.zhuanyeid) + const sqlupdate="UPDATE zhuanye SET pyfa=?,kclist=?,infor=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.xueyear),JSON.stringify(req.body.kclist),JSON.stringify(req.body.infor),req.body.id],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const stu=await getxueyuanzystu(req.body.zhuanyeid); + await updatekc(stu) + res.send({status:"ok"}) +}) +app.post("/apischool/updatestukb",async (req,res)=>{ + const sqlupdatekc="UPDATE kechengbiaotest SET kecb=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatekc,["[]"],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + const sqlstu="SELECT * FROM student" + const stu= await new Promise((resolve, reject) => { + connection.query(sqlstu,(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.body) + console.log(error) + } + resolve(results) + }) + }) + let stulist=[]; + stu.map((value,index)=>{ + stulist.push(value.xuehao) + }) + await updatekc(stulist) + res.send({status:"ok"}) + +}) +app.get("/apixueyuan/getpyfastu",async(req,res)=>{ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasultA=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zhuanyeid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist=await getxueyuanzystu_xx(req.query.zhuanyeid) + let reasult=[] + if(reasultA.length!==0&&JSON.parse(reasultA[0].pyfa)!==null) { + JSON.parse(reasultA[0].pyfa).map((xueyear, index) => { + let sys = [...xueyear.systemchoose]; + for (let k = 0; k < sys.length; k++) { + sys[k].xueyearlimit = index + 1 + } + reasult = [...reasult, ...sys]; + + }) + for (let i = 0; i < reasult.length; i++) { + let ke = [] + for (let j = 0; j < reasult[i].ke.length; j++) { + + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + const kcreasult = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasult[i].ke[j].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + ke.push(kcreasult) + } + reasult[i].ke = ke; + let stu = [] + stulist.map((stuone, index) => { + let month = 1; + if (stuone.ruxuetime) { + let ruxueyear = moment(stuone.ruxuetime).year(); + let moment1 = moment(`${ruxueyear}-09-01`) + month = Math.ceil(moment().diff(moment1, 'months') / 6); + } + if (reasult[i].xueyearlimit === month) { + stu.push(stuone) + } + }) + reasult[i].stu = stu + } + + res.send(reasult) + }else{ + res.send({statu:"err"}) + } +}) +app.get("/apixueyuan/getpyfastuchoose",async(req,res)=>{ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const reasultA=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zhuanyeid],(error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist=await getxueyuanzystu_xx(req.query.zhuanyeid) + let reasult=[] + if(reasultA.length!==0&&JSON.parse(reasultA[0].pyfa)!==null) { + JSON.parse(reasultA[0].pyfa).map((xueyear, index) => { + let sys = [...xueyear.studnetchoose]; + for (let k = 0; k < sys.length; k++) { + sys[k].xueyearlimit = index + 1 + } + reasult = [...reasult, ...sys]; + + }) + for (let i = 0; i < reasult.length; i++) { + let ke = [] + for (let j = 0; j < reasult[i].ke.length; j++) { + + const sqlselect = "SELECT classid,classname,teacherid,classbh,student,teaname,studentnum FROM kechengbiaotest WHERE classid=?" + const kcreasult = await new Promise((resolve, reject) => { + connection.query(sqlselect, [reasult[i].ke[j].classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + ke.push(kcreasult) + } + reasult[i].ke = ke; + let stu = [] + stulist.map((stuone, index) => { + let month = 1; + if (stuone.ruxuetime) { + let ruxueyear = moment(stuone.ruxuetime).year(); + let moment1 = moment(`${ruxueyear}-09-01`) + month = Math.ceil(moment().diff(moment1, 'months') / 6); + } + if (reasult[i].xueyearlimit === month) { + stu.push(stuone) + } + }) + reasult[i].stu = stu + } + + res.send(reasult) + }else{ + res.send({statu:"err"}) + } +}) +app.post("/apixueyuan/saveteaxueke",async(req,res)=>{ + let stulisst=[...req.body.stu] + let addxiang={...req.body.ke} + for(let i=0;i { + connection.query(sqlselectstu,[stulisst[i]],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + let stukc= await addkcbtojson(stu[0].kecb, addxiang); + let choosestu={}; + if(stu[0].chooseke){ + choosestu=JSON.parse(stu[0].chooseke) + } + choosestu[req.body.xkh]=addxiang; + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[stukc,JSON.stringify(choosestu),stulisst[i]],(error,results,fields)=>{ + if (error) throw error; + resolve(results); + }) + }) + } + const sqlkcstu = "SELECT * FROM kechengbiaotest WHERE classid=?" + + const stu = await new Promise((resolve, reject) => { + connection.query(sqlkcstu, [addxiang.classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let stulist = []; + if (stu[0].student) { + stulist = JSON.parse(stu[0].student) + } + stulist=[...stulist,...stulisst] + const updatesql = "UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatesql, [JSON.stringify(stulist), addxiang.classid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({status:"ok"}) +}) +app.post("/apixueyuan/tuike",async(req,res)=>{ + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const resultstu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stuchoose=JSON.parse(resultstu[0].chooseke) + if(stuchoose[req.body.xkh]){ + delete stuchoose[req.body.xkh] + } + let jsonjs=JSON.parse(resultstu[0].kecb); + const sqlreadkc="SELECT * FROM kechengbiaotest WHERE classid=?" + const kcreasult=await new Promise((resolve, reject) => { + connection.query(sqlreadkc, [req.body.classid],(error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let kclist=[] + JSON.parse(kcreasult[0].classzou).map((zou,zouindex)=>{ + zou.class.map((ke,keindex)=>{ + kclist.push(ke.ke) + }) + }) + jsonjs.map((keone,index)=>{ + if(kclist.includes(keone.time)) { + jsonjs[index].ke = 0 + } + }) + const sqlupdate="UPDATE student SET kecb=?,chooseke=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(jsonjs),JSON.stringify(stuchoose),req.body.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let stukc=JSON.parse(kcreasult[0].student).filter(item=>item!==req.body.xuehao) + const updatekc="UPDATE kechengbiaotest SET student=? WHERE classid=?" + await new Promise((resolve, reject) => { + connection.query(updatekc,[JSON.stringify(stukc),req.body.classid],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + + res.send({status:"ok"}) +}) +app.get("/apistu/getpyfa",async(req,res)=>{ + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const resultstu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xuehao],(error,results,fields)=>{ + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + if(resultstu.length!==0) { + const resultbanji = await new Promise((resolve, reject) => { + connection.query(sqlbanji, [resultstu[0].nianjizhaungye], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + const sqlpyfa = "SELECT * FROM zhuanye WHERE id=?" + const resultpyfa = await new Promise((resolve, reject) => { + connection.query(sqlpyfa, [resultbanji[0].zhaunyeid], (error, results, fields) => { + if (error) { + newbug(error, "/apiclass/getxueke", req.query) + console.log(error) + } + resolve(results) + }) + }) + let pyfa = JSON.parse(resultpyfa[0].pyfa) + let pyfaall = [] + pyfa.map((xueyearvalue, xueyearindex) => { + let kconeyear = []; + xueyearvalue.publicclass.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = "公共课" + tempkc.kcchoose = "必修" + tempkc.banji = "yes" + kconeyear.push(tempkc) + }) + xueyearvalue.zhuanyeclass.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = "公共课" + tempkc.kcchoose = "必修" + tempkc.banji = "yes" + kconeyear.push(tempkc) + }) + xueyearvalue.systemchoose.map((choosevalue, chooseindex) => { + let prename = []; + choosevalue.ke.map((kcvalue, kcindex) => { + prename.push(kcvalue.classname) + }) + prename = [...new Set(prename)] + if (prename.length === 1) { + let tempkc = {...choosevalue.ke[0]} + tempkc.kclx = choosevalue.xklx; + tempkc.kcchoose = "必修" + tempkc.banji = "choose" + kconeyear.push(tempkc) + } else { + choosevalue.ke.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = choosevalue.xklx + tempkc.kcchoose = "限选" + tempkc.banji = "choose" + kconeyear.push(tempkc) + }) + } + }) + xueyearvalue.studnetchoose.map((choosevalue, chooseindex) => { + let prename = []; + choosevalue.ke.map((kcvalue, kcindex) => { + prename.push(kcvalue.classname) + }) + prename = [...new Set(prename)] + if (prename.length === 1) { + let tempkc = {...choosevalue.ke[0]} + tempkc.kclx = choosevalue.xklx; + tempkc.kcchoose = "必修" + tempkc.banji = "choose" + kconeyear.push(tempkc) + } else { + choosevalue.ke.map((kcvalue, kcindex) => { + let tempkc = {...kcvalue} + tempkc.kclx = choosevalue.xklx + tempkc.kcchoose = "自选" + tempkc.banji = "choose" + kconeyear.push(tempkc) + }) + } + }) + pyfaall.push({ + kclist: kconeyear, + sx: xueyearvalue.sx, + xuhao: xueyearvalue.xuhao + }) + }) + res.send({pyfa:pyfaall,infor:JSON.parse(resultpyfa[0].infor)}) + }else{ + res.send({pyfa:[],infor:{xuezhiyear:0}}) + } +}) +app.get("/apifdy/getbanji",async (req,res)=>{ + const sqlbj="SELECT * FROM banjiclass WHERE teacherid=?" + let bjresult=await new Promise((resolve, reject) => { + connection.query(sqlbj,[req.query.fdy], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlzy,[bjresult[i].zhaunyeid], (error, results, fields) => { + if(error)throw error; + resolve(results[0]); + }) + }) + bjresult[i].zyname=zy.name; + // const zyresult=await new Promise((resolve, reject) => {}) + } + res.send(bjresult); +}) + +app.get("/apifdy/getkclist",async (req,res)=>{ + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + const stu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.banji], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let stulist=[] + stu.map((stuone,index)=>{ + stulist.push(stuone.xuehao) + }) + const sqlkc="SELECT * FROM `kechengbiaotest` WHERE JSON_OVERLAPS1(student,?)" + const kcresult=await new Promise((resolve, reject) => { + connection.query(sqlkc, [JSON.stringify(stulist)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //课程开始 + for(let j=0;j { + connection.query(sqltea, [kcresult[j].teacher], (err, results, field) => { + if (err) throw err; + resolve(results); + }) + }) + if (tea.length > 0) { + kcresult[j].teachername = tea[0].name; + kcresult[j].status = "ok" + } + + + } + //课程结束 + let kclist=[] + let kclistwb=[] + kcresult.map((kcone,kcindex)=>{ + kclist.push(parseInt(kcone.teacherid)) + kclistwb.push(kcone.teacherid) + }) + const sqlcommit="SELECT * FROM `commitgroup` WHERE JSON_OVERLAPS1(fabukecheng,?)" + const resultcommit=await new Promise((resolve, reject) => { + connection.query(sqlcommit,[JSON.stringify(kclist)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //comit start + resultcommit.map((kspone,indexone)=>{ + const stutimu=JSON.parse(kspone.student) + let stukc=[]; + console.log(stutimu) + console.log(stulist) + stutimu.map((stuone,indexstuone)=>{ + if(stulist.includes(stuone)){ + stukc.push(stuone); + } + }) + resultcommit[indexone].sturea=stukc; + }) + for(let i=0;i { + connection.query(sqlcommit,[resultcommit[i].xuhao],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + const commitstu=[]; + const commit=[]; + reasultcommitxiang.map((valuecommit,indexcommit)=>{ + if(stulist.includes(valuecommit.xuehao)){ + commit.push(valuecommit) + commitstu.push(valuecommit.xuehao) + } + }) + resultcommit[i].commit=commit; + resultcommit[i].commitstu=commitstu + } + //commit end + const sqltmj="SELECT * FROM `perparetmj` WHERE JSON_OVERLAPS1(information->'$.class',?)" + const ksp=await new Promise((resolve, reject) => { + connection.query(sqltmj,[JSON.stringify(kclistwb)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlkc,[kspclass[j]],(error,results,field)=>{ + if(error)throw error; + resolve(results); + }) + }) + const stuone=JSON.parse(stureasult[0].student); + tmjstu=[...tmjstu,...stuone]; + + } + let stukc=[]; + tmjstu.map((stuone,indexstuone)=>{ + if(stulist.includes(stuone)){ + stukc.push(stuone); + } + }) + + ksp[i].sturea=stukc; + } + + const sqlks="SELECT * FROM `kaoshipaper` WHERE JSON_OVERLAPS1(fabukecheng,?)" + const resultks=await new Promise((resolve, reject) => { + connection.query(sqlks,[JSON.stringify(kclistwb)], (error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + resultks.map((kspone,indexone)=>{ + const stutimu=JSON.parse(kspone.stu) + let stukc=[]; + console.log(stutimu) + console.log(stulist) + if(stutimu) { + stutimu.map((stuone, indexstuone) => { + if (stulist.includes(stuone)) { + stukc.push(stuone); + } + }) + } + resultks[indexone].sturea=stukc; + }) + let kechengnew=[]; + kcresult.map((kcone,index)=>{ + kechengnew.push(kcone.teacherid) + }) + res.send({tmj:ksp,ks:resultks,commit:resultcommit,kc:await huqoukecheng(kechengnew),stu:stu}); +}) + +app.get("/apistu/sendyzm",async(req,res)=>{ + const sql="SELECT * FROM student WHERE xuehao=?" + console.log(req.query) + const sjh=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + console.log(sjh[0].shoujihao) + const token =crypto.randomInt(100000, 999999).toString(); + console.log(token) + const uuid=uuidv4.v4(); + const sqlinsert="INSERT INTO yzm(uuid,yzm,xuehao) VALUES(?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[uuid,token,req.query.xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) +const result=await axios.post("http://106.ihuyi.com/webservice/sms.php?method=Submit",{ + account:"C08954976", + password:"7a668c9bb62aa8485ac91eef1bf82e9c", + mobile:sjh[0].shoujihao, + content:`您的验证码是:${token}。请不要把验证码泄露给其他人。` +},{ + headers:{ + "Content-Type": "application/x-www-form-urlencoded" + } +}) + console.log(result) + + res.send({yzm:uuid}) +}) +app.get("/apitea/sendyzm",async(req,res)=>{ + const sql="SELECT * FROM teacher WHERE xuegonghao=?" + console.log(req.query) + const sjh=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xgh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + console.log(sjh[0].iphone) + const token =crypto.randomInt(100000, 999999).toString(); + console.log(token) + const uuid=uuidv4.v4(); + const sqlinsert="INSERT INTO yzm(uuid,yzm,xuehao) VALUES(?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[uuid,token,req.query.xgh],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const result=await axios.post("http://106.ihuyi.com/webservice/sms.php?method=Submit",{ + account:"C08954976", + password:"7a668c9bb62aa8485ac91eef1bf82e9c", + mobile:sjh[0].iphone, + content:`您的验证码是:${token}。请不要把验证码泄露给其他人。` + },{ + headers:{ + "Content-Type": "application/x-www-form-urlencoded" + } + }) + console.log(result) + + res.send({yzm:uuid}) +}) +app.get("/apistu/getpassword",async(req,res)=>{ + const yzmsql="SELECT * FROM yzm WHERE uuid=?" + const yzm=await new Promise((resolve, reject) => { + connection.query(yzmsql,[req.query.uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(yzm[0].yzm===req.query.yzm) { + const sql = "SELECT * FROM student WHERE xuehao=?" + const sjh = await new Promise((resolve, reject) => { + connection.query(sql, [yzm[0].xuehao], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + res.send({password: sjh[0].passage,status:"ok",xuehao:sjh[0].xuehao}) + }else{ + res.send({status:"err"}) + } +}) +app.get("/apitea/getpassword",async(req,res)=>{ + const yzmsql="SELECT * FROM yzm WHERE uuid=?" + const yzm=await new Promise((resolve, reject) => { + connection.query(yzmsql,[req.query.uuid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + if(yzm[0].yzm===req.query.yzm) { + const sql = "SELECT * FROM teacher WHERE xuegonghao=?" + const sjh = await new Promise((resolve, reject) => { + connection.query(sql, [yzm[0].xuehao], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + if(sjh[0].quexian===1) { + res.send({status: 'ok',zw:'任课老师',password: sjh[0].passage,xuehao:sjh[0].xuegonghao}) + }else if(sjh[0].quexian===2){ + res.send({status:'ok',zw:'辅导员',password: sjh[0].passage,xuehao:sjh[0].xuegonghao}) + } + + }else{ + res.send({status:"err"}) + } +}) +app.post("/apischool/addtea",async(req,res)=>{ + const tealist=req.body.tea + for(let i=0;i { + connection.query(sqlinsert,[teaone.name,teaone.iphone,md,teaone.zw,teaone.xuegonghao,teaone.sex,teaone.idcard,teaone.zzmm],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.get("/apschool/getteainfor",async(req,res)=>{ + const sql="SELECT * FROM teacher WHERE xuegonghao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error, results, fields) => { + if(error)throw error + resolve(results); + }) + }) + res.send(result[0]) +}) +app.post("/apitea/changinfor",async(req,res)=>{ + const teainfor=req.body.infor; + const updatesql="UPDATE teacher SET name=?,xinbian=?,idcard=?,iphone=?,zzmm=? WHERE xuegonghao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[teainfor.name,teainfor.xinbian,teainfor.idcard,teainfor.iphone,teainfor.zzmm,teainfor.xuegonghao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apitea/getpjbz",async(req,res)=>{ + const sqlkc="SELECT classid,classname,teacherid,classbh,pjbz FROM `kechengbiaotest` WHERE teacherid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlkc,[req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + if(result.length!==0) { + res.send(result[0]) + }else{ + res.send({err:"ok"}) + } + +}) +app.post("/apitea/savepjbz",async(req,res)=>{ + const sql="UPDATE kechengbiaotest SET pjbz=? WHERE teacherid=?" + await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(req.body.pjbz),req.body.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + res.send({ok:"ok"}) +}) +app.get("/apistu/getstucjd",async(req,res)=>{ + const sqlkc="SELECT * FROM kechengbiaotest WHERE teacherid=?" + const kcresult=await new Promise((resolve, reject) => { + connection.query(sqlkc,[req.query.teacherid],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + if(kcresult.length!==0) { + const sqlstu = `SELECT * FROM student WHERE kecb LIKE \"%\\\"ke\\\": ${kcresult[0].classid}%\"` + const sturesult = await new Promise((resolve, reject) => { + connection.query(sqlstu, [req.query.bj], (error, results, fields) => { + if (error) throw error; + resolve(results) + }) + }) + for (let i = 0; i < sturesult.length; i++) { + sturesult[i].cjd = JSON.parse(sturesult[i].cjd) + } + res.send(sturesult) + }else{ + res.send([]); + } + +}) +app.post("/apitea/savecjd",async(req,res)=>{ + const stuall=[...req.body.stulist] + for(let i=0;i { + connection.query(sqlselect,[stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + const cjbjson=JSON.parse(result[0].cjd) + let all=0; + Object.entries(stuall[i].cjd).map((print,printindex)=>{ + if(print[0]!=='all'&&print[0]!=='zt') { + + all += print[1] + } + console.log(print) + }) + console.log(all) + cjbjson[req.body.teacherid]=stuall[i].cjd; + cjbjson[req.body.teacherid].all=all; + + const updatesql="UPDATE student SET cjd=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(cjbjson),stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.post("/apitea/fabucjd",async(req,res)=>{ + const stuall=[...req.body.stulist] + for(let i=0;i { + connection.query(sqlselect,[stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + const cjbjson=JSON.parse(result[0].cjd) + let all=0; + Object.entries(stuall[i].cjd).map((print,printindex)=>{ + if(print[0]!=="all") { + + all += print[1] + } + }) + cjbjson[req.body.teacherid]=stuall[i].cjd; + cjbjson[req.body.teacherid].all=all; + cjbjson[req.body.teacherid].zt="已发布" + const updatesql="UPDATE student SET cjd=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[JSON.stringify(cjbjson),stuall[i].xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.get("/apitea/getcjd",async(req,res)=>{ + const sqlkcb="SELECT * FROM kechengbiaotest WHERE teacher=?" + const cjdresult=await new Promise((resolve, reject) => { + connection.query(sqlkcb,[req.query.tea],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlstu,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let finish=0; + let allprint=0; + let zt=true + sturesult.map((stuone,stuindex)=>{ + if(stuone.cjd){ + const cjdjson=JSON.parse(stuone.cjd)[cjdresult[i].teacherid]; + if(cjdjson){ + finish++; + if(cjdjson.zt!=="已发布"){ + zt=false + } + allprint+=cjdjson.all + } + + } + }) + cjdresult[i].all=allprint + cjdresult[i].finish=finish; + if(zt===true&&sturesult.length===finish){ + cjdresult[i].zt="已完成" + }else{ + cjdresult[i].zt="未完成" + } + + } + res.send(cjdresult) +}) +app.get("/apistu/getcjd",async(req,res)=>{ + const kclist="SELECT * FROM kechengbiaotest WHERE JSON_CONTAINS(student,?, '$')"; + const stusql="SELECT * FROM student WHERE xuehao=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(stusql,[req.query.stu],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[sturesult[0].nianjizhaungye],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const zyresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[banjiresult[0].zhaunyeid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const pyfa=JSON.parse(zyresult[0].pyfa)[parseInt(req.query.year)] + + const teacherid=[] + + pyfa.publicclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + + const cjd=JSON.parse(sturesult[0].cjd) + + const kcresult=[]; + for(let i=0;i { + connection.query(sqlget,[teacherid[i]],(error, results, fields) => { + if(error)throw error; + resolve(results[0]); + }) + }) + kcresult.push(onekeresult) + } + // await new Promise((resolve, reject) => { + // connection.query(kclist,[`[\"${req.query.stu}\"]`],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + + // }) + let kcall=[]; + kcresult.map((kcone,kcindex)=>{ + const pjbz=JSON.parse(kcone.pjbz) + let printall=0; + if(pjbz) { + pjbz.map((pjbzone, indexpjbz) => { + printall += pjbzone.print; + }) + } + if(cjd) { + if (cjd[kcone.teacherid]) { + if (cjd[kcone.teacherid].zt === "已发布") { + let kctemp = {...kcone, ...cjd[kcone.teacherid], zf: printall} + delete kctemp.classtime; + delete kctemp.classzou; + delete kctemp.student; + kcall.push(kctemp) + } + } + } + }) + res.send({cjd:kcall,infor:JSON.parse(zyresult[0].infor)}); + +}) +app.get("/apistu/lurucj",async function(req,res){ + const fileContent = xlsx.readFile(req.query.xlsx); // 读取excel文件 + const name = fileContent.SheetNames[0] // 获取excel第一张sheet的名字 + const sheet = fileContent.Sheets[name] // 获取excel第一张sheet中的数据 + const jsonData = xlsx.utils.sheet_to_json(sheet) + res.send(jsonData) +}) +app.get("/apixueyuan/getzycjdyear",async function(req,res){ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const pyfaresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //teacheridlist + + const sqlbj="SELECT * FROM banjiclass WHERE zhaunyeid=?" + const banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbj,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //获取学生信息 + console.log(banjiresult) + let stulist=[]; + for(let bj_i=0;bj_i { + connection.query(sqlstu,[banjiresult[bj_i].classname1+banjiresult[bj_i].classname2],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + stulist=[...stulist,...stuonegroup] + } + let infor={} + stulist.map((stuone,stuindex)=>{ + let all=0; + let allnum=0 + + if(stuone.cjd){ + let ruxueyear=moment(stuone.ruxuetime).year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + const cjd=JSON.parse(stuone.cjd) + let teacherid=[] + infor=JSON.parse(pyfaresult[0].infor); + const pyfa=JSON.parse(pyfaresult[0].pyfa)[req.query.xq] + console.log(pyfa) + if(pyfa) { + pyfa.publicclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + } + teacherid=[...new Set(teacherid)] + teacherid.map((kcvalue,kcindex)=>{ + + + if(cjd[kcvalue]){ + if(cjd[kcvalue].zt==="已发布"){ + if(typeof cjd[kcvalue].all==="number"){ + all+=cjd[kcvalue].all; + allnum++; + } + } + } + }) + stulist[stuindex].all=all; + stulist[stuindex].allnum=allnum; + if(req.query.xq-1>month){ + stulist[stuindex].delete=true + } + delete stulist[stuindex].kecb + } + }) + stulist=stulist.filter(item=>item.delete!==true) + + res.send({cjd:stulist,infor:infor}) +}) +app.get("/apixueyuan/getzycjd",async function(req,res){ + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const pyfaresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //teacheridlist + + const sqlbj="SELECT * FROM banjiclass WHERE zhaunyeid=?" + let banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbj,[req.query.zy],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + //获取学生信息 + console.log(banjiresult) + banjiresult=banjiresult.filter(item=>item.classname1!==null&&item.classname2!==null) + let stulist=[]; + for(let bj_i=0;bj_i { + connection.query(sqlstu,[banjiresult[bj_i].classname1+banjiresult[bj_i].classname2],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + stulist=[...stulist,...stuonegroup] + } + let infor={} + stulist.map((stuone,stuindex)=>{ + let all=0; + let allnum=0 + + if(stuone.cjd){ + let ruxueyear=moment().year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + const cjd=JSON.parse(stuone.cjd) + let teacherid=[] + infor=JSON.parse(pyfaresult[0].infor); + if(JSON.parse(pyfaresult[0].pyfa)) { + const pyfa = JSON.parse(pyfaresult[0].pyfa)[month] + console.log(pyfa) + if (pyfa) { + pyfa.publicclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + } + } + teacherid=[...new Set(teacherid)] + teacherid.map((kcvalue,kcindex)=>{ + + + if(cjd[kcvalue]){ + if(cjd[kcvalue].zt==="已发布"){ + if(typeof cjd[kcvalue].all==="number"){ + all+=cjd[kcvalue].all; + allnum++; + } + } + } + }) + stulist[stuindex].all=all; + stulist[stuindex].allnum=allnum; + delete stulist[stuindex].kecb + } + }) + res.send({cjd:stulist,infor:infor}) + +}) +app.get("/apitea/getfdycjd",async function(req,res){ + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + console.log(req.query.banji) + let sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + // console.log(sturesult) + let ruxueyear=moment().year() + if(sturesult[0]) { + ruxueyear= moment(sturesult[0].ruxuetime).year(); + } + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + console.log(month) + if(month<0){ + month=0 + } + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + + const banji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlpyfa="SELECT * FROM zhuanye WHERE id=?" + if(banji.length!==0) { + const pyfaresult = await new Promise((resolve, reject) => { + connection.query(sqlpyfa, [banji[0].zhaunyeid], (error, results, fields) => { + if (error) throw error; + resolve(results); + }) + }) + let teacherid = [] + const infor = JSON.parse(pyfaresult[0].infor); + const pyfa = JSON.parse(pyfaresult[0].pyfa)[month] + console.log(pyfa) + + pyfa.publicclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose, indexchoose) => { + choose.ke.map((ke, index) => { + teacherid.push(ke.teacherid) + }) + }) + teacherid = [...new Set(teacherid)] + + sturesult.map((stuone, stuindex) => { + let all = 0; + let allnum = 0 + if (stuone.cjd) { + + const cjd = JSON.parse(stuone.cjd) + teacherid.map((kcvalue, kcindex) => { + + + if (cjd[kcvalue]) { + if (cjd[kcvalue].zt === "已发布") { + if (typeof cjd[kcvalue].all === "number") { + all += cjd[kcvalue].all; + allnum++; + } + } + } + }) + sturesult[stuindex].all = all; + sturesult[stuindex].allnum = allnum; + } + }) + res.send({cjd:sturesult,infor:infor}) + }else{ + res.send({cjd:[],infor:{xuezhiyear:0}}) + } + +}) +app.get("/apitea/getfdycjdyear",async function(req,res){ + const sqlstu="SELECT * FROM student WHERE nianjizhaungye=?" + console.log(req.query.banji) + let sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + // console.log(sturesult) + let ruxueyear=moment(sturesult[0].ruxuetime).year(); + let moment1=moment(`${ruxueyear}-09-01`) + let month=Math.ceil(moment().diff(moment1,'months')/6); + console.log(month) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const banji=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[req.query.banji],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const sqlpyfa="SELECT * FROM zhuanye WHERE id=?" + const pyfaresult=await new Promise((resolve, reject) => { + connection.query(sqlpyfa,[banji[0].zhaunyeid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + let teacherid=[] + const pyfa=JSON.parse(pyfaresult[0].pyfa)[req.query.year] + console.log(pyfa) + pyfa.publicclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + teacherid=[...new Set(teacherid)] + + sturesult.map((stuone,stuindex)=>{ + let all=0; + let allnum=0 + if(stuone.cjd){ + + const cjd=JSON.parse(stuone.cjd) + teacherid.map((kcvalue,kcindex)=>{ + + + if(cjd[kcvalue]){ + if(cjd[kcvalue].zt==="已发布"){ + if(typeof cjd[kcvalue].all==="number"){ + all+=cjd[kcvalue].all; + allnum++; + } + } + } + }) + sturesult[stuindex].all=all; + sturesult[stuindex].allnum=allnum; + } + }) + + res.send(sturesult) +}) +app.get("/apitea/getstucjd",async function(req,res){ + const sqlstu="SELECT * FROM student WHERE xuehao=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xuehao],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + console.log(req.query.xuehao) + const sqlbanji="SELECT * FROM banjiclass WHERE CONCAT(classname1,classname2)=?" + const banjiresult=await new Promise((resolve, reject) => { + connection.query(sqlbanji,[sturesult[0].nianjizhaungye],(error, results, fields) => { + if(error)throw error; + resolve(results) + }) + }) + const sqlzy="SELECT * FROM zhuanye WHERE id=?" + const zyresult=await new Promise((resolve, reject) => { + connection.query(sqlzy,[banjiresult[0].zhaunyeid],(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + const pyfa=JSON.parse(zyresult[0].pyfa)[parseInt(req.query.year)] + + const teacherid=[] + + pyfa.publicclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.zhuanyeclass.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + pyfa.systemchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + pyfa.studnetchoose.map((choose,indexchoose)=>{ + choose.ke.map((ke,index)=>{ + teacherid.push(ke.teacherid) + }) + }) + + const cjd=JSON.parse(sturesult[0].cjd) + const kcresult=[]; + if(cjd) { + for (let i = 0; i < teacherid.length; i++) { + const sqlget = "SELECT * FROM kechengbiaotest WHERE teacherid=?" + const onekeresult = await new Promise((resolve, reject) => { + connection.query(sqlget, [teacherid[i]], (error, results, fields) => { + if (error) throw error; + resolve(results[0]); + }) + }) + kcresult.push(onekeresult) + } + // await new Promise((resolve, reject) => { + // connection.query(kclist,[`[\"${req.query.stu}\"]`],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + + // }) + let kcall = []; + kcresult.map((kcone, kcindex) => { + const pjbz = JSON.parse(kcone.pjbz) + let printall = 0; + if (pjbz) { + pjbz.map((pjbzone, indexpjbz) => { + printall += pjbzone.print; + }) + } + if (cjd[kcone.teacherid]) { + if (cjd[kcone.teacherid].zt === "已发布") { + let kctemp = {...kcone, ...cjd[kcone.teacherid], zf: printall} + delete kctemp.classtime; + delete kctemp.classzou; + delete kctemp.student; + + kcall.push(kctemp) + } + } + }) + res.send({cjd: kcall, infor: JSON.parse(zyresult[0].infor), stu: sturesult[0]}); + }else{ + for (let i = 0; i < teacherid.length; i++) { + const sqlget = "SELECT * FROM kechengbiaotest WHERE teacherid=?" + const onekeresult = await new Promise((resolve, reject) => { + connection.query(sqlget, [teacherid[i]], (error, results, fields) => { + if (error) throw error; + resolve(results[0]); + }) + }) + kcresult.push(onekeresult) + } + // await new Promise((resolve, reject) => { + // connection.query(kclist,[`[\"${req.query.stu}\"]`],(error, results, fields) => { + // if(error)throw error; + // resolve(results); + // }) + + // }) + let kcall = []; + kcresult.map((kcone, kcindex) => { + const pjbz = JSON.parse(kcone.pjbz) + let printall = 0; + if (pjbz) { + pjbz.map((pjbzone, indexpjbz) => { + printall += pjbzone.print; + }) + } + + let kctemp = {...kcone, all:0, zf: 0} + delete kctemp.classtime; + delete kctemp.classzou; + delete kctemp.student; + + kcall.push(kctemp) + + + }) + res.send({cjd: kcall, infor: JSON.parse(zyresult[0].infor), stu: sturesult[0]}); + } + + +}) +app.post("/apitea/dyccjdxlsx",async (req,res)=>{ + const buffer=xlsxnode.build(req.body.xlsx) + fs.writeFileSync('node.xlsx',buffer); + res.send(buffer.toString("base64")) + + } +) +app.get("/apitea/kcstulist",async (req,res)=>{ + //const sqlstu="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE classid=?" + const sqlstu=`SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE kecb LIKE \"%\\\"ke\\\": ${req.query.classid}%\"` + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,(error, results, fields) => { + if(error)throw error; + resolve(results); + }) + }) + res.send(sturesult) +}) +app.post("/api/addshixixm",async (req,res)=>{ + const uuid=uuidv4.v4(); + const sqlinsert="INSERT INTO shixi(starttime,endtime,cx,sflx,dz,shixihao,danwei,cxfs,sfhxzs,xiangxi,zt,xuehao,name) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.sx.startDatesx,req.body.sx.endDatesx,-1*moment(req.body.sx.startDatesx).diff(moment(req.body.sx.endDatesx),'day'), req.body.sx.Sflx,req.body.sx.dzsx,uuid,req.body.sx.danwei,req.body.sx.cxfssx,req.body.sx.sfhxzssx,req.body.sx.xiangxi,req.body.sx.zt,req.body.xuehao,req.body.sx.name],(error,result,field)=>{ + if(error)throw error + resolve(result) + }) + }) + res.send({uuid:uuid}) +}) +app.post("/api/updateshixixm",async (req,res)=>{ + const uuid=uuidv4.v4() + const sqlinsert="UPDATE shixi SET starttime=?,endtime=?,cx=?,sflx=?,dz=?,danwei=?,cxfs=?,sfhxzs=?,xiangxi=?,name=? WHERE shixihao=?" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.sx.startDatesx,req.body.sx.endDatesx,-1*moment(req.body.sx.startDatesx).diff(moment(req.body.sx.endDatesx),'day'), req.body.sx.Sflx,req.body.sx.dzsx,req.body.sx.danwei,req.body.sx.cxfssx,req.body.sx.sfhxzssx,req.body.sx.xiangxi,req.body.sx.name,req.body.uuid],(error,result,field)=>{ + if(error)throw error + resolve(result) + }) + }) + res.send({uuid:uuid}) +}) +app.get("/api/selectshixixm",async (req,res)=>{ + const sql="SELECT * FROM shixi WHERE shixihao=?" + const resultsx=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.shixi],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + resultsx[0].startDatesx=resultsx[0].starttime + resultsx[0].endDatesx=resultsx[0].endtime + resultsx[0].endDatesx=resultsx[0].endtime + resultsx[0].Sflx=resultsx[0].sflx + resultsx[0].dzsx=resultsx[0].dz + resultsx[0].cxfssx=resultsx[0].cxfs + resultsx[0].sfhxzssx=parseInt(resultsx[0].sfhxzs) + res.send(resultsx[0]) +}) +app.get("/api/getsxlist",async (req,res)=>{ + const sqlsx="SELECT * FROM shixi WHERE xuehao=?" + const sx=await new Promise((resolve, reject) => { + connection.query(sqlsx,[req.query.xuehao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send(sx) +}) +app.post("/api/changsxzt",async (req,res)=>{ + const updatesql="UPDATE shixi SET zt=? WHERE shixihao=?" + await new Promise((resolve, reject) => { + connection.query(updatesql,[req.body.zt,req.body.shixihao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apitea/getsxlist",async (req,res)=>{ + const sqlstu="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE nianjizhaungye=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.bj],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + let xuehao=[]; + sturesult.map((stu,index)=>{ + xuehao.push(stu.xuehao) + }) + const sqlsxlsit="SELECT * FROM `shixi` WHERE JSON_CONTAINS(?,JSON_ARRAY(xuehao), '$')" + const sxlist=await new Promise((resolve, reject) => { + connection.query(sqlsxlsit,[JSON.stringify(xuehao)],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + sxlist.map((sxlistvalue,sxindex)=>{ + let index=sturesult.findIndex(x=>x.xuehao===sxlistvalue.xuehao) + if(index!==-1) { + sxlist[sxindex] = {...sxlist[sxindex], ...sturesult[index]} + } + }) + res.send(sxlist) +}) +app.get("/apixueyuan/getsxlist",async (req,res)=>{ + const sqlstu="SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye FROM student WHERE xueyuan=?" + const sturesult=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xueyuan],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + let xuehao=[]; + sturesult.map((stu,index)=>{ + xuehao.push(stu.xuehao) + }) + const sqlsxlsit="SELECT * FROM `shixi` WHERE JSON_CONTAINS(?,JSON_ARRAY(xuehao), '$')" + const sxlist=await new Promise((resolve, reject) => { + connection.query(sqlsxlsit,[JSON.stringify(xuehao)],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + sxlist.map((sxlistvalue,sxindex)=>{ + let index=sturesult.findIndex(x=>x.xuehao===sxlistvalue.xuehao) + if(index!==-1) { + sxlist[sxindex] = {...sxlist[sxindex], ...sturesult[index]} + } + }) + res.send(sxlist) +}) +app.post("/apistu/heshiqx",async (req,res)=>{ + const sql="SELECT passage FROM student WHERE xuehao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.xuehao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + if(result.length!==0) { + if (result[0].passage === req.body.passage) { + res.send("ok") + } else { + res.send("没有权限") + } + }else{ + res.send("请登录") + } +}) +app.post("/apitea/heshiqx",async (req,res)=>{ + const sql="SELECT passage FROM teacher WHERE xuegonghao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.xuegonghao],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + if(result.length!==0) { + if (result[0].passage === req.body.passage) { + res.send("ok") + } else { + res.send("没有权限") + } + }else{ + res.send("请登录") + } +}) +app.post("/apitea/fabubighomwwork",async (req,res)=>{ + const sqlupdatefb="UPDATE bighomework SET zt=? WHERE uuiddzy=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatefb,["发布",req.body.uuid],(error,results,fields)=>{ + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/tool/bjidtoname",async (req,res)=>{ + const sql="SELECT * FROM banjiclass WHERE id=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + if(result[0].classname1&&result[0].classname2){ + //result[0] + res.send(result[0]) + }else{ + res.send(result[0]) + } +}) +app.post("/apixueyuan/banjiinfroupdate",async (req,res)=>{ + const sqlupdate="UPDATE banjiclass SET classname1=?,classname2=?,teacherid=?,teachername=? WHERE id=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.infor.classname1,req.body.infor.classname2,req.body.infor.teacherid,req.body.infor.teachername,req.body.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apixueyuan/fabubanji",async (req,res)=>{ + const sql="UPDATE banjiclass SET zt=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sql,["已发布",req.body.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/apischool/getkcall",async (req,res)=>{ + const sqlkc="SELECT * FROM kechengall " + const resultkc=await new Promise((resolve, reject) => { + connection.query(sqlkc,(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + const sqlkcone="SELECT * FROM kechengbiaotest" + const resultkcone=await new Promise((resolve, reject) => { + connection.query(sqlkcone,(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + resultkc.map((kcall,indexkc)=>{ + const kcnum=resultkcone.filter(item=>item.kechengid==kcall.id).length + resultkc[indexkc].kcclass=kcnum + let ks=0 + JSON.parse(resultkc[indexkc].kechenglist).map((zhou,zzhouindex)=>{ + zhou.map((day,dayindex)=>{ + day.map((ke,keindex)=>{ + if(ke.classid!==0){ + ks++; + } + }) + }) + }) + resultkc[indexkc].kechenglist=ks; + }) + res.send(resultkc) +}) +app.get("/apitea/newtmj" ,async (req,res)=>{ + const uuidid=uuidv4.v4() + const sqlinsert="INSERT INTO tmj_ex(id,tea,zt,information,starttime,endtime,student,fbkc,tmlist) VALUES(?,?,?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[uuidid,req.body.tea,"未发布","{}","no","no","[]","[]","[]"],(err, result)=>{ + if (err) throw err; + resolve(result); + // 处理查询结果 + console.log(result); + }) + }) + res.send({uuid:uuidid}) +}) +app.get("/apitea/zxdtget",async (req,res)=>{ + const sql="SELECT * FROM tmj_ex WHERE id=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.id],(error, results, fields) => { + if(error)throw error + resolve(results) + }) + }) + res.send(result[0]) +}) +app.post("/apitea/zxdtupdateinfor",async (req,res)=>{ + const sqlupdate="UPDATE tmj_ex SET name=?,fbkc=?,starttime=?,endtime=?,information=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.name,JSON.stringify(req.body.fbkc),req.body.starttime,req.body.endtime,JSON.stringify(req.body.information),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apitea/zxdtupdatetm",async (req,res)=>{ + const sqlupdate="UPDATE tmj_ex SET tmlist=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.tmlist,null,4),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apitea/fabuzxdt",async (req,res)=>{ + const sqlupdatebefoe="UPDATE tmj_ex SET name=?,fbkc=?,starttime=?,endtime=?,information=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatebefoe,[req.body.name,JSON.stringify(req.body.fbkc),req.body.starttime,req.body.endtime,JSON.stringify(req.body.information),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + const sqlselect="SELECT * FROM tmj_ex WHERE id=?" + const zxdt=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + //console.log(zxdt) + const stusql="SELECT * FROM `kechengbiaotest` WHERE JSON_CONTAINS(?,JSON_ARRAY(teacherid), '$')" + const sturesult=await new Promise((resolve, reject) => { + connection.query(stusql,[zxdt[0].fbkc], (error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + let stulist=[]; + sturesult.map((stuone,index)=>{ + // console.log(stuone) + stulist=[...stulist,...JSON.parse(stuone.student)] + }) + stulist=[...new Set(stulist)] + const sqlupdate="UPDATE `tmj_ex` SET student=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(stulist),req.body.id],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send(stulist) +}) +app.get("/api/stuinfor",async (req,res)=>{ + const sql="SELECT shoujihao,studentname,xuehao FROM student WHERE xuehao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send(result[0]) +}) +app.get("/api/getptatmj",async (req,res)=>{ + const sqljue="SELECT * FROM tmj_ex WHERE `id`=?" + const jue=await new Promise((resolve, reject) => { + connection.query(sqljue,[req.query.ksh],(error,results,fields)=>{ + if(error)throw error + resolve(results[0]) + console.log(results) + }) + }) + if(jue){ + const sqlstu="SELECT * FROM tmj_stu WHERE xuehao=? AND ksh=?" + const stu=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.xuehao,req.query.ksh],(error,results,fields)=>{ + if(error)throw error + resolve(results[0]) + }) + }) + jue.status="ok" + if(stu){ + jue.ztstu=stu.zt; + jue.stustart=stu.starttime; + jue.tmlist=stu.zuodaxx; + + } + res.send(jue) + }else{ + res.send({status:"err"}) + } + + +}) +app.post("/api/kaishizxdt_ex",async (req,res)=>{ + const sqlzxdt="SELECT * FROM tmj_ex WHERE id=?" + const zxdt=await new Promise((resolve, reject) => { + connection.query(sqlzxdt,[req.body.uuid],(error,results,fields)=>{ + if(error)throw error + resolve(results[0]) + }) + }) + if(zxdt){ + const sqlupdate="INSERT INTO tmj_stu(zuodaxx,xuehao,ksh,id,zt,starttime) VALUES(?,?,?,?,?,?)" + const uuidv=uuidv4.v4(); + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[zxdt.tmlist,req.body.xuehao,req.body.uuid,uuidv,"已开始",moment().format()],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({status:"ok",uuid:uuidv}) + }else{ + res.send({status:"err"}) + } +}) +app.post("/api/updatezxdt_ex", (req,res)=>{ + const sqlupdate="UPDATE tmj_stu SET zuodaxx=? WHERE xuehao=? AND ksh=?" + console.log(req.body.alltm) + connection.query(sqlupdate,[JSON.stringify(req.body.alltm,null,4),req.body.xuehao,req.body.ksh],(error,results,fields)=>{ + if(error)throw error + res.send({status:"ok"}) + }) +}) +app.post("/apitea/savebighomeworkfabu",async (req,res)=>{ + const sqlqr="SELECT * FROM bighomeworkgroup WHERE uuid=?" + const qrresult=await new Promise((resolve, reject) => { + connection.query(sqlqr,[req.body.uuid],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + if(qrresult.length===0){ + //未发布 + const sqlinsert="INSERT INTO bighomeworkgroup(uuid,kcid,bighwinfor,print,fabu) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.uuid,req.body.kcid,JSON.stringify(req.body.bighomeworkinfor),parseInt(req.body.bighomeworkinfor.jtfz),"未发布"],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + }else{ + const sqlupdate="UPDATE bighomeworkgroup SET kcid=?,bighwinfor=?,print=?,fabu=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.kcid,JSON.stringify(req.body.bighomeworkinfor),parseInt(req.body.bighomeworkinfor.jtfz),"未发布",req.body.uuid],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.post("/apitea/savebighomework",async (req,res)=>{ + const sqlqr="SELECT * FROM bighomeworkgroup WHERE uuid=?" + const qrresult=await new Promise((resolve, reject) => { + connection.query(sqlqr,[req.body.uuid],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + if(qrresult.length===0){ + //未发布 + const sqlinsert="INSERT INTO bighomeworkgroup(uuid,kcid,bighwinfor,print,fabu) VALUES(?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.uuid,req.body.kcid,JSON.stringify(req.body.bighomeworkinfor),parseInt(req.body.bighomeworkinfor.jtfz),"未发布"],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + }else{ + const sqlupdate="UPDATE bighomeworkgroup SET kcid=?,bighwinfor=?,print=?,fabu=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.kcid,JSON.stringify(req.body.bighomeworkinfor),parseInt(req.body.bighomeworkinfor.jtfz),"未发布",req.body.uuid],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + } + res.send({status:"ok"}) +}) +app.get("/apitea/getbighomeworkinfor",async (req,res)=>{ + const sqlselect="SELECT * FROM bighomeworkgroup WHERE uuid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.query.uuid],(error,results,fields)=>{ + resolve(results) + }) + }) + res.send(result[0]) +}) +app.get("/apitea/gettealist",async (req,res)=>{ + const sql="SELECT name,xuegonghao FROM teacher" + const result=await new Promise((resolve, reject) => { + connection.query(sql,(err,results,fields)=>{ + resolve(results) + }) + }) + res.send(result) +}) +app.post("/api/savebighomework",async (req,res)=>{ + const sql="SELECT * FROM bighomework WHERE xuehao=? AND id=? AND kch=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.body.xuehao,req.body.uuid,req.body.kch],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + if(!result){ + const sqlinsert="INSERT INTO bighomework(id,information,kch,xuehao,uuiddzy,fm,bighomework) VALUES(?,?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.uuid,JSON.stringify(req.body.information,null,4),req.body.kch,req.body.xuehao,uuidv4.v4(),req.body.fm,JSON.stringify(req.body.cg,null,4)],(error,results,fields)=>{ + resolve(results) + }) + }) + }else{ + const sqlupdate="UPDATE bighomework SET information=?,fm=?,bighomework=? WHERE uuiddzy=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(req.body.information,null,4),req.body.fm,JSON.stringify(req.body.cg,null,4),result.uuiddzy],(error,results,fields)=>{ + resolve(results) + }) + }) + if(req.body.zt==="发布"){ + const sqlupdatefb="UPDATE bighomework SET zt=? WHERE uuiddzy=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdatefb,["发布",result.uuiddzy],(error,results,fields)=>{ + resolve(results) + }) + }) + } + } + res.send({status:"ok"}) +}) +app.get("/api/getbighomework",async (req,res)=>{ + const sql="SELECT * FROM bighomework WHERE xuehao=? AND id=? AND kch=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.xuehao,req.query.uuid,req.query.kch],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + res.send(result) +}) +app.get("/apistu/getbighomework",async (req,res)=>{ + const kclistsql="SELECT * FROM kechengbiaotest WHERE JSON_CONTAINS(student,"+`'["${req.query.xuehao}"]'`+", '$')"; + const kclist=await new Promise((resolve, reject) => { + connection.query(kclistsql,(error,results,fields)=>{ + resolve(results) + }) + }) + let list=[]; + // console.log(kclist) + for(let i=0;i { + connection.query(kcbhwsql,(error,results,fields)=>{ + resolve(results) + }) + + }) + if(kcbhw.length!==0){ + for(let j=0;j { + connection.query(sql,[req.query.xuehao,kcbhw[j].uuid,kclist[i].teacherid],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + if(result) + if(result.zt==="发布") + kcbhw[j].zt="已发布" + + } + + console.log(kcbhw) + list.push({ + teacherid: kclist[i].teacherid, + classname:kclist[i].classname, + bhw:kcbhw + }) + } + } + console.log(list) + res.send(list) +}) +app.get("/apitea/getkcbighomework",async (req,res)=>{ + const kcbhwsql="SELECT * FROM bighomeworkgroup WHERE JSON_CONTAINS(kcid,"+`'["${req.query.teacherid}"]'`+", '$')"; + let kcbhw=await new Promise((resolve, reject) => { + connection.query(kcbhwsql,(error,results,fields)=>{ + resolve(results) + }) + + }) + if(kcbhw.length!==0){ + for(let j=0;j { + connection.query(sql,[kcbhw[j].uuid,req.query.teacherid],(error,results,fields)=>{ + resolve(results) + }) + }) + kcbhw[j].yipan=result.filter(item=>item.print).length; + kcbhw[j].sum=result.length + + } + + console.log(kcbhw) + + } + res.send(kcbhw) +}) +app.get("/apitea/countkcstu",async (req,res)=>{ + const sql="SELECT * FROM kechengbiaotest WHERE teacherid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.teacherid],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + let stuall=[] + for(let i=0;i { + connection.query(sqlstu,[JSON.parse(result.student)[i]],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + stuall.push(stu) + } + + res.send({stuall:stuall,num:JSON.parse(result.student).length,kczou:JSON.parse(result.classzou),qj:JSON.parse(result.classtime),stu:JSON.parse(result.student)}) +}) +app.get("/api/getchatinfor",async (req,res)=>{ + const sql="SELECT * FROM chatinformation WHERE `group`=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.group],(error,results,fields)=>{ + console.log(error) + resolve(results) + }) + }) + let xh=[] + result.map((value,index)=>{ + xh.push(JSON.parse(value.information)) + }) + console.log(xh) + res.send(xh) +}) +app.post("/apitea/sendqd",async (req,res)=>{ + const sql="INSERT INTO qd(uuid,tea,teacherid,kcone,qdinfor,qdstu) VALUES(?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sql,[req.body.uuid,req.body.tea,req.body.teacherid,req.body.kcone,JSON.stringify(req.body.qdinfor),JSON.stringify(req.body.qdstu)],(error,results,fields)=>{ + if(error)throw error; + console.log(error) + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +let connectedClients = []; +io.use((socket, next) => { + const token = socket.handshake.auth; // 获取 token 或其他身份验证信息 + // 在这里验证 token,例如检查其有效性或与数据库中的记录匹配 + console.log(token) + next(); // 如果验证成功,允许连接继续进行 + + + +}); +app.post("/api/deletechatmeaaage",async (req,res)=>{ + const sqlselect="SELECT deletechat FROM student WHERE xuehao=?" + const chatresult=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.xuehao],(error,results,fields)=>{ + resolve(results[0]) + }) + + }) + let chatold=[]; + if(chatresult){ + if(chatresult.deletechat){ + chatold=JSON.parse(chatresult.deletechat) + } + } + chatold=[...chatold,...req.body.chatnew] + const sql="UPDATE student SET deletechat=? WHERE xuehao=?" + await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(chatold),req.body.xuehao],(error,results,fields)=>{ + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apitea/deletechatmeaaage",async (req,res)=>{ + const sqlselect="SELECT deletechat FROM teacher WHERE xuegonghao=?" + const chatresult=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.body.xuehao],(error,results,fields)=>{ + resolve(results[0]) + }) + + }) + let chatold=[]; + if(chatresult){ + if(chatresult.deletechat){ + chatold=JSON.parse(chatresult.deletechat) + } + } + chatold=[...chatold,...req.body.chatnew] + const sql="UPDATE teacher SET deletechat=? WHERE xuegonghao=?" + await new Promise((resolve, reject) => { + connection.query(sql,[JSON.stringify(chatold),req.body.xuehao],(error,results,fields)=>{ + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.get("/api/kcchatstu",async (req,res)=>{ + const sqlstu = "SELECT studentname,xuehao,shoujihao,xingbian,xueyuan,nianjizhaungye,deletechat FROM student WHERE xuehao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.stu],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + res.send(result) +}) +app.get("/apitea/kcchatea",async (req,res)=>{ + const sqlstu = "SELECT * FROM teacher WHERE xuegonghao=?" + const result=await new Promise((resolve, reject) => { + connection.query(sqlstu,[req.query.stu],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + res.send(result) +}) +app.get("/api/getchatlistkc_new", async function (req, res) { + const sql="SELECT * FROM kechengbiaotest WHERE JSON_CONTAINS(student,JSON_ARRAY(?), '$')" + const resultkc=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.stu],(error,results,fields)=>{ + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlchat,[resultkc[i].teacherid+"kcchat"],(error,results,fields)=>{ + resolve(results); + }) + }) + let wb=""; + if(resultchat) { + + if (resultchat[0]) { + resultchat=resultchat[0] + if (JSON.parse(resultchat.information).lx === "wb") { + wb = JSON.parse(resultchat.information).message.substring(0, 13) + } else if (JSON.parse(resultchat.information).lx === "schoolactive") { + wb = JSON.parse(resultchat.information).lxwb + } else if (JSON.parse(resultchat.information).lx === "pic") { + wb = "[图片]" + } else if (JSON.parse(resultchat.information).lx === "sp") { + wb = "[视频]" + } + } else { + wb = "[无消息]" + } + }else { + wb = "[无消息]" + } + resultkc[i].message=wb; + delete resultkc[i].classtime + delete resultkc[i].classzou + delete resultkc[i].student + + } + res.send(resultkc) +}) +app.get("/apitea/getchatlistkc_new", async function (req, res) { + const sql="SELECT * FROM kechengbiaotest WHERE teacher=?" + const resultkc=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.tea],(error,results,fields)=>{ + resolve(results); + }) + }) + for(let i=0;i { + connection.query(sqlchat,[resultkc[i].teacherid+"kcchat"],(error,results,fields)=>{ + if(error)throw error + resolve(results); + }) + }) + console.log(resultchat) + // alert(JSON.stringify(resultchat)) + let wb=""; + if(resultchat) { + console.log(1234) + // alert(1) + if (resultchat[0]) { + resultchat=resultchat[0] + if (JSON.parse(resultchat.information).lx === "wb") { + wb = JSON.parse(resultchat.information).message.substring(0, 13) + } else if (JSON.parse(resultchat.information).lx === "schoolactive") { + wb = JSON.parse(resultchat.information).lxwb + } else if (JSON.parse(resultchat.information).lx === "pic") { + wb = "[图片]" + } else if (JSON.parse(resultchat.information).lx === "sp") { + wb = "[视频]" + } + } else { + wb = "[无消息]" + } + }else { + wb = "[无消息]" + } + resultkc[i].message=wb; + delete resultkc[i].classtime + delete resultkc[i].classzou + delete resultkc[i].student + + } + res.send(resultkc) +}) +function max(a,b){ + return a>b?a:b +} +//pdfjs.GlobalWorkerOptions.workerSrc = require.resolve('pdfjs-dist/legacy/build/pdf.worker.min.js'); + +app.get('/apitea/getkcpptlist', async function (req, res) { + const sqlselect="SELECT * FROM inclass_zhiyue WHERE kctime=? AND kcteacherid=? AND lx=?" + console.log(req.query) + let pptresult=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.query.kctime,req.query.kch,req.query.lx], (error,results,fields)=>{ + resolve(results) + }) + }) + res.send(pptresult) +}) +app.post('/apitea/uploadppt',async function (req, res) { + const uid=uuidv4.v4() + let dir=`C:\\Users\\l\\WebstormProjects\\examp\\serve\\nginx\\html\\ppt1\\${uid}` + child_process.execFileSync(`python`, ["C:\\Users\\l\\PycharmProjects\\PythonProject7\\pptxtohtml.py", req.body.ppt,dir]) + const files = fs.readdirSync(dir); + let pptlist=[] + const htmlurl=`http://localhost:89/ppt1/${uid}` + files.map((file,index)=>{ + pptlist.push(`${htmlurl}/${file}`) + }) + + //letuuidv4.v4() + const sqlinseret="INSERT INTO inclass_zhiyue(id,kctime,kcteacherid,teacher,infor,lx)VALUES(?,?,?,?,?,?)" + let infor={ + name:req.body.filename, + filelist:pptlist + } + await new Promise((resolve, reject) => { + connection.query(sqlinseret,[uid,req.body.kctime,req.body.teacherid,req.body.teacher,JSON.stringify(infor,null,4),"ppt"],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({infor:JSON.stringify(infor,null,4),id:uid,lujin:dir,lx:"ppt"}) +}) +app.post('/apitea/uploadzy',async function (req, res) { + const sqlinseret="INSERT INTO inclass_zhiyue(id,kctime,kcteacherid,teacher,infor,lx)VALUES(?,?,?,?,?,?)" + const uid=uuidv4.v4() + let infor={ + filename:req.body.filename, + src:req.body.html + } + await new Promise((resolve, reject) => { + connection.query(sqlinseret,[uid,req.body.kctime,req.body.teacherid,req.body.teacher,JSON.stringify(infor,null,4),"sp"],(error,results,fields)=>{ + if(error)throw error + resolve(results) + }) + }) + res.send({...infor,id:uid,lx:"sp"}) +}) +app.get('/apitea/getotherrc',async(req,res)=>{ + const sqlselect="SELECT * FROM inclass_zhiyue WHERE kctime=? AND kcteacherid=?" + console.log(req.query) + let rcresult=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.query.kctime,req.query.kch], (error,results,fields)=>{ + resolve(results) + }) + }) + let sp=[]; + let pic=[]; + rcresult.map((rcone,index)=>{ + if(rcone.lx==="sp"){ + let temp={...rcone,...JSON.parse(rcone.infor)} + delete temp.infor + sp.push(temp) + } + if(rcone.lx==="pic"){ + let temp={...rcone,...JSON.parse(rcone.infor)} + delete temp.infor + pic.push(temp) + } + + }) + res.send({video:sp,pic:pic}) +}) +app.post('/apitea/changeppt',async (req,res)=>{ + const sqlupdate="UPDATE inclass_zhiyue SET infor=? WHERE id=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.infor,req.body.id],(error,results,fields)=>{ + resolve(results) + }) + }) + res.send({status:"ok"}) +}) +app.post("/apistu/pppta",async (req,res)=>{ + const sqlread="SELECT * FROM tmj_ex WHERE id=?" + const resultptainfor=await new Promise((resolve, reject) => { + connection.query(sqlread,[req.body.uuid],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + let cdang={}; + let information=JSON.parse(resultptainfor.tmlist)[parseInt(req.body.th)] + //res.send(JSON.parse(information.information)) + let tmlist=JSON.parse(information.information).testprint + let uuid1=uuidv4.v4() + let worktemp="C:\\Users\\l\\Music\\reat\\src\\MarkdownEditor\\test\\"+uuid1 + fs.mkdirSync(worktemp) + if(req.body.pl==="java") { + fs.writeFileSync(worktemp + "\\Main.java", req.body.code) + + fs.writeFileSync(worktemp + "\\inputby.txt", "work") + tmlist.map((tmone, index) => { + fs.writeFileSync(worktemp + "\\input" + (index + 1) + ".txt", tmone.stdin) + }) + child_process.execFileSync(`python`, ["C:\\Users\\l\\PycharmProjects\\PythonProject7\\py2.py", worktemp, "java", tmlist.length]) + let json_wb = fs.readFileSync(worktemp + "\\zt.json").toString() + let json_zt = JSON.parse(json_wb) + let zt_1 = [...json_zt.test] + if (json_zt.by === 0) { + let work_result = [...tmlist] + let allprint=0; + let stdprint=0; + let max_time=0; + let max_merroy=0; + tmlist.map((tmresult, indexresult) => { + zt_1[indexresult].by = 0 + zt_1[indexresult].sc = fs.readFileSync(worktemp + "\\output1.txt", {encoding: "utf8"}) + zt_1[indexresult].err = fs.readFileSync(worktemp + "\\err1.txt", {encoding: "utf8"}) + zt_1[indexresult] = {...zt_1[indexresult], ...tmresult} + zt_1[indexresult].stuprint=0 + if(zt_1[indexresult].exit_code===0) { + max_merroy = max(max_merroy, zt_1[indexresult].memory) + max_time = max(max_time, zt_1[indexresult].time) + if (zt_1[indexresult].sc === zt_1[indexresult].stdout) { + + if(zt_1[indexresult].memory>256.0){ + zt_1[indexresult].zt="内存超标" + zt_1[indexresult].color="red" + }else if(zt_1[indexresult].time>10.0){ + zt_1[indexresult].zt="时间超标" + zt_1[indexresult].color="red" + }else { + zt_1[indexresult].zt="答案正确" + zt_1[indexresult].stuprint=zt_1[indexresult].print + zt_1[indexresult].color="green" + } + }else { + zt_1[indexresult].zt="答案错误" + zt_1[indexresult].color="red" + } + }else { + zt_1[indexresult].zt="非零返回" + zt_1[indexresult].color="red" + } + allprint+=parseInt(zt_1[indexresult].stuprint) + stdprint+=parseInt(zt_1[indexresult].print) + }) + let wb_end=""; + let wb_color="" + if(allprint===stdprint){ + wb_color="green" + wb_end="全部正确" + }else if(allprint===0){ + wb_color="red" + wb_end="答案错误" + }else{ + wb_color="orange" + wb_end="部分正确" + } + if(max_time>10.0){ + wb_end="时间超标" + }else if(max_merroy>256.0){ + wb_end="内存超标" + } + let zt_result={timefinish:moment().format(),stuprint:stdprint,memory:max_merroy,time:max_time,language:"java",print:`${allprint}/${stdprint}`,wb:wb_end,wb_color:wb_color,result:zt_1,code:req.body.code} + res.send(zt_result) + cdang=zt_result + //zt_1.by=0 + //zt_1.sc=fs.readFileSync(worktemp+"\\output1.txt",{encoding:"utf8"}) + //zt_1.err=fs.readFileSync(worktemp+"\\err1.txt",{encoding:"utf8"}) + }else { + let by_err={} + by_err.by=json_zt.by + by_err.err=fs.readFileSync(worktemp+"\\err_by.txt",{encoding:"utf8"}) + let zt_result={timefinish:moment().format(),stuprint:0,language:"java",print:`0`,wb:"编译错误",wb_color:"red",result:{ + ...by_err + },code:req.body.code} + res.send(zt_result) + cdang=zt_result + } + + + } + cdang.code=req.body.code + const sqlstuselect="SELECT * FROM tmj_stu WHERE xuehao=? AND ksh=?" + const resultstu=await new Promise((resolve, reject) => { + connection.query(sqlstuselect,[req.body.xuehao,req.body.uuid],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + if(req.body.defen==="yes") + cdang.df=true + else + cdang.df=false + console.log(resultstu) + let temp=JSON.parse(resultstu.zuodaxx) + if(!temp[parseInt(req.body.th)].tijiao){ + temp[parseInt(req.body.th)].tijiao=[]; + } + temp[parseInt(req.body.th)].tijiao.push(cdang) + if(req.body.defen==="yes"){ + temp[parseInt(req.body.th)].stuprint=cdang.stuprint + + } + temp[parseInt(req.body.th)].code=req.body.code + const sqlupdate="UPDATE tmj_stu SET zuodaxx=? WHERE xuehao=? AND ksh=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(temp,null,4),req.body.xuehao,req.body.uuid],(error,results,fields)=>{ + resolve(results); + }) + }) + +}) +app.post('/apitea/sctimuone',async (req,res)=>{ + const sqlinsert="INSERT INTO tmone(uuid,kch,tea,kctime,title,infor) VALUES(?,?,?,?,?,?)" + await new Promise((resolve, reject) => { + connection.query(sqlinsert,[req.body.uuid,req.body.kch,req.body.tea,req.body.kctime,req.body.title,JSON.stringify(req.body.infor)],(error,results,fields)=>{ + resolve(results); + }) + }) + res.send({status:"ok"}) +}) +app.get('/apitea/getteatmonelist',async (req,res)=>{ + const sqlselect="SELECT * FROM tmone WHERE kch=? AND kctime=?" + let result=await new Promise((resolve, reject) => { + connection.query(sqlselect,[req.query.kch,req.query.kctime],(error,results,fields)=>{ + resolve(results); + }) + }) + let cxzl=[] + result.map((tmone)=>{ + cxzl.push(JSON.parse(tmone.infor)) + }) + res.send(cxzl) +}) +app.post('/apitea/updatetimuone',async (req,res)=>{ + const sqlupdate="UPDATE tmone SET title=?,infor=? WHERE uuid=?" + console.log(req.body.uuid) + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[req.body.title,JSON.stringify(req.body.infor),req.body.uuid],(error,results,fields)=>{ + if(error)throw error + resolve(results); + }) + }) + res.send({status:"ok"}) +}) +app.post("/apistu/debugcode",async (req,res)=>{ + let uuid1=uuidv4.v4() + let worktemp="C:\\Users\\l\\Music\\reat\\src\\MarkdownEditor\\test\\"+uuid1 + fs.mkdirSync(worktemp) + if(req.body.pl==="java") { + fs.writeFileSync(worktemp + "\\Main.java", req.body.code) + + fs.writeFileSync(worktemp + "\\inputby.txt", "work") + fs.writeFileSync(worktemp + "\\input1.txt", req.body.sr) + child_process.execFileSync(`python`, ["C:\\Users\\l\\PycharmProjects\\PythonProject7\\py2.py", worktemp, "java", 1]) + let json_wb=fs.readFileSync(worktemp+"\\zt.json") + let json_zt=JSON.parse(json_wb) + let zt_1={...json_zt.test[0]} + if(json_zt.by===0){ + zt_1.by=0 + zt_1.sc=fs.readFileSync(worktemp+"\\output1.txt",{encoding:"utf8"}) + zt_1.err=fs.readFileSync(worktemp+"\\err1.txt",{encoding:"utf8"}) + }else{ + zt_1.by=json_zt.by + zt_1.err=fs.readFileSync(worktemp+"\\err_by.txt",{encoding:"utf8"}) + } + res.send(zt_1) + //fs.readFileSync(worktemp+"\\") + } +}) +app.post("/apitea/testwx",async (req,res)=>{ + io.emit('server',{ + ...req.body + }) + res.send({status:"ok"}) +}) +io.on('connection', (socket) => { + console.log('a user connected'); + connectedClients.push(socket); + socket.emit('userid', socket.id) + socket.emit('server',{ + test:"t1" + }) + // console.log(socket.handshake) + socket.on('disconnect', () =>{ + console.log('user disconnected'); + }); + +socket.on('chat message', (msg) => { + //console.log(msg) + const sqlinsert="INSERT INTO chatinformation(uuid,xuegonghao,sf,`time`,`group`,information) VALUES(?,?,?,?,?,?)" + connection.query(sqlinsert,[msg.uuid,msg.xuehao,msg.sf,moment().format(),msg.group,JSON.stringify(msg,null,3)],(error,results,fields)=>{ + console.log(error) + }) + //console.log(connectedClients) + let socketsend=[] + console.log(msg.group) + // console.log(connectedClients[0]) + connectedClients.filter(socket=>(socket.handshake.auth.kcid===msg.group)).map((value,index)=>{ + //value.emit('chat message', msg); + socketsend.push(value.id) + io.to(value.id).emit('chat message', msg); + // console.log(value.handshake.auth) + // value.emit(msg) + }) + + // console.log("ABC",socketsend) + // console.log(JSON.stringify(io.sockets)) + //io.emit('debug', io.sockets) + // console.log(msg) + //io.emit('chat message', msg); + +}); + +app.get("/apitea/qdinfor",async (req,res)=>{ + const sql="SELECT * FROM qd WHERE uuid=?" + const result=await new Promise((resolve, reject) => { + connection.query(sql,[req.query.uuid],(error,results,fields)=>{ + resolve(results[0]) + }) + }) + let qd={...JSON.parse(result.qdstu),...JSON.parse(result.qdinfor),uuid:result.uuid,yesno:result.yesno} + res.send(qd) + +}) + app.post("/apitea/updateqdstatus",async (req,res)=>{ + const sqlreadqd="SELECT * FROM qd WHERE uuid=?" + console.log(req.body) + let result=await new Promise((resolve, reject) => { + connection.query(sqlreadqd,[req.body.uuid],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + let json_a=JSON.parse(result.qdstu) + json_a.qdlist[req.body.xuehao]=req.body.jsonqd + const sqlupdate="UPDATE qd SET qdstu=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(json_a,null,4),req.body.uuid],(error,results,fields)=>{ + resolve(results); + }) + }) + res.send({status:"ok"}) + }) + app.post("/apitea/updateqdstatus_ex",async (req,res)=>{ + const sqlreadqd="SELECT * FROM qd WHERE uuid=?" + console.log(req.body) + let result=await new Promise((resolve, reject) => { + connection.query(sqlreadqd,[req.body.uuid],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + let json_a=JSON.parse(result.qdstu) + json_a.qdlist[req.body.xuehao]={...json_a.qdlist[req.body.xuehao],...req.body.jsonqd} + const sqlupdate="UPDATE qd SET qdstu=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(sqlupdate,[JSON.stringify(json_a,null,4),req.body.uuid],(error,results,fields)=>{ + resolve(results); + }) + }) + res.send({status:"ok"}) + }) +app.post("/apistu/mimaqiandao",async (req,res)=>{ + const sqlreadqd="SELECT * FROM qd WHERE uuid=?" + console.log(req.body) + let result=await new Promise((resolve, reject) => { + connection.query(sqlreadqd,[req.body.uuid],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + if(result.yesno==="yes") { + + if (req.body.qdmm === JSON.parse(result.qdinfor).qdmm||JSON.parse(result.qdinfor).qdlx==="普通签到") { + //密码正确 + let qdxxstu=JSON.parse(result.qdstu) + qdxxstu.qdlist[req.body.xuehao]={ + time:moment().format(), + status:"已签到", + operator:"stu" + } + connectedClients.filter(socket=>(socket.handshake.auth.stu===result.tea)).map((value,index)=>{ + //value.emit('chat message', msg); + // socketsend.push(value.id) + io.to(value.id).emit('qd', { + uuid:result.uuid, + xuehao:req.body.xuehao, + time:moment().format() + }); + // console.log(value.handshake.auth) + // value.emit(msg) + }) + const qdsql="UPDATE qd SET qdstu=? WHERE uuid=?" + await new Promise((resolve, reject) => { + connection.query(qdsql,[JSON.stringify(qdxxstu,null,4),req.body.uuid],(error,results,fields)=>{ + resolve(results) + }) + }) + res.send({status:"yes"}) + }else{ + res.send({status:"errorpassage"}) + } + }else { + res.send({status:"已结束"}) + } + +}) +app.get("/apistu/getqdstatus",async (req,res)=>{ + const sqlreadqd="SELECT * FROM qd WHERE uuid=?" + console.log(req.body) + let result=await new Promise((resolve, reject) => { + connection.query(sqlreadqd,[req.query.uuid],(error,results,fields)=>{ + resolve(results[0]); + }) + }) + if(JSON.parse(result.qdstu).yqjstu.includes(req.query.stu)){ + res.send({status:"已请假"}) + }else { + if (JSON.parse(result.qdstu).qdlist[req.query.stu].status === "已签到") { + res.send({...JSON.parse(result.qdstu).qdlist[req.query.stu]}) + } else if (JSON.parse(result.qdstu).qdlist[req.query.stu].status === "异常签到") { + res.send({...JSON.parse(result.qdstu).qdlist[req.query.stu]}) + } else if (JSON.parse(result.qdstu).yqjstu.includes(req.query.stu)) { + res.send({status: "已请假"}) + } else if (JSON.parse(result.qdstu).qdlist[req.query.stu] === "no") { + //未签到 + console.log(result) + if (result.yesno === "yes") { + res.send({status: JSON.parse(result.qdinfor).qdlx}) + } else { + res.send({status: "关闭签到"}) + } + + } + } +}) + + app.post('/api/slides', (req, res) => { + const { Presentation, SlideIndex, SlideData, Timestamp } = req.body; + + // 验证数据 + if (!SlideData || !Presentation) { + return res.status(400).json({ error: '缺少必要参数' }); + } + + // 这里可以添加保存到数据库或文件的逻辑 + console.log(`接收到幻灯片: ${Presentation} 第 ${SlideIndex} 张`); + const buffer = Buffer.from(SlideData, 'base64'); + + try { + const uuid1=uuidv4.v4() + const folderPath = 'nginx/html/ppt/' + fs.writeFileSync(folderPath+uuid1+'.png', buffer); + io.emit('chat message', { + lx: "pic", + socketid: "2024", + xuehao: "202413501062", + base64: "http://localhost:89/ppt/"+uuid1+'.png', + sf: "tea", + uuid:uuid1, + group: "imut" + }) + + console.log('文件已成功写入'); + } catch (err) { + console.error('写入文件时出错:', err); + } + // 返回成功响应 + res.json({ + success: true, + message: '幻灯片已接收', + presentation: Presentation, + slideIndex: SlideIndex, + dataLength: SlideData.length + }); + }); + +socket.on('information', (msg) => { + console.log(connectedClients[0].id) + let index=connectedClients.findIndex(socket=>{socket.id===msg.socketid}) + console.log(index) + if(index!==-1) { + connectedClients[index].group = msg.qun + console.log(123) + } +}) +}); +server.listen(3400);