|
@@ -6,7 +6,11 @@ import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
|
|
import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
|
|
import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamService;
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamService;
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
|
+import cn.com.qmth.stmms.common.annotation.RoleRequire;
|
|
import cn.com.qmth.stmms.common.domain.ApiUser;
|
|
import cn.com.qmth.stmms.common.domain.ApiUser;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.ExamStatus;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.ExamType;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.Role;
|
|
import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
import cn.com.qmth.stmms.common.utils.DateUtils;
|
|
import cn.com.qmth.stmms.common.utils.DateUtils;
|
|
import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
@@ -25,9 +29,11 @@ import java.text.DecimalFormat;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
|
|
|
@Controller("coreApiController")
|
|
@Controller("coreApiController")
|
|
-@RequestMapping("/api/core")
|
|
|
|
|
|
+@RequestMapping("/api")
|
|
public class CoreController extends BaseApiController {
|
|
public class CoreController extends BaseApiController {
|
|
|
|
|
|
|
|
+ private static final int MAX_QUERY_PAGE_SIZE = 500;
|
|
|
|
+
|
|
@Autowired
|
|
@Autowired
|
|
private ExamService examService;
|
|
private ExamService examService;
|
|
|
|
|
|
@@ -36,77 +42,137 @@ public class CoreController extends BaseApiController {
|
|
|
|
|
|
@RequestMapping(value = "/exam/save", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/exam/save", method = RequestMethod.POST)
|
|
@ResponseBody
|
|
@ResponseBody
|
|
- public JSONObject save(HttpServletRequest request, @RequestParam(required = false) Integer id,
|
|
|
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SCHOOL_DEV })
|
|
|
|
+ public JSONObject examSave(HttpServletRequest request, @RequestParam(required = false) Integer id,
|
|
@RequestParam(required = false) String code, @RequestParam String name,
|
|
@RequestParam(required = false) String code, @RequestParam String name,
|
|
@RequestParam(required = false) String examTime) {
|
|
@RequestParam(required = false) String examTime) {
|
|
- JSONObject result = new JSONObject();
|
|
|
|
ApiUser user = RequestUtils.getApiUser(request);
|
|
ApiUser user = RequestUtils.getApiUser(request);
|
|
- if (id == null && code == null) {
|
|
|
|
- Exam exam = new Exam();
|
|
|
|
- exam.setName(exam.getName());
|
|
|
|
- exam.setExamTime(DateUtils.parseDate(examTime));
|
|
|
|
- exam = examService.save(exam);
|
|
|
|
- result.accumulate("id", exam.getId());
|
|
|
|
- result.accumulate("updateTime", DateUtils.formatDateTime(exam.getUpdateTime()));
|
|
|
|
- return result;
|
|
|
|
- }
|
|
|
|
- Exam exam = null;
|
|
|
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
|
+ //输入字段预处理并初步校验
|
|
|
|
+ code = validate("code", code, false, 32);
|
|
|
|
+ name = validate("name", name, true, 32);
|
|
|
|
+ Date time = DateUtils.parseDate(examTime);
|
|
|
|
+ Exam current = null;
|
|
if (id != null) {
|
|
if (id != null) {
|
|
- exam = examService.findById(id);
|
|
|
|
|
|
+ //根据id查找考试并校验
|
|
|
|
+ current = examService.findById(id);
|
|
|
|
+ if (current == null) {
|
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.replaceMessage("id invalid");
|
|
|
|
+ }
|
|
} else if (code != null) {
|
|
} else if (code != null) {
|
|
- exam = examService.findBySchoolAndCode(user.getSchoolId(), code);
|
|
|
|
- }
|
|
|
|
- if (exam != null && exam.getSchoolId().equals(user.getSchoolId())) {
|
|
|
|
- exam.setName(name);
|
|
|
|
- exam.setExamTime(DateUtils.parseDate(examTime));
|
|
|
|
- exam = examService.save(exam);
|
|
|
|
- result.accumulate("id", exam.getId());
|
|
|
|
- result.accumulate("updateTime", DateUtils.formatDateTime(exam.getUpdateTime()));
|
|
|
|
- return result;
|
|
|
|
|
|
+ //根据code查找考试并校验
|
|
|
|
+ current = examService.findBySchoolAndCode(user.getSchoolId(), code);
|
|
} else {
|
|
} else {
|
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.replaceMessage("id/code both unexists");
|
|
|
|
+ }
|
|
|
|
+ if (current == null) {
|
|
|
|
+ //新建考试并校验考试时间
|
|
|
|
+ if (time == null) {
|
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.replaceMessage("examTime invalid");
|
|
|
|
+ }
|
|
|
|
+ current = new Exam();
|
|
|
|
+ current.setCode(code);
|
|
|
|
+ current.setSchoolId(user.getSchoolId());
|
|
|
|
+ current.setType(ExamType.SCAN_IMAGE);
|
|
|
|
+ current.setStatus(ExamStatus.START);
|
|
|
|
+ current.setCreateTime(new Date());
|
|
|
|
+ } else if (!current.getSchoolId().equals(user.getSchoolId()) || current.getStatus() != ExamStatus.START) {
|
|
throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
}
|
|
}
|
|
|
|
+ current.setName(name);
|
|
|
|
+ if (time != null) {
|
|
|
|
+ current.setExamTime(time);
|
|
|
|
+ }
|
|
|
|
+ current = examService.save(current);
|
|
|
|
+ result.accumulate("id", current.getId());
|
|
|
|
+ result.accumulate("updateTime", DateUtils.formatDateTime(current.getUpdateTime()));
|
|
|
|
+ return result;
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping(value = "/exam/student/save", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/exam/student/save", method = RequestMethod.POST)
|
|
@ResponseBody
|
|
@ResponseBody
|
|
- public JSONObject studentSave(HttpServletRequest request, @RequestParam Integer examId,
|
|
|
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SCHOOL_DEV })
|
|
|
|
+ public JSONObject examStudentSave(HttpServletRequest request, @RequestParam Integer examId,
|
|
@RequestParam String examNumber, @RequestParam String studentCode, @RequestParam String name,
|
|
@RequestParam String examNumber, @RequestParam String studentCode, @RequestParam String name,
|
|
@RequestParam String college, @RequestParam String className, @RequestParam String teacher,
|
|
@RequestParam String college, @RequestParam String className, @RequestParam String teacher,
|
|
@RequestParam String subjectCode, @RequestParam String subjectName,
|
|
@RequestParam String subjectCode, @RequestParam String subjectName,
|
|
@RequestParam(required = false) String packageCode, @RequestParam(required = false) String paperType,
|
|
@RequestParam(required = false) String packageCode, @RequestParam(required = false) String paperType,
|
|
@RequestParam(required = false) String examSite, @RequestParam(required = false) String examRoom) {
|
|
@RequestParam(required = false) String examSite, @RequestParam(required = false) String examRoom) {
|
|
|
|
+ ApiUser user = RequestUtils.getApiUser(request);
|
|
Exam exam = examService.findById(examId);
|
|
Exam exam = examService.findById(examId);
|
|
- if (exam == null) {
|
|
|
|
|
|
+ if (exam == null || !exam.getSchoolId().equals(user.getSchoolId()) || exam.getStatus() != ExamStatus.START) {
|
|
throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
}
|
|
}
|
|
|
|
+ examNumber = validate("examNumber", examNumber, true, 64);
|
|
ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
|
|
ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
|
|
if (student == null) {
|
|
if (student == null) {
|
|
|
|
+ //新建考生
|
|
student = new ExamStudent();
|
|
student = new ExamStudent();
|
|
student.setExamId(examId);
|
|
student.setExamId(examId);
|
|
- student.setExamNumber(examNumber);
|
|
|
|
- student.setPackageCode(packageCode);
|
|
|
|
-
|
|
|
|
student.setSchoolId(exam.getSchoolId());
|
|
student.setSchoolId(exam.getSchoolId());
|
|
|
|
+ student.setExamNumber(examNumber);
|
|
|
|
+ student.setPackageCode(validate("packageCode", packageCode, false, 64));
|
|
|
|
+ student.setStudentCode(validate("studentCode", studentCode, true, 64));
|
|
|
|
+ student.setName(validate("name", name, true, 32));
|
|
|
|
+ student.setSubjectCode(validate("subjectCode", subjectCode, true, 32));
|
|
|
|
+ student.setSubjectName(validate("subjectName", subjectName, true, 32));
|
|
|
|
+ student.setCollege(validate("college", college, true, 32));
|
|
|
|
+ student.setClassName(validate("className", className, true, 32));
|
|
|
|
+ student.setTeacher(validate("teacher", teacher, true, 32));
|
|
|
|
+ student.setPaperType(validate("paperType", paperType, false, 16));
|
|
|
|
+ student.setExamSite(validate("examSite", examSite, false, 32));
|
|
|
|
+ student.setExamRoom(validate("examRoom", examRoom, false, 32));
|
|
student.setAbsent(false);
|
|
student.setAbsent(false);
|
|
|
|
+ student.setManualAbsent(false);
|
|
student.setUpload(false);
|
|
student.setUpload(false);
|
|
student.setException(false);
|
|
student.setException(false);
|
|
|
|
+ student.setBreach(false);
|
|
student.setSliceCount(0);
|
|
student.setSliceCount(0);
|
|
student.setSheetCount(0);
|
|
student.setSheetCount(0);
|
|
student.setObjectiveScore(0d);
|
|
student.setObjectiveScore(0d);
|
|
student.setSubjectiveScore(0d);
|
|
student.setSubjectiveScore(0d);
|
|
student.setSubjectiveStatus(SubjectiveStatus.UNMARK);
|
|
student.setSubjectiveStatus(SubjectiveStatus.UNMARK);
|
|
|
|
+ } else {
|
|
|
|
+ //更新现有考生
|
|
|
|
+ name = validate(name, true, 32);
|
|
|
|
+ if (name != null) {
|
|
|
|
+ student.setName(name);
|
|
|
|
+ }
|
|
|
|
+ studentCode = validate(studentCode, true, 64);
|
|
|
|
+ if (studentCode != null) {
|
|
|
|
+ student.setStudentCode(studentCode);
|
|
|
|
+ }
|
|
|
|
+ subjectCode = validate(subjectCode, true, 32);
|
|
|
|
+ subjectName = validate(subjectName, true, 32);
|
|
|
|
+ if (subjectCode != null && subjectName != null) {
|
|
|
|
+ student.setSubjectCode(subjectCode);
|
|
|
|
+ student.setSubjectName(subjectName);
|
|
|
|
+ }
|
|
|
|
+ paperType = validate(paperType, true, 16);
|
|
|
|
+ if (paperType != null) {
|
|
|
|
+ student.setPaperType(paperType);
|
|
|
|
+ }
|
|
|
|
+ college = validate(college, true, 32);
|
|
|
|
+ if (college != null) {
|
|
|
|
+ student.setCollege(college);
|
|
|
|
+ }
|
|
|
|
+ className = validate(className, true, 32);
|
|
|
|
+ if (className != null) {
|
|
|
|
+ student.setClassName(className);
|
|
|
|
+ }
|
|
|
|
+ teacher = validate(teacher, true, 32);
|
|
|
|
+ if (teacher != null) {
|
|
|
|
+ student.setTeacher(teacher);
|
|
|
|
+ }
|
|
|
|
+ examSite = validate(examSite, false, 32);
|
|
|
|
+ if (examSite != null) {
|
|
|
|
+ student.setExamSite(examSite);
|
|
|
|
+ }
|
|
|
|
+ examRoom = validate(examRoom, false, 32);
|
|
|
|
+ if (examRoom != null) {
|
|
|
|
+ student.setExamRoom(examRoom);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- student.setStudentCode(studentCode);
|
|
|
|
- student.setName(name);
|
|
|
|
- student.setSubjectCode(subjectCode);
|
|
|
|
- student.setSubjectName(subjectName);
|
|
|
|
- student.setCollege(college);
|
|
|
|
- student.setClassName(className);
|
|
|
|
- student.setTeacher(teacher);
|
|
|
|
- student.setPaperType(paperType);
|
|
|
|
- student.setExamSite(examSite);
|
|
|
|
- student.setExamRoom(examRoom);
|
|
|
|
studentService.save(student);
|
|
studentService.save(student);
|
|
JSONObject result = new JSONObject();
|
|
JSONObject result = new JSONObject();
|
|
result.accumulate("updateTime", DateUtils.formatDateTime(new Date()));
|
|
result.accumulate("updateTime", DateUtils.formatDateTime(new Date()));
|
|
@@ -115,20 +181,29 @@ public class CoreController extends BaseApiController {
|
|
|
|
|
|
@RequestMapping(value = "/student/query", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/student/query", method = RequestMethod.POST)
|
|
@ResponseBody
|
|
@ResponseBody
|
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SCHOOL_DEV })
|
|
public JSONArray studentQuery(HttpServletRequest request, @RequestParam String studentCode,
|
|
public JSONArray studentQuery(HttpServletRequest request, @RequestParam String studentCode,
|
|
@RequestParam(required = false) String subjectCode, @RequestParam(required = false) Date minExamTime) {
|
|
@RequestParam(required = false) String subjectCode, @RequestParam(required = false) Date minExamTime) {
|
|
|
|
+ ApiUser user = RequestUtils.getApiUser(request);
|
|
JSONArray array = new JSONArray();
|
|
JSONArray array = new JSONArray();
|
|
|
|
+ studentCode = StringUtils.trimToNull(studentCode);
|
|
|
|
+ subjectCode = StringUtils.trimToNull(subjectCode);
|
|
|
|
+ if (studentCode == null) {
|
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.replaceMessage("studentCode invalid");
|
|
|
|
+ }
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
|
|
+ query.setSchoolId(user.getSchoolId());
|
|
query.setStudentCode(studentCode);
|
|
query.setStudentCode(studentCode);
|
|
query.setSubjectCode(subjectCode);
|
|
query.setSubjectCode(subjectCode);
|
|
|
|
+ query.orderByExamIdDesc();
|
|
query = studentService.findByQuery(query);
|
|
query = studentService.findByQuery(query);
|
|
for (ExamStudent student : query.getResult()) {
|
|
for (ExamStudent student : query.getResult()) {
|
|
Exam exam = examService.findById(student.getExamId());
|
|
Exam exam = examService.findById(student.getExamId());
|
|
- if (minExamTime != null && minExamTime.after(exam.getExamTime())) {
|
|
|
|
|
|
+ if (minExamTime != null && minExamTime.before(exam.getExamTime())) {
|
|
JSONObject obj = new JSONObject();
|
|
JSONObject obj = new JSONObject();
|
|
- obj.accumulate("examId", student.getExamId());
|
|
|
|
- obj.accumulate("examCode", StringUtils.trimToEmpty(exam.getCode()));
|
|
|
|
- obj.accumulate("examTime", DateUtils.pastDays(exam.getExamTime()));
|
|
|
|
|
|
+ obj.accumulate("examId", exam.getId());
|
|
|
|
+ obj.accumulate("examCode", exam.getCode());
|
|
|
|
+ obj.accumulate("examTime", DateUtils.formatDateTime(exam.getExamTime()));
|
|
obj.accumulate("examNumber", student.getExamNumber());
|
|
obj.accumulate("examNumber", student.getExamNumber());
|
|
obj.accumulate("name", student.getName());
|
|
obj.accumulate("name", student.getName());
|
|
obj.accumulate("subjectCode", student.getSubjectCode());
|
|
obj.accumulate("subjectCode", student.getSubjectCode());
|
|
@@ -143,34 +218,38 @@ public class CoreController extends BaseApiController {
|
|
|
|
|
|
@RequestMapping(value = "/exam/student/score", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/exam/student/score", method = RequestMethod.POST)
|
|
@ResponseBody
|
|
@ResponseBody
|
|
- public JSONArray getScore(HttpServletRequest request, @RequestParam(required = false) Integer examId,
|
|
|
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SCHOOL_DEV })
|
|
|
|
+ public JSONArray examStudentScore(HttpServletRequest request, @RequestParam(required = false) Integer examId,
|
|
@RequestParam(required = false) String examCode, @RequestParam(required = false) String examNumber,
|
|
@RequestParam(required = false) String examCode, @RequestParam(required = false) String examNumber,
|
|
@RequestParam(required = false) String studentCode, @RequestParam(required = false) String subjectCode,
|
|
@RequestParam(required = false) String studentCode, @RequestParam(required = false) String subjectCode,
|
|
@RequestParam(required = false) String college, @RequestParam(required = false) String className,
|
|
@RequestParam(required = false) String college, @RequestParam(required = false) String className,
|
|
@RequestParam(required = false) String teacher,
|
|
@RequestParam(required = false) String teacher,
|
|
@RequestParam(required = false, defaultValue = "1") Integer pageNumber,
|
|
@RequestParam(required = false, defaultValue = "1") Integer pageNumber,
|
|
@RequestParam(required = false, defaultValue = "100") Integer pageSize) {
|
|
@RequestParam(required = false, defaultValue = "100") Integer pageSize) {
|
|
|
|
+ ApiUser user = RequestUtils.getApiUser(request);
|
|
if (examId == null && examCode == null) {
|
|
if (examId == null && examCode == null) {
|
|
- throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
|
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.replaceMessage("examId/examCode both unexists");
|
|
}
|
|
}
|
|
Exam exam = examService.findById(examId);
|
|
Exam exam = examService.findById(examId);
|
|
if (exam == null) {
|
|
if (exam == null) {
|
|
- ApiUser user = RequestUtils.getApiUser(request);
|
|
|
|
exam = examService.findBySchoolAndCode(user.getSchoolId(), examCode);
|
|
exam = examService.findBySchoolAndCode(user.getSchoolId(), examCode);
|
|
}
|
|
}
|
|
- if (exam == null) {
|
|
|
|
|
|
+ if (exam == null || !exam.getSchoolId().equals(user.getSchoolId())) {
|
|
throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
}
|
|
}
|
|
JSONArray array = new JSONArray();
|
|
JSONArray array = new JSONArray();
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
query.setExamId(exam.getId());
|
|
query.setExamId(exam.getId());
|
|
- query.setExamNumber(examNumber);
|
|
|
|
- query.setStudentCode(studentCode);
|
|
|
|
- query.setSubjectCode(subjectCode);
|
|
|
|
- query.setCollege(college);
|
|
|
|
- query.setClassName(className);
|
|
|
|
- query.setTeacher(teacher);
|
|
|
|
|
|
+ query.setExamNumber(StringUtils.trimToNull(examNumber));
|
|
|
|
+ query.setStudentCode(StringUtils.trimToNull(studentCode));
|
|
|
|
+ query.setSubjectCode(StringUtils.trimToNull(subjectCode));
|
|
|
|
+ query.setCollege(StringUtils.trimToNull(college));
|
|
|
|
+ query.setClassName(StringUtils.trimToNull(className));
|
|
|
|
+ query.setTeacher(StringUtils.trimToNull(teacher));
|
|
|
|
+ query.setPageNumber(Math.max(1, pageNumber));
|
|
|
|
+ query.setPageSize(Math.min(MAX_QUERY_PAGE_SIZE, pageSize));
|
|
query = studentService.findByQuery(query);
|
|
query = studentService.findByQuery(query);
|
|
|
|
+ DecimalFormat df = new DecimalFormat("####.###");
|
|
for (ExamStudent student : query.getResult()) {
|
|
for (ExamStudent student : query.getResult()) {
|
|
JSONObject obj = new JSONObject();
|
|
JSONObject obj = new JSONObject();
|
|
obj.accumulate("examId", exam.getId());
|
|
obj.accumulate("examId", exam.getId());
|
|
@@ -182,7 +261,6 @@ public class CoreController extends BaseApiController {
|
|
obj.accumulate("subjectName", student.getSubjectName());
|
|
obj.accumulate("subjectName", student.getSubjectName());
|
|
obj.accumulate("paperType", StringUtils.trimToEmpty(student.getPaperType()));
|
|
obj.accumulate("paperType", StringUtils.trimToEmpty(student.getPaperType()));
|
|
obj.accumulate("status", getStatus(student));
|
|
obj.accumulate("status", getStatus(student));
|
|
- DecimalFormat df = new DecimalFormat("####.###");
|
|
|
|
obj.accumulate("totalScore", df.format(student.getTotalScore()));
|
|
obj.accumulate("totalScore", df.format(student.getTotalScore()));
|
|
obj.accumulate("objectiveScore", df.format(student.getObjectiveScore()));
|
|
obj.accumulate("objectiveScore", df.format(student.getObjectiveScore()));
|
|
obj.accumulate("subjectiveScore", df.format(student.getSubjectiveScore()));
|
|
obj.accumulate("subjectiveScore", df.format(student.getSubjectiveScore()));
|