package com.qxueyou.scc.exam.action; import java.io.IOException; import java.math.BigDecimal; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.qxueyou.scc.exercise.model.ExerciseGroup; import com.qxueyou.scc.teach.student.model.StuStudent; import com.qxueyou.scc.teach.student.service.IStudentService; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.databind.ObjectMapper; import com.qxueyou.scc.admin.classes.model.ClsClass; import com.qxueyou.scc.admin.classes.service.IClassService; import com.qxueyou.scc.base.dao.CommonDAO; import com.qxueyou.scc.base.model.Pager; import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.service.ICommonService; import com.qxueyou.scc.base.util.ClientUtils; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.QBeanUtils; import com.qxueyou.scc.exam.model.ExamBatchInfo; import com.qxueyou.scc.exam.model.ExamInfo; import com.qxueyou.scc.exam.model.ExamPaperInfo; import com.qxueyou.scc.exam.model.ExamReExamPaper; import com.qxueyou.scc.exam.model.ExamResultV; import com.qxueyou.scc.exam.service.IExamPaperService; import com.qxueyou.scc.exam.service.IExamService; import com.qxueyou.scc.exercise.model.ExerciseDataSubmitLog; import com.qxueyou.scc.exercise.model.ExerciseRecord; import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData; import com.qxueyou.scc.exercise.service.IExerciseGroupService; import com.qxueyou.scc.exercise.service.IExerciseVerService; import com.qxueyou.scc.user.model.User; import com.qxueyou.scc.user.service.IUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import javax.servlet.http.HttpServletRequest; /** * exam controller. * * @author kevin * @history 2018-03-11 create kevin * */ @Api(tags = "¿¼ÊÔ¹ÜÀí½Ó¿Ú") @Controller @CrossOrigin(origins="*",maxAge=3600) @RequestMapping(value = "/exam/exam") public class ExamController { private final Logger log = LogManager.getLogger(ExamController.class); // ·ÖÒ³²éѯÖУ¬Ä¬ÈϼǼÌõÊýºÍÒ³Êý private static final int DEFAULT_PAGE_SIZE = 10; private static final int DEFAULT_PAGE_NUM = 1; //Éú³ÉÃÜÂ볤¶È private static final int EXAM_CERT_PWD_LENGTH = 8; @Autowired private CommonDAO commonDAO; @Autowired IStudentService studentService; @Autowired @Qualifier("commonAppService") ICommonService commonService; @Autowired IExerciseGroupService exerciseGroupService; @Autowired IExamService examService; @Autowired IUserService userService; @Autowired IExamPaperService examPaperService; @Autowired private IExerciseVerService exerciseVerService; @Autowired IClassService classService; /** * ¿¼ÊÔÁбí */ @SuppressWarnings("unchecked") @RequestMapping(value = "list", method = RequestMethod.GET) public @ResponseBody Result list(String keyword,String classId,String subjectId,Short status,Integer pageSize,Integer pageNum) { pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; //×Ü¿¼ÊÔÊýÁ¿ int totalCount = examService.listCount(keyword == null ? "" : keyword.trim(),classId,subjectId,status); Pager pager = new Pager(pageSize,pageNum); pager.setTotalCount(totalCount); List list = examService.list(keyword == null ? "" : keyword.trim(),classId,subjectId,status,pageSize,pageNum); List> listResult =QBeanUtils.listBean2ListMap(list, CollectionUtils.newStringMap("examId", "examId", "examName", "examName", "examStatus", "examStatus","examType","examType", "totalScore","totalScore","creator", "creator", "updateTime", "updateTime","reExamPapers","reExamPapers", "subject.name","subjectName","examBatchInfos","examBatchInfos")); if(listResult!=null && listResult.size()>0){ //²éѯ´ýÅúÔÄ£¬ÒÑÅúÔÄ£¬Î´Ìá½»ÊýÁ¿ Map countMap = examService.queryExamResultStatusCount(QBeanUtils.listPropertyVal(list, "examId")); countMap = countMap==null?new HashMap(1):countMap; Integer tempCount = null; for (Map item : listResult) { List reExamPapers = (List)item.get("reExamPapers"); if(reExamPapers!= null && reExamPapers.size()>0){ String [] arrPaperNames = new String[reExamPapers.size()]; for(int i =0;i) item.get("examBatchInfos"))); tempCount = countMap.get(item.get("examId") + "-" + ExerciseRecord.STATUS_CHECK); item.put("checkedCount", tempCount==null?0:tempCount); tempCount = countMap.get(item.get("examId") + "-" + ExerciseRecord.STATUS_SUBMIT); item.put("toCheckCount",tempCount==null?0:tempCount); tempCount = countMap.get(item.get("examId") + "-" + ExerciseRecord.STATUS_NOT_SUBMIT); item.put("unCommitCount",tempCount==null?0:tempCount); item.remove("examBatchInfos"); item.remove("reExamPapers"); } } return new Result(true,"",CollectionUtils.newObjectMap("examList",listResult,"page",pager)); } private String getExamProgressStatus(List lstBatchInfos){ if(lstBatchInfos == null ||lstBatchInfos.size()==0){ return "ÒѽáÊø"; } String progressStatus="´ý¿ªÊ¼"; Date now = new Date(); //¸ù¾Ý¿ªÊ¼Ê±¼äµ¹Ðò lstBatchInfos.sort(new Comparator(){ @Override public int compare(ExamBatchInfo o1, ExamBatchInfo o2) { return (int)(o1.getStartTime().getTime()- o2.getStartTime().getTime()); } }); //Èç¹ûËùÓÐÅú´Î¶¼Ð¡ÓÚµ±Ç°Ê±¼ä£¬ÔòÒѽáÊø£¬Èç¹ûÓÐÒ»¸öÅú´ÎÕýÔÚ½øÐÐÖУ¬Ôò½øÐÐÖÐ if(lstBatchInfos.get(0).getEndTime().getTime()=now.getTime()){ progressStatus = "½øÐÐÖÐ"; break; } } } return progressStatus; } /** * ½Ìʦ²é¿´¿¼ÊԳɼ¨Áбí * * @return */ @ApiOperation(value = "ÀÏʦ²é¿´Ñ§Éú¿¼ÊÔ½á¹ûÁбí") @ApiImplicitParams({ @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="¿¼ÊÔid", required=true), @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="Åú´Îid", required=true), @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="°à¼¶id", required=true), }) @RequestMapping(value = "teacher/examresultlist", method = RequestMethod.GET) public @ResponseBody Result queryStudentExamResultList(String examId, String examBatchId, String classId,String keyword, Integer pageSize, Integer pageNum) { pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; //×Ü¿¼ÊÔÊýÁ¿ int totalCount = examService.listResultCount(examId, StringUtils.isEmpty(examBatchId)?null:new String[]{examBatchId}, classId, keyword == null ? "" : keyword.trim()); Pager pager = new Pager(pageSize,pageNum); pager.setTotalCount(totalCount); List list = examService.listResult(examId, StringUtils.isEmpty(examBatchId)?null:new String[]{examBatchId}, classId, keyword == null ? "" : keyword.trim(), pageSize,pageNum); List> listResult =QBeanUtils.listBean2ListMap(list, CollectionUtils.newStringMap("id.studentNo", "studentNo", "studentName", "studentName", "id.classId", "classId", "className","className","id.examBatchId","examBatchId","examBatchNo","examBatchNo","startTime", "startTime", "endTime", "endTime","submitTime","submitTime", "score","studentScore","status","status","paperCode","paperCode","accuracy","accuracy","completionRate","completeRate", "userId","studentUserId","passingScore","passingScore","sex","sex","mobilePhone","mobilePhone")); int rank = 1; for(Map map:listResult){ map.put("rank", rank); map.put("isPass", (map.get("studentScore")==null ? BigDecimal.ZERO :(BigDecimal)map.get("studentScore")) .compareTo((BigDecimal)map.get("passingScore")) == -1 ? "·ñ" : "ÊÇ"); rank++; } return new Result(true,"",CollectionUtils.newObjectMap("list",listResult,"page",pager,"examInfo",this.commonDAO.read(ExamInfo.class, examId))); } /** * ÏêÇéÒ³ÃæÊý¾Ý * * @param examId * @return */ @ApiOperation(value = "ÏêÇéÒ³ÃæÊý¾Ý") @ApiImplicitParams({ @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="¿¼ÊÔid", required=true), }) @RequestMapping(value = "/detail", method = RequestMethod.GET) public @ResponseBody Result detail(String examId) { return new Result(true,"",CollectionUtils.newObjectMap("detail",examService.queryExamDetail(examId))); } @ApiOperation(value = "»ñÈ¡²¹¿¼¿¼ÊÔ£¬¸ù¾ÝmaxLateMin±ê¼Ç") @ApiImplicitParams({ // @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="¿¼ÊÔid", required=true), }) @RequestMapping(value = "/getReExam", method = RequestMethod.GET) public @ResponseBody Result getReExam() { return new Result(true,"",CollectionUtils.newObjectMap("examInfo",examService.queryReExam())); } /** * ±£´æ * * @param examInfo * @return */ @RequestMapping(value = "/save", method = RequestMethod.POST) public @ResponseBody Result save(@RequestBody ExamInfo examInfo) { Result result = null; if (StringUtils.isEmpty(examInfo.getExamId())) { examInfo.setOrgId(ClientUtils.getOrgId()); String examId = examService.addExam(examInfo); result = new Result(true,"",CollectionUtils.newObjectMap("examId", examId)); } else { result = examService.updateExam(examInfo); } return result; } /** * ±£´æ * @param * @return */ @RequestMapping(value = "/saveRemedy", method = RequestMethod.POST) public @ResponseBody Result saveRemedy(@RequestBody ExamBatchInfo examBatchInfo) { Result result = null; //»ñÈ¡¿¼ÊÔID String examId = examBatchInfo.getExamId(); //»ñÈ¡¿ªÊ¼Ê±¼ä Date startTime = examBatchInfo.getStartTime(); //»ñÈ¡½áÊøÊ±¼ä Date endTime = examBatchInfo.getEndTime(); //Éú³É²¹¿¼¿¼ÊÔ examService.addRemedy(examId,startTime,endTime); result = new Result(true,"",CollectionUtils.newObjectMap("examId", examId)); return result; } /** * ɾ³ý * * @param examIds * @return */ @ApiOperation(value = "ɾ³ý¿¼ÊÔ", notes = "¸ù¾Ý´«ÈëµÄ¿¼ÊÔID×Ö·û´®²ÎÊý½øÐÐɾ³ý(¶à¸öIDÒÔ¶ººÅ·Ö¸î£¬ È磺examId1,examId2)", httpMethod = "GET") @ApiImplicitParam(name = "examIds", value = "¿¼ÊÔID×Ö·û´®", required = true, dataType = "String", paramType = "body") @RequestMapping(value = "delete", method = RequestMethod.GET) public @ResponseBody Result delete(String examIds) { Result result = new Result(true); if (StringUtils.isNotEmpty(examIds)) { result = examService.deleteExam(examIds.split(",")); } return result; } /** * ÉèÖÿ¼ÊÔÌâÄ¿ * * @param examInfo * @return */ @RequestMapping(value = "/savePaper", method = RequestMethod.POST) public @ResponseBody Result savePaper(@RequestBody ExamInfo examInfo) { return examService.updateExamPaperInfo(examInfo); } /** * ·¢²¼¿¼ÊÔ * * @param * @return */ @RequestMapping(value = "/publish", method = RequestMethod.GET) public @ResponseBody Result publishExam(String examIds) { if (StringUtils.isEmpty(examIds)) { return new Result(false, "²ÎÊý´íÎó"); } return this.examService.doPublishExam(examIds.split(",")); } /** * ³·»Ø¿¼ÊÔ * * @param * @return */ @RequestMapping(value = "/revoke", method = RequestMethod.GET) public @ResponseBody Result revokeExam(String examIds) { if (StringUtils.isEmpty(examIds)) { return new Result(false, "²ÎÊý´íÎó"); } return this.examService.doRevokeExam(examIds.split(",")); } /** * ѧÉú¿¼ÊÔÐÅÏ¢Áбí * * @return */ @ApiOperation(value = "ѧÉú¿¼ÊÔÐÅÏ¢Áбí") @ApiImplicitParams({ @ApiImplicitParam(name="keyword", dataType="String", paramType="query", value="¹Ø¼ü×Ö¿¼ÊÔÃû³ÆÄ£ºý²éѯ"), @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="°à¼¶id"), @ApiImplicitParam(name="subjectId", dataType="String", paramType="query", value="¿Î³Ìid", required=false), @ApiImplicitParam(name="status", dataType="String", paramType="query", value="״̬£¨Ä¬ÈÏÈ«²¿£¬1δ¿ªÊ¼£¬2δ½»¾í£¬3Òѽ»¾í£¬4ÓâÆÚδ½»,5ÒÑÅúÔÄ£©", required=false), }) @RequestMapping(value = "/student/list", method = RequestMethod.GET) public @ResponseBody Result queryStudentExamList(String keyword, String classId, String subjectId, Integer status, Integer pageSize, Integer pageNum) { pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; classId=ClientUtils.getClassId(); System.out.println("avcd"+ClientUtils.getUserId()); // System.out.println(ClientUtils.getUserId()+"--cla"+classId+"--sub"+subjectId+"--sta"+status+"--key"+keyword+"--pag"+pageNum+"---siz"+pageSize); String [] classIds= null; if(!StringUtils.isEmpty(classId)){ classIds = new String[]{classId}; }else{ List listClasses = classService.queryStudentClassesByUserId(ClientUtils.getUserId()); if(listClasses!=null && listClasses.size()>0){ classIds = QBeanUtils.listPropertyVal(listClasses, "classId").toArray(new String [listClasses.size()]); } } int totalCount = examService.listStudentExamCount(keyword == null ? "" : keyword.trim(),classIds,subjectId,status); // System.out.println("totalCount"+totalCount); List list = examService.listStudentExam(keyword == null ? "" : keyword.trim(),classIds,subjectId,status,pageSize,pageNum,ClientUtils.getUserId()); // System.out.println("totalCount"+list); List> listResult =QBeanUtils.listBean2ListMap(list, CollectionUtils.newStringMap("examId", "examId", "examName", "examName", "id.examBatchId", "examBatchId", "startTime","startTime","endTime", "endTime", "id.classId", "classId","totalScore","totalScore","passingScore","passingScore","remainingSeconds","remainingSeconds", "exerciseGroupId","groupId","score","score","status","status","subjectName","subjectName")); if(listResult!=null && listResult.size()>0){ for(Map map : listResult){ map.put("status", map.get("status")==null?0:Integer.valueOf((String)map.get("status"))); } } return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult,"examCount",totalCount)); } /** * ѧÉú¿¼ÊÔÐÅÏ¢Áбí * * @return */ @ApiOperation(value = "ѧÉú¿¼ÊÔÐÅÏ¢Áбí") @ApiImplicitParams({ @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="°à¼¶id"), }) @RequestMapping(value = "/student/nowExam", method = RequestMethod.GET) public @ResponseBody Result queryStudentExam(String classId) { //»ñÈ¡µ±Ç°¿¼ÊÔÁбíÒÔ½áÊøÊ±¼äÅÅÐò×îеÄÔÚ×îÇ°Ãæ String [] classIds= null; if(!StringUtils.isEmpty(classId)){ classIds = new String[]{classId}; }else{ List listClasses = classService.queryStudentClassesByUserId(ClientUtils.getUserId()); if(listClasses!=null && listClasses.size()>0){ classIds = QBeanUtils.listPropertyVal(listClasses, "classId").toArray(new String [listClasses.size()]); } } List list = examService.studentExam(classIds); List> listResult =QBeanUtils.listBean2ListMap(list, CollectionUtils.newStringMap("examId", "examId", "examName", "examName", "id.examBatchId", "examBatchId", "startTime","startTime","endTime", "endTime", "id.classId", "classId","totalScore","totalScore","passingScore","passingScore","remainingSeconds","remainingSeconds", "exerciseGroupId","groupId","score","score","status","status","subjectName","subjectName")); if(listResult!=null && listResult.size()>0){ for(Map map : listResult){ map.put("status", map.get("status")==null?0:Integer.valueOf((String)map.get("status"))); } } return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult!=null && listResult.size()>0?listResult.get(0):null)); } @ApiOperation(value = "ѧÉú¿¼ÊÔÐÅÏ¢Áбí") @ApiImplicitParams({ @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="°à¼¶id"), @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="°à¼¶id") }) @RequestMapping(value = "/student/record", method = RequestMethod.GET) public @ResponseBody Result queryStudentRecord(String examBatchId, String classId) { // ²éѯÊÇ·ñÓнøÐÐÖеĿ¼ÊÔ ExerciseRecord record = commonDAO.findUnique( "from ExerciseRecord where examBatchId=? and classId=? and userId = ? and deleteFlag is false ", CollectionUtils.newList(examBatchId,classId,ClientUtils.getUserId()), ExerciseRecord.class); return new Result(true,"",CollectionUtils.newObjectMap("record",record)); } /** * ѧÉú¿¼ÊÔÐÅÏ¢Áбí * * @return */ @ApiOperation(value = "ѧÉú¿¼ÊÔÐÅÏ¢Áбí") @ApiImplicitParams({ @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="°à¼¶id"), }) @RequestMapping(value = "/student/stuMessage", method = RequestMethod.GET) public @ResponseBody Result queryStudent() { StuStudent student = studentService.getStudentByUserId(ClientUtils.getUserId()); return new Result(true,"",CollectionUtils.newObjectMap("student",student)); } /** * ¸ù¾Ý¿¼ÊÔÅú´ÎID»ñÈ¡¿¼ÊÔÌâÄ¿ÐÅÏ¢ * * @param examBatchId * @return */ @ApiOperation(value = "ѧÉú¿ªÊ¼¿¼ÊÔ½Ó¿Ú") @ApiImplicitParams({ @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="¿¼ÊÔÅú´Îid", required=true), @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="°à¼¶id", required=false) }) @RequestMapping(value = "/student/startexam", method = RequestMethod.GET) public @ResponseBody Result doStartExam(String examBatchId, String classId,String studentUserId) { if (StringUtils.isEmpty(examBatchId) || StringUtils.isEmpty(classId)) { return new Result(false, "²ÎÊý´íÎó,°à¼¶£¬¿¼ÊÔÅú´Î²»ÄÜΪ¿Õ"); } Result result = this.examService.doStartExam(examBatchId,classId,StringUtils.isNotEmpty(studentUserId)?studentUserId:ClientUtils.getUserId()); ExamPaperInfo paper = (ExamPaperInfo)result.getData("paperInfo"); //&& paper.getExerciseGroup().getItems().isEmpty() if(paper!=null ){ ExerciseGroup exerciseGroup = exerciseGroupService.queryExerciseGroupDetail((String) result.getData("groupId"), examBatchId); paper.setExerciseGroup(exerciseGroup); } return result; } @ApiOperation(value = "ѧÉú¿ªÊ¼²¹¿¼½Ó¿Ú") @ApiImplicitParams({ @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="¿¼ÊÔÅú´Îid", required=true), }) @RequestMapping(value = "/student/startReExam", method = RequestMethod.GET) public @ResponseBody Result doStartReExam(String examId) { Result result = this.examService.doStartReExam(examId,ClientUtils.getUserId()); ExamPaperInfo paper = (ExamPaperInfo)result.getData("paperInfo"); //&& paper.getExerciseGroup().getItems().isEmpty() if(paper!=null ){ ExerciseGroup exerciseGroup = exerciseGroupService.queryReExerciseGroupDetail((String) result.getData("groupId"), examId); paper.setExerciseGroup(exerciseGroup); } return result; } @ApiOperation(value = "ѧÉú²¹¿¼¼Ç¼") @ApiImplicitParams({ // @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="¿¼ÊÔÅú´Îid", required=true), }) @RequestMapping(value = "/student/getReExamRecordList", method = RequestMethod.GET) public @ResponseBody Result getReExamRecordList() { ExamInfo examInfo = examService.queryReExam(); if(examInfo!=null){ Result reExamRecordList = this.examService.getReExamRecordList(examInfo.getExamId(), ClientUtils.getUserId()); List exerciseRecords= (List)reExamRecordList.getData(); exerciseRecords.forEach(exerciseRecord -> { exerciseRecord.setName(examInfo.getExamName()); }); return reExamRecordList; } return new Result(false,"ûÓÐÉèÖò¹¿¼"); } @ApiOperation(value = "ѧÉú¿¼ÊÔÏêÇé") @ApiImplicitParams({@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="¿¼ÊÔÅú´Îid", required=true)}) @RequestMapping(value = "/student/examdetail", method = RequestMethod.GET) public @ResponseBody Result viewExamDetail(String examBatchId) { ExamBatchInfo batchInfo = this.commonService.read(ExamBatchInfo.class, examBatchId); //¿¼ÊÔÐÅÏ¢ ExamInfo examInfo =this.examService.queryExamDetail(batchInfo.getExamId()); examInfo.setExamStartTime(batchInfo.getStartTime()); examInfo.setExamEndTime(batchInfo.getEndTime()); // »ñÈ¡¿¼¾íÐÅÏ¢ Map paperStatistic =null; if(examInfo.getExamType()!=ExamInfo.EXAM_TYPE_RANDOM && examInfo.getExamType()!=ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP){ paperStatistic = examPaperService.queryExamPaperItemsStatistic( QBeanUtils.listPropertyVal(examInfo.getReExamPapers(), "examPaperId").toArray(new String[examInfo.getReExamPapers().size()])); } return new Result(true,"",CollectionUtils.newObjectMap("examInfo",examInfo,"paperStatistic",paperStatistic)); } @ApiOperation(value = "Ìá½»¿¼ÊÔ´ð°¸") @ApiImplicitParams({@ApiImplicitParam(name="answers", dataType="String", paramType="query", value="Ìá½»´ð°¸", required=true)}) @RequestMapping(value = "/student/submitExam", method = RequestMethod.POST) public @ResponseBody Object doSubmitExamAnswer(@RequestParam(value = "answers") String answers) throws IOException { Result result = new Result(true); // Óû§±¾´Î×öÌâÌá½»µÄÊý¾Ý String recordId =null; // try { ExerciseSubmitAnswerData answerData = new ObjectMapper().readValue(answers, ExerciseSubmitAnswerData.class); recordId = answerData.getExerciseRecordId(); // Ìá½»ÊÔ¾í´ð°¸ result = new Result(true, "´ð°¸Ìá½»³É¹¦",exerciseVerService.doOperExerciseAnswerData(answerData)); // ¼Ç¼Ìá½»µÄÊý¾ÝÈÕÖ¾ exerciseVerService.doSaveExerciseDataSubmitLog(answers, recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerAnswers"); // } catch (Exception e) { // log.error("¿¼ÊÔ±£´æ´íÎó", e); // result = new Result(false, "Ìá½»¿¼ÊÔ´ð°¸ÇëÇóÒì³£"); // exerciseVerService.doSaveExerciseDataSubmitLog(answers, recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Exercise/exerAnswers"); // } return result; } @ApiOperation(value = "ÀÏʦÔľí") @ApiImplicitParams({@ApiImplicitParam(name="answerData", dataType="object", paramType="query", value="Ìá½»´ð°¸", required=true)}) @RequestMapping(value = "/teacher/checkExam", method = RequestMethod.POST) public @ResponseBody Object doCheckExam(@RequestBody ExerciseSubmitAnswerData answerData) { Result result = new Result(true); String recordId = null; try { // Ìá½»¼Ç¼id recordId = answerData.getExerciseRecordId(); // Ìá½»ÊÔ¾í´ð°¸ result = new Result(true, "´ð°¸Ìá½»³É¹¦",exerciseVerService.doOperExerciseAnswerData(answerData)); // ¼Ç¼Ìá½»µÄÊý¾ÝÈÕÖ¾ exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData),recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS,"/exam/exam/teacher/checkExam"); } catch (Exception e) { log.error("¿¼ÊÔ±£´æ´íÎó", e); result = new Result(false, "Ìá½»Á·Ï°´ð°¸ÇëÇóÒì³£"); exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData),recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,"/exam/exam/teacher/checkExam"); } return result; } /** * ²éѯ¿¼ÊÔÆ¾Ö¤ÐÅÏ¢Áбí * * @return */ @ApiOperation(value = "²éѯѧÉú¿¼ÊÔÆ¾Ö¤") @RequestMapping(value = "/teacher/examacertificatelist", method = RequestMethod.GET) public @ResponseBody Result queryStudentExamCertificateList(String examId, String classId, String examBatchId, String keyword, Integer pageSize, Integer pageNum) { Map queryParams = new HashMap(); StringBuffer hql = new StringBuffer(500); hql.append("select r.classId from ExamBatchInfo f,ExamBatchClassRe r where f.examBatchId = r.examBatchId and f.deleteFlag is false and r.deleteFlag is false "); // Èç¹ûexamBatchIdΪ¿Õ£¬Ôò»ñÈ¡¿¼ÊÔ¶ÔÓ¦µÄËùÓÐÅú´Î if (StringUtils.isNotEmpty(examBatchId)) { hql.append(" and f.examBatchId=:examBatchId"); queryParams.put("examBatchId", examBatchId); }else{ hql.append(" and f.examId=:examId"); queryParams.put("examId", examId); } List classLst =this.commonDAO.findByComplexHql(hql.toString(), queryParams, String.class); //Èç¹û²»´æÔÚ¹ØÁªµÄ°à¼¶ÐÅÏ¢£¬ÔòÖ±½Ó·µ»Ø if (classLst == null || classLst.size() == 0) { return new Result(false,"Îް༶¿¼ÉúÐÅÏ¢",CollectionUtils.newObjectMap("list",null)); } // ²éѯ¼Ç¼Êý int totalCount = commonDAO.findCountByComplexHql("from StuStudent t WHERE t.classId in(:classIds) and t.deleteFlag is false", CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{}))); // page¸³Öµ Pager page = new Pager(); page.setTotalCount(totalCount); page.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE); page.setPageNum(pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM); List> lstMap = this.commonDAO.findListWithMapByHql( "select u.userId as userId,c.name as className, u.name as name,u.account as account,u.password as password from StuStudent t,User u,ClsClass c " + " WHERE t.userId=u.userId and t.classId=c.classId AND t.classId in(:classIds) and t.deleteFlag is false and u.deleteFlag is false", CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{})),page); return new Result(true,"",CollectionUtils.newObjectMap("list", lstMap,"page", page)); } /** * ѧÉú¿¼ÊÔÐÅÏ¢Áбí * * @return */ @ApiOperation(value = "Éú³ÉѧÉú¿¼ÊÔÆ¾Ö¤") @RequestMapping(value = "/teacher/genstudentacertificate", method = RequestMethod.GET) public @ResponseBody Result queryStudentExamCertificateList(String examId, String examBatchId) { Map queryParams = new HashMap(1); // Èç¹ûexamBatchIdΪ¿Õ£¬Ôò»ñÈ¡¿¼ÊÔ¶ÔÓ¦µÄËùÓÐÅú´Î String hql ="select distinct r.classId from ExamBatchInfo f,ExamBatchClassRe r where f.examBatchId = r.examBatchId and f.deleteFlag is false and r.deleteFlag is false"; if (StringUtils.isNotEmpty(examBatchId)) { hql = hql.concat(" and f.examBatchId=:examBatchId "); queryParams.put("examBatchId", examBatchId); }else{ hql = hql.concat(" and f.examId=:examId "); queryParams.put("examId", examId); } List classLst =this.commonDAO.findByComplexHql(hql, queryParams, String.class); //Èç¹û²»´æÔÚ¹ØÁªµÄ°à¼¶ÐÅÏ¢£¬ÔòÖ±½Ó·µ»Ø if (classLst == null || classLst.size() == 0) { return new Result(false, "Îް༶¿¼ÉúÐÅÏ¢",CollectionUtils.newObjectMap("list", null)); } //²éѯËùÓÐѧÉúÓû§ÐÅÏ¢ List lstUser = this.commonDAO.findByComplexHql( "select distinct u from StuStudent t,User u WHERE t.userId=u.userId AND t.classId in(:classIds) and t.deleteFlag is false and u.deleteFlag is false", CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{})),User.class); if(lstUser!=null && lstUser.size()>0){ for(User user:lstUser){ user.setPassword(RandomStringUtils.random(EXAM_CERT_PWD_LENGTH, false, true)); } } if(!this.userService.doBatchUpdateUser(lstUser)){ return new Result(false,"¸üÐÂѧÉú¿¼ÊÔÆ¾Ö¤ÃÜÂëʧ°Ü!"); } return new Result(true); } }