ソースを参照

修改权限校验,现在允许超级学生重复提交

4228306 5 年 前
コミット
86d8ecb3f8

+ 8 - 7
src/main/java/com/yaoxiang/diagnosis/controller/ReportController.java

@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Api(tags = "报告管理")
@@ -58,18 +59,18 @@ public class ReportController {
         if (paper == null) {
             return Result.fail("未找到试卷");
         }
-        PaperResult paperResult = paperResultService.findByPidAndUid(pid, uid);
-        if (paperResult == null) {
+        List<PaperResult> paperResults = paperResultService.findByPidAndUid(pid, uid);
+        if (paperResults == null) {
             logger.info("正在生成结果");
-            paperResult = (PaperResult) paperResultService.parseResult(pid, uid).getT();
+            paperResults = (List<PaperResult>) paperResultService.parseResult(pid, uid).getT();
         }
         Map<String, Object> result = new HashMap<>();
         result.put("name", info.getName());
         result.put("grade", paper.getGrade());
         result.put("subject", subjectService.get(paper.getSubjectId()).getName());
-        result.put("diagnosisTime", paperResult.getCreatetime());
-        result.put("code", paperResult.getCode());
-        result.put("paperResultId", paperResult.getId());
+        result.put("diagnosisTime", paperResults.get(0).getCreatetime());
+        result.put("code", paperResults.get(0).getCode());
+        result.put("paperResultId", paperResults.get(0).getId());
         return Result.ok(result);
 
     }
@@ -90,7 +91,7 @@ public class ReportController {
     @GetMapping("useTime")
     @ApiOperation("获取作答时间及平均作答时间")
     public Result useTime(Long pid, Long uid) {
-        PaperResult paperResult = paperResultService.findByPidAndUid(pid, uid);
+        List<PaperResult> paperResult = paperResultService.findByPidAndUid(pid, uid);
         if (paperResult == null) {
             return new Result<>(false, "未找到诊断结果");
         }

+ 2 - 6
src/main/java/com/yaoxiang/diagnosis/controller/UserInfoController.java

@@ -28,12 +28,8 @@ public class UserInfoController {
     @GetMapping("/authority")
     public List<String> getAuthorities() {
         AuthUser user = SecurityUtil.getCurrentUser();
-//        if (user.getAuthorities().contains(ConfigConstants.ROLE_ADMIN)) {
-//            return ConfigConstants.ADMIN_AUTHORITY;
-//        } else if (user.getAuthorities().contains(ConfigConstants.ROLE_USER)) {
-//            return ConfigConstants.USER_AUTHORITY;
-//        }
-        return new ArrayList<>();
+        UserInfo userInfo = user.getUser();
+        return userInfo.getAuthorities();
     }
 
     /**

+ 1 - 1
src/main/java/com/yaoxiang/diagnosis/dao/PaperResultRepo.java

@@ -15,7 +15,7 @@ import java.util.List;
 @Repository
 public interface PaperResultRepo extends JpaRepository<PaperResult, Long> {
 
-    PaperResult findByPidAndUid(Long pid, Long uid);
+    List<PaperResult> findByPidAndUid(Long pid, Long uid);
 
     int deleteByPidAndUid(Long pid, Long uid);
 

+ 9 - 0
src/main/java/com/yaoxiang/diagnosis/entity/Role.java

@@ -14,6 +14,7 @@ public class Role {
     private Long id;
     @Column(unique = true, nullable = false)
     private String name;
+    private String code;
     //预留
     private String type;
 
@@ -34,6 +35,14 @@ public class Role {
         this.id = id;
     }
 
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
     public String getName() {
         return name;
     }

+ 7 - 0
src/main/java/com/yaoxiang/diagnosis/service/CommitService.java

@@ -5,12 +5,14 @@ import com.yaoxiang.diagnosis.dao.PaperCommitRepo;
 import com.yaoxiang.diagnosis.dao.QuestionRepo;
 import com.yaoxiang.diagnosis.dao.ReportRepo;
 import com.yaoxiang.diagnosis.entity.*;
+import com.yaoxiang.diagnosis.model.AuthUser;
 import com.yaoxiang.diagnosis.util.CodeUtil;
 import com.yaoxiang.diagnosis.util.CommonUtil;
 import com.yaoxiang.diagnosis.util.ObjectUtil;
 import com.yaoxiang.diagnosis.model.Answer;
 import com.yaoxiang.diagnosis.model.QuestionDetail;
 import com.yaoxiang.diagnosis.model.Result;
+import com.yaoxiang.diagnosis.util.SecurityUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -170,6 +172,11 @@ public class CommitService {
     }
 
     public boolean hasCommit(Long pid, Long uid) {
+        //增加权限校验
+        AuthUser user = SecurityUtil.getCurrentUser();
+        if (user.getUser().getAuthorities().contains("重复提交")) {
+            return false;
+        }
         return paperCommitRepo.existsByPidAndUid(pid, uid);
     }
 

+ 3 - 5
src/main/java/com/yaoxiang/diagnosis/service/PaperResultService.java

@@ -127,7 +127,7 @@ public class PaperResultService {
         result.setJsonScore(ObjectUtil.object2Json(pData));
         //转换分数为百分制
         double totalScore = paper.getTotalScore();
-        if (totalScore == 0){
+        if (totalScore == 0) {
             logger.error("总分数为0,请检查试卷");
             return Result.fail("提交失败,请重试");
         }
@@ -148,7 +148,7 @@ public class PaperResultService {
         return paperResultRepo.getOne(resultId);
     }
 
-    public PaperResult findByPidAndUid(Long pid, Long uid) {
+    public List<PaperResult> findByPidAndUid(Long pid, Long uid) {
         return paperResultRepo.findByPidAndUid(pid, uid);
     }
 
@@ -685,9 +685,7 @@ public class PaperResultService {
             return paperResultRepo.findByUidOrderByCreatetimeDesc(uid);
         }
         if (uid != null) {
-            return new ArrayList<PaperResult>() {{
-                add(paperResultRepo.findByPidAndUid(pid, uid));
-            }};
+            return paperResultRepo.findByPidAndUid(pid, uid);
         }
         return paperResultRepo.findByPidOrderByCreatetimeDesc(pid);
     }

+ 15 - 21
src/main/java/com/yaoxiang/diagnosis/service/PaperService.java

@@ -5,11 +5,13 @@ import com.yaoxiang.diagnosis.dao.PaperRepo;
 import com.yaoxiang.diagnosis.dao.QuestionRepo;
 import com.yaoxiang.diagnosis.dao.RemarkTemplateRepo;
 import com.yaoxiang.diagnosis.entity.*;
+import com.yaoxiang.diagnosis.model.AuthUser;
 import com.yaoxiang.diagnosis.util.CommonUtil;
 import com.yaoxiang.diagnosis.util.ObjectUtil;
 import com.yaoxiang.diagnosis.config.Constants;
 import com.yaoxiang.diagnosis.model.PaperVo;
 import com.yaoxiang.diagnosis.model.Result;
+import com.yaoxiang.diagnosis.util.SecurityUtil;
 import com.yaoxiang.diagnosis.word.WordService;
 import com.yaoxiang.diagnosis.word.WordUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -66,8 +68,12 @@ public class PaperService {
     private static final Logger logger = LoggerFactory.getLogger(PaperService.class);
 
     public List<Paper> listPapers(Long subjectId, Integer status) {
+        AuthUser user = SecurityUtil.getCurrentUser();
         Sort sort = new Sort(Sort.Direction.DESC, "updatetime");
         List<Paper> papers = paperRepo.findAll(sort);
+        if (Constants.USER_TYPE_STUDENT.equals(user.getUser().getUserType())) {
+            papers = papers.stream().filter(p -> p.getGrade().contains(user.getUser().getGrade())).collect(Collectors.toList());
+        }
         if (subjectId != null) {
             papers = papers.stream().filter(p -> p.getSubjectId() == subjectId.longValue())
                     .collect(Collectors.toList());
@@ -90,6 +96,8 @@ public class PaperService {
     }
 
     public Paper getOnePaper(Long id) {
+        AuthUser user = SecurityUtil.getCurrentUser();
+        boolean student = Constants.USER_TYPE_STUDENT.equals(user.getUser().getUserType());
         Paper paper = paperRepo.getOne(id);
         if (paper == null || paper.getStatus() == Constants.NOTREADY) {
             return null;
@@ -97,19 +105,6 @@ public class PaperService {
         List<Question> questions = questionRepo.findByPidOrderBySectionAscNumberAsc(id);
         List<Section> sections = sectionService.findByPid(id);
         paper.setSections(sections);
-//        questions.sort((q1, q2) -> {
-//            if (q1.getSection() < q2.getSection()) {
-//                return -1;
-//            } else if (q1.getSection() > q2.getSection()) {
-//                return 1;
-//            }
-//            if (q1.getNumber() < q2.getNumber()) {
-//                return -1;
-//            } else if (q1.getNumber() > q2.getNumber()) {
-//                return 1;
-//            }
-//            return 0;
-//        });
         paper.setQuestions(questions);
         List<Long> qids = questions.stream().map(Question::getId).collect(Collectors.toList());
         //一次查出该试卷所有的选项
@@ -117,14 +112,13 @@ public class PaperService {
         //然后根据Id进行分组
         Map<Long, List<QuestionOption>> group = options.stream().collect(Collectors.groupingBy(QuestionOption::getQid));
         for (Question question : questions) {
-//            List<QuestionOption> options = optionRepo.findByQid(question.getId());
-//            for (QuestionOption option : options) {
-            //todo 判断是否考生,如是  将答案设为null
-//               option.setCorrect(null);
-//                option.setUpdatetime(null);
-//                option.setCreatetime(null);
-//            }
-            question.setOptions(group.get(question.getId()));
+            List<QuestionOption> optionList = group.get(question.getId());
+            //学生要去掉答案
+            if (student) {
+                question.setCorrectNum(0);
+                optionList.forEach(o -> o.setCorrect(null));
+            }
+            question.setOptions(optionList);
         }
         return paper;
     }

+ 3 - 3
src/main/java/com/yaoxiang/diagnosis/service/SpecialReportService.java

@@ -74,7 +74,7 @@ public class SpecialReportService {
 
     @Transactional(rollbackOn = Exception.class)
     public SpecialResult generate(PaperCommit commit, Paper paper) {
-        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid());
+        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid()).get(0);
         List<SpecialKnowledge> list = specialKnowledgeService.list(paper.getSubjectId(), paper.getGrade());
         //找出叶子节点
         Map<String, SpecialKnowledge> map = list.stream().filter(s -> s.getCode() != null)
@@ -124,7 +124,7 @@ public class SpecialReportService {
     }
 
     public SpecialResult generate2(PaperCommit commit, Paper paper) {
-        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid());
+        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid()).get(0);
         List<SpecialKnowledge> list = specialKnowledgeService.listByPid(paper.getId());
 
         if (CommonUtil.isEmpty(list)) {
@@ -213,7 +213,7 @@ public class SpecialReportService {
     }
 
     public List<SpecialMindVo> generateMind(PaperCommit commit, Paper paper) {
-        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid());
+        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid()).get(0);
         List<SpecialMind> list = specialMindService.findByPid(paper.getId());
         if (CommonUtil.isEmpty(list)) {
             logger.error("未上传专项诊断思维过程,subjectId={},grade={}", paper.getSubjectId(), paper.getGrade());