Ver Fonte

美术阅卷10月新增需求-纪检功能开发

wangliang há 5 anos atrás
pai
commit
4eee85a152

+ 6 - 6
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLogOperType.java

@@ -35,9 +35,9 @@ public enum MarkLogOperType {
     CALLBACK_LEVEl(5, "档位打回"),
 
     /**
-     * 回评分数
+     * 档位打回回评
      */
-    CALLBACK_SCORE(6, "档位打回回评"),
+    CALLBACK_ONCE_LEVEL(6, "档位打回回评"),
 
     /**
      * 一键定档
@@ -91,8 +91,8 @@ public enum MarkLogOperType {
             return ONCE_SCORE.getId();
         } else if (value.trim().equals(CALLBACK_LEVEl.name)) {
             return CALLBACK_LEVEl.getId();
-        } else if (value.trim().equals(CALLBACK_SCORE.name)) {
-            return CALLBACK_SCORE.getId();
+        } else if (value.trim().equals(CALLBACK_ONCE_LEVEL.name)) {
+            return CALLBACK_ONCE_LEVEL.getId();
         } else if (value.trim().equals(ONE_CLICK_LEVEl.name)) {
             return ONE_CLICK_LEVEl.getId();
         } else {
@@ -117,8 +117,8 @@ public enum MarkLogOperType {
             return ONCE_SCORE.name;
         } else if (id == CALLBACK_LEVEl.getId()) {
             return CALLBACK_LEVEl.name;
-        } else if (id == CALLBACK_SCORE.getId()) {
-            return CALLBACK_SCORE.name;
+        } else if (id == CALLBACK_ONCE_LEVEL.getId()) {
+            return CALLBACK_ONCE_LEVEL.name;
         } else if (id == ONE_CLICK_LEVEl.getId()) {
             return ONE_CLICK_LEVEl.name;
         } else {

+ 10 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkLogRepo.java

@@ -9,5 +9,14 @@ import org.springframework.data.jpa.repository.JpaRepository;
  */
 public interface MarkLogRepo extends JpaRepository<MarkLog, Long> {
 
-    public MarkLog findTopByCreateUserIdAndOperTypeOrderByCreateTimeDesc(Long createUserId, Integer operType);
+    /**
+     * 根据条件查询最近一条日志
+     *
+     * @param createUserId
+     * @param operType
+     * @param subject
+     * @param examNumber
+     * @return
+     */
+    public MarkLog findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(Long createUserId, Integer operType, String subject, String examNumber);
 }

+ 196 - 73
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/MarkLogAop.java

@@ -1,17 +1,19 @@
 package cn.com.qmth.stmms.ms.log;
 
+import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.core.domain.MarkLog;
 import cn.com.qmth.stmms.ms.core.domain.MarkLogOperType;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
+import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.repository.MarkLogRepo;
+import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,8 +23,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @Description: 纪检审查aop
@@ -31,15 +32,27 @@ import java.util.Optional;
  * @Author: wangliang
  * @Date: 2019/10/19
  */
-//@Aspect
-//@Component
+@Aspect
+@Component
 public class MarkLogAop {
 
     private static Logger LOGGER = LoggerFactory.getLogger(MarkLogAop.class);
 
+    public final String TOKEN = "token",
+            MARK_USER = "markUser",//登录用户
+            PARAM_ARGS = "args",//方法参数
+            PARAM_ARG_NAMES = "argNames",//方法参数名
+            ACTION = "action",//动作
+            SAMPLING = "sampling",//标准卷设置
+            LEVELING = "leveling",//定档
+            REJECT = "reject";//档位打回
+
     @Autowired
     private MarkLogRepo markLogRepo;
 
+    @Autowired
+    SqlUtil sqlUtil;
+
 //    @Autowired
 //    private MarkUserRepo markUserRepo;
 //
@@ -49,11 +62,59 @@ public class MarkLogAop {
 //    @Autowired
 //    private LoginConfig loginConfig;
 
+    /**
+     * 标准卷切入点
+     */
+    @Pointcut("execution(* cn.com.qmth.stmms.ms.marking.api.PaperApi.marking(..))")
+    public void paperAspect() {
+    }
+
     /**
      * 分档切入点
      */
     @Pointcut("execution(* cn.com.qmth.stmms.ms.marking.api.MarkTaskApi.marking(..))")
-    public void getMarkAspect() {
+    public void markAspect() {
+    }
+
+    /**
+     * 设为标准卷切入
+     *
+     * @param joinPoint
+     * @param result
+     * @throws Exception
+     */
+    @AfterReturning(value = "paperAspect()", returning = "result")
+    public void afterReturnPaperPoint(JoinPoint joinPoint, Object result) throws Exception {
+        Map<String, Object> map = getAspectCommon(joinPoint);
+        JSONArray jsonArgsArray = (JSONArray) map.get(PARAM_ARGS);
+        MarkUser markUser = (MarkUser) map.get(MARK_USER);
+        Paper paper = JSONObject.parseObject(((JSONObject) jsonArgsArray.get(0)).toJSONString(), Paper.class);
+        JSONObject jsonObjectResult = (JSONObject) jsonArgsArray.get(1);
+        String action = null;
+        Integer operType = null;
+        if (Objects.nonNull(jsonObjectResult) && Objects.nonNull(jsonObjectResult.get(ACTION))) {
+            action = (String) jsonObjectResult.get(ACTION);
+            if (Objects.equals(SAMPLING, action)) {
+                //标准卷设置
+                operType = MarkLogOperType.CRITERION_PAPER_SET.getId();
+            } else if (Objects.equals(LEVELING, action)) {
+                //定档设置
+                operType = MarkLogOperType.ONE_CLICK_LEVEl.getId();
+            } else if (Objects.equals(REJECT, action)) {
+                //档位打回设置
+                operType = MarkLogOperType.CALLBACK_LEVEl.getId();
+            }
+        }
+        //标准卷设置、定档设置、档位打回start
+        MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), operType, markUser.getSubject().toString(), paper.getExamNumber());
+        String operResult = "-";
+        if (Objects.nonNull(markLogPrev)) {
+            operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+        }
+        MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), operType, paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(jsonObjectResult.get("level")), null);
+        LOGGER.info("markLog:{}", JSONObject.toJSONString(markLog));
+        //标准卷设置、定档设置、档位打回end
+        markLogRepo.save(markLog);
     }
 
     /**
@@ -61,84 +122,146 @@ public class MarkLogAop {
      *
      * @param joinPoint
      */
