Commit 0ae9a9f3 by 孙香冬

no message

parent 0bd09563
......@@ -12,6 +12,7 @@
"express-async-handler": "^1.1.4",
"express-history-api-fallback": "^2.2.1",
"formidable": "^1.2.1",
"log4js": "^6.9.1",
"lru-cache": "^4.1.5",
"md5": "^2.2.1",
"moment": "^2.24.0",
......@@ -24,7 +25,6 @@
"svg-captcha": "^1.3.12",
"ws": "^5.2.2"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
......
......@@ -20,7 +20,6 @@ export async function getData(req, res) {
let dayStuData = await getDayStuData();
let monthStuData = await getMonthStuData();
console.log("monthStuData" +JSON.stringify(monthStuData));
ret["gnjjksbqsfx"] = getChartOutData("各年级健康上报趋势分析", {"日": {unit:"", dataInfo:dayStuData}, "月": {unit: "", dataInfo:monthStuData}});
let differentSchoolType = ["幼儿园","托育机构","早教中心","托儿所","小学","初级中学","高级中学","中职校","完中","九年一贯制","十年一贯制","十二年一贯制","其他"];
......
......@@ -3,80 +3,75 @@
*/
import { getChartOutData, getKeyNumberValueOutData, getKeyStringValueOutData, getListOutData, getStringOutData } from "../../cal/out";
import { getWorkstationData } from "../../data/interface/secondPhase/workstation";
import * as workstation from "../../data/interface/secondPhase/workstation";
import * as defaultConf from "../../config/workstationConfig";
import { data } from "../../data/interface/secondPhase/testWorkstation";
export function getData(req, res) {
export async function getData(req, res) {
let ret:any = {};
let {} = getWorkstationData();
// let {} = await workstation.getEnrollmentData();
let zsqkData = defaultConf.EnrollmentSituationDefault;
ret["zsqk"] = getKeyStringValueOutData("招生情况", zsqkData);
let {enrollmentSituationBase, passRate, workstationMapBase, stuQualificationRate, topicsNum, topicsStatus} = await workstation.getEnrollmentData();
ret["zsqk"] = getKeyStringValueOutData("招生情况", enrollmentSituationBase);
let tjsData = defaultConf.RecommendedStuDefault;
let zjsData = defaultConf.SelfRecommendationStuDefault;
ret["lnzmxyqk"] = getChartOutData("历年招募学员情况", {"推荐生": {unit:"", dataInfo:tjsData}, "自荐生": {unit: "", dataInfo:zjsData}});
let {recommendedStu, selfRecommendationStu} = await workstation.getRecommendedStuData();
ret["lnzmxyqk"] = getChartOutData("历年招募学员情况", {"推荐生": {unit:"", dataInfo:recommendedStu}, "自荐生": {unit: "", dataInfo:selfRecommendationStu}});
let xslyfbData = defaultConf.StuSourceDistributionDefault;
let xslyfbData = await workstation.getSourceDistributionData();
ret["xslyfb"] = getChartOutData("学生来源分布", {"学生来源分布": {unit: "", dataInfo:xslyfbData}});
let xshglData = defaultConf.StuPassRateDefault;
ret["xshgqkhgl"] = getKeyStringValueOutData("学生合格情况合格率", xshglData);
ret["xshgqkhgl"] = getKeyStringValueOutData("学生合格情况合格率", passRate);
let xstcyyData = defaultConf.StuExitReasonDefault;
let xstcyyData = await workstation.getExitReasonData();
ret["xstcyy"] = getKeyStringValueOutData("学生退出原因", xstcyyData);
let xklsfbData = defaultConf.SubjectTeacherDistributionDefault;
ret["xklsfb"] = getKeyNumberValueOutData("学科老师分布", xklsfbData);
let {irslCount, subjectTeacher} = await workstation.getSubjectTeacherData();
let xklsfb = getKeyNumberValueOutData("学科老师分布", subjectTeacher);
xklsfb.total = irslCount;
ret["xklsfb"] = xklsfb;
let lnxzgzgqkData = defaultConf.PreviousYearsAddWorkstationDefault;
let gzzlxfbData = defaultConf.WorkstationTypeDistributionDefault;
let lnxzgzgqkData = await workstation.getAddWorkstation();
let gzzlxfbData = await workstation.getWorkstationType();
ret["gzzqk"] = getChartOutData("工作站情况", {"历年新增工作站情况": {unit:"", dataInfo:lnxzgzgqkData}, "工作站类型分布": {unit: "", dataInfo:gzzlxfbData}});
let dtjcsjData = defaultConf.WorkstationMapBaseDataDefalt;
ret["dtjcsj"] = getKeyStringValueOutData("地图基础数据", dtjcsjData);
ret["dtjcsj"] = getKeyStringValueOutData("地图基础数据", workstationMapBase);
let dtData = defaultConf.WorkstationMapDataDefault;
ret["dt"] = getKeyStringValueOutData("地图坐标数据", dtData);
let gzzData = await workstation.getWorkstationMap()
ret["dt"] = gzzData;
let rmktphData = defaultConf.HotTopicRankingDefault;
ret["rmktph"] = getKeyStringValueOutData("热门课题排行", rmktphData);
let rmxkphData = await workstation.getHotSubjectRanking();
ret["rmxkph"] = getListOutData("热门学科排行", rmxkphData);
let rmqyphData = await workstation.getHotRegionRanking();
ret["rmqyph"] = getListOutData("热门区域排行", rmqyphData);
let jnxzktData = defaultConf.YearNewTopicDefault;
ret["jnxzkt"] = getKeyStringValueOutData("今年新增课题", jnxzktData);
ret["jnxzkt"] = getKeyStringValueOutData("今年新增课题", topicsNum);
let jnxzktxxData = defaultConf.YearNewTopicChartDefault;
// let jnxzktxxData = defaultConf.YearNewTopicChartDefault;
let jnxzktxxData = await workstation.getTopicDistribution();
ret["jnxzktxx"] = getKeyStringValueOutData("今年新增课题环形图", jnxzktxxData);
let ktztData = defaultConf.TopicStateDefault;
ret["ktzt"] = getKeyStringValueOutData("课题状态", ktztData);
ret["ktzt"] = getKeyStringValueOutData("课题状态", topicsStatus);
let ktqkData = defaultConf.TopicSituationDefault;
// let ktqkData = defaultConf.TopicSituationDefault;
let ktqkData = await workstation.getProjectStatus();
ret["ktqk"] = getListOutData("课题情况", ktqkData);
let rmktData = defaultConf.HotTopicDefault;
// let rmktData = defaultConf.HotTopicDefault;
let rmktData = await workstation.getTopicsResources();
ret["rmkt"] = getListOutData("热门课题", rmktData);
let sjryzzData = defaultConf.HonoraryQualificationsMunicipalDefault;
ret["sjryzz"] = getStringOutData("市级荣誉资质", sjryzzData);
// let ggzzxshglData = defaultConf.WorkstationStuRateDefault;
let ggzzxshglData = await workstation.getWorkstationStuRate();
ret["ggzzxshgl"] = getKeyStringValueOutData("各工作站学生合格率", ggzzxshglData);
let qjryzzData = defaultConf.HonoraryQualificationsDistrictDefault;
ret["qjryzz"] = getStringOutData("区级荣誉资质", qjryzzData);
let xjryzzData = defaultConf.HonoraryQualificationsSchoolDefault;
ret["xjryzz"] = getStringOutData("校级荣誉资质", xjryzzData);
let yxxsData = defaultConf.OutstandingStuDefault;
let yxxsData = await workstation.getOutstandingStu();
ret["yxxs"] = getListOutData("优秀学生", yxxsData);
let xsqxhglData = defaultConf.StuQualificationRateDefault;
ret["xsqxhgl"] = getKeyStringValueOutData("学生去向合格率", xsqxhglData);
ret["xsqxhgl"] = getKeyStringValueOutData("学生去向合格率", stuQualificationRate);
let sylData = defaultConf.DoubleFirstClassDefault;
let bkData = defaultConf.UndergraduateCourseDefault;
let qtData = defaultConf.OtherStuMovementDefault;
let xsqxData = {"双一流": {"unit":"", dataInfo:sylData}, "本科": {"unit":"", dataInfo:bkData}, "其他": {"unit":"", dataInfo:qtData}}
let {peopleNum985, peopleNum211, peopleNumOther} = await workstation.getStuQualificationRate();
let xsqxData = {"985": {"unit":"", dataInfo:peopleNum985}, "211": {"unit":"", dataInfo:peopleNum211}, "其他": {"unit":"", dataInfo:peopleNumOther}}
ret["xsqx"] = getChartOutData("学生去向", xsqxData);
let xscgData = defaultConf.StuOutcomesDefault;
......@@ -86,3 +81,11 @@ export function getData(req, res) {
res.send(ret);
}
export async function getTest(req, res) {
let ret:any = {};
ret["data"] = data;
res.send(ret);
}
......@@ -3,55 +3,41 @@
*/
import { getChartOutData, getKeyNumberValueOutData, getKeyStringValueOutData, getListOutData } from "../../cal/out";
import { getWorkstationPopupData } from "../../data/interface/secondPhase/workstationPopup";
import * as popup from "../../data/interface/secondPhase/workstationPopup";
import * as defaultConf from "../../config/workstationPopupConfig";
import { BizError, SysError } from "../../util/bizError";
import { SYSTEMERRORENUM } from "../../config/enum";
export function getData(req, res) {
let id = req.query.id || "上海交通大学能源科技与未来城市实践工作站";
export async function getData(req, res) {
let wsid = req.body.id || "";
if (!wsid) throw new SysError(SYSTEMERRORENUM.参数错误, '工作站id为空');
let ret:any = {};
let {招生情况} = getWorkstationPopupData(id);
let {baseNum, stuCourseSchedule, municipalLvTopicsNum, stuQualified} = await popup.getBaseNumData(wsid);
let jcsjData = defaultConf.baseDefault;
let jcsjData = await popup.getBaseData(wsid);
ret["jcsj"] = getKeyStringValueOutData("工作站弹窗基础数据", jcsjData);
let jcsjslData = defaultConf.baseNumDefault;
ret["jcsjsl"] = getKeyStringValueOutData("基础数据数量", jcsjslData);
let drkqfxData = defaultConf.DailyAttendanceAnalysisDefault;
ret["drkqfx"] = getKeyStringValueOutData("当日考勤分析", drkqfxData);
let cqlData = defaultConf.AttendanceDefault;
ret["cql"] = getKeyStringValueOutData("出勤率", cqlData);
ret["jcsjsl"] = getKeyStringValueOutData("基础数据数量", baseNum);
let qqyyfxData = defaultConf.ReasonForAbsenceDefault;
ret["qqyyfx"] = getKeyStringValueOutData("缺勤原因分析", qqyyfxData);
ret["xsxkjd"] = getKeyNumberValueOutData("学生选课进度", stuCourseSchedule);
let xxfsfxData = defaultConf.LearningStyleAnalysisDefault;
ret["xxfsfx"] = getKeyStringValueOutData("学习方式分析", xxfsfxData);
let xssjktyjjdData = await popup.getCityResearchProgress(wsid);
ret["xssjktyjjd"] = getKeyStringValueOutData("市级课题研究进度", xssjktyjjdData);
let xxxkjdData = defaultConf.StuCourseScheduleDefault;
ret["xsxkjd"] = getKeyNumberValueOutData("学生选课进度", xxxkjdData);
let gxkxsdf = await popup.getSubjectStuScore(wsid);
ret["gxkxsdf"] = {title:"各学科学生得分", dataList:gxkxsdf};
let lspfpmData = defaultConf.TeacherRatingRankingDefault;
ret["lspfpm"] = getKeyStringValueOutData("老师评分排名", lspfpmData);
ret["bqxxhgfx"] = getKeyStringValueOutData("本期学生合格分析", stuQualified);
let bqxxhgfxData = defaultConf.StuQualifiedAnalysisDefault;
ret["bqxxhgfx"] = getKeyStringValueOutData("本期学生合格分析", bqxxhgfxData);
let tcyyfxData = defaultConf.ReasonForExitDefault;
let tcyyfxData = await popup.getQuitReason(wsid);
ret["tcyyfx"] = getChartOutData("退出原因分析", {"退出原因分析": {unit:"", dataInfo:tcyyfxData}});
let xsktyjjdData = defaultConf.StuTopicResearchProgressDefault;
ret["xsktyjjd"] = getKeyStringValueOutData("学生课题研究进度", xsktyjjdData);
let xssjktyjjdData = defaultConf.StuMunicipalTopicResearchProgressDefault;
ret["xssjktyjjd"] = getKeyStringValueOutData("学生市级课题研究进度", xssjktyjjdData);
ret["xsktyjjd"] = getKeyStringValueOutData("课题数", municipalLvTopicsNum);
let gzzcgData = defaultConf.WorkstationAchievementsDefault;
ret["gzzcg"] = getListOutData("工作站成果", gzzcgData);
let yjkt = await popup.getResearchSubject(wsid);
ret["yjkt"] = getListOutData("研究课题", yjkt);
res.send(ret);
}
\ No newline at end of file
import { PAGEENUM, PAGEENUM1, PAGEENUM2, PAGEENUM3, SYSTEMERRORENUM } from "../config/enum";
import { addTokenInfo, addUserInfo, checkAdminPermission, checkPagePermission, selectUserList, updateUser } from "../data/user/user";
import { uacInfomation } from "../serverConfig";
import { BizError } from "../util/bizError";
import { BizError, SysError } from "../util/bizError";
import { get, getParmiss, post, postParmiss } from "../util/request";
//登录
......@@ -19,7 +19,7 @@ export async function getUserToken(req, res) {
let token;
if (result.error) {
console.log();
throw new BizError(SYSTEMERRORENUM.您的登录已失效);
throw new SysError(SYSTEMERRORENUM.您的登录已失效);
} else if (result.access_token) { //获取用户信息
let { isAdmin, sub, real_name, phone, otherPage } = await getUserInfo(result.access_token);
......@@ -28,11 +28,11 @@ export async function getUserToken(req, res) {
addUserInfo(sub, phone, real_name, isAdmin, otherPage);
token = addTokenInfo(sub, lastTokenMs, result.access_token, result.refresh_token, isAdmin);
} else {
throw new BizError(SYSTEMERRORENUM.您的账户没有访问权限);
throw new SysError(SYSTEMERRORENUM.您的账户没有访问权限);
}
} else {
throw new BizError(SYSTEMERRORENUM.获取不到access_token);
throw new SysError(SYSTEMERRORENUM.获取不到access_token);
}
res.success({token});
......@@ -73,7 +73,7 @@ async function getUserInfo(access_token) {
let result:any = await getParmiss(uacInfomation.getUserInfoUrl, {}, {"Authorization": `Bearer ${access_token}`})
let isAdmin = false;
let {sub, role, permission, real_name, phone} = result;
if (!sub) throw new BizError(SYSTEMERRORENUM.获取玑脉用户信息失败);
if (!sub) throw new SysError(SYSTEMERRORENUM.获取玑脉用户信息失败);
permission = permission || "";
isAdmin = permission.indexOf("dpzs_client_admin") > -1;//是否能进入管理后天
......@@ -90,7 +90,7 @@ export function checkPermissionForAdmin(req, res) {
//校验是否有权限跳转大屏
export function checkPermissionForPage(req, res) {
let { page } = req.body;
if ( !page ) throw new BizError(SYSTEMERRORENUM.参数错误);
if ( !page ) throw new SysError(SYSTEMERRORENUM.参数错误);
let userId = req.headers.userid;
let ownOrNot = checkPagePermission(userId, page);
res.success({ownOrNot});
......@@ -108,7 +108,7 @@ export async function updatePermissions(req, res) {
let { allow, userId } = req.body;
let adminUser = req.headers.userid;
if ( !Array.isArray(allow) ) throw new BizError(SYSTEMERRORENUM.请求参数错误);
if ( !Array.isArray(allow) ) throw new SysError(SYSTEMERRORENUM.请求参数错误);
//校验参数
let config = {};
......@@ -120,15 +120,15 @@ export async function updatePermissions(req, res) {
}
let updateInfo = {};
allow.forEach(info => {
if ( !config[info] ) throw new BizError(SYSTEMERRORENUM.请求参数错误);
if ( !config[info] ) throw new SysError(SYSTEMERRORENUM.请求参数错误);
updateInfo[info] = true;
});
let isAdmin = checkAdminPermission(adminUser);
if (!isAdmin) throw new BizError(SYSTEMERRORENUM.您的账户没有访问权限);
if (!isAdmin) throw new SysError(SYSTEMERRORENUM.您的账户没有访问权限);
let addSuccess = updateUser(userId, updateInfo);
if (!addSuccess ) throw new BizError(SYSTEMERRORENUM.没有找到目标用户);
if (!addSuccess ) throw new SysError(SYSTEMERRORENUM.没有找到目标用户);
res.success({isOk:true});
}
......@@ -137,12 +137,12 @@ export async function updatePermissions(req, res) {
export async function permissionList(req, res) {
let { select, page, typeList } = req.body;
if ( isNaN(page) ) throw new BizError(SYSTEMERRORENUM.参数错误);
if ( !Array.isArray(typeList) ) throw new BizError(SYSTEMERRORENUM.参数错误);
if ( isNaN(page) ) throw new SysError(SYSTEMERRORENUM.参数错误);
if ( !Array.isArray(typeList) ) throw new SysError(SYSTEMERRORENUM.参数错误);
typeList.forEach(key => {
if ( isNaN(key) ) throw new BizError(SYSTEMERRORENUM.参数错误);
if ( isNaN(key) ) throw new SysError(SYSTEMERRORENUM.参数错误);
});
if (select.length > 60) throw new BizError(SYSTEMERRORENUM.参数错误);
if (select.length > 60) throw new SysError(SYSTEMERRORENUM.参数错误);
let config1 = [];
for(let key in PAGEENUM1) {
......
......@@ -49,6 +49,6 @@ for (let key in SYSTEMERRORENUM) {
systemErrorMsgMap[SYSTEMERRORENUM[key]] = key;
}
export function getMsg(param) {
export function getSysMsg(param) {
return systemErrorMsgMap[param];
}
\ No newline at end of file
export enum ERRORENUM {
身份验证失败 = 1,
非法登录,
身份验证过期,
参数错误,
地址数据不完整,
请完善信息,
数据操作失败,
数据查询失败,
数据联合查询失败,
该方法仅可进行查询操作,
该方法仅可进行联合查询操作,
分页请设置当前页数,
密码错误,
用户不存在,
该用户不是管理员,
目标用户不是正式党员,
管理员不可被删除,
权限不足,
目标数据不存在,
账号不存在,
密码不一致,
密码只能由618位字符和数字组成,
未找到数据,
库中不存在对应数据,
表单校验失败,
暂无对应数据,
该进度不是文字学习
}
export enum ERRORCODEENUM {
身份验证失败 = 401,
非法登录 = 402,
身份验证过期 = 403,
}
let bizErrorMsgMap = {};
for (let key in ERRORENUM) {
bizErrorMsgMap[ERRORENUM[key]] = key;
}
export function getBizMsg(param) {
return bizErrorMsgMap[param];
}
\ No newline at end of file
......@@ -119,10 +119,16 @@ export async function getUV() {
export async function getBaiduSiteList() {
let url = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList";
// let header = {
// "username": "shkyzx",
// "password": "Support01",
// "token": "2444afaabacc40a0819a15815d7ec10f",
// "account_type": 1
// };
let header = {
"username": "shkyzx",
"password": "Support01",
"token": "2444afaabacc40a0819a15815d7ec10f",
"userName": "shkyzx",
"accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MDE0MTE2ODgsImp0aSI6IjgwNDIxODIxOTEzODUxOTA0MjYifQ.fJLIxDxYxTiAwbxSDnDRnYsZckxYJSa__jBtCrbc_aSWRt6sKx70SeOidQeIpFI7",
"account_type": 1
};
let body = {}
......@@ -134,12 +140,19 @@ export async function getBaiduSiteList() {
export async function getPVCountBySiteId(siteId) {
let url = "https://api.baidu.com/json/tongji/v1/ReportService/getData";
// let header = {
// "username": "shkyzx",
// "password": "Support01",
// "token": "2444afaabacc40a0819a15815d7ec10f",
// "account_type": 1
// };
let header = {
"username": "shkyzx",
"password": "Support01",
"token": "2444afaabacc40a0819a15815d7ec10f",
"userName": "shkyzx",
"accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MDE0MTE2ODgsImp0aSI6IjgwNDIxODIxOTEzODUxOTA0MjYifQ.fJLIxDxYxTiAwbxSDnDRnYsZckxYJSa__jBtCrbc_aSWRt6sKx70SeOidQeIpFI7",
"account_type": 1
};
let body = {
"site_id": `${siteId}`,
"start_date": moment().format("YYYYMMDD"),
......
......@@ -135,6 +135,7 @@ export function post(url, requestData, headers) {
})
res.on('error', (err)=> {
console.log(JSON.stringify(err));
reject(err);
})
});
......@@ -143,8 +144,6 @@ export function post(url, requestData, headers) {
req.end();
})
}
......
......@@ -10,13 +10,13 @@ const bdyAndAlyConfig = {
"学生体育网": {alyName:"正汇学生体育网", alyUrl:"secsa.shec.edu.cn/xstyw/", baiduUrl:"" },
"综评": {alyName:"正汇综评系统", alyUrl:"shsunshine-zp.shec.edu.cn/shjw/", baiduUrl:"shsunshine-zp.shec.edu.cn/shjw" },
"上海市学生体育艺术科技教育活动": {alyName:"玑脉大平台", alyUrl:"shsunshine-zp.shec.edu.cn/", baiduUrl:"shsunshine-zp.shec.edu.cn" },
"因病缺课缺勤网络直报系统": {alyName:"玑脉直报系统", alyUrl:"shxxybqq.shec.edu.cn/", baiduUrl:"shxxybqq.shec.edu.cn" },
// "因病缺课缺勤网络直报系统": {alyName:"玑脉直报系统", alyUrl:"shxxybqq.shec.edu.cn/", baiduUrl:"shxxybqq.shec.edu.cn" },
"OA办事管理系统":{baiduUrl:'secsagl.shec.edu.cn'},
"教软子系统":{baiduUrl:'shsunshine1-zp.shec.edu.cn'},
"精英足球训练营":{baiduUrl:''},
"明日科技之星":{baiduUrl:''},
"学生活动网及教软负责子系统":{baiduUrl:''},
"\"申生康\"上海校园防疫通系统":{alyName:"教软-申生康", alyUrl:"i-ssk.shec.edu.cn", baiduUrl:'i-ssk.shec.edu.cn'}
"\"申生康\"上海校园防疫通系统":{alyName:"教软-申生康", alyUrl:"i-ssk.shec.edu.cn/", baiduUrl:'i-ssk.shec.edu.cn'}
};
export let statsQueue = {};
......
/**
* 实践工作站弹窗
*/
import { getParameter, getUrl, getWorkstationUrl, workstationEnum, workstationTokenEnum } from "../url";
import * as defaultConf from "../../../config/workstationPopupConfig"
import { post } from "../../../util/request";
import { getUrl, workstationEnum } from "../url";
const appKey = 200000086;
export async function getBaseNumData(id) {
let {body, headers} = getParameter(workstationEnum.工作站整体数字, workstationTokenEnum.工作站整体数字);
let baseNumData:any = await post(getWorkstationUrl(workstationEnum.工作站整体数字), body, headers);
let baseNumSource:any = baseNumData || defaultConf.BaseNumDefault;
// let baseNumSource = defaultConf.BaseNumDefault;
//上海市青少年科学创新实践工作站
export function getWorkstationPopupData(id) {
let body = {};
// let zsqk = await post(getUrl(healthEnum.招生情况), body, {});
let 招生情况 = [{mc:"学生数量", sl:"6214"},{mc:"bjs", sl:"3671"}]
//基础整合数据
let baseNumConf = {lssl:"老师数量", xssl:"学生数量", ktsl:"课题数量"};
let baseNum = {"老师数量":0, "学生数量":0, "课题数量":0};
return {招生情况};
//学生选课进度
let stuCourseScheduleConf = {yxkrs:"已选课程学生数", wxkrs:"未选课程学生数"};
let stuCourseSchedule = {"已选课程学生数":0, "未选课程学生数":0};
//市级课题研究进度-课题数
let municipalLvTopicsNum:any = {"课题数量": 0};
//本期学生合格分析-合格人数、未合格人数
let stuQualifiedConf = {hgrs: "合格人数", whgrs:"未合格人数"};
let stuQualified = {"合格人数":0, "未合格人数":0};
baseNumSource["data"].forEach( item => {
let {wsid, name, quantity} = item;
if(id == wsid) {
for (let key in baseNumConf) {
if (name == key) baseNum[baseNumConf[key]] = quantity;
}
for (let key in stuCourseScheduleConf) {
if (name == key) stuCourseSchedule[stuCourseScheduleConf[key]] = quantity;
}
if (name == "ktsl") municipalLvTopicsNum["课题数量"] = quantity;
for (let key in stuQualifiedConf) {
if (name == key) stuQualified[stuQualifiedConf[key]] = quantity;
}
}
})
return {baseNum, stuCourseSchedule, municipalLvTopicsNum, stuQualified};
}
export async function getBaseData(id) {
let {body, headers} = getParameter(workstationEnum.左侧实践站介绍, workstationTokenEnum.左侧实践站介绍);
let baseData:any = await post(getWorkstationUrl(workstationEnum.左侧实践站介绍), body, headers);
let baseSource:any = baseData || defaultConf.BaseDefault;
// let baseSource = defaultConf.BaseDefault;
let baseConf = {wsname:"名称", wsaddress:"地址", soname:"学科", plname:"所辖实践点"};
let base = {"名称":"", "地址":"", "学科":"", "所辖实践点":""};
baseSource["data"].forEach( item => {
let {wsid, plname, soname, wsaddress, wsname} = item;
if (id == wsid) {
let sjdData = plname.split(",");
base["名称"] = wsname;
base["地址"] = wsaddress;
base["学科"] = soname;
base["所辖实践点"] = sjdData;
}
})
return base;
}
export async function getCityResearchProgress(id) {
let {body, headers} = getParameter(workstationEnum.中间市级课题研究进度, workstationTokenEnum.中间市级课题研究进度);
let cityResearchData:any = await post(getWorkstationUrl(workstationEnum.中间市级课题研究进度), body, headers);
let cityResearchSouorce:any = cityResearchData || defaultConf.CityResearchDefault;
// let cityResearchSouorce = defaultConf.CityResearchDefault;
let cityResearch = {"开题报告":"", "中期报告":"", "结题报告":""};
cityResearchSouorce["data"].forEach( item => {
let {wsid, ktrs, zqrs, jtrs} = item;
if (id == wsid) {
cityResearch["开题报告"] = ktrs;
cityResearch["中期报告"] = zqrs;
cityResearch["结题报告"] = jtrs;
}
})
return cityResearch;
}
export async function getSubjectStuScore(id) {
let {body, headers} = getParameter(workstationEnum.中间各学科学生得分, workstationTokenEnum.中间各学科学生得分);
let subjectStuScoreData:any = await post(getWorkstationUrl(workstationEnum.中间各学科学生得分), body, headers);
let subjectStuScoreSouorce:any = subjectStuScoreData || defaultConf.SubjectStuScoreDefault;
// let subjectStuScoreSouorce = defaultConf.SubjectStuScoreDefault;
let subjectStuScore = {};
subjectStuScoreSouorce["data"].forEach( item => {
let {wsid, soname, stname, wgtotal} = item;
if (id == wsid) {
if(!subjectStuScore[soname]) subjectStuScore[soname] = [];
subjectStuScore[soname].push({key:stname, value:wgtotal});
}
})
let subjectStuScoreMap = [];
for(let key in subjectStuScore) {
subjectStuScoreMap.push({type: key, list: subjectStuScore[key]});
}
return subjectStuScoreMap;
}
export async function getQuitReason(id) {
let {body, headers} = getParameter(workstationEnum.右侧退出原因分析, workstationTokenEnum.右侧退出原因分析);
let quitReasonData:any = await post(getWorkstationUrl(workstationEnum.右侧退出原因分析), body, headers);
let quitReasonSouorce:any = quitReasonData || defaultConf.QuitReasonDefault;
// let quitReasonSouorce = defaultConf.QuitReasonDefault;
let quitReason = [];
quitReasonSouorce["data"].forEach( item => {
let {wsid, otreason, otsl} = item;
if (id == wsid) {
quitReason.push({key:otreason, value:otsl});
}
})
return quitReason;
}
export async function getResearchSubject(id) {
let {body, headers} = getParameter(workstationEnum.右侧研究课题, workstationTokenEnum.右侧研究课题);
let researchSubjectData:any = await post(getWorkstationUrl(workstationEnum.右侧研究课题), body, headers);
let researchSubjectSouorce:any = researchSubjectData || defaultConf.ResearchSubjectDefault;
// let researchSubjectSouorce = defaultConf.ResearchSubjectDefault;
let researchSubject = [
{key:"年份", values:[]},
{key:"研究课题", values:[]},
{key:"结题学生数", values:[]}
];
researchSubjectSouorce["data"].forEach( item => {
let {wsid, ryear, jtrs, sjname} = item;
if (id == wsid) {
researchSubject[0].values.push(ryear);
researchSubject[1].values.push(sjname);
researchSubject[2].values.push(jtrs);
}
})
return researchSubject;
}
import { requestConfig, healthConfig } from "../../serverConfig";
import { requestConfig, healthConfig, workstationConfig } from "../../serverConfig";
const md5 = require("md5");
export function getHealthParameter(apiId, token) {
const body = {
apiId,
appKey: 200000085,
pageNum:1, //分页页数
pageSize:100, //每页大小
execType:2, //固定值
conditions:{}, //where查询条件
returnFields: [],
reqProtocol: "1"
};
// let token = "df399738-1572-4c45-bdf3-c2d2c428fa62";
// const token = "9c5e468b-eca1-48a8-a1fa-5215db2c3cc5";
const sign = md5(`apiId=${apiId}&appKey=200000085&token=${token}`);
const headers = {
apiId,
appKey:'200000085',
account:'yujc',
exexType:'3',
env:'PROD',
sign,
'Content-Type': 'application/json',
'accept': 'application/json; charset=utf-8',
}
return {body, headers};
}
export function getParameter(apiId, token) {
const body = {
apiId,
appKey: 200000086,
pageNum:1, //分页页数
pageSize:100, //每页大小
execType:2, //固定值
conditions:{}, //where查询条件
returnFields: [],
reqProtocol: "1"
};
// let token = "df399738-1572-4c45-bdf3-c2d2c428fa62";
// const token = "9c5e468b-eca1-48a8-a1fa-5215db2c3cc5";
const sign = md5(`apiId=${apiId}&appKey=200000086&token=${token}`);
const headers = {
apiId,
appKey:'200000086',
account:'yujc',
exexType:'3',
env:'PROD',
sign,
'Content-Type': 'application/json',
'accept': 'application/json; charset=utf-8',
}
return {body, headers};
}
export enum urlEnum {
获取token = "/oauth/token",
......@@ -30,8 +94,6 @@ export enum urlEnum {
};
export enum healthEnum {
学生数班级数 = "1342551525711858104",
不同年级上报学生数按日 = "1342555266359937472",
......@@ -70,11 +132,57 @@ export enum healthTokenEnum {
健康率 = "01a6f925-5ed1-412e-baa4-7e11574b3d84",
}
export enum workstationEnum {
首页整体情况 = "1356231767216278142",
左侧招生情况 = "1356323092543490695",
左侧学生所属区县 = "1357404970948151324",
左侧学生合格情况 = "1356323623968098961",
左侧学科老师分布 = "1356324468705118873",
左侧工作站学科分布情况 = "1356326298316098211",
左侧工作站历年数量 = "1357408718505297959",
右侧各工作站学生合格率 = "1356390987584686765",
右侧优秀学生 = "1356391559833504443",
右侧学生去向 = "1356392344899209927",
中间热门排行按学科 = "1356395644022344403",
中间热门排行按地区 = "1356397508827728605",
实践站中间地图 = "1356411001367874279",
中间课题学科分布 = "1356412062796270323",
中间课题状态 = "1356412562565417725",
中间课题资源 = "1356412867767094023",
工作站整体数字 = "1356418464263621395",
左侧实践站介绍 = "1356487076170091294",
中间市级课题研究进度 = "1356487662953220909",
中间各学科学生得分 = "1356487951468907322",
右侧退出原因分析 = "1356499488455707463",
右侧研究课题 = "1356499780060498770",
}
export enum workstationTokenEnum {
首页整体情况 = "eb5cd378-2c9e-4161-8873-6adfe0400221",
左侧招生情况 = "1aa0614b-1c6e-4144-bfb3-4f8b667082c5",
左侧学生所属区县 = "b96d62d3-8095-483d-85f5-a8ba20342044",
左侧学生合格情况 = "563a8e2f-0671-4766-8470-eece29936b58",
左侧学科老师分布 = "47d3969e-2139-4a36-90ae-549d2816b241",
左侧工作站学科分布情况 = "8931dc62-59d8-40a0-ac79-2e3e4d0fbc4f",
左侧工作站历年数量 = "47abab0c-8ff6-4fca-9093-e71e0892976a",
右侧各工作站学生合格率 = "f9d531fb-51fd-46cb-920e-c07ac524c4a9",
右侧优秀学生 = "ae5df168-465c-4173-a871-6d1951ae8da5",
右侧学生去向 = "a14b078b-cbf5-4204-9e1e-5d8ef296cf09",
中间热门排行按学科 = "88bf8fd5-2199-4876-b3e6-98a74d5ebbb8",
中间热门排行按地区 = "c8a77cb6-b79b-4767-95ba-e0e349e3ba5a",
实践站中间地图 = "88368f83-5abb-412a-b1ac-a33919fc1676",
中间课题学科分布 = "608ca69f-d96b-4b9a-9698-5ec7bb21d836",
中间课题状态 = "0edfe892-76b9-4308-a0cc-bc0ce01e44e3",
中间课题资源 = "bb0e0d19-a543-417a-abbe-455dfef21155",
工作站整体数字 = "3450aca1-e756-4cbb-b4cf-8ce58920bd39",
左侧实践站介绍 = "9064788f-6fe0-4119-87ae-d62d85ddb4c0",
中间市级课题研究进度 = "c31c176a-7039-4f17-8865-3f2eb4e87b3f",
中间各学科学生得分 = "3dea4546-cba5-4f78-bae7-7e3e6c9e75e9",
右侧退出原因分析 = "64a18813-37c8-4ad6-8771-cbaa353bfa0a",
右侧研究课题 = "b29efe0c-baf9-4367-95b3-985ee178230d",
}
export function getUrl(urlName) {
return `${requestConfig.url}${urlName}`
}
......@@ -82,3 +190,9 @@ export function getUrl(urlName) {
export function getSecondPhaseUrl(urlName) {
return `${healthConfig.url}${urlName}`
}
export function getWorkstationUrl(urlName) {
return `${workstationConfig.url}${urlName}`
}
......@@ -13,7 +13,7 @@ async function lanuch() {
return;
}
initUser();
test();
// test();
httpServer.createServer(getPort());
}
......
......@@ -2,7 +2,7 @@
import { checkAccessToken } from "../biz/user";
import { SYSTEMERRORENUM } from "../config/enum";
import { middlewareCheckAccessToken } from "../data/user/user";
import { BizError } from "../util/bizError";
import { BizError, SysError } from "../util/bizError";
export async function checkToken(req, res, next) {
if (!req.headers) req.headers = {};
......@@ -20,7 +20,7 @@ export async function checkToken(req, res, next) {
next();
} else {
//校验失败
return next(new BizError(SYSTEMERRORENUM.token已过期) );
return next(new SysError(SYSTEMERRORENUM.token已过期) );
}
}
......@@ -34,7 +34,7 @@ export function adminPermission(req, res, next) {
if (isadmin) {
next();
} else {
next(new BizError(SYSTEMERRORENUM.您的账户没有访问权限) );
next(new SysError(SYSTEMERRORENUM.您的账户没有访问权限) );
}
}
......@@ -47,6 +47,6 @@ export function pagePermission(req, res, next) {
if (otherpage) {
next();
} else {
next(new BizError(SYSTEMERRORENUM.您的账户没有访问权限) );
next(new SysError(SYSTEMERRORENUM.您的账户没有访问权限) );
}
}
\ No newline at end of file
......@@ -34,12 +34,16 @@ export function setRouter(httpServer){
httpServer.post('/interface/permission/checkhomepage', checkToken, asyncHandler(userBiz.checkPermissionForHomePage) );
//二期
httpServer.get('/interface/secondPhase/gradehealth', checkToken, adminPermission, asyncHandler(healthBiz.getData));
httpServer.get('/interface/secondPhase/workstation', checkToken, adminPermission, asyncHandler(workstationBiz.getData));
httpServer.get('/interface/secondPhase/workstation/popup', checkToken, adminPermission, asyncHandler(workstationPopupBiz.getData));
httpServer.get('/interface/secondPhase/gradehealth', checkToken, asyncHandler(healthBiz.getData));
httpServer.get('/interface/secondPhase/workstation', checkToken, asyncHandler(workstationBiz.getData));
httpServer.get('/interface/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData));
httpServer.post('/interface/secondPhase/gradehealth', asyncHandler(healthBiz.getData));
httpServer.post('/interface/secondPhase/workstation', checkToken, adminPermission, asyncHandler(workstationBiz.getData));
httpServer.post('/interface/secondPhase/workstation/popup', checkToken, adminPermission, asyncHandler(workstationPopupBiz.getData));
httpServer.post('/interface/secondPhase/gradehealth', checkToken, asyncHandler(healthBiz.getData));
httpServer.post('/interface/secondPhase/workstation', checkToken, asyncHandler(workstationBiz.getData));
httpServer.post('/interface/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData));
httpServer.get('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest));
httpServer.post('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest));
}
\ No newline at end of file
......@@ -34,3 +34,15 @@ export let healthConfig = {
env:"PROD",
// accept:"application/json; charset=utf-8"
}
export let workstationConfig = {
url:'http://172.22.235.5:28080/dataengine-center-oneservice/list/',
appKey:"200000086",
// account:"man_001", //yujc
// execType:3,
env:"PROD",
// accept:"application/json; charset=utf-8"
}
import { getMsg } from "../config/enum";
/**
* 异常类
* 需要和log4js共同使用
*/
import { getSysMsg } from "../config/enum";
import { getBizMsg } from "../config/errorEnum";
import { logError } from "./log";
export class BizError extends Error {
constructor(msgs) {
let errorMessage = getMsg(msgs);
super(errorMessage);
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg = getBizMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
logErrorMsg += ` | ${msgs[i]} `;
}
}
logError(logErrorMsg);
super(reqErrorMsg);
}
}
export class SysError extends Error {
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg= getSysMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
if (typeof msgs[i] == 'object') logErrorMsg += ` | ${JSON.stringify(msgs[i])} `;
else logErrorMsg += ` | ${msgs[i]} `;
}
}
logError(logErrorMsg);
super(reqErrorMsg);
}
}
/**
* 日志类
* 包括错误日志 普通日志
* 日志存放在根目录的logs内
*/
let log4js = require('log4js');
let path = require('path');
//log路径
export const systemLogPath = {
errorLogFile:"error",
errorLogDir:"error",
handleLogFile:"handle",
handleLogDir:"handle"
}
//日志根目录
// let baseLogPath = path.resolve(__dirname.substring(0, __dirname.indexOf("out")), 'logs');
let baseLogPath = path.resolve('./', 'logs');
let errFile = path.resolve(baseLogPath, systemLogPath.errorLogDir, systemLogPath.errorLogFile);
let handFile =path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile);
let config = {
appenders:
{
"rule-console": {"type": "console"},
"errorLogger": {
"type": "dateFile", // 日志类型
"filename": errFile, // 输出文件名
"pattern": "yyyy-MM-dd.log", // 后缀
"alwaysIncludePattern": true, // 上面两个参数是否合并
"encoding": "utf-8", // 编码格式
"maxLogSize": 1000, // 最大存储内容
"numBackups": 3, // 当文件内容超过文件存储空间时,备份文件的数量
"path": `/${systemLogPath.errorLogDir}`
},
"handleLogger": {
"type": "dateFile",
"filename": handFile,
"pattern": "yyyy-MM-dd.log",
"alwaysIncludePattern": true,
"encoding": "utf-8",
"maxLogSize": 1000,
"numBackups": 3,
"path": `/${systemLogPath.handleLogDir}`
}
},
categories: {
"default": {"appenders": ["rule-console"], "level": "all"}, //这个配置一定要有
"errorLogger": {"appenders": ["errorLogger"], "level": "error"},
"handleLogger": {"appenders": ["handleLogger"], "level": "all"}
},
"baseLogPath": path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile)
};
log4js.configure(config); //加载配置文件
//调用预先定义的日志名称
let errorLogger = log4js.getLogger("errorLogger");
let handleLogger = log4js.getLogger("handleLogger");
let consoleLogger = log4js.getLogger("rule-console");
//错误日志
export function logError(...errStrs) {
let str = "";
errStrs.forEach(item => {
str += item + " | ";
});
errorLogger.error(`errorInfo => ${str}`);
}
//普通日志
export function logHandle(msgStr:string) {
handleLogger.info(`logInfo => ${msgStr}`);
}
//输出日志
export function logConsole(logStr:string) {
consoleLogger.info(`logInfo => ${logStr}`);
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment