|
@@ -0,0 +1,539 @@
|
|
|
+package cn.com.qmth.stmms.api.controller.admin;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
+import org.springframework.core.task.AsyncTaskExecutor;
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
+
|
|
|
+import com.qmth.boot.core.collection.PageResult;
|
|
|
+
|
|
|
+import cn.com.qmth.stmms.api.controller.BaseApiController;
|
|
|
+import cn.com.qmth.stmms.biz.exam.bean.MarkerChatVo;
|
|
|
+import cn.com.qmth.stmms.biz.exam.bean.MarkerQualityChatVo;
|
|
|
+import cn.com.qmth.stmms.biz.exam.bean.MarkerQualityVo;
|
|
|
+import cn.com.qmth.stmms.biz.exam.bean.ResultMessage;
|
|
|
+import cn.com.qmth.stmms.biz.exam.bean.SubjectQualityVo;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.Marker;
|
|
|
+import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
|
|
|
+import cn.com.qmth.stmms.biz.exam.query.SubjectQualitySearchQuery;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
+import cn.com.qmth.stmms.biz.exception.StatusException;
|
|
|
+import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.thread.MarkQualityThread;
|
|
|
+import cn.com.qmth.stmms.biz.user.model.User;
|
|
|
+import cn.com.qmth.stmms.biz.user.service.UserService;
|
|
|
+import cn.com.qmth.stmms.biz.utils.Calculator;
|
|
|
+import cn.com.qmth.stmms.biz.utils.PageUtil;
|
|
|
+import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
+import cn.com.qmth.stmms.common.domain.ApiUser;
|
|
|
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
|
|
|
+import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
+import cn.com.qmth.stmms.common.enums.LogType;
|
|
|
+import cn.com.qmth.stmms.common.utils.ExportExcel;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+
|
|
|
+@Controller("adminMarkQualityController")
|
|
|
+@RequestMapping("/api/admin/exam/quality")
|
|
|
+public class MarkQualityController extends BaseApiController {
|
|
|
+
|
|
|
+ protected static Logger log = LoggerFactory.getLogger(MarkQualityController.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkGroupService groupService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkerService markerService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LockService lockService;
|
|
|
+
|
|
|
+ @Qualifier("task-executor")
|
|
|
+ @Autowired
|
|
|
+ private AsyncTaskExecutor taskExecutor;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamSubjectService subjectService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkLibraryService libraryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamQuestionService questionService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserService userService;
|
|
|
+
|
|
|
+ @Logging(menu = "质量监控查询", type = LogType.QUERY)
|
|
|
+ @ApiOperation(value = "按科目分页查询")
|
|
|
+ @RequestMapping(value = "list/subject", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public PageResult<SubjectQualityVo> listSubject(SubjectQualitySearchQuery query) {
|
|
|
+ return pageSubject(query);
|
|
|
+ }
|
|
|
+
|
|
|
+ private PageResult<SubjectQualityVo> pageSubject(SubjectQualitySearchQuery query) {
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ ApiUser wu = getApiUser();
|
|
|
+ List<ExamSubject> subjectList = getExamSubject(examId, wu);
|
|
|
+ query.setTotalCount(subjectList == null ? 0 : subjectList.size());
|
|
|
+ List<ExamSubject> pageList = PageUtil.of(subjectList, query).getResult();
|
|
|
+ List<SubjectQualityVo> ret = new ArrayList<>();
|
|
|
+ for (ExamSubject sub : pageList) {
|
|
|
+ SubjectQualityVo vo = new SubjectQualityVo();
|
|
|
+ vo.setSubjectCode(sub.getCode());
|
|
|
+ vo.setSubjectName(sub.getName());
|
|
|
+ vo.setSubjectText(sub.getCode() + "-" + sub.getName());
|
|
|
+ ret.add(vo);
|
|
|
+ }
|
|
|
+ List<MarkGroup> gs = null;
|
|
|
+ if (StringUtils.isBlank(query.getSubjectCode())) {
|
|
|
+ gs = groupService.findByExam(examId);
|
|
|
+ } else {
|
|
|
+ gs = groupService.findByExamAndSubject(examId, query.getSubjectCode());
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(gs)) {
|
|
|
+ fillTotalCount(ret, gs);
|
|
|
+ MarkerSearchQuery markerQuery = new MarkerSearchQuery();
|
|
|
+ markerQuery.setPageNumber(1);
|
|
|
+ markerQuery.setPageSize(Integer.MAX_VALUE);
|
|
|
+ markerQuery.setExamId(examId);
|
|
|
+ markerQuery.setSubjectCode(query.getSubjectCode());
|
|
|
+ markerQuery = markerService.findByQuery(markerQuery);
|
|
|
+ if (!CollectionUtils.isEmpty(markerQuery.getResult())) {
|
|
|
+ fillDataCountForSubject(ret, markerQuery.getResult());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return PageUtil.of(ret, query);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "按科目导出")
|
|
|
+ @RequestMapping(value = "list/subject/export", method = RequestMethod.POST)
|
|
|
+ public void exportSubjectFile(SubjectQualitySearchQuery query, HttpServletResponse response) {
|
|
|
+ String fileName = "科目质量监控数据";
|
|
|
+ query.setPageNumber(1);
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
+ PageResult<SubjectQualityVo> page = pageSubject(query);
|
|
|
+ try {
|
|
|
+ new ExportExcel("科目质量监控数据", SubjectQualityVo.class).setDataList(page.getResult()).write(response, fileName)
|
|
|
+ .dispose();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new StatusException("科目质量监控数据导出出错", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void fillDataCountForSubject(List<SubjectQualityVo> ret, List<Marker> ms) {
|
|
|
+ Map<String, SubjectQualityVo> map = new HashMap<>();
|
|
|
+ for (SubjectQualityVo vo : ret) {
|
|
|
+ map.put(vo.getSubjectCode(), vo);
|
|
|
+ }
|
|
|
+ for (Marker m : ms) {
|
|
|
+ SubjectQualityVo vo = map.get(m.getSubjectCode());
|
|
|
+ vo.setFinishCount(vo.getFinishCount() + m.getFinishCount());
|
|
|
+ vo.setFinishCountNa(vo.getFinishCountNa() + m.getFinishCountNa());
|
|
|
+ vo.setWaitArbitrateCount(vo.getWaitArbitrateCount() + m.getWaitArbitrateCount());
|
|
|
+ vo.setArbitrateCount(vo.getFinishCount() - vo.getFinishCountNa());
|
|
|
+ vo.setFinishArbitrateCount(vo.getArbitrateCount() - vo.getWaitArbitrateCount());
|
|
|
+ if (vo.getFinishCount() == 0) {
|
|
|
+ vo.setArbitrateRatio("0%");
|
|
|
+ } else {
|
|
|
+ vo.setArbitrateRatio(Calculator.percentage(vo.getArbitrateCount(), vo.getFinishCount(), 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void fillTotalCount(List<SubjectQualityVo> ret, List<MarkGroup> gs) {
|
|
|
+ Map<String, SubjectQualityVo> map = new HashMap<>();
|
|
|
+ for (SubjectQualityVo vo : ret) {
|
|
|
+ map.put(vo.getSubjectCode(), vo);
|
|
|
+ }
|
|
|
+ for (MarkGroup g : gs) {
|
|
|
+ SubjectQualityVo vo = map.get(g.getSubjectCode());
|
|
|
+ vo.setTotalCount(vo.getTotalCount() + g.getLibraryCount());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Logging(menu = "质量监控查询", type = LogType.QUERY)
|
|
|
+ @ApiOperation(value = "按分组分页查询")
|
|
|
+ @RequestMapping(value = "list/group", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public PageResult<SubjectQualityVo> listGroup(SubjectQualitySearchQuery query) {
|
|
|
+ return pageGroup(query);
|
|
|
+ }
|
|
|
+
|
|
|
+ private PageResult<SubjectQualityVo> pageGroup(SubjectQualitySearchQuery query) {
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ List<MarkGroup> gs = null;
|
|
|
+ if (StringUtils.isBlank(query.getSubjectCode())) {
|
|
|
+ gs = groupService.findByExam(examId);
|
|
|
+ } else {
|
|
|
+ gs = groupService.findByExamAndSubject(examId, query.getSubjectCode());
|
|
|
+ }
|
|
|
+ List<SubjectQualityVo> ret = new ArrayList<>();
|
|
|
+ query.setTotalCount(gs == null ? 0 : gs.size());
|
|
|
+ if (!CollectionUtils.isEmpty(gs)) {
|
|
|
+ Map<String, String> subjectNames = new HashMap<>();
|
|
|
+ List<MarkGroup> pageList = PageUtil.of(gs, query).getResult();
|
|
|
+ for (MarkGroup group : pageList) {
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
+ group.getSubjectCode(), false, group.getNumber());
|
|
|
+ group.setQuestionList(questions);
|
|
|
+ SubjectQualityVo vo = new SubjectQualityVo();
|
|
|
+ vo.setSubjectCode(group.getSubjectCode());
|
|
|
+ vo.setSubjectName(getSubjectName(subjectNames, examId, group.getSubjectCode()));
|
|
|
+ vo.setSubjectText(vo.getSubjectCode() + "-" + vo.getSubjectName());
|
|
|
+ vo.setGroupNumber(group.getNumber());
|
|
|
+ vo.setGroupName(group.getTitle());
|
|
|
+ vo.setGroupText(vo.getGroupNumber() + "-" + vo.getGroupName());
|
|
|
+ ret.add(vo);
|
|
|
+ }
|
|
|
+ fillTotalCount(ret, gs);
|
|
|
+ MarkerSearchQuery markerQuery = new MarkerSearchQuery();
|
|
|
+ markerQuery.setPageNumber(1);
|
|
|
+ markerQuery.setPageSize(Integer.MAX_VALUE);
|
|
|
+ markerQuery.setExamId(examId);
|
|
|
+ markerQuery.setSubjectCode(query.getSubjectCode());
|
|
|
+ markerQuery = markerService.findByQuery(markerQuery);
|
|
|
+ if (!CollectionUtils.isEmpty(markerQuery.getResult())) {
|
|
|
+ fillDataCountForGroup(ret, markerQuery.getResult());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return PageUtil.of(ret, query);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "按分组导出")
|
|
|
+ @RequestMapping(value = "list/group/export", method = RequestMethod.POST)
|
|
|
+ public void exportGroupFile(SubjectQualitySearchQuery query, HttpServletResponse response) {
|
|
|
+ String fileName = "分组质量监控数据";
|
|
|
+ query.setPageNumber(1);
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
+ PageResult<SubjectQualityVo> page = pageGroup(query);
|
|
|
+ try {
|
|
|
+ new ExportExcel("分组质量监控数据", SubjectQualityVo.class).setDataList(page.getResult()).write(response, fileName)
|
|
|
+ .dispose();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new StatusException("分组质量监控数据导出出错", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void fillDataCountForGroup(List<SubjectQualityVo> ret, List<Marker> ms) {
|
|
|
+ Map<String, SubjectQualityVo> map = new HashMap<>();
|
|
|
+ for (SubjectQualityVo vo : ret) {
|
|
|
+ map.put(vo.getSubjectCode() + "-" + vo.getGroupNumber(), vo);
|
|
|
+ }
|
|
|
+ for (Marker m : ms) {
|
|
|
+ SubjectQualityVo vo = map.get(m.getSubjectCode() + "-" + m.getGroupNumber());
|
|
|
+ vo.setFinishCount(vo.getFinishCount() + m.getFinishCount());
|
|
|
+ vo.setFinishCountNa(vo.getFinishCountNa() + m.getFinishCountNa());
|
|
|
+ vo.setWaitArbitrateCount(vo.getWaitArbitrateCount() + m.getWaitArbitrateCount());
|
|
|
+ vo.setArbitrateCount(vo.getFinishCount() - vo.getFinishCountNa());
|
|
|
+ vo.setFinishArbitrateCount(vo.getArbitrateCount() - vo.getWaitArbitrateCount());
|
|
|
+ if (vo.getFinishCount() == 0) {
|
|
|
+ vo.setArbitrateRatio("0%");
|
|
|
+ } else {
|
|
|
+ vo.setArbitrateRatio(Calculator.percentage(vo.getArbitrateCount(), vo.getFinishCount(), 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getSubjectName(Map<String, String> subjectNames, int examId, String code) {
|
|
|
+ String name = subjectNames.get(code);
|
|
|
+ if (name != null) {
|
|
|
+ return name;
|
|
|
+ }
|
|
|
+ ExamSubject es = subjectService.find(examId, code);
|
|
|
+ subjectNames.put(code, es.getName());
|
|
|
+ return es.getName();
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "按评卷员分页查询")
|
|
|
+ @Logging(menu = "质量监控查询", type = LogType.QUERY)
|
|
|
+ @RequestMapping(value = "list/marker", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public PageResult<MarkerQualityVo> listMarker(MarkerSearchQuery query) {
|
|
|
+ return pageMarker(query);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "按评卷员导出")
|
|
|
+ @RequestMapping(value = "list/marker/export", method = RequestMethod.POST)
|
|
|
+ public void exportMarkerFile(MarkerSearchQuery query, HttpServletResponse response) {
|
|
|
+ String fileName = "评卷员质量监控数据";
|
|
|
+ query.setPageNumber(1);
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
+ PageResult<MarkerQualityVo> page = pageMarker(query);
|
|
|
+ try {
|
|
|
+ new ExportExcel("评卷员质量监控数据", MarkerQualityVo.class).setDataList(page.getResult()).write(response, fileName)
|
|
|
+ .dispose();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new StatusException("评卷员质量监控数据导出出错", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private PageResult<MarkerQualityVo> pageMarker(MarkerSearchQuery query) {
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ ApiUser wu = getApiUser();
|
|
|
+ List<ExamSubject> subjectList = getExamSubject(examId, wu);
|
|
|
+ if (subjectList.isEmpty()) {
|
|
|
+ return PageUtil.emptyPage();
|
|
|
+ }
|
|
|
+ query.setExamId(examId);
|
|
|
+ query.orderById();
|
|
|
+ if (StringUtils.isBlank(query.getSubjectCode()) && !subjectList.isEmpty()) {
|
|
|
+ query.setSubjectCode(subjectList.get(0).getCode());
|
|
|
+ }
|
|
|
+ List<MarkerQualityVo> ret = new ArrayList<>();
|
|
|
+ if (query.getSubjectCode() != null) {
|
|
|
+ query = markerService.findByQuery(query);
|
|
|
+ for (Marker marker : query.getResult()) {
|
|
|
+ marker.setUser(userService.findById(marker.getUserId()));
|
|
|
+ MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
+ group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
+ marker.getSubjectCode(), false, group.getNumber()));
|
|
|
+ marker.setGroup(group);
|
|
|
+ if (marker.getFinishCount() == null) {
|
|
|
+ marker.setFinishCount(0);
|
|
|
+ }
|
|
|
+ if (marker.getFinishCountNa() == null) {
|
|
|
+ marker.setFinishCountNa(0);
|
|
|
+ }
|
|
|
+ if (marker.getRejectCount() == null) {
|
|
|
+ marker.setRejectCount(0);
|
|
|
+ }
|
|
|
+ if (query.getNoArbitrate() != null && query.getNoArbitrate()) {
|
|
|
+ marker.setFinishCount(marker.getFinishCountNa());
|
|
|
+ marker.setValidCount(marker.getValidCountNa());
|
|
|
+ marker.setAvgScore(marker.getAvgScoreNa());
|
|
|
+ marker.setAvgSpeed(marker.getAvgSpeedNa());
|
|
|
+ marker.setStdevScore(marker.getStdevScoreNa());
|
|
|
+ marker.setArbitrateCount(0);
|
|
|
+ marker.setArbitrateRatio("0%");
|
|
|
+ } else {
|
|
|
+ marker.setArbitrateCount(marker.getFinishCount() - marker.getFinishCountNa());
|
|
|
+ if (marker.getFinishCount() == 0) {
|
|
|
+ marker.setArbitrateRatio("0%");
|
|
|
+ } else {
|
|
|
+ marker.setArbitrateRatio(
|
|
|
+ Calculator.percentage(marker.getArbitrateCount(), marker.getFinishCount(), 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ret.add(MarkerQualityVo.of(marker));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return PageUtil.of(ret, query);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Logging(menu = "重新计算质量监控", type = LogType.UPDATE)
|
|
|
+ @ApiOperation(value = "重新计算")
|
|
|
+ @RequestMapping(value = "update", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public ResultMessage update(@RequestParam String subjectCode, @RequestParam Integer groupNumber) {
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
|
|
|
+ if (group != null) {
|
|
|
+ final String lockKey = getLockKey(examId, subjectCode, groupNumber);
|
|
|
+ if (lockService.trylock(LockType.BATCH_QUALITY, lockKey)) {
|
|
|
+ taskExecutor.submit(new MarkQualityThread(
|
|
|
+ markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber), lockKey));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultOk();
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getLockKey(Integer examId, String subjectCode, Integer groupNumber) {
|
|
|
+ return examId + "_" + subjectCode + "_" + groupNumber;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Logging(menu = "查询给分曲线", type = LogType.QUERY)
|
|
|
+ @ApiOperation(value = "给分曲线")
|
|
|
+ @RequestMapping(value = "chart", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public MarkerQualityChatVo chart(@RequestParam String subjectCode, @RequestParam Integer groupNumber,
|
|
|
+ @RequestParam(required = false) Boolean marked, @RequestParam(required = false) Boolean noArbitrate) {
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
|
|
|
+ MarkerQualityChatVo ret = new MarkerQualityChatVo();
|
|
|
+ if (group != null) {
|
|
|
+ List<MarkerChatVo> list = new ArrayList<>();
|
|
|
+ List<Marker> markers = null;
|
|
|
+ if (marked != null && marked) {
|
|
|
+ markers = markerService.findByExamAndSubjectAndGroupMarked(examId, subjectCode, groupNumber);
|
|
|
+ } else {
|
|
|
+ markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
|
|
|
+ }
|
|
|
+ List<Double> scores = null;
|
|
|
+ if (noArbitrate != null && noArbitrate) {
|
|
|
+ scores = libraryService.findScore(examId, subjectCode, groupNumber, LibraryStatus.MARKED,
|
|
|
+ LibraryStatus.INSPECTED);
|
|
|
+ } else {
|
|
|
+ scores = libraryService.findScore(examId, subjectCode, groupNumber, LibraryStatus.MARKED,
|
|
|
+ LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
|
|
|
+ }
|
|
|
+ for (Marker marker : markers) {
|
|
|
+ List<Object[]> libraries = null;
|
|
|
+ if (noArbitrate != null && noArbitrate) {
|
|
|
+ libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
|
|
|
+ LibraryStatus.MARKED, LibraryStatus.INSPECTED);
|
|
|
+ } else {
|
|
|
+ libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
|
|
|
+ LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
|
|
|
+ }
|
|
|
+ Map<Double, Long> scoreCount = new HashMap<Double, Long>();
|
|
|
+ for (Object[] array : libraries) {
|
|
|
+ Double score = (Double) array[0];
|
|
|
+ Long count = (Long) array[1];
|
|
|
+ scoreCount.put(score, count);
|
|
|
+ }
|
|
|
+ User user = userService.findById(marker.getUserId());
|
|
|
+ MarkerChatVo vo = new MarkerChatVo();
|
|
|
+ vo.setId(marker.getId());
|
|
|
+ vo.setLoginName(user.getLoginName());
|
|
|
+ vo.setName(user.getName());
|
|
|
+ vo.setScoreCount(scoreCount);
|
|
|
+ list.add(vo);
|
|
|
+ }
|
|
|
+ ret.setScores(scores);
|
|
|
+ ret.setGroup(group);
|
|
|
+ ret.setMarkers(list);
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ // @RequestMapping("/getChart")
|
|
|
+ // @ResponseBody
|
|
|
+ // public List<MarkerVO> getChart(HttpServletRequest request, @RequestParam
|
|
|
+ // String subjectCode,
|
|
|
+ // @RequestParam Integer groupNumber, @RequestParam(required = false)
|
|
|
+ // Boolean marked,
|
|
|
+ // @RequestParam(required = false) Boolean noArbitrate) {
|
|
|
+ // int examId = getSessionExamId(request);
|
|
|
+ // List<MarkerVO> list = new ArrayList<MarkerVO>();
|
|
|
+ // List<Marker> markers = null;
|
|
|
+ // if (marked != null && marked) {
|
|
|
+ // markers = markerService.findByExamAndSubjectAndGroupMarked(examId,
|
|
|
+ // subjectCode, groupNumber);
|
|
|
+ // } else {
|
|
|
+ // markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode,
|
|
|
+ // groupNumber);
|
|
|
+ // }
|
|
|
+ // for (Marker marker : markers) {
|
|
|
+ // List<Object[]> libraries = null;
|
|
|
+ // if (noArbitrate != null && noArbitrate) {
|
|
|
+ // libraries = libraryService.findScoreCount(examId, subjectCode,
|
|
|
+ // groupNumber, marker.getId(),
|
|
|
+ // LibraryStatus.MARKED, LibraryStatus.INSPECTED);
|
|
|
+ // } else {
|
|
|
+ // libraries = libraryService.findScoreCount(examId, subjectCode,
|
|
|
+ // groupNumber, marker.getId(),
|
|
|
+ // LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
|
|
|
+ // }
|
|
|
+ // MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
|
|
|
+ // query.setMarkerId(marker.getId());
|
|
|
+ // query.addStatus(LibraryStatus.MARKED);
|
|
|
+ // query.addStatus(LibraryStatus.INSPECTED);
|
|
|
+ // if (noArbitrate == null || !noArbitrate) {
|
|
|
+ // query.addStatus(LibraryStatus.ARBITRATED);
|
|
|
+ // }
|
|
|
+ // long totalCount = libraryService.countByQuery(query);
|
|
|
+ // Map<Double, Double> scorePercent = new HashMap<Double, Double>();
|
|
|
+ // for (Object[] array : libraries) {
|
|
|
+ // Double score = (Double) array[0];
|
|
|
+ // Long count = (Long) array[1];
|
|
|
+ // double percent = 0;
|
|
|
+ // if (totalCount != 0) {
|
|
|
+ // percent = count * 100 / totalCount;
|
|
|
+ // }
|
|
|
+ // scorePercent.put(score, percent);
|
|
|
+ // }
|
|
|
+ // User user = userService.findById(marker.getUserId());
|
|
|
+ // MarkerVO vo = new MarkerVO();
|
|
|
+ // vo.setId(marker.getId());
|
|
|
+ // vo.setLoginName(user.getLoginName());
|
|
|
+ // vo.setName(user.getName());
|
|
|
+ // vo.setScorePercent(scorePercent);
|
|
|
+ // list.add(vo);
|
|
|
+ // }
|
|
|
+ // return list;
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // @Logging(menu = "质量监控查询给分记录详情", type = LogType.QUERY)
|
|
|
+ // @RequestMapping(value = "/history", method = RequestMethod.POST)
|
|
|
+ // @ResponseBody
|
|
|
+ // @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN
|
|
|
+ // })
|
|
|
+ // public List<Task> getTask(HttpServletRequest request, @RequestParam
|
|
|
+ // Integer markerId,
|
|
|
+ // @RequestParam Double markerScore, @RequestParam(required = false) Integer
|
|
|
+ // pageNumber,
|
|
|
+ // @RequestParam(required = false) Integer pageSize, @RequestParam(required
|
|
|
+ // = false) Boolean noArbitrate) {
|
|
|
+ // Marker marker = markerService.findById(markerId);
|
|
|
+ // List<Task> list = new ArrayList<>();
|
|
|
+ // MarkGroup group = groupService.findOne(marker.getExamId(),
|
|
|
+ // marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
+ // if (group != null && group.getStatus() != MarkStatus.TRIAL) {
|
|
|
+ // // 正评查找已给分的评卷任务
|
|
|
+ // MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
|
|
|
+ // query.setExamId(marker.getExamId());
|
|
|
+ // query.setSubjectCode(marker.getSubjectCode());
|
|
|
+ // query.setMarkerId(marker.getId());
|
|
|
+ // query.addStatus(LibraryStatus.MARKED);
|
|
|
+ // query.addStatus(LibraryStatus.INSPECTED);
|
|
|
+ // if (noArbitrate == null || !noArbitrate) {
|
|
|
+ // query.addStatus(LibraryStatus.ARBITRATED);
|
|
|
+ // }
|
|
|
+ // query.setGroupNumber(marker.getGroupNumber());
|
|
|
+ // query.setMarkerScore(markerScore);
|
|
|
+ // if (pageNumber != null) {
|
|
|
+ // query.setPageNumber(pageNumber);
|
|
|
+ // }
|
|
|
+ // if (pageSize != null) {
|
|
|
+ // query.setPageSize(pageSize);
|
|
|
+ // }
|
|
|
+ // query.orderByMarkerTimeDesc();
|
|
|
+ //
|
|
|
+ // list = taskService.findByQuery(query);
|
|
|
+ // } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
|
|
|
+ // // 试评查找给分历史记录
|
|
|
+ // List<TrialLibrary> historyList = new ArrayList<TrialLibrary>();
|
|
|
+ // historyList = trialService.findHistory(marker.getExamId(),
|
|
|
+ // marker.getSubjectCode(), marker.getGroupNumber(),
|
|
|
+ // marker.getId(), pageNumber, pageSize, null, markerScore);
|
|
|
+ // for (TrialLibrary library : historyList) {
|
|
|
+ // Task task = taskService.build(library);
|
|
|
+ // list.add(task);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // int examId = getSessionExamId(request);
|
|
|
+ // Exam exam = examService.findById(examId);
|
|
|
+ // WebUser user = RequestUtils.getWebUser(request);
|
|
|
+ // for (Task task : list) {
|
|
|
+ // if (exam.isForbiddenInfo() && !Role.SCHOOL_ADMIN.equals(user.getRole()))
|
|
|
+ // {
|
|
|
+ // task.setSecretNumber(DEFAULT_SECRET_NUMBER);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // return list;
|
|
|
+ // }
|
|
|
+}
|