-    @AfterReturning(value = "getMarkAspect()", returning = "result")
+    @AfterReturning(value = "markAspect()", returning = "result")
     public void afterReturnMarkPoint(JoinPoint joinPoint, Object result) throws Exception {
+        Map<String, Object> map = getAspectCommon(joinPoint);
+        JSONArray jsonArgsArray = (JSONArray) map.get(PARAM_ARGS);
+        MarkUser markUser = (MarkUser) map.get(MARK_USER);
+        JSONObject aopResult = JSONObject.parseObject(JSONObject.toJSONString(result));
+        boolean isRejected = false, oldRejected = false;
+        if (Objects.nonNull(aopResult)) {
+            MarkTaskDTO resultBody = JSONObject.parseObject(((JSONObject) aopResult.get("body")).toJSONString(), MarkTaskDTO.class);
+            isRejected = resultBody.isRejected();//新的是否撤档
+            oldRejected = resultBody.isOldRejected();//旧的是否撤档
+        }
+        JSONObject jsonObject = (JSONObject) jsonArgsArray.get(0);
+        Paper paper = JSONObject.parseObject(((JSONObject) jsonObject.get("paper")).toJSONString(), Paper.class);
+        JSONObject jsonObjectResult = (JSONObject) jsonArgsArray.get(1);
+        LOGGER.info("jsonObject:{},paper:{},jsonObjectResult:{}", jsonObject, paper, jsonObjectResult);
+        Integer operType = MarkLogOperType.LEVEL.getId();//分档,第一次为分档,之后为回评档位,档位打回后为档位打回回评
+        //分档、打分、回评档位、回评分数、档位打回回评start
+        MarkStage markStage = MarkStage.valueOf(String.valueOf(jsonObjectResult.get("stage")));
+        if (markStage.ordinal() == 1 && paper.isMarkByLeader()) {//分档,如果已经有科组长定档,则不允许评卷员再分档
+            return;
+        } else if (markStage.ordinal() == 1 && oldRejected && !isRejected) {//档位打回回评
+            operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();
+        } else if (markStage.ordinal() == 2) {//打分
+            operType = MarkLogOperType.SCORE.getId();
+        }
+        //先查是否有档位或分数打回
+        String operResult = "-";
+        if (markStage.ordinal() == 1) {//分档
+            //先查是否有档位打回回评的数据
+            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.CALLBACK_ONCE_LEVEL.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+            if (Objects.isNull(markLogPrev)) {//如果为null,则再查分档和回评档位
+                if (oldRejected && !isRejected) {//档位打回
+                    operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();
+                } else {
+//                    operType = MarkLogOperType.LEVEL.getId();//分档
+                    operType = selectOperType(markUser.getId(), MarkLogOperType.LEVEL.getId(), MarkLogOperType.ONCE_LEVEl.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+                    markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), operType, markUser.getSubject().toString(), paper.getExamNumber());
+                    if (Objects.nonNull(markLogPrev)) {
+//                    if (oldRejected && !isRejected) {//档位打回
+//                        operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+//                    } else {
+//                        markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.LEVEL.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+//                        operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+//                    }
+                        operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+                    } else {
+//                    if (oldRejected && !isRejected) {//档位打回
+//                        operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();
+//                    } else {
+//                        operType = MarkLogOperType.LEVEL.getId();//分档
+//                    }
+                        if (operType != MarkLogOperType.LEVEL.getId()) {
+                            markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.LEVEL.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+                            operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+                        }
+                    }
+                }
+            } else {
+                operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();//档位打回
+                operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+            }
+        } else if (markStage.ordinal() == 2) {//打分
+            operType = selectOperType(markUser.getId(), MarkLogOperType.SCORE.getId(), MarkLogOperType.ONCE_SCORE.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), operType, markUser.getSubject().toString(), paper.getExamNumber());
+            if (Objects.nonNull(markLogPrev)) {
+                operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+            } else {
+                if (operType != MarkLogOperType.SCORE.getId()) {
+                    markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.SCORE.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+                    operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+                }
+            }
+        }
+        MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), operType, paper.getWorkId(), paper.getId(), markStage, operResult, String.valueOf(jsonObjectResult.get("result")), null);
+        LOGGER.info("markLog:{}", JSONObject.toJSONString(markLog));
+        //分档、打分、回评档位、回评分数、档位打回、档位打回回评end
+        markLogRepo.save(markLog);
+    }
+
+    /**
+     * 查询处于哪个档位公用
+     *
+     * @param createUserId
+     * @param operTypeStart
+     * @param operTypeEnd
+     * @param subject
+     * @param examNumber
+     * @return
+     */
+    public Integer selectOperType(Long createUserId, Integer operTypeStart, Integer operTypeEnd, String subject, String examNumber) {
+        String sql = "select t.oper_type as operType, count(*) as result from mark_log as t where t.create_user_id = ? and (t.oper_type = ? or t.oper_type = ?) and t.subject = ? and t.exam_number = ? group by t.oper_type ";
+        List list = sqlUtil.execSqlForMap(sql, createUserId, operTypeStart, operTypeEnd, subject, examNumber);
+        Integer operType = operTypeStart;
+        if (Objects.nonNull(list) && list.size() > 0) {
+            for (int i = 0; i < list.size(); i++) {
+                Map m = (Map) list.get(i);
+                Integer type = Integer.parseInt(String.valueOf(m.get("operType")));
+                if (type.intValue() == operTypeStart.intValue()) {
+                    operType = operTypeEnd;
+                    break;
+                } else {
+                    operType = type;
+                    break;
+                }
+            }
+        }
+        return operType;
+    }
+
+    /**
+     * 切面公用方法
+     *
+     * @param joinPoint
+     * @return
+     * @throws Exception
+     */
+    public Map getAspectCommon(JoinPoint joinPoint) throws Exception {
         String className = joinPoint.getSignature().getDeclaringTypeName();
         String methodName = joinPoint.getSignature().getName();
-        LOGGER.info("mark aspect afterReturnMarkPoint path:{}", className + "." + methodName);
+        LOGGER.info("{} aspect path:{}", this.getClass().getMethods()[0], className + "." + methodName);
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
         HttpServletRequest request = attributes.getRequest();
         HttpSession session = request.getSession();
-        String token = (String) session.getAttribute("token");
+        String token = (String) session.getAttribute(TOKEN);
         if (Objects.isNull(token)) {
             throw new Exception("请先登录");
         }
-        MarkUser markUser = (MarkUser) session.getAttribute("markUser");
+        MarkUser markUser = (MarkUser) session.getAttribute(MARK_USER);
         LOGGER.info("markUser:{}", JSONObject.toJSONString(markUser));
         Object[] args = joinPoint.getArgs(); // 参数值
-        String[] argNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames();//参数名
+//        String[] argNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames();//参数名
         JSONArray jsonArgsArray = JSONObject.parseArray(JSONObject.toJSONString(args));
-        JSONArray jsonArgNamesArray = JSONObject.parseArray(JSONObject.toJSONString(argNames));
-        LOGGER.info("jsonArgsArray:{},jsonArgNamesArray:{}", jsonArgsArray, jsonArgNamesArray);
-        JSONObject jsonObject = (JSONObject) jsonArgsArray.get(0);
-        JSONObject jsonObjectPaper = (JSONObject) jsonObject.get("paper");
-        JSONObject jsonObjectResult = (JSONObject) jsonArgsArray.get(1);
-        LOGGER.info("jsonObject:{},jsonObjectPaper:{},jsonObjectResult:{}", jsonObject, jsonObjectPaper, jsonObjectResult);
-        MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.LEVEL.getId());
-        String operResult = "-";
-        if (Objects.nonNull(markLogPrev)) {
-            operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
-        }
-        MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), String.valueOf(jsonObjectPaper.get("examNumber")), String.valueOf(jsonObjectPaper.get("studentName")), MarkLogOperType.LEVEL.getId(), Long.parseLong(String.valueOf(jsonObject.get("workId"))), Long.parseLong(String.valueOf(jsonObjectPaper.get("id"))), MarkStage.valueOf(String.valueOf(jsonObjectResult.get("stage"))), operResult, String.valueOf(jsonObjectResult.get("result")), null);
-        LOGGER.info("markLog:{}", JSONObject.toJSONString(markLog));
-        markLogRepo.save(markLog);
+//        JSONArray jsonArgNamesArray = JSONObject.parseArray(JSONObject.toJSONString(argNames));
+        LOGGER.info("jsonArgsArray:{},jsonArgNamesArray:{}", jsonArgsArray);
+//        LOGGER.info("jsonArgNamesArray:{}", jsonArgNamesArray);
+        Map<String, Object> map = new HashMap<>();
+        map.put(PARAM_ARGS, jsonArgsArray);
+//        map.put(PARAM_ARG_NAMES, jsonArgNamesArray);
+        map.put(MARK_USER, markUser);
+        return map;
     }
-
-
-    /**
-
-     @Pointcut("execution(* cn.com.qmth.stmms.ms.marking.api.PaperApi.marking(..))")
-     public void getPaper() {
-     }
-
-     @AfterReturning(pointcut = "getPaper()")
-     @SuppressWarnings("unchecked") public void afterLevelMarkPaperPoint(JoinPoint joinPoint) {
-     Paper paper = (Paper) joinPoint.getArgs()[0];
-     HashMap<String,String> body =  (HashMap<String, String>) joinPoint.getArgs()[1];
-     String level = body.get("level");
-     HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
-     .getRequestAttributes()).getRequest();
-     HttpSession session = request.getSession();
-     String token = (String) session.getAttribute("token");
-     if (!StringUtils.isEmpty(token)) {
-     String loginName = token.substring(14);
-     AbstractUser user = null;
-     if(loginConfig.getLoginName().equals(loginName)){
-     user = new Admin(loginConfig.getLoginName(),loginConfig.getPassword());
-     user.setName("系统管理员");
-     }
-     else{
-     user = markUserRepo.findByLoginName(loginName);
-     }
-     MarkLog markLog = new MarkLog(paper.getWorkId(),
-     MarkStage.LEVEL,
-     user.getLoginName(),
-     user.getName(),
-     paper.getExamNumber(),
-     paper.getSecretNumber(),
-     level);
-     markLogRepo.save(markLog);
-     }else{
-     MarkLog markLog = new MarkLog(paper.getWorkId(),
-     MarkStage.LEVEL,
-     null,
-     "科组长",
-     paper.getExamNumber(),
-     paper.getSecretNumber(),
-     level);
-     markLogRepo.save(markLog);
-     }
-     }
-     **/
-
 }

+ 46 - 44
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -1,9 +1,10 @@
 package cn.com.qmth.stmms.ms.marking.api;
 
-import java.util.*;
-import java.util.stream.Stream;
-
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
+import cn.com.qmth.stmms.ms.core.domain.MarkStage;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
+import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.marking.assembler.MarkTaskAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import cn.com.qmth.stmms.ms.marking.service.MarkingService;
@@ -13,14 +14,13 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-
-import cn.com.qmth.stmms.ms.core.domain.MarkStage;
-import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
-import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
-import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import org.springframework.web.bind.annotation.*;
 
 import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * 评卷任务数据api
@@ -32,10 +32,10 @@ public class MarkTaskApi {
 
     @Autowired
     private MarkTaskRepo markTaskRepo;
-    
+
     @Autowired
     private MarkingService markingService;
-    
+
     @Autowired
     private LevelRepo levelRepo;
 
@@ -44,10 +44,11 @@ public class MarkTaskApi {
 
     /**
      * 评卷员的评卷任务
-     * @param markerId 评卷员用户id
-     * @param stage 评卷阶段
-     * @param level 档位
-     * @param sn 密号
+     *
+     * @param markerId   评卷员用户id
+     * @param stage      评卷阶段
+     * @param level      档位
+     * @param sn         密号
      * @param questionId 试题id
      * @return
      */
@@ -58,74 +59,75 @@ public class MarkTaskApi {
                             @RequestParam(required = false) String level,
                             @RequestParam(required = false) String sn,
                             @RequestParam Long questionId,
-                            Pageable pageable){
+                            Pageable pageable) {
         List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
 
         Specification<MarkTask> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
-            predicates.add(builder.equal(root.get("questionId"),questionId));
-            predicates.add(builder.equal(root.get("markerId"),markerId));
-            predicates.add(builder.equal(root.get("stage"),stage));
-            if(level == null){
+            predicates.add(builder.equal(root.get("questionId"), questionId));
+            predicates.add(builder.equal(root.get("markerId"), markerId));
+            predicates.add(builder.equal(root.get("stage"), stage));
+            if (level == null) {
                 predicates.add(builder.isNull(root.get("result")));
-            }
-            else if(stage == MarkStage.LEVEL){
-                predicates.add(builder.equal(root.get("result"),level));
-            }
-            else if(stage == MarkStage.SCORE){
+            } else if (stage == MarkStage.LEVEL) {
+                predicates.add(builder.equal(root.get("result"), level));
+            } else if (stage == MarkStage.SCORE) {
                 predicates.add(builder.isNotNull(root.get("result")));
             }
-            if(isSample != null){
-                predicates.add(builder.equal(root.get("paper").get("isSample"),isSample));
+            if (isSample != null) {
+                predicates.add(builder.equal(root.get("paper").get("isSample"), isSample));
             }
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
 
-        Page<MarkTask> markTasks = markTaskRepo.findAll(specification,pageable);
+        Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable);
         markTasks.getContent().forEach(m -> {
             markTaskDTOs.add(markTaskAssembler.toDTO(m));
         });
-        if(stage == MarkStage.SCORE && level == null){
-            Collections.sort(markTaskDTOs, (MarkTaskDTO a,MarkTaskDTO b) -> a.getLevel().compareTo(b.getLevel()));
+        if (stage == MarkStage.SCORE && level == null) {
+            Collections.sort(markTaskDTOs, (MarkTaskDTO a, MarkTaskDTO b) -> a.getLevel().compareTo(b.getLevel()));
         }
-        return new PageableDTO(markTaskDTOs,markTasks.getTotalElements(),markTasks.getTotalPages(),pageable.getPageNumber());
+        return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
     }
 
     /**
      * 提交评卷任务
+     *
      * @param markTask 评卷你任务id
-     * @param body 评卷内容
+     * @param body     评卷内容
      * @return
      */
-    @RequestMapping(value = "{markTask}",method = RequestMethod.PATCH)
-    public ResponseEntity marking(@PathVariable MarkTask markTask, @RequestBody HashMap<String,String> body){
+    @RequestMapping(value = "{markTask}", method = RequestMethod.PATCH)
+    public ResponseEntity marking(@PathVariable MarkTask markTask, @RequestBody HashMap<String, String> body) {
         MarkStage stage = MarkStage.valueOf(body.get("stage"));
         String result = body.get("result");
-        if(stage == null || result == null){
+        boolean oldRejected = markTask.isRejected();
+        if (stage == null || result == null) {
             return new ResponseEntity(HttpStatus.BAD_REQUEST);
         }
-        switch (stage){
+        switch (stage) {
             case LEVEL:
-                markingService.levelMark(markTask,result);
+                markingService.levelMark(markTask, result);
                 break;
             case SCORE:
                 Integer score = Integer.parseInt(result);
-                markingService.scoring(markTask,score);
+                markingService.scoring(markTask, score);
                 break;
         }
-        return new ResponseEntity(markTaskAssembler.toDTO(markTask),HttpStatus.OK);
+        return new ResponseEntity(markTaskAssembler.toDTO(markTask, oldRejected), HttpStatus.OK);
     }
-    
+
     /**
      * 跳过评卷任务
+     *
      * @param markTask 评卷你任务id
-     * @param body 评卷内容
+     * @param body     评卷内容
      * @return
      */
-    @RequestMapping(value = "{markTaskId}/skip",method = RequestMethod.POST)
-    public ResponseEntity skip(@PathVariable Long markTaskId){
-    	MarkTask markTask = markingService.skip(markTaskId);
-        return new ResponseEntity(markTaskAssembler.toDTO(markTask),HttpStatus.OK);
+    @RequestMapping(value = "{markTaskId}/skip", method = RequestMethod.POST)
+    public ResponseEntity skip(@PathVariable Long markTaskId) {
+        MarkTask markTask = markingService.skip(markTaskId);
+        return new ResponseEntity(markTaskAssembler.toDTO(markTask), HttpStatus.OK);
     }
 
 }

+ 38 - 11
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskAssembler.java

@@ -1,13 +1,12 @@
 package cn.com.qmth.stmms.ms.marking.assembler;
 
 import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
-import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
+import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  * Created by zhengmin on 2016/10/12.
@@ -18,9 +17,9 @@ public class MarkTaskAssembler {
     @Autowired
     private SystemConfig systemConfig;
 
-    public MarkTaskDTO toDTO(MarkTask markTask){
+    public MarkTaskDTO toDTO(MarkTask markTask) {
         MarkTaskDTO markTaskDTO = null;
-        if(markTask != null){
+        if (markTask != null) {
             markTaskDTO = new MarkTaskDTO();
             markTaskDTO.setId(markTask.getId());
             markTaskDTO.setRejected(markTask.isRejected());
@@ -28,17 +27,45 @@ public class MarkTaskAssembler {
             markTaskDTO.setUpdatedOn(markTask.getUpdatedOn());
             markTaskDTO.setResult(markTask.getResult());
             Paper paper = markTask.getPaper();
-            if(markTask.getStage() == MarkStage.LEVEL){
+            if (markTask.getStage() == MarkStage.LEVEL) {
                 markTaskDTO.setLevel(markTask.getResult());
                 markTaskDTO.setOriginLevel(markTask.getOriginLevel());
+            } else {
+                markTaskDTO.setLevel(paper.getLevel());
             }
-            else {
+            markTaskDTO.setSn(markTask.getSecretNumber());
+            markTaskDTO.setRedoLevel(paper.getRedoLevel());
+            String imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+            String thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+            markTaskDTO.setThumbSrc(thumbSrc);
+            markTaskDTO.setImgSrc(imgSrc);
+            markTaskDTO.setSample(paper.isSample());
+            markTaskDTO.setMarkByLeader(paper.isMarkByLeader());
+        }
+        return markTaskDTO;
+    }
+
+    public MarkTaskDTO toDTO(MarkTask markTask, boolean oldRejected) {
+        MarkTaskDTO markTaskDTO = null;
+        if (markTask != null) {
+            markTaskDTO = new MarkTaskDTO();
+            markTaskDTO.setId(markTask.getId());
+            markTaskDTO.setRejected(markTask.isRejected());
+            markTaskDTO.setOldRejected(oldRejected);
+            markTaskDTO.setMarker(markTask.getMarkerName());
+            markTaskDTO.setUpdatedOn(markTask.getUpdatedOn());
+            markTaskDTO.setResult(markTask.getResult());
+            Paper paper = markTask.getPaper();
+            if (markTask.getStage() == MarkStage.LEVEL) {
+                markTaskDTO.setLevel(markTask.getResult());
+                markTaskDTO.setOriginLevel(markTask.getOriginLevel());
+            } else {
                 markTaskDTO.setLevel(paper.getLevel());
             }
             markTaskDTO.setSn(markTask.getSecretNumber());
             markTaskDTO.setRedoLevel(paper.getRedoLevel());
-            String imgSrc = systemConfig.getImageUrl(markTask.getWorkId(),paper.getSubject().toString(),paper.getAreaCode(),paper.getExamNumber());
-            String thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(),paper.getSubject().toString(),paper.getAreaCode(),paper.getExamNumber());
+            String imgSrc = systemConfig.getImageUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
+            String thumbSrc = systemConfig.getThumbUrl(markTask.getWorkId(), paper.getSubject().toString(), paper.getAreaCode(), paper.getExamNumber());
             markTaskDTO.setThumbSrc(thumbSrc);
             markTaskDTO.setImgSrc(imgSrc);
             markTaskDTO.setSample(paper.isSample());
@@ -46,4 +73,4 @@ public class MarkTaskAssembler {
         }
         return markTaskDTO;
     }
-}
+}

+ 13 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkTaskDTO.java

@@ -24,6 +24,19 @@ public class MarkTaskDTO implements Serializable{
     private String thumbSrc;
     private boolean isSample;
     private boolean markByLeader;
+    private boolean oldRejected;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public boolean isOldRejected() {
+        return oldRejected;
+    }
+
+    public void setOldRejected(boolean oldRejected) {
+        this.oldRejected = oldRejected;
+    }
 
     public Long getId() {
         return id;