Forráskód Böngészése

双评仲裁轨迹控制;新增验收模板下载

ting.yin 1 éve
szülő
commit
ba8461d1d0

+ 44 - 21
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -5,6 +5,8 @@ import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.model.*;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.*;
+import cn.com.qmth.stmms.biz.mark.dao.HeaderTagDao;
+import cn.com.qmth.stmms.biz.mark.dao.HeaderTrackDao;
 import cn.com.qmth.stmms.biz.mark.model.*;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
@@ -72,6 +74,12 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Autowired
     private MarkSpecialTagService specialTagService;
 
+    @Autowired
+    private HeaderTagDao headerTagDao;
+
+    @Autowired
+    private HeaderTrackDao headerTrackDao;
+
     @Autowired
     private CheckStudentService checkStudentService;
 
@@ -1016,17 +1024,17 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             List<MarkConfigItem> configList = group.getPictureConfigList();
             if (configList.isEmpty()) {
                 // 未设置评卷区域,则自动取第一张裁切图的固定位置
-                originTags.add(new OriginTag(0, group.getNumber(), format.format(score), 1, 10, 10));
+                originTags.add(new OriginTag(0, null, group.getNumber(), format.format(score), 1, 10, 10));
             } else {
                 // 取第一个显示区域相对裁切图的位置
                 MarkConfigItem config = configList.get(0);
-                OriginTag tag = new OriginTag(0, group.getNumber(), format.format(score), config.getI(), config.getX(),
-                        config.getY());
+                OriginTag tag = new OriginTag(0, null, group.getNumber(), format.format(score), config.getI(),
+                        config.getX(), config.getY());
                 // 兼容比例模式,且元素在裁切坐标内
                 if (config.getX() <= 1 && config.getY() <= 1 && config.getI() <= sliceConfig.size()
                         && sliceConfig.get(config.getI() - 1).getW() > 0
                         && sliceConfig.get(config.getI() - 1).getH() > 0) {
-                    tag = new OriginTag(0, group.getNumber(), format.format(score), config.getI(), config.getX()
+                    tag = new OriginTag(0, null, group.getNumber(), format.format(score), config.getI(), config.getX()
                             * sliceConfig.get(config.getI() - 1).getW(), config.getY()
                             * sliceConfig.get(config.getI() - 1).getH());
                 }
@@ -1065,24 +1073,38 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         // }
         List<MarkLibrary> libraries = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
         for (MarkLibrary library : libraries) {
-            if (checkScore(library, score.doubleValue(), details)) {
-                // 添加轨迹分
-                List<MarkTrack> tracks = trackService.findByLibraryId(library.getId());
-                for (MarkTrack markTrack : tracks) {
-                    // 未作答时只显示汉字"空"
-                    originTags.add(new OriginTag(library.getMarkerId(), library.getGroupNumber(), markTrack
-                            .isUnanswered() ? "空" : format.format(markTrack.getScore()), markTrack.getOffsetIndex(),
-                            markTrack.getOffsetX(), markTrack.getOffsetY()));
-                }
-                // 添加特殊标记
-                List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(library.getId());
-                for (MarkSpecialTag markSpecialTag : specialTags) {
-                    originTags.add(new OriginTag(library.getMarkerId(), library.getGroupNumber(), markSpecialTag
-                            .getTagName(), markSpecialTag.getOffsetIndex(), markSpecialTag.getOffsetX(), markSpecialTag
-                            .getOffsetY()));
-                }
+            // if (checkScore(library, score.doubleValue(), details)) {
+            // 添加轨迹分
+            List<MarkTrack> tracks = trackService.findByLibraryId(library.getId());
+            for (MarkTrack markTrack : tracks) {
+                // 未作答时只显示汉字"空"
+                originTags.add(new OriginTag(library.getMarkerId(), Role.MARKER, library.getGroupNumber(), markTrack
+                        .isUnanswered() ? "空" : format.format(markTrack.getScore()), markTrack.getOffsetIndex(),
+                        markTrack.getOffsetX(), markTrack.getOffsetY()));
             }
-
+            // 添加特殊标记
+            List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(library.getId());
+            for (MarkSpecialTag markSpecialTag : specialTags) {
+                originTags.add(new OriginTag(library.getMarkerId(), Role.MARKER, library.getGroupNumber(),
+                        markSpecialTag.getTagName(), markSpecialTag.getOffsetIndex(), markSpecialTag.getOffsetX(),
+                        markSpecialTag.getOffsetY()));
+            }
+            // }
+        }
+        List<HeaderTag> headerTags = headerTagDao.findByStudentIdAndGroupNumberOrderByIdAsc(student.getId(),
+                group.getNumber());
+        for (HeaderTag headerTag : headerTags) {
+            originTags
+                    .add(new OriginTag(headerTag.getUserId(), Role.SUBJECT_HEADER, headerTag.getGroupNumber(),
+                            headerTag.getTagName(), headerTag.getOffsetIndex(), headerTag.getOffsetX(), headerTag
+                                    .getOffsetY()));
+        }
+        List<HeaderTrack> headerTracks = headerTrackDao.findByPkStudentIdAndGroupNumber(student.getId(),
+                group.getNumber());
+        for (HeaderTrack headerTrack : headerTracks) {
+            originTags.add(new OriginTag(headerTrack.getUserId(), Role.SUBJECT_HEADER, headerTrack.getGroupNumber(),
+                    headerTrack.isUnanswered() ? "空" : format.format(headerTrack.getScore()), headerTrack
+                            .getOffsetIndex(), headerTrack.getOffsetX(), headerTrack.getOffsetY()));
         }
         return originTags;
     }
@@ -1234,6 +1256,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 pt.setLeft(tag.getOffsetX());
                 pt.setTop(tag.getOffsetY());
                 pt.setUserId(tag.getUserId());
+                pt.setUserRole(tag.getUserRole());
                 pt.setGroupNumber(tag.getGroupNumber());
                 List<PictureTag> list = map.get(tag.getOffsetIndex());
                 if (list == null) {

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/HeaderTagDao.java

@@ -26,4 +26,6 @@ public interface HeaderTagDao extends PagingAndSortingRepository<HeaderTag, Inte
     @Query("delete from HeaderTag s where s.groupNumber=?3 and s.studentId in (select m.id from ExamStudent m where m.examId=?1 and m.subjectCode=?2) ")
     public void deleteByExamAndSubjectAndGroup(Integer examId, String subjectCode, Integer groupNumber);
 
+    public List<HeaderTag> findByStudentId(Integer studentId);
+
 }

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkStepDTO.java

@@ -36,6 +36,8 @@ public class MarkStepDTO implements Serializable {
 
     private List<TrackDTO> trackList = new ArrayList<TrackDTO>();
 
+    private List<TrackDTO> headerTrack = new ArrayList<TrackDTO>();
+
     public int getMainNumber() {
         return mainNumber;
     }
@@ -152,4 +154,16 @@ public class MarkStepDTO implements Serializable {
         this.rejected = rejected;
     }
 
+    public List<TrackDTO> getHeaderTrack() {
+        return headerTrack;
+    }
+
+    public void setHeaderTrack(List<TrackDTO> headerTrack) {
+        this.headerTrack = headerTrack;
+    }
+
+    public void addHeaderTrack(TrackDTO trackDTO) {
+        this.headerTrack.add(trackDTO);
+    }
+
 }

+ 19 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkerSpecialTagDTO.java

@@ -6,9 +6,18 @@ public class MarkerSpecialTagDTO extends SpecialTagDTO {
 
     private int markerId;
 
-    public MarkerSpecialTagDTO(int markerId, MarkSpecialTag specialTag) {
+    private int groupNumber;
+
+    public MarkerSpecialTagDTO(int markerId, int groupNumber, MarkSpecialTag specialTag) {
         super(specialTag);
         this.markerId = markerId;
+        this.groupNumber = groupNumber;
+    }
+
+    public MarkerSpecialTagDTO(int markerId, int groupNumber, HeaderTag headerTag) {
+        super(headerTag);
+        this.markerId = markerId;
+        this.groupNumber = groupNumber;
     }
 
     public int getMarkerId() {
@@ -18,4 +27,13 @@ public class MarkerSpecialTagDTO extends SpecialTagDTO {
     public void setMarkerId(int markerId) {
         this.markerId = markerId;
     }
+
+    public int getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(int groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
 }

+ 13 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/Task.java

@@ -70,6 +70,11 @@ public class Task implements Serializable {
      */
     private SpecialTagDTO[] specialTagList;
 
+    /**
+     * 组长特殊标记列表
+     */
+    private SpecialTagDTO[] headerTagList;
+
     /**
      * 题卡原图地址
      */
@@ -322,4 +327,12 @@ public class Task implements Serializable {
         this.rejectScoreList = rejectScoreList;
     }
 
+    public SpecialTagDTO[] getHeaderTagList() {
+        return headerTagList;
+    }
+
+    public void setHeaderTagList(SpecialTagDTO[] headerTagList) {
+        this.headerTagList = headerTagList;
+    }
+
 }

+ 24 - 12
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

@@ -38,6 +38,7 @@ import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
 import cn.com.qmth.stmms.biz.mark.model.MarkStepDTO;
 import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
+import cn.com.qmth.stmms.biz.mark.model.MarkerSpecialTagDTO;
 import cn.com.qmth.stmms.biz.mark.model.MarkerTrackDTO;
 import cn.com.qmth.stmms.biz.mark.model.RejectHistory;
 import cn.com.qmth.stmms.biz.mark.model.SpecialTagDTO;
@@ -438,6 +439,7 @@ public class TaskServiceImpl implements TaskService {
                     student.getSubjectCode(), MarkStatus.TRIAL);
             task.setQuestionList(buildMarkStep(student, trialGroupCount));
             task.setSpecialTagList(getMarkSpecialTagList(student, trialGroupCount));
+            task.setHeaderTagList(getHeaderTagList(student));
         }
         if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
             task.setObjectiveScore(student.getObjectiveScore());
@@ -447,8 +449,17 @@ public class TaskServiceImpl implements TaskService {
         return task;
     }
 
+    private SpecialTagDTO[] getHeaderTagList(ExamStudent student) {
+        List<HeaderTag> list = headerTagDao.findByStudentId(student.getId());
+        SpecialTagDTO[] specialTags = new SpecialTagDTO[list.size()];
+        for (int i = 0; i < list.size(); i++) {
+            specialTags[i] = new MarkerSpecialTagDTO(list.get(i).getUserId(), list.get(i).getGroupNumber(), list.get(i));
+        }
+        return specialTags;
+    }
+
     private SpecialTagDTO[] getMarkSpecialTagList(ExamStudent student, long trialGroupCount) {
-        List<SpecialTagDTO> list = new ArrayList<SpecialTagDTO>();
+        List<SpecialTagDTO> list = new LinkedList<>();
         if (trialGroupCount > 0) {
             List<TrialTag> tags = trialService.findTagByStudentId(student.getId());
             for (TrialTag trialTag : tags) {
@@ -459,21 +470,16 @@ public class TaskServiceImpl implements TaskService {
             for (MarkGroup group : groups) {
                 List<MarkLibrary> libraryList = libraryService
                         .findByStudentAndGroup(student.getId(), group.getNumber());
-                if (libraryList.size() == 1) {
-                    SpecialTagDTO[] tags = getMarkSpecialTagList(libraryList.get(0).getId());
-                    if (tags != null) {
-                        for (SpecialTagDTO specialTagDTO : tags) {
-                            list.add(specialTagDTO);
-                        }
+                // 不管单评还是多评显示所有评卷员特殊标记
+                for (MarkLibrary library : libraryList) {
+                    List<MarkSpecialTag> tagList = markSpecialTagService.findByLibraryId(library.getId());
+                    for (MarkSpecialTag specialTag : tagList) {
+                        list.add(new MarkerSpecialTagDTO(library.getMarkerId(), library.getGroupNumber(), specialTag));
                     }
                 }
             }
         }
-        SpecialTagDTO[] specialTags = new SpecialTagDTO[list.size()];
-        for (int i = 0; i < list.size(); i++) {
-            specialTags[i] = list.get(i);
-        }
-        return specialTags;
+        return list.toArray(new SpecialTagDTO[0]);
     }
 
     private List<MarkStepDTO> buildMarkStep(ExamStudent student, long trialGroupCount) {
@@ -533,6 +539,12 @@ public class TaskServiceImpl implements TaskService {
                         step.addTrack(new MarkerTrackDTO(track));
                     }
                 }
+                // 仲裁轨迹
+                List<HeaderTrack> headerTracks = headerTrackDao.findByPkStudentIdAndPkQuestionNumberOrderByPkNumberAsc(
+                        student.getId(), questionNumber);
+                for (HeaderTrack headerTrack : headerTracks) {
+                    step.addHeaderTrack(new TrackDTO(headerTrack));
+                }
             }
             list.add(step);
         }

+ 15 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/utils/OriginTag.java

@@ -1,11 +1,15 @@
 package cn.com.qmth.stmms.biz.utils;
 
+import cn.com.qmth.stmms.common.enums.Role;
+
 public class OriginTag {
 
     private Integer userId;
 
     private Integer groupNumber;
 
+    private Role userRole;
+
     private String content;
 
     private int offsetIndex;
@@ -18,9 +22,10 @@ public class OriginTag {
 
     }
 
-    public OriginTag(Integer userId, Integer groupNumber, String content, int offsetIndex, double offsetX,
-            double offsetY) {
+    public OriginTag(Integer userId, Role userRole, Integer groupNumber, String content, int offsetIndex,
+            double offsetX, double offsetY) {
         this.userId = userId;
+        this.userRole = userRole;
         this.groupNumber = groupNumber;
         this.content = content;
         this.offsetIndex = offsetIndex;
@@ -76,4 +81,12 @@ public class OriginTag {
         this.groupNumber = groupNumber;
     }
 
+    public Role getUserRole() {
+        return userRole;
+    }
+
+    public void setUserRole(Role userRole) {
+        this.userRole = userRole;
+    }
+
 }

+ 5 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/utils/PictureConfigTransform.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.biz.utils;
 
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.common.enums.Role;
 
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -36,12 +37,12 @@ public class PictureConfigTransform {
                 if (tag.getOffsetIndex() > sliceCount) {
                     // 元素所属裁切图不在裁切坐标范围内,表示裁切图直接使用的原图
                     buildTag(map, tag.getContent(), tag.getOffsetIndex(), tag.getOffsetX(), tag.getOffsetY(),
-                            tag.getUserId(), tag.getGroupNumber());
+                            tag.getUserId(), tag.getUserRole(), tag.getGroupNumber());
                 } else {
                     // 有裁切坐标时,原图坐标=元素相对坐标+裁切坐标
                     PictureConfigItem config = sliceConfigs.get(tag.getOffsetIndex() - 1);
                     buildTag(map, tag.getContent(), config.getI(), config.getX() + tag.getOffsetX(), config.getY()
-                            + tag.getOffsetY(), tag.getUserId(), tag.getGroupNumber());
+                            + tag.getOffsetY(), tag.getUserId(), tag.getUserRole(), tag.getGroupNumber());
                 }
             }
         }
@@ -63,12 +64,13 @@ public class PictureConfigTransform {
      *            - 在原图内的上偏移
      */
     private static void buildTag(Map<Integer, List<PictureTag>> tags, String content, int index, double left,
-            double top, int userId, int groupNumber) {
+            double top, int userId, Role userRole, int groupNumber) {
         PictureTag tag = new PictureTag();
         tag.setContent(content);
         tag.setLeft(left);
         tag.setTop(top);
         tag.setUserId(userId);
+        tag.setUserRole(userRole);
         tag.setGroupNumber(groupNumber);
         List<PictureTag> list = tags.get(index);
         if (list == null) {

+ 12 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/utils/PictureTag.java

@@ -2,10 +2,14 @@ package cn.com.qmth.stmms.biz.utils;
 
 import java.util.List;
 
+import cn.com.qmth.stmms.common.enums.Role;
+
 public class PictureTag {
 
     private int userId;
 
+    private Role userRole;
+
     private int groupNumber;
 
     private String[] content;
@@ -70,4 +74,12 @@ public class PictureTag {
         this.groupNumber = groupNumber;
     }
 
+    public Role getUserRole() {
+        return userRole;
+    }
+
+    public void setUserRole(Role userRole) {
+        this.userRole = userRole;
+    }
+
 }

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -146,7 +146,7 @@ public class MarkGroupController extends BaseExamController {
             group.setPercent(percent);
             group.setDeleting(lockService.isLocked(LockType.GROUP_DELETE, group.getExamId(), group.getSubjectCode(),
                     group.getNumber()));
-            SelectiveGroup selectiveGroup = selectiveGroupService.findOne(examId, subjectCode, qList.get(0)
+            SelectiveGroup selectiveGroup = selectiveGroupService.findOne(examId, group.getSubjectCode(), qList.get(0)
                     .getMainNumber());
             if (selectiveGroup != null) {
                 group.setSelectiveIndex(selectiveGroup.getSelectiveIndex());

+ 5 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examInfo.jsp

@@ -30,5 +30,10 @@
 		</c:forEach>
 		</tbody>
 	</table>
+	<div>
+		<label>验收报告:</label>
+		&nbsp;
+		<a class="btn" href="${ctxStatic}/download/研究生项目验收报告模板.docx">导出</a>
+	</div>
 </body>
 </html>

BIN
stmms-web/src/main/webapp/static/download/研究生项目验收报告模板.docx