测评题库设置锚点区分模板和试卷

parent 22e4e3f4
...@@ -180,7 +180,8 @@ export async function growthMessageList(studentName: string, semesterId: number, ...@@ -180,7 +180,8 @@ export async function growthMessageList(studentName: string, semesterId: number,
let semester = await getCurrentSemester(); let semester = await getCurrentSemester();
if (semesterId) { if (semesterId) {
semester = await selectOneDataByParam(TABLENAME.学期表, { id: semesterId }); let semesterData = await selectOneDataByParam(TABLENAME.学期表, { id: semesterId });
semester = semesterData.data ? semesterData.data : null;
} }
// 如果没有当前学期,返回空列表 // 如果没有当前学期,返回空列表
...@@ -260,7 +261,8 @@ export async function meetingList(studentName: string, semesterId: number, teach ...@@ -260,7 +261,8 @@ export async function meetingList(studentName: string, semesterId: number, teach
let semester = await getCurrentSemester(); let semester = await getCurrentSemester();
if (semesterId) { if (semesterId) {
semester = await selectOneDataByParam(TABLENAME.学期表, { id: semesterId }); let semesterData = await selectOneDataByParam(TABLENAME.学期表, { id: semesterId });
semester = semesterData.data ? semesterData.data : null;
} }
if (!semester) { if (!semester) {
...@@ -268,7 +270,7 @@ export async function meetingList(studentName: string, semesterId: number, teach ...@@ -268,7 +270,7 @@ export async function meetingList(studentName: string, semesterId: number, teach
} }
let selectParam: any = { let selectParam: any = {
semester_id: semester.id semester_id: semesterId ?? semester.id
}; };
// 时间筛选 // 时间筛选
......
...@@ -9,8 +9,9 @@ import { BizError } from "../../util/bizError"; ...@@ -9,8 +9,9 @@ import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum"; import { ERRORENUM } from "../../config/errorEnum";
import { getCurrentSemester } from "../common/semesterService"; import { getCurrentSemester } from "../common/semesterService";
import { mysqlModelMap } from "../../model/sqlModelBind"; import { mysqlModelMap } from "../../model/sqlModelBind";
import { Op, Sequelize } from "sequelize"; import { Op, Sequelize, StringDataType } from "sequelize";
import { hasData } from "../../tools/system"; import { hasData } from "../../tools/system";
import { create } from "domain";
/**CASE WHEN 状态计算表达式 */ /**CASE WHEN 状态计算表达式 */
const STATUS_CASE_SQL = `CASE WHEN start_time IS NOT NULL AND NOW() < start_time THEN 0 WHEN end_time IS NOT NULL AND NOW() > end_time THEN 2 ELSE 1 END`; const STATUS_CASE_SQL = `CASE WHEN start_time IS NOT NULL AND NOW() < start_time THEN 0 WHEN end_time IS NOT NULL AND NOW() > end_time THEN 2 ELSE 1 END`;
...@@ -91,43 +92,54 @@ export async function createSurvey(param: { ...@@ -91,43 +92,54 @@ export async function createSurvey(param: {
/**获取当前学期 */ /**获取当前学期 */
let semester = await getCurrentSemester(); let semester = await getCurrentSemester();
/**插入 survey 表 */ insertSurveyInfo(semester.id, surveyName, startTime, endTime, isOpen, description, 1, null);
let surveyData: any = {
name: surveyName,
semester_id: semester.id,
start_time: startTime || null,
end_time: endTime || null,
is_open: isOpen ? true : false,
description: description || null
};
await addData(TABLENAME.测评活动表, surveyData);
/**查回自增ID */ /**查回自增ID */
let newSurvey = await selectOneDataByParam(TABLENAME.测评活动表, { let newSurvey = await selectOneDataByParam(TABLENAME.测评活动表, {
name: surveyName, name: surveyName,
semester_id: semester.id, semester_id: semester.id,
is_temp: 1,
"%orderDesc%": "id", "%orderDesc%": "id",
"%limit%": 1 "%limit%": 1
}); });
let surveyId = (newSurvey.data as any).id; let surveyId = (newSurvey.data as any).id;
/**逐条插入题目 */ insertSurveyDetail(surveyId, questions);
for (let i = 0; i < questions.length; i++) {
let q = questions[i]; // 新增试卷
await addData(TABLENAME.测评题目表, { insertSurveyInfo(semester.id, surveyName, startTime, endTime, isOpen, description, 2, surveyId);
survey_id: surveyId, /**查回自增ID */
question_code: q.question_code, let surveyInfo = await selectOneDataByParam(TABLENAME.测评活动表, {
question_type: q.question_type, name: surveyName,
question_text: q.question_text, semester_id: semester.id,
options: q.options || null, is_temp: 2,
is_required: q.is_required !== undefined ? (q.is_required ? true : false) : true, "%orderDesc%": "id",
sort_order: i "%limit%": 1
}); });
} let survey_id = (surveyInfo.data as any).id;
insertSurveyDetail(survey_id, questions);
return { isSuccess: true }; return { isSuccess: true };
} }
/**
* 修改测评题库是否开放
* @param param
*/
export async function updateIsOpenSurvey(surveyId: number, isOpen: number) {
/**校验测评是否存在 */
let survey = await selectOneDataByParam(TABLENAME.测评活动表, { id: surveyId });
if (!hasData(survey)) {
throw new BizError(ERRORENUM.未找到数据, '测评不存在');
}
/**更新 survey 表 */
await updateManyData(TABLENAME.测评活动表, { id: surveyId }, {
is_open: isOpen ? true : false
});
return { isSuccess: true };
}
/** /**
* 修改测评题库 * 修改测评题库
...@@ -157,36 +169,43 @@ export async function updateSurvey(param: { ...@@ -157,36 +169,43 @@ export async function updateSurvey(param: {
if (!hasData(survey)) { if (!hasData(survey)) {
throw new BizError(ERRORENUM.未找到数据, '测评不存在'); throw new BizError(ERRORENUM.未找到数据, '测评不存在');
} }
updateSurveyInfo(surveyId, surveyName, startTime, endTime, isOpen, description, questions);
/**更新 survey 表 */ // 若是没有更新开始时间,则同步更新试卷
await updateManyData(TABLENAME.测评活动表, { id: surveyId }, { if (survey.data.start_time === startTime) {
name: surveyName, // 通过模板id查询试卷,按创建时间倒序取最晚一条
start_time: startTime || null, let survey_template = await selectOneDataByParam(TABLENAME.测评活动表, {
end_time: endTime || null, is_temp: 2,
is_open: isOpen ? true : false, temp_id: surveyId,
description: description || null "%orderDesc%": "created_at",
}); "%limit%": 1
});
/**操作 survey_question 表:先删后加 */ if (hasData(survey_template)) {
await delData(TABLENAME.测评题目表, { survey_id: surveyId }); let survey_id = (survey_template.data as any).id;
// 更新试卷信息
updateSurveyInfo(survey_id, surveyName, startTime, endTime, isOpen, description, questions);
}
} else {
let semester = await getCurrentSemester();
// 若是更新开始时间,则通过模板创建试卷
let tempId = survey.data.id;
insertSurveyInfo(semester.id, surveyName, startTime, endTime, isOpen, description, 2, tempId);
for (let i = 0; i < questions.length; i++) { /**查回自增ID */
let q = questions[i]; let newSurvey = await selectOneDataByParam(TABLENAME.测评活动表, {
await addData(TABLENAME.测评题目表, { name: surveyName,
survey_id: surveyId, semester_id: semester.id,
question_code: q.question_code, "%orderDesc%": "id",
question_type: q.question_type, "%limit%": 1
question_text: q.question_text,
options: q.options || null,
is_required: q.is_required !== undefined ? (q.is_required ? true : false) : true,
sort_order: i
}); });
let surveyId = (newSurvey.data as any).id;
insertSurveyDetail(surveyId, questions);
} }
return { isSuccess: true }; return { isSuccess: true };
} }
/** /**
* 测评详情 * 测评详情
* @param surveyId 测评ID * @param surveyId 测评ID
...@@ -224,3 +243,64 @@ export async function surveyInfo(surveyId: number) { ...@@ -224,3 +243,64 @@ export async function surveyInfo(surveyId: number) {
questions: questionList questions: questionList
}; };
} }
// 内联方法,用于插入测评信息
async function insertSurveyInfo(semesterId: number, surveyName: string, startTime: string,
endTime: string, isOpen: number, description: string, is_temp?: number, tempId?: number){
/**插入 survey 表 */
let surveyData: any = {
name: surveyName,
semester_id: semesterId,
start_time: startTime || null,
end_time: endTime || null,
is_open: isOpen ? true : false,
description: description || null,
is_temp: is_temp,
tempId: tempId || null
};
await addData(TABLENAME.测评活动表, surveyData);
}
// 内联方法,用于插入测评题目列表
async function insertSurveyDetail(surveyId: number, questions: any[]){
/**逐条插入题目 */
for (let i = 0; i < questions.length; i++) {
let q = questions[i];
await addData(TABLENAME.测评题目表, {
survey_id: surveyId,
question_code: q.question_code,
question_type: q.question_type,
question_text: q.question_text,
options: q.options || null,
is_required: q.is_required !== undefined ? (q.is_required ? true : false) : true,
sort_order: i
});
}
}
// 内联方法,用于更新测评信息和题目列表
async function updateSurveyInfo(surveyId: number, surveyName: string, startTime: string,
endTime: string, isOpen: number, description: string, questions: any[]){
/**更新 survey 表 */
await updateManyData(TABLENAME.测评活动表, { id: surveyId }, {
name: surveyName,
start_time: startTime || null,
end_time: endTime || null,
is_open: isOpen ? true : false,
description: description || null
});
/**操作 survey_question 表:先删后加 */
await delData(TABLENAME.测评题目表, { survey_id: surveyId });
for (let i = 0; i < questions.length; i++) {
let q = questions[i];
await addData(TABLENAME.测评题目表, {
survey_id: surveyId,
question_code: q.question_code,
question_type: q.question_type,
question_text: q.question_text,
options: q.options || null,
is_required: q.is_required !== undefined ? (q.is_required ? true : false) : true,
sort_order: i
});
}
}
\ No newline at end of file
...@@ -313,6 +313,7 @@ export async function getTeacherSurvey(studentId: string, surveyName?: string, s ...@@ -313,6 +313,7 @@ export async function getTeacherSurvey(studentId: string, surveyName?: string, s
/**查测评活动列表 */ /**查测评活动列表 */
let surveyParam: any = { let surveyParam: any = {
semester_id: semester.id, semester_id: semester.id,
is_temp: 2, // 只查试卷
is_open: 1 is_open: 1
}; };
let surveyList = await selectDataListByParam(TABLENAME.测评活动表, surveyParam); let surveyList = await selectDataListByParam(TABLENAME.测评活动表, surveyParam);
...@@ -339,12 +340,22 @@ export async function getTeacherSurvey(studentId: string, surveyName?: string, s ...@@ -339,12 +340,22 @@ export async function getTeacherSurvey(studentId: string, surveyName?: string, s
continue; continue;
} }
// 时间维度状态: 0=未开始, 1=进行中, 2=已结束
let now = new Date();
let timeStatus = 1; // 默认进行中
if (survey.start_time && now < new Date(survey.start_time)) {
timeStatus = 0; // 未开始
} else if (survey.end_time && now > new Date(survey.end_time)) {
timeStatus = 2; // 已结束
}
resultList.push({ resultList.push({
survey_id: survey.id, survey_id: survey.id,
name: survey.name, name: survey.name,
start_time: survey.start_time, start_time: survey.start_time,
end_time: survey.end_time, end_time: survey.end_time,
status: surveyStatus status: surveyStatus,
time_status: timeStatus
}); });
} }
......
...@@ -318,10 +318,11 @@ export async function getStudentOptions(teacherId: string, semesterId?: number, ...@@ -318,10 +318,11 @@ export async function getStudentOptions(teacherId: string, semesterId?: number,
/**获取目标学期 */ /**获取目标学期 */
let semester; let semester;
if (semesterId) { if (semesterId) {
semester = await selectOneDataByParam(TABLENAME.学期表, { id: semesterId }); let semesterData = await selectOneDataByParam(TABLENAME.学期表, { id: semesterId });
if (!semester.data) { if (!semesterData.data) {
throw new BizError(ERRORENUM.未找到数据, '学期不存在'); throw new BizError(ERRORENUM.未找到数据, '学期不存在');
} }
semester = semesterData.data;
} else { } else {
semester = await getCurrentSemester(); semester = await getCurrentSemester();
} }
...@@ -333,7 +334,7 @@ export async function getStudentOptions(teacherId: string, semesterId?: number, ...@@ -333,7 +334,7 @@ export async function getStudentOptions(teacherId: string, semesterId?: number,
/**获取该导师在指定学期的所有学生 */ /**获取该导师在指定学期的所有学生 */
let matches = await selectDataListByParam(TABLENAME.师生匹配表, { let matches = await selectDataListByParam(TABLENAME.师生匹配表, {
teacher_id: teacherId, teacher_id: teacherId,
semester_id: semester.data?.id || semester.id, semester_id: semester.id,
is_active: true is_active: true
}); });
......
...@@ -450,6 +450,8 @@ export const TablesConfig = [ ...@@ -450,6 +450,8 @@ export const TablesConfig = [
start_time: { type: DataTypes.DATE, allowNull: true, comment: '答题开始时间,为空表示无限制' }, start_time: { type: DataTypes.DATE, allowNull: true, comment: '答题开始时间,为空表示无限制' },
end_time: { type: DataTypes.DATE, allowNull: true, comment: '答题结束时间,为空表示无限制' }, end_time: { type: DataTypes.DATE, allowNull: true, comment: '答题结束时间,为空表示无限制' },
is_open: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, comment: '是否开放答题(管理员手动开启/关闭)' }, is_open: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, comment: '是否开放答题(管理员手动开启/关闭)' },
is_temp: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 1, comment: '1模板2试卷' },
temp_id: { type: DataTypes.INTEGER, allowNull: true, comment: '模板ID' },
created_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW }, created_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW },
updated_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW } updated_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW }
}, },
......
...@@ -248,6 +248,8 @@ export function setRouter(httpServer) { ...@@ -248,6 +248,8 @@ export function setRouter(httpServer) {
httpServer.post('/api/admin/survey/edit', checkUser, checkRole(USERROLE.管理员), asyncHandler(updateSurvey)); httpServer.post('/api/admin/survey/edit', checkUser, checkRole(USERROLE.管理员), asyncHandler(updateSurvey));
httpServer.post('/api/admin/survey/info', checkUser, checkRole(USERROLE.管理员), asyncHandler(surveyInfo)); httpServer.post('/api/admin/survey/info', checkUser, checkRole(USERROLE.管理员), asyncHandler(surveyInfo));
httpServer.post('/api/admin/survey/edit_open', checkUser, checkRole(USERROLE.管理员), asyncHandler(updateIsOpenSurvey));
} }
// ==================== 导师管理 ==================== // ==================== 导师管理 ====================
...@@ -1647,6 +1649,20 @@ async function surveyInfo(req, res) { ...@@ -1647,6 +1649,20 @@ async function surveyInfo(req, res) {
res.success(result); res.success(result);
} }
/**
* 修改测评题库是否开放
* @param req
* @param res
*/
async function updateIsOpenSurvey(req, res) {
const userInfo = req.userInfo;
let reqConf = {surveyId:'Number', isOpen:'Number'};
let { surveyId, isOpen } = eccReqParamater(reqConf, req.body);
let result = await teacherSurveyBiz.updateIsOpenSurvey( surveyId, isOpen );
res.success(result);
}
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