Commit 72646b39 by chenjinjing

2025.02.20部署

parent 2ab94404
This source diff could not be displayed because it is too large. You can view the blob instead.
<config> <config>
<port>40031</port> <port>13275</port>
<sign>xxx90909082fsdahfjosadjfpoiwausjorip2hjklrhn1ioud0u124rx0qwejfokasjfolksaujfoas</sign> <sign></sign>
<dbServer>http://192.168.0.71:40031</dbServer> <dbServer>http://127.0.0.1:13275</dbServer>
<mysqldb> <mysqldb>
<!-- 本地mysql配置 --> <!-- 本地mysql配置 -->
<mysqlHost>192.168.0.71</mysqlHost> <mysqlHost>192.168.0.71</mysqlHost>
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
<dataBase>px_answer</dataBase> <dataBase>px_answer</dataBase>
<!-- 服务器mysql配置 --> <!-- 服务器mysql配置 -->
<!-- <mysqlHost>127.0.0.1</mysqlHost> <!-- <mysqlHost>127.0.0.1</mysqlHost>
<mysqlPort>3306</mysqlPort> <mysqlPort>13306</mysqlPort>
<mysqlUser>root</mysqlUser> <mysqlUser>root</mysqlUser>
<mysqlPwd>Yfs123456_</mysqlPwd> <mysqlPwd>root</mysqlPwd>
<dataBase>yfs</dataBase> --> <dataBase>px_answer</dataBase> -->
</mysqldb> </mysqldb>
</config> </config>
import moment from "moment";
import { TABLENAME } from "../config/dbEnum";
import { selectDataCountByParam, selectDataListByParam, selectDataListToPageByParam, selectOneDataByParam } from "../data/findData";
import { CHAPTER, HLDTYPE, QUESTION, TESTTYPE } from "../config/enum";
import { changeEnumValue } from "../tools/eccEnum";
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
/**
* 登录
* @param username
* @param password
*/
export async function login(username, password) {
let findUserData = await selectOneDataByParam(TABLENAME.超级管理员表, {username, password}, []);
let findUser = findUserData.data;
if (!findUser || !findUser.username) throw new BizError(ERRORENUM.账号或密码错误);
if (findUser.password != password ) throw new BizError(ERRORENUM.账号或密码错误);
let dataInfo = {
username: findUser.username,
realName: findUser.real_name,
phone: findUser.phone,
sex: findUser.sex,
mail: findUser.mail,
remark: findUser.remark
};
return dataInfo;
}
/**
* 获取用户列表
* @param card
* @param createStartTime
* @param createEndTime
* @param area
* @param current
* @returns
*/
export async function getUserList(card, createStartTime, createEndTime, area, current) {
let selectParam = {"name":{"%ne%":"362527199309194932"}, "phone":{"%ne%":"17255558888"}};
if (card) selectParam["card"] = card;
if (createStartTime && createEndTime) selectParam["create_time"] = {"%between%":[createStartTime, createEndTime]};
if (area) selectParam["area"] = area;
let findData = await selectDataListToPageByParam(TABLENAME.测试信息表, selectParam, ["infoid", "name", "card", "phone", "email", "area", "create_time", "test_type"], current, 10);
let dataCount = await selectDataCountByParam(TABLENAME.测试信息表, selectParam);
let dataList = [];
findData.data.forEach( info => {
let {infoid, name, card, phone, email, area, create_time, test_type} = info;
dataList.push({
infoid, name, card, phone, email, area,
createTime: moment(create_time).format("YYYY-MM-DD"),
testType: test_type
})
})
return {dataList, dataCount:dataCount.data};
}
/**
* 查看列表详情
* @param infoid
* @param test_type
* @returns
*/
export async function getUserInfoById(infoid, test_type) {
let testReport = {};
if (test_type == TESTTYPE.创业) {
testReport = await getChuangYe(infoid);
} else if (test_type == TESTTYPE.霍兰德) {
testReport = await getHuoLanDe(infoid);
}
return testReport;
}
/**
* 创业答题详情
* @param infoid
* @returns
*/
async function getChuangYe(infoid) {
let findUserData = await selectOneDataByParam(TABLENAME.测试信息表, {infoid}, []);
let findData = await selectDataListByParam(TABLENAME.测试信息记录表, {infoid}, []);
let optionsInfo = [];
let score = 0;
for (let data = 0; data < findData.data.length; data++) {
let info = findData.data[data];
let {chapter, title_str, option_str} = info;
// optionsInfo[chapter] = {};
let title = JSON.parse(title_str);
let option = JSON.parse(option_str);
for (let i = 0; i < option.length; i++) {
let optionList = option[i];
let optionName = "";
for (let o = 0; o < optionList.length; o++) {
let findOption = await selectOneDataByParam(TABLENAME.题目选项表, {oid:optionList[o]}, []);
score += findOption.data["points"];
optionName = findOption.data["option_name"].slice(2);
}
optionsInfo.push({title:title[i], option:optionName});
}
}
let testReport = {
name:findUserData.data.name,
card:findUserData.data.card,
phone:findUserData.data.phone,
score,
time: moment(new Date()).format("YYYY年MM月DD日HH时mm分"),
report:optionsInfo,
};
return testReport;
}
/**
* 霍兰德详情
* @param infoid
* @returns
*/
async function getHuoLanDe(infoid) {
let findUserData = await selectOneDataByParam(TABLENAME.测试信息表, {infoid}, []);
let findData = await selectDataListByParam(TABLENAME.测试信息记录表, {infoid}, []);
let optionsInfo = {};
for (let data = 0; data < findData.data.length; data++) {
let info = findData.data[data];
let {chapter, title_str, option_str} = info;
optionsInfo[chapter] = {};
let title = JSON.parse(title_str);
let option = JSON.parse(option_str);
for (let i = 0; i < option.length; i++) {
let optionList = option[i];
let score = 0;
for (let o = 0; o < optionList.length; o++) {
let findOption = await selectOneDataByParam(TABLENAME.题目选项表, {oid:optionList[o]}, []);
score += findOption.data["points"];
}
optionsInfo[chapter][title[i]] = score;
}
}
let optionData = [];
let countInfo = {};
for (let key in optionsInfo) {
let maxKey = "";
let maxValue = 0;
for (let values in optionsInfo[key]) {
const value = optionsInfo[key][values];
if (value > maxValue) {
maxKey = values;
maxValue = value;
}
if(!countInfo[values]) countInfo[values] = 0
countInfo[values] += value;
}
let title = changeEnumValue(CHAPTER, parseInt(key));
let maxNum = HLDTYPE[maxKey];
optionData.push({key:title, value:maxKey, index:maxNum});
}
let countData = [];
for (let key in countInfo) {
let keyNum = HLDTYPE[key];
let keyName = changeEnumValue(QUESTION, keyNum);
countData.push({key:keyName, value:countInfo[key]});
}
let sortedEntries:any = Object.entries(countInfo);
sortedEntries.sort((a, b) => b[1] - a[1]);
let topThreeKeys = sortedEntries.slice(0, 3).map(entry => entry[0]);
let topThreeStr = topThreeKeys.join("");
let findCareer = await selectOneDataByParam(TABLENAME.职业对照表, {statistics:topThreeStr}, []);
let testReport = {
name:findUserData.data.name,
card:findUserData.data.card,
phone:findUserData.data.phone,
time: moment(new Date()).format("YYYY年MM月DD日HH时mm分"),
report1:optionData,
report2:countData,
statistics:topThreeStr,
recommend:findCareer.data.recommend
}
return testReport;
}
/**
* 数据导出
* @param card
* @param createStartTime
* @param createEndTime
* @param area
* @param current
* @returns
*/
export async function outPutData(card, createStartTime, createEndTime, area) {
let selectParam = {"name":{"%ne%":"362527199309194932"}, "phone":{"%ne%":"17255558888"}};
// let selectParam = {};
if (card) selectParam["card"] = card;
if (createStartTime && createEndTime) selectParam["create_time"] = {"%between%":[createStartTime, createEndTime]};
if (area) selectParam["area"] = area;
let findData = await selectDataListByParam(TABLENAME.测试信息表, selectParam, ["infoid", "name", "card", "phone", "email", "area", "create_time", "test_type"]);
let dataTitle = ["姓名", "身份证号", "联系方式", "电子邮箱", "所属区域", "测试日期", "测评类型"];
let dataList = [dataTitle];
findData.data.forEach( info => {
let {name, card, phone, email, area, create_time, test_type} = info;
let createTime = moment(create_time).format("YYYY-MM-DD");
let testType = changeEnumValue(TESTTYPE, test_type);
let subList = [
name || "",
card || "",
phone || "",
email || "",
area || "",
createTime || "",
testType || ""
];
dataList.push(subList);
})
return dataList;
}
...@@ -24,6 +24,10 @@ export enum TABLENAME { ...@@ -24,6 +24,10 @@ export enum TABLENAME {
题目表 = 'question', 题目表 = 'question',
题目选项表 = 'option', 题目选项表 = 'option',
测试信息表 = 'testinfo', 测试信息表 = 'testinfo',
测试信息记录表 = 'inforecord',
演示版测试信息记录表 = 'inforecord_test',
职业对照表 = 'career_contrast',
超级管理员表 = 'sys_user',
} }
......
...@@ -18,18 +18,34 @@ export enum FILETYPE { ...@@ -18,18 +18,34 @@ export enum FILETYPE {
} }
export enum TESTTYPE {
"霍兰德" = 1,
"创业" = 2,
}
/** /**
* 题目大标题 * 题目大标题
*/ */
export enum TESTTYPE { export enum CHAPTER {
"一、我感兴趣的活动" = 1, "一、我感兴趣的活动(多选)" = 1,
"二、我能完成的活动" = 2, "二、我能完成的活动(多选)" = 2,
"三、我喜欢的职业" = 3, "三、我喜欢的职业(多选)" = 3,
"四、我的能力类型简评A" = 4, "四、我的能力类型简评A(单选)" = 4,
"四、我的能力类型简评B" = 5, "四、我的能力类型简评B(单选)" = 5,
"技能" = 6,
"经验" = 7,
"您开办的新创业组织" = 8,
"创办企业" = 9,
"符合你的特点" = 10
} }
/** /**
* 题型 * 题型
*/ */
...@@ -43,5 +59,66 @@ export enum QUESTIONTITLE { ...@@ -43,5 +59,66 @@ export enum QUESTIONTITLE {
} }
// "R:实际型活动" = 1,
// "S:社会型活动" = 2,
// "I:研究型活动" = 3,
// "E:事业型活动" = 4,
// "A:艺术型活动" = 5,
// "C:常规型(传统型)活动" = 6,
// "R:实际型活动" = 7,
// "S:社会型活动" = 8,
// "I:研究型活动" = 9,
// "E:事业型活动" = 10,
// "A:艺术型活动" = 11,
// "C:常规型(传统型)活动" = 12,
// "R:实际型活动" = 13,
// "S:社会型活动" = 14,
// "I:研究型活动" = 15,
// "E:事业型活动" = 16,
// "A:艺术型活动" = 17,
// "C:常规型(传统型)活动" = 18,
// "R型:机械操作能力" = 19,
// "I型:科学研究能力" = 20,
// "A型:艺术创作能力" = 21,
// "S型:解释表达能力" = 22,
// "E型:商业洽谈能力" = 23,
// "C型:事务执行能力" = 24,
// "R型:体育技能" = 25,
// "I型:数学技能" = 26,
// "A型:音乐技能" = 27,
// "S型:交际技能" = 28,
// "E型:领导技能" = 29,
// "C型:办公技能" = 30,
/**
* 题型简称
*/
export enum HLDTYPE {
"R" = 1,
"S" = 2,
"I" = 3,
"E" = 4,
"A" = 5,
"C" = 6
}
/**
* 返回给前端题型
*/
export enum QUESTION {
"R型实际型" = 1,
"S型社会型" = 2,
"I型研究型" = 3,
"E型事业型" = 4,
"A型艺术型" = 5,
"C型常规型" = 6,
}
...@@ -16,7 +16,9 @@ export enum ERRORENUM { ...@@ -16,7 +16,9 @@ export enum ERRORENUM {
数据联合查询失败, 数据联合查询失败,
INVALID_REQUEST, INVALID_REQUEST,
INTERNAL_SERVER_ERROR, INTERNAL_SERVER_ERROR,
文件不存在 文件不存在,
该身份证号码重复,
账号或密码错误
} }
/** /**
......
...@@ -16,8 +16,7 @@ export async function initConfig() { ...@@ -16,8 +16,7 @@ export async function initConfig() {
let {port, sign, dbServer, mysqldb } = configInfo.config; let {port, sign, dbServer, mysqldb } = configInfo.config;
systemConfig.port = parseInt(port[0]); systemConfig.port = parseInt(port[0]);
systemConfig.sign = sign[0]
systemConfig.sign = sign[0];
systemConfig.dbPath = dbServer[0] systemConfig.dbPath = dbServer[0]
......
...@@ -7,7 +7,7 @@ export class ServerConfig { ...@@ -7,7 +7,7 @@ export class ServerConfig {
/**系统配置 */ /**系统配置 */
port:number; port:number;
sign:string; sign:string;
dbPath:String; dbPath:string;
mysqldb:{ mysqldb:{
host:string, host:string,
......
...@@ -6,7 +6,8 @@ import { mysqlModelMap } from "../model/sqlModelBind"; ...@@ -6,7 +6,8 @@ import { mysqlModelMap } from "../model/sqlModelBind";
* @param data * @param data
* @returns * @returns
*/ */
export async function addData(tableModel, data:any) { export async function addData(tableName:string, data:any) {
let tableModel = mysqlModelMap[tableName];
let dataArray = []; let dataArray = [];
if (!Array.isArray(data)) { if (!Array.isArray(data)) {
dataArray.push(data); dataArray.push(data);
......
...@@ -23,6 +23,7 @@ function analysisParamToWhere(param, column) { ...@@ -23,6 +23,7 @@ function analysisParamToWhere(param, column) {
let where = {}; let where = {};
let order = []; let order = [];
let group = ""; let group = "";
let literal = "";
let limit = 0; let limit = 0;
for (let key in param) { for (let key in param) {
if (typeof param[key] == "object") { if (typeof param[key] == "object") {
...@@ -56,6 +57,12 @@ function analysisParamToWhere(param, column) { ...@@ -56,6 +57,12 @@ function analysisParamToWhere(param, column) {
case "%notIn%": case "%notIn%":
where[key][Op.notIn] = param[key]["%notIn%"]; where[key][Op.notIn] = param[key]["%notIn%"];
break; break;
case "%ne%":
where[key][Op.ne] = param[key]["%ne%"];
break;
case "%regexp%":
where[key][Op.regexp] = param[key]["%regexp%"];
break;
} }
} }
} else { } else {
...@@ -72,6 +79,9 @@ function analysisParamToWhere(param, column) { ...@@ -72,6 +79,9 @@ function analysisParamToWhere(param, column) {
case "%group%": case "%group%":
group = param[key]; group = param[key];
break; break;
case "%literal%":
literal = param["%literal%"];
break;
default: where[key] = param[key]; default: where[key] = param[key];
} }
} }
...@@ -82,6 +92,7 @@ function analysisParamToWhere(param, column) { ...@@ -82,6 +92,7 @@ function analysisParamToWhere(param, column) {
if (order && order.length) selectParam.order = order; if (order && order.length) selectParam.order = order;
if (limit) selectParam.limit = limit; if (limit) selectParam.limit = limit;
if (group) selectParam.group = group; if (group) selectParam.group = group;
if (literal) selectParam.where = Sequelize.literal(literal);
return selectParam; return selectParam;
} }
...@@ -91,7 +102,8 @@ function analysisParamToWhere(param, column) { ...@@ -91,7 +102,8 @@ function analysisParamToWhere(param, column) {
* @param param * @param param
* @returns * @returns
*/ */
export async function selectOneDataByParam(tableModel, param, column) { export async function selectOneDataByParam(tableName, param, column) {
let tableModel = mysqlModelMap[tableName];
let selectParam = analysisParamToWhere(param, column); let selectParam = analysisParamToWhere(param, column);
let data = await tableModel.findOne(selectParam); let data = await tableModel.findOne(selectParam);
data = data || {}; data = data || {};
...@@ -105,7 +117,8 @@ export async function selectOneDataByParam(tableModel, param, column) { ...@@ -105,7 +117,8 @@ export async function selectOneDataByParam(tableModel, param, column) {
* @param param * @param param
* @returns * @returns
*/ */
export async function selectDataListByParam(tableModel, param, column) { export async function selectDataListByParam(tableName, param, column) {
let tableModel = mysqlModelMap[tableName];
let selectParam = analysisParamToWhere(param, column); let selectParam = analysisParamToWhere(param, column);
let data = await tableModel.findAll(selectParam); let data = await tableModel.findAll(selectParam);
return { data }; return { data };
...@@ -120,7 +133,8 @@ export async function selectDataListByParam(tableModel, param, column) { ...@@ -120,7 +133,8 @@ export async function selectDataListByParam(tableModel, param, column) {
* @param pageSize * @param pageSize
* @returns * @returns
*/ */
export async function selectDataListToPageByParam(tableModel, param, column, pageNumber: number, pageSize: number) { export async function selectDataListToPageByParam(tableName, param, column, pageNumber: number, pageSize: number) {
let tableModel = mysqlModelMap[tableName];
let selectParam: any = analysisParamToWhere(param, column); let selectParam: any = analysisParamToWhere(param, column);
selectParam.limit = pageSize || 10; selectParam.limit = pageSize || 10;
selectParam.offset = (pageNumber - 1) * 10; selectParam.offset = (pageNumber - 1) * 10;
...@@ -128,7 +142,8 @@ export async function selectDataListToPageByParam(tableModel, param, column, pag ...@@ -128,7 +142,8 @@ export async function selectDataListToPageByParam(tableModel, param, column, pag
return { data }; return { data };
} }
export async function selectDataCountByParam(tableModel, param) { export async function selectDataCountByParam(tableName, param) {
let tableModel = mysqlModelMap[tableName];
let selectParam: any = analysisParamToWhere(param, []); let selectParam: any = analysisParamToWhere(param, []);
let data = await tableModel.count(selectParam); let data = await tableModel.count(selectParam);
return { data }; return { data };
...@@ -162,7 +177,8 @@ export async function associationSelect(tableName: string, param) { ...@@ -162,7 +177,8 @@ export async function associationSelect(tableName: string, param) {
* @returns * @returns
*/ */
// question // question
export async function selectDataToTableAssociation(tableModel, includeConf, param, column) { export async function selectDataToTableAssociation(tableName, includeConf, param, column) {
let tableModel = mysqlModelMap[tableName];
let include = []; let include = [];
for (let tableName in includeConf) { for (let tableName in includeConf) {
if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`); if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`);
...@@ -170,8 +186,7 @@ export async function selectDataToTableAssociation(tableModel, includeConf, para ...@@ -170,8 +186,7 @@ export async function selectDataToTableAssociation(tableModel, includeConf, para
let includeInfomation = analysisParamToWhere(where, column); let includeInfomation = analysisParamToWhere(where, column);
includeInfomation.model = mysqlModelMap[tableName]; includeInfomation.model = mysqlModelMap[tableName];
include.push(includeInfomation); include.push(includeInfomation);
} }
let selectParam: any = analysisParamToWhere(param, column); let selectParam: any = analysisParamToWhere(param, column);
selectParam.include = include; selectParam.include = include;
...@@ -179,7 +194,7 @@ export async function selectDataToTableAssociation(tableModel, includeConf, para ...@@ -179,7 +194,7 @@ export async function selectDataToTableAssociation(tableModel, includeConf, para
return { data }; return { data };
} }
/** /**
* 多表联查 分页 * 多表联查 分页
...@@ -189,7 +204,8 @@ export async function selectDataToTableAssociation(tableModel, includeConf, para ...@@ -189,7 +204,8 @@ export async function selectDataToTableAssociation(tableModel, includeConf, para
* @param column * @param column
* @returns * @returns
*/ */
export async function selectDataToTableAssociationToPage(tableModel, includeConf, param, column, pageNumber: number, pageSize: number) { export async function selectDataToTableAssociationToPage(tableName, includeConf, param, column, pageNumber: number, pageSize: number) {
let tableModel = mysqlModelMap[tableName];
let include = []; let include = [];
for (let tableName in includeConf) { for (let tableName in includeConf) {
if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`); if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`);
...@@ -217,7 +233,8 @@ export async function selectDataToTableAssociationToPage(tableModel, includeConf ...@@ -217,7 +233,8 @@ export async function selectDataToTableAssociationToPage(tableModel, includeConf
* @param column * @param column
* @returns * @returns
*/ */
export async function selectOneDataToTableAssociation(tableModel, includeConf, param, column) { export async function selectOneDataToTableAssociation(tableName, includeConf, param, column) {
let tableModel = mysqlModelMap[tableName];
let include = []; let include = [];
for (let tableName in includeConf) { for (let tableName in includeConf) {
if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`); if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`);
......
import { Op, Sequelize } from "sequelize"; import { Op, Sequelize } from "sequelize";
import { mysqlModelMap } from "../model/sqlModelBind";
/** /**
...@@ -77,7 +78,8 @@ function analysisParamToWhere(param) { ...@@ -77,7 +78,8 @@ function analysisParamToWhere(param) {
} }
export async function updateManyData(tableModel, param:object, data:object) { export async function updateManyData(tableName, param:object, data:object) {
let tableModel = mysqlModelMap[tableName];
let where = analysisParamToWhere(param); let where = analysisParamToWhere(param);
await tableModel.update(data, where); await tableModel.update(data, where);
......
...@@ -18,7 +18,6 @@ async function lanuch() { ...@@ -18,7 +18,6 @@ async function lanuch() {
/**创建http服务 */ /**创建http服务 */
httpServer.createServer(systemConfig.port); httpServer.createServer(systemConfig.port);
// await smsTask(); // await smsTask();
console.log('This indicates that the server is started successfully.'); console.log('This indicates that the server is started successfully.');
} }
......
import asyncHandler from 'express-async-handler';
import * as adminBiz from '../biz/admin';
// 霍兰德测试接口
export function setRouter(httpServer){
httpServer.post('/admin/login', asyncHandler(login));
httpServer.post('/admin/userlist', asyncHandler(getUserList));
httpServer.post('/admin/details', asyncHandler(getUserInfoById));
httpServer.post('/admin/output', asyncHandler(outPutData));
};
async function login(req, res) {
let {username, password} = req.body;
let result = await adminBiz.login(username, password);
res.success(result);
}
async function getUserList(req, res) {
let {card, createStartTime, createEndTime, area, current} = req.body;
let result = await adminBiz.getUserList(card, createStartTime, createEndTime, area, current);
res.success(result);
}
async function getUserInfoById(req, res) {
let {infoid, testType} = req.body;
let result = await adminBiz.getUserInfoById(infoid, testType);
res.success(result);
}
async function outPutData(req, res) {
let {card, createStartTime, createEndTime, area} = req.body;
let result = await adminBiz.outPutData(card, createStartTime, createEndTime, area);
res.success(result);
}
import * as asyncHandler from 'express-async-handler' import asyncHandler from 'express-async-handler';
import { checkMySqlSign } from '../middleware/user'; import * as huolandeBiz from '../biz/huolande';
import { eccReqParamater } from '../tools/eccParam';
import { BizError } from '../util/bizError';
import { ERRORENUM } from '../config/errorEnum';
import {calculateHollandScore} from '../biz/huolande';
import * as winston from 'winston';
import { error } from 'console';
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
// 霍兰德测试接口 // 霍兰德测试接口
export function setRouter(httpServer){ export function setRouter(httpServer){
httpServer.post('/question/getarea', asyncHandler(getArea));
httpServer.post('/question/addusers', asyncHandler(addUsers));
httpServer.post('/question/question', asyncHandler(getQuestion));
httpServer.post('/question/addusersinfo', asyncHandler(addUsersInfo));
httpServer.post('/huolande/finalscore', asyncHandler(getFinalScore));
httpServer.post('/chuangye/finalscore', asyncHandler(getChuangYeScore));
};
async function addUsers(req, res) {
let {testType, name, card, phone, email, area} = req.body;
let result = await huolandeBiz.addUsers(testType, name, card, phone, area, email);
res.success(result);
}
async function getArea(req, res) {
let result = await huolandeBiz.getArea();
res.success(result);
}
async function getQuestion(req, res) {
let { testType, chapter, isTest } = req.body;
let result = await huolandeBiz.getQuestion(testType, chapter, isTest);
res.success(result);
}
async function addUsersInfo(req, res) {
let {infoid, chapter, option, testType, isTest} = req.body;
let result = await huolandeBiz.addUsersInfo(infoid, chapter, option, testType, isTest);
res.success(result);
}
httpServer.post('/api/test/submit', async (req, res) => { async function getFinalScore(req, res) {
try { let {infoid, isTest} = req.body;
const { answers } = req.body; // 假设答案通过请求体传递 let result = await huolandeBiz.getFinalScore(infoid, isTest);
res.success(result);
// 校验参数
if (!answers || !Array.isArray(answers)) {
return res.status(400).send({ error: '无效的答案格式' });
// throw new BizError(ERRORENUM.INVALID_REQUEST, '无效的答案格式');
}
// 计算霍兰德测试分数并获取最高三个字母
const result = calculateHollandScore(answers);
// 返回结果给客户端
return res.status(200).json({
message: '答题成功',
hollandResult: {
topThree: result.topThree,
scores: result.scores
}
});
} catch (error) {
console.error('答题提交失败:', error);
return res.status(500).send({ error: '服务器错误' });
// throw new BizError(ERRORENUM.INTERNAL_SERVER_ERROR, '服务器错误');
}
});
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('答题提交成功');
logger.error('答题提交失败:', { error });
} }
// export function setRouter(httpServer){
// } async function getChuangYeScore(req, res) {
let {infoid, isTest} = req.body;
let result = await huolandeBiz.getChuangYeScore(infoid, isTest);
res.success(result);
}
...@@ -3,7 +3,9 @@ ...@@ -3,7 +3,9 @@
*/ */
import * as huolandeRouter from './huolande'; import * as huolandeRouter from './huolande';
import * as adminRouter from './admin';
export function setRouter(httpServer){ export function setRouter(httpServer){
huolandeRouter.setRouter(httpServer); huolandeRouter.setRouter(httpServer);
adminRouter.setRouter(httpServer);
} }
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