xiatian 4 年 前
コミット
755e70a4c8
14 ファイル変更169 行追加61 行削除
  1. 3 1
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/CoursePropertyController.java
  2. 6 1
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/ImportPaperController.java
  3. 27 11
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/PaperController.java
  4. 6 1
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/PaperStorageController.java
  5. 3 1
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/PaperStructController.java
  6. 6 1
      examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/QuesController.java
  7. 2 1
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/CoursePropertyService.java
  8. 11 3
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ImportPaperService.java
  9. 5 6
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/PaperService.java
  10. 19 5
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/PaperStructService.java
  11. 3 2
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/QuesService.java
  12. 17 2
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/CoursePropertyServiceImpl.java
  13. 43 21
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java
  14. 18 5
      examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuesServiceImpl.java

+ 3 - 1
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/CoursePropertyController.java

@@ -153,15 +153,17 @@ public class CoursePropertyController extends ControllerSupport {
         return new ResponseEntity<>(courseProperties, HttpStatus.OK);
     }
 
+    @DataRule(type = DataRuleType.COURSE)
     @ApiOperation(value = "根据courseCode查询所有开启的课程属性")
     @GetMapping(value = "/courseProperty/enable/{courseCode}")
     public ResponseEntity<Object> findAllEnable(@PathVariable String courseCode) {
         User user = getAccessUser();
+        UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         if (user == null) {
             throw new StatusException(Constants.SYS_CODE_500, "请先登录!");
         }
 
-        List<CourseProperty> courseProperties = coursePropertyService.findByEnable(courseCode, true);
+        List<CourseProperty> courseProperties = coursePropertyService.findByEnable(courseCode, true,user,ud);
         return new ResponseEntity<>(courseProperties, HttpStatus.OK);
     }
 

+ 6 - 1
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/ImportPaperController.java

@@ -21,7 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
+import cn.com.qmth.examcloud.api.commons.enums.DataRuleType;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.exception.PaperException;
@@ -35,6 +37,7 @@ import cn.com.qmth.examcloud.core.questions.service.impl.CourseService;
 import cn.com.qmth.examcloud.core.questions.service.temp.CqdxService;
 import cn.com.qmth.examcloud.reports.commons.bean.AdminOperateReport;
 import cn.com.qmth.examcloud.reports.commons.util.ReportsUtil;
+import cn.com.qmth.examcloud.web.security.DataRule;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import io.swagger.annotations.ApiOperation;
 
@@ -70,16 +73,18 @@ public class ImportPaperController extends ControllerSupport {
 	 * @param file
 	 * @return
 	 */
+    @DataRule(type = DataRuleType.COURSE)
 	@ApiOperation(value = "导入试卷", notes = "导入试卷")
 	@PostMapping(value = "/importPaper")
 	public ResponseEntity<Object> importPaper(@ModelAttribute Paper paper,
 			@RequestParam("file") CommonsMultipartFile file) {
 		User user = getAccessUser();
+		UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
 		LOG.info("导入开始");
 		File tempFile = null;
 		try {
 			tempFile = importPaperService.getUploadFile(file);
-			Paper newPaper = importPaperService.importPaper(paper, user, tempFile);
+			Paper newPaper = importPaperService.importPaper(paper, user, tempFile,ud);
 			StringBuilder sb=new StringBuilder();
 			sb.append("课程:"+paper.getCourse().getName()+"("+paper.getCourse().getCode()+")");
 			sb.append(" 试卷名称:"+paper.getName());

+ 27 - 11
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/PaperController.java

@@ -176,7 +176,7 @@ public class PaperController extends ControllerSupport {
 
         paperSearchInfo.setOrgId(user.getRootOrgId().toString());
 
-        return new ResponseEntity<>(paperService.getImportPapers(paperSearchInfo, curPage, pageSize, userDataRule, false), HttpStatus.OK);
+        return new ResponseEntity<>(paperService.getImportPapers(paperSearchInfo, curPage, pageSize, userDataRule), HttpStatus.OK);
     }
 
     @ResponseBody
@@ -215,14 +215,16 @@ public class PaperController extends ControllerSupport {
      * @param pageSize
      * @return
      */
+    @DataRule(type = DataRuleType.COURSE)
     @ResponseBody
     @ApiOperation(value = "查询所有已组试卷", notes = "查询所有已组试卷")
     @GetMapping(value = "/genPaper/{curPage}/{pageSize}")
     public ResponseEntity<Object> getGenPapers(@ModelAttribute PaperSearchInfo paperSearchInfo,
                                                @PathVariable int curPage, @PathVariable int pageSize) {
         User user = getAccessUser();
+        UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         paperSearchInfo.setOrgId(user.getRootOrgId().toString());
-        return new ResponseEntity<>(paperService.getGenPapers(paperSearchInfo, curPage, pageSize), HttpStatus.OK);
+        return new ResponseEntity<>(paperService.getGenPapers(paperSearchInfo, curPage, pageSize,ud), HttpStatus.OK);
     }
 
     /**
@@ -232,24 +234,26 @@ public class PaperController extends ControllerSupport {
      * @param pageSize
      * @return
      */
+    @DataRule(type = DataRuleType.COURSE)
     @ResponseBody
     @ApiOperation(value = "查询所有导入试卷(not in paperIds)", notes = "查询所有导入试卷(not in paperIds)")
     @GetMapping(value = "/genPaper/huoge/{curPage}/{pageSize}")
     public ResponseEntity<Object> getGenPapersNotInIds(@ModelAttribute PaperSearchInfo paperSearchInfo,
                                                        @RequestParam String ids, @PathVariable int curPage, @PathVariable int pageSize) {
     	User user = getAccessUser();
+    	UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         paperSearchInfo.setOrgId(user.getRootOrgId().toString());
         Page<Paper> ret=null;
         if (StringUtils.isNotBlank(ids)) {
         	String[] idArr=ids.split(",");
-            ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage, pageSize, PaperType.GENERATE);
+            ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage, pageSize, PaperType.GENERATE,ud);
             if (ret.getContent().size() == 0 && ret.getTotalElements() > 0 && curPage > 1) {
-                ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage - 1, pageSize, PaperType.GENERATE);
+                ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage - 1, pageSize, PaperType.GENERATE,ud);
             }
         } else {
-            ret = paperService.getGenPapers(paperSearchInfo, curPage, pageSize);
+            ret = paperService.getGenPapers(paperSearchInfo, curPage, pageSize,ud);
             if (ret.getContent().size() == 0 && ret.getTotalElements() > 0 && curPage > 1) {
-                ret = paperService.getGenPapers(paperSearchInfo, curPage - 1, pageSize);
+                ret = paperService.getGenPapers(paperSearchInfo, curPage - 1, pageSize,ud);
             }
         }
         if(ret!=null&&CollectionUtils.isNotEmpty(ret.getContent())) {
@@ -537,6 +541,7 @@ public class PaperController extends ControllerSupport {
      * @param
      * @return
      */
+    @DataRule(type = DataRuleType.COURSE)
     @ResponseBody
     @ApiOperation(value = "查询用于选题的试题列表", notes = "查询用于选题的试题列表")
     @GetMapping(value = "/paper/listQuestion/{paperId}/{curPage}/{pageSize}")
@@ -546,6 +551,7 @@ public class PaperController extends ControllerSupport {
                                                         @RequestParam(name = "quesType") String quesType,
                                                         @RequestParam(name = "quesBody") String quesBody) {
         User user = getAccessUser();
+        UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         if (user == null) {
             return new ResponseEntity<>(new PageImpl<Question>(new ArrayList<>()), HttpStatus.OK);
         }
@@ -553,7 +559,7 @@ public class PaperController extends ControllerSupport {
         if (StringUtils.isNotEmpty(quesType)) {
             quesStructType = QuesStructType.valueOf(quesType);
         }
-        Page<Question> questionPageList = paperService.listQuestionforSelect(paperId, curPage, pageSize, quesStructType, user, quesBody);
+        Page<Question> questionPageList = paperService.listQuestionforSelect(paperId, curPage, pageSize, quesStructType, user, quesBody,ud);
         return new ResponseEntity<>(questionPageList, HttpStatus.OK);
     }
 
@@ -583,24 +589,26 @@ public class PaperController extends ControllerSupport {
      * @param pageSize
      * @return
      */
+    @DataRule(type = DataRuleType.COURSE)
     @ResponseBody
     @ApiOperation(value = "查询所有导入试卷(not in paperIds)", notes = "查询所有导入试卷(not in paperIds)")
     @GetMapping(value = "/importPaper/huoge/{curPage}/{pageSize}")
     public ResponseEntity<Object> getImportPapersNotInIds(@ModelAttribute PaperSearchInfo paperSearchInfo, @RequestParam String ids, @PathVariable int curPage,
                                                           @PathVariable int pageSize) {
     	User user = getAccessUser();
+    	UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         paperSearchInfo.setOrgId(user.getRootOrgId().toString());
         Page<Paper> ret=null;
         if (StringUtils.isNotBlank(ids)) {
         	String[] idArr=ids.split(",");
-            ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage, pageSize, PaperType.IMPORT);
+            ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage, pageSize, PaperType.IMPORT,ud);
             if (ret.getContent().size() == 0 && ret.getTotalElements() > 0 && curPage > 1) {
-                ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage - 1, pageSize, PaperType.IMPORT);
+                ret = paperService.getPapersNotInIds(paperSearchInfo, idArr, curPage - 1, pageSize, PaperType.IMPORT,ud);
             }
         } else {
-            ret = paperService.getImportPapers(paperSearchInfo, curPage, pageSize);
+            ret = paperService.getImportPapers(paperSearchInfo, curPage, pageSize,ud);
             if (ret.getContent().size() == 0 && ret.getTotalElements() > 0 && curPage > 1) {
-                ret = paperService.getImportPapers(paperSearchInfo, curPage - 1, pageSize);
+                ret = paperService.getImportPapers(paperSearchInfo, curPage - 1, pageSize,ud);
             }
         }
         if(ret!=null&&CollectionUtils.isNotEmpty(ret.getContent())) {
@@ -855,11 +863,16 @@ public class PaperController extends ControllerSupport {
         ExportUtils.exportEXCEL("试卷答案", PaperAnswerDomain.class, dtos, response);
     }
 
+    @DataRule(type = DataRuleType.COURSE)
     @ApiOperation(value = "试卷答案导入")
     @RequestMapping(value = "/paper/answer/import/{paperId}", method = RequestMethod.POST)
     @ResponseBody
     public void answerImport(@PathVariable String paperId, @RequestPart @NotNull(message = "上传文件不能为空!") MultipartFile dataFile) {
         User user = getAccessUser();
+        UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
+        if (ud.assertEmptyQueryResult()) {
+        	throw new StatusException("500", "没有数据权限");
+        }
         Paper paper = cn.com.qmth.examcloud.core.questions.base.Model.of(paperRepo.findById(paperId));
         if (paper == null) {
             throw new StatusException("500", "未找到试卷");
@@ -867,6 +880,9 @@ public class PaperController extends ControllerSupport {
         if (!isSuperAdmin() && !paper.getOrgId().equals(String.valueOf(user.getRootOrgId()))) {
             throw new StatusException("500", "非法请求");
         }
+        if(ud.assertNeedQueryRefIds()&&!ud.stringRefIds().contains(Long.valueOf(paper.getCourse().getId()))) {
+        	throw new StatusException("500", "没有数据权限");
+        }
         paperService.answerImport(paper, dataFile);
         StringBuilder paperInfo = new StringBuilder();
         paperInfo.append("课程:" + paper.getCourse().getName() + "(" + paper.getCourse().getCode() + ")");

+ 6 - 1
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/PaperStorageController.java

@@ -16,9 +16,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import cn.com.qmth.examcloud.api.commons.enums.DataRuleType;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.core.questions.dao.entity.PaperSearchInfo;
 import cn.com.qmth.examcloud.core.questions.service.PaperService;
+import cn.com.qmth.examcloud.web.security.DataRule;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import io.swagger.annotations.ApiOperation;
 
@@ -29,14 +32,16 @@ public class PaperStorageController extends ControllerSupport {
     @Autowired
     PaperService paperService;
 
+    @DataRule(type = DataRuleType.COURSE)
     @ApiOperation(value = "试卷仓库分页查询", notes = "试卷仓库分页查询")
     @ResponseBody
     @GetMapping(value = "/findPage/{curPage}/{pageSize}")
     public ResponseEntity<Object> getGenPapers(@ModelAttribute PaperSearchInfo paperSearchInfo,
                                                @PathVariable int curPage, @PathVariable int pageSize) {
         User user = getAccessUser();
+        UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         paperSearchInfo.setOrgId(user.getRootOrgId().toString());
-        return new ResponseEntity<>(paperService.getStoragePaperPage(paperSearchInfo, curPage, pageSize), HttpStatus.OK);
+        return new ResponseEntity<>(paperService.getStoragePaperPage(paperSearchInfo, curPage, pageSize,ud), HttpStatus.OK);
     }
     
     @ResponseBody

+ 3 - 1
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/PaperStructController.java

@@ -63,14 +63,16 @@ public class PaperStructController extends ControllerSupport {
      * @param
      * @return
      */
+    @DataRule(type = DataRuleType.COURSE)
     @ApiOperation(value = "获取试卷结构不带分页", notes = "获取试卷结构不带分页")
     @GetMapping(value = "/paperStruct")
     public ResponseEntity<Object> getPaperStructs(@ModelAttribute PaperStructSearchInfo searchInfo) {
         User user = getAccessUser();
+        UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         if (user != null) {
             searchInfo.setOrgId(user.getRootOrgId().toString());
         }
-        List<PaperStruct> paperStructs = paperStructService.getPaperStructs(searchInfo);
+        List<PaperStruct> paperStructs = paperStructService.getPaperStructs(searchInfo,ud);
         return new ResponseEntity<>(paperStructs, HttpStatus.OK);
     }
 

+ 6 - 1
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/QuesController.java

@@ -20,13 +20,16 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.google.gson.Gson;
 
+import cn.com.qmth.examcloud.api.commons.enums.DataRuleType;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionSearchCondition;
 import cn.com.qmth.examcloud.core.questions.service.PaperDetailUnitService;
 import cn.com.qmth.examcloud.core.questions.service.QuesService;
+import cn.com.qmth.examcloud.web.security.DataRule;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import io.swagger.annotations.ApiOperation;
 
@@ -68,14 +71,16 @@ public class QuesController extends ControllerSupport {
      *
      * @return
      */
+    @DataRule(type = DataRuleType.COURSE)
     @ApiOperation(value = "分页查询试题", notes = "分页查询试题")
     @GetMapping(value = "/question/{curPage}/{pageSize}")
     public ResponseEntity<Object> getAllQuestion(@ModelAttribute QuestionSearchCondition searchCondition,
                                                  @PathVariable int curPage,
                                                  @PathVariable int pageSize) {
         User user = getAccessUser();
+        UserDataRule ud = getUserDataRule(DataRuleType.COURSE);
         searchCondition.setOrgId(user.getRootOrgId().toString());
-        return new ResponseEntity<>(quesService.findAll(searchCondition, curPage, pageSize), HttpStatus.OK);
+        return new ResponseEntity<>(quesService.findAll(searchCondition, curPage, pageSize,ud), HttpStatus.OK);
     }
 
     /**

+ 2 - 1
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/CoursePropertyService.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.core.questions.service;
 
+import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.core.questions.dao.entity.CourseProperty;
 import cn.com.qmth.examcloud.core.questions.dao.entity.dto.CoursePropertyDto;
@@ -43,7 +44,7 @@ public interface CoursePropertyService {
     /**
      * 根据课程code查询所有开启的课程属性
      */
-    List<CourseProperty> findByEnable(String courseCode, Boolean enable);
+    List<CourseProperty> findByEnable(String courseCode, Boolean enable,User user,UserDataRule ud);
 
     /**
      * 批量启用/批量禁用

+ 11 - 3
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ImportPaperService.java

@@ -36,6 +36,7 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 import com.google.gson.Gson;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
@@ -172,10 +173,10 @@ public class ImportPaperService {
      * @throws Exception
      */
 
-    public Paper importPaper(Paper paper, User user, File file) throws Exception {
+    public Paper importPaper(Paper paper, User user, File file,UserDataRule ud) throws Exception {
         paperService.checkPaperNameNew(paper.getName(), user.getRootOrgId().toString());
         if (file.getName().endsWith(DOC_SUFFIX)) {
-            return processImportPaper(paper, user, file);
+            return processImportPaper(paper, user, file,ud);
         } else if (file.getName().endsWith(JSON_SUFFIX)) {
              return importPaperFromJsonService.processImportPaper(paper, user,
              file);
@@ -275,8 +276,15 @@ public class ImportPaperService {
      * @throws Exception
      */
 
-    public Paper processImportPaper(Paper paper, User user, File file) throws Exception {
+    public Paper processImportPaper(Paper paper, User user, File file,UserDataRule ud) throws Exception {
         try {
+        	if (ud.assertEmptyQueryResult()) {
+    			throw new StatusException("没有数据权限");
+    		}
+    		Course course = courseService.getCourse(user.getRootOrgId(), paper.getCourse().getCode());
+    		if(ud.assertNeedQueryRefIds()&&!ud.stringRefIds().contains(Long.valueOf(course.getId()))) {
+    			throw new StatusException("没有数据权限");
+    		}
 			// 得到前台的课程代码
 			String courseNo = paper.getCourseNo();
 			WordprocessingMLPackage wordMLPackage;

+ 5 - 6
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/PaperService.java

@@ -32,9 +32,8 @@ public interface PaperService {
      * @param pageSize
      * @return
      */
-    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize);
 
-    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize, UserDataRule userDataRule, boolean skipRule);
+    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize, UserDataRule userDataRule);
 
     /**
      * 查询所有待审核和审核不通过的导入试卷
@@ -78,7 +77,7 @@ public interface PaperService {
      * @param pageSize
      * @return
      */
-    public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize);
+    public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize,UserDataRule ud);
 
     /**
      * 查询考试试卷
@@ -204,7 +203,7 @@ public interface PaperService {
      */
     public List<String> getPaperNamesByQuestionId(String questionId);
 
-    public Page<Question> listQuestionforSelect(String paperId, int curPage, int pageSize, QuesStructType quesType, User user, String quesBody);
+    public Page<Question> listQuestionforSelect(String paperId, int curPage, int pageSize, QuesStructType quesType, User user, String quesBody,UserDataRule ud);
 
     public Paper selectQuestionsToPaper(String paperId, String paperDetailId, List<Question> questions, User user);
 
@@ -212,7 +211,7 @@ public interface PaperService {
 
     public void checkPaperNameNew(String paperName, String orgId) throws Exception;
 
-    public Page<Paper> getPapersNotInIds(PaperSearchInfo paperSearchInfo, String[] ids, int curPage, int pageSize, PaperType paperType);
+    public Page<Paper> getPapersNotInIds(PaperSearchInfo paperSearchInfo, String[] ids, int curPage, int pageSize, PaperType paperType,UserDataRule ud);
 
     /**
      * 将选中的导入试卷复制为卷库试卷
@@ -313,7 +312,7 @@ public interface PaperService {
 
     public void answerImport(Paper paper, MultipartFile dataFile);
 
-    Page<Paper> getStoragePaperPage(PaperSearchInfo paperSearchInfo, int curPage, int pageSize);
+    Page<Paper> getStoragePaperPage(PaperSearchInfo paperSearchInfo, int curPage, int pageSize,UserDataRule ud);
 
     void updatePapersStorage(List<String> paperIds, int storage, String orgId);
 

+ 19 - 5
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/PaperStructService.java

@@ -59,14 +59,19 @@ public class PaperStructService {
      * @return
      */
     public Page<PaperStruct> getPaperStructs(PaperStructSearchInfo searchInfo, int curPage, int pageSize, UserDataRule userDataRule) {
-        // if (userDataRule.assertEmptyQueryResult()) {
-        //     return Page.empty();
-        // }
+         if (userDataRule.assertEmptyQueryResult()) {
+             return Page.empty();
+         }
 
-        // todo userDataRule
 
         Query query = new Query();
         query.addCriteria(Criteria.where("orgId").is(searchInfo.getOrgId()));
+        if (userDataRule.assertNeedQueryRefIds()) {
+			Criteria c1 = Criteria.where("courseId").in(userDataRule.getRefIds());
+			Criteria c2 = Criteria.where("courseId").exists(false);
+			Criteria cr = new Criteria();
+			query.addCriteria(cr.orOperator(c1, c2));
+		}
         query.addCriteria(Criteria.where("type").is(searchInfo.getType()));
 
         // 判断试卷结构
@@ -140,13 +145,22 @@ public class PaperStructService {
      * @param searchInfo
      * @return
      */
-    public List<PaperStruct> getPaperStructs(PaperStructSearchInfo searchInfo) {
+    public List<PaperStruct> getPaperStructs(PaperStructSearchInfo searchInfo,UserDataRule ud) {
+    	if (ud.assertEmptyQueryResult()) {
+			return new ArrayList<>();
+		}
         Query query = new Query();
         if (StringUtils.isNotBlank(searchInfo.getCourseNo())) {
             query.addCriteria(Criteria.where("courseNo")
                     .in("", searchInfo.getCourseNo()));
         }
         query.addCriteria(Criteria.where("orgId").is(searchInfo.getOrgId()));
+		if (ud.assertNeedQueryRefIds()) {
+			Criteria c1 = Criteria.where("courseId").in(ud.getRefIds());
+			Criteria c2 = Criteria.where("courseId").exists(false);
+			Criteria cr = new Criteria();
+			cr.orOperator(c1, c2);
+		}
         query.with(Sort.by(Sort.Order.desc("createTime")));
         List<PaperStruct> paperList = this.mongoTemplate.find(query, PaperStruct.class);
         return paperList;

+ 3 - 2
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/QuesService.java

@@ -7,6 +7,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionSearchCondition;
@@ -42,7 +43,7 @@ public interface QuesService {
      * @param userId
      * @return
      */
-    public Page<Question> findAll(QuestionSearchCondition searchCondition, int curPage, int pageSize);
+    public Page<Question> findAll(QuestionSearchCondition searchCondition, int curPage, int pageSize,UserDataRule ud);
 
     public void formatQuesCondition(QuestionSearchCondition searchCondition);
 
@@ -54,7 +55,7 @@ public interface QuesService {
      * @param pageSize
      * @return
      */
-    public Page<Question> findByIdExclude(Set<String> idSet, String courseNo, QuesStructType quesType, int curPage, int pageSize, Long orgId, String quesBody);
+    public Page<Question> findByIdExclude(Set<String> idSet, String courseNo, QuesStructType quesType, int curPage, int pageSize, Long orgId, String quesBody,UserDataRule ud);
 
     /**
      * 按ID获取试题

+ 17 - 2
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/CoursePropertyServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
+import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.Constants;
@@ -22,6 +23,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -144,8 +146,21 @@ public class CoursePropertyServiceImpl implements CoursePropertyService {
     }
 
     @Override
-    public List<CourseProperty> findByEnable(String courseCode, Boolean enable) {
-        return coursePropertyRepo.findByCourseCodeAndEnable(courseCode, enable);
+    public List<CourseProperty> findByEnable(String courseCode, Boolean enable,User user,UserDataRule ud) {
+        
+        if (ud.assertEmptyQueryResult()) {
+			return new ArrayList<>();
+		}
+		Query query = new Query();
+		if (ud.assertNeedQueryRefIds()) {
+			query.addCriteria(Criteria.where("courseId").in(ud.getRefIds()));
+		}
+		query.addCriteria(Criteria.where("orgId").is(user.getRootOrgId()));
+		query.addCriteria(Criteria.where("courseCode").is(courseCode));
+		
+		query.addCriteria(Criteria.where("enable").is(true));
+		List<CourseProperty> paperList = this.mongoTemplate.find(query, CourseProperty.class);
+		return paperList;
     }
 
     @Override

+ 43 - 21
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java

@@ -149,23 +149,27 @@ public class PaperServiceImpl implements PaperService {
 
     public static final String TEMP_FILE_EXP = "docxExport/";
 
-    /**
-     * 查询所有已导入试卷
-     */
-    @Override
-    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
-        return this.getImportPapers(paperSearchInfo, curPage, pageSize, null, true);
-    }
 
     /**
      * 查询所有已导入试卷
      */
-    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize, UserDataRule userDataRule, boolean skipRule) {
-        // todo userDataRule
-
-        Query query = new Query();
-
-        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+    @Override
+    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize, UserDataRule ud) {
+    	
+
+    	if (ud.assertEmptyQueryResult()) {
+			return Page.empty();
+		}
+		Query query = new Query();
+		
+		query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+		
+		if (ud.assertNeedQueryRefIds()) {
+			query.addCriteria(Criteria.where("course.id").in(ud.stringRefIds()));
+		}
+        
+
+       
 
         query.addCriteria(Criteria.where("paperType").is(PaperType.IMPORT));
 
@@ -343,9 +347,15 @@ public class PaperServiceImpl implements PaperService {
      * @param pageSize
      * @return
      */
-    public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
-        Query query = new Query();
-        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+    public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize,UserDataRule ud) {
+    	if (ud.assertEmptyQueryResult()) {
+			return Page.empty();
+		}
+		Query query = new Query();
+		query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+		if (ud.assertNeedQueryRefIds()) {
+			query.addCriteria(Criteria.where("course.id").in(ud.stringRefIds()));
+		}
         query.addCriteria(Criteria.where("paperType").is(PaperType.GENERATE.name()));
         query.addCriteria(Criteria.where("storage").ne(1));
         query.addCriteria(Criteria.where("course.enable").is("true"));
@@ -381,9 +391,15 @@ public class PaperServiceImpl implements PaperService {
     }
 
     @Override
-    public Page<Paper> getStoragePaperPage(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
-        Query query = new Query();
+    public Page<Paper> getStoragePaperPage(PaperSearchInfo paperSearchInfo, int curPage, int pageSize,UserDataRule ud) {
+    	if (ud.assertEmptyQueryResult()) {
+			return Page.empty();
+		}
+    	Query query = new Query();
         query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+        if (ud.assertNeedQueryRefIds()) {
+			query.addCriteria(Criteria.where("course.id").in(ud.stringRefIds()));
+		}
         query.addCriteria(Criteria.where("paperType").is(PaperType.GENERATE.name()));
         query.addCriteria(Criteria.where("storage").is(1));
         query.addCriteria(Criteria.where("course.enable").is("true"));
@@ -1044,14 +1060,14 @@ public class PaperServiceImpl implements PaperService {
 
     }
 
-    public Page<Question> listQuestionforSelect(String paperId, int curPage, int pageSize, QuesStructType quesType, User user, String quesBody) {
+    public Page<Question> listQuestionforSelect(String paperId, int curPage, int pageSize, QuesStructType quesType, User user, String quesBody,UserDataRule ud) {
         Set<String> selectedIds = new HashSet<>();
         Paper paper = Model.of(paperRepo.findById(paperId));
         List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
         for (PaperDetailUnit pdu : pdus) {
             selectedIds.add(pdu.getQuestion().getId());
         }
-        return quesService.findByIdExclude(selectedIds, paper.getCourseNo(), quesType, curPage, pageSize, user.getRootOrgId(), quesBody);
+        return quesService.findByIdExclude(selectedIds, paper.getCourseNo(), quesType, curPage, pageSize, user.getRootOrgId(), quesBody,ud);
     }
 
     @SuppressWarnings("unused")
@@ -1125,13 +1141,19 @@ public class PaperServiceImpl implements PaperService {
         }
     }
 
-    public Page<Paper> getPapersNotInIds(PaperSearchInfo paperSearchInfo, String[] ids, int curPage, int pageSize, PaperType paperType) {
+    public Page<Paper> getPapersNotInIds(PaperSearchInfo paperSearchInfo, String[] ids, int curPage, int pageSize, PaperType paperType,UserDataRule ud) {
         Set<String> selectedIds = new HashSet<>();
         for (String id : ids) {
             selectedIds.add(id);
         }
+        if (ud.assertEmptyQueryResult()) {
+			return Page.empty();
+		}
         Query query = new Query();
         query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+        if (ud.assertNeedQueryRefIds()) {
+			query.addCriteria(Criteria.where("course.id").in(ud.stringRefIds()));
+		}
         query.addCriteria(Criteria.where("paperType").is(paperType));
         query.addCriteria(Criteria.where("course.code").is(paperSearchInfo.getCourseNo()));
         query.addCriteria(Criteria.where("id").nin(selectedIds));

+ 18 - 5
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuesServiceImpl.java

@@ -25,6 +25,7 @@ import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
@@ -226,13 +227,18 @@ public class QuesServiceImpl implements QuesService {
      * @param userId
      * @return
      */
-    public Page<Question> findAll(QuestionSearchCondition searchCondition, int curPage, int pageSize) {
-        formatQuesCondition(searchCondition);
+    public Page<Question> findAll(QuestionSearchCondition searchCondition, int curPage, int pageSize,UserDataRule ud) {
+    	if (ud.assertEmptyQueryResult()) {
+			return Page.empty();
+		}
+    	formatQuesCondition(searchCondition);
 
         Query query = new Query();
         query.addCriteria(Criteria.where("orgId").is(searchCondition.getOrgId()));
         query.addCriteria(Criteria.where("course.enable").is("true"));
-
+        if (ud.assertNeedQueryRefIds()) {
+            query.addCriteria(Criteria.where("course.id").in(ud.getRefIds()));
+        }
         if (StringUtils.isNotBlank(searchCondition.getCourseNo())) {
             query.addCriteria(Criteria.where("course.code").is(searchCondition.getCourseNo()));
         }
@@ -320,9 +326,16 @@ public class QuesServiceImpl implements QuesService {
      * @return
      */
     public Page<Question> findByIdExclude(Set<String> idSet, String courseNo, QuesStructType quesType, int curPage,
-            int pageSize, Long orgId, String quesBody) {
-        Query query = new Query();
+            int pageSize, Long orgId, String quesBody,UserDataRule ud) {
+    	if (ud.assertEmptyQueryResult()) {
+    		return Page.empty();
+    	}
+    	
+    	Query query = new Query();
         query.addCriteria(Criteria.where("orgId").is(orgId + ""));
+        if(ud.assertNeedQueryRefIds()) {
+        	query.addCriteria(Criteria.where("course.id").in(ud.stringRefIds()));
+        }
         query.addCriteria(Criteria.where("course.enable").is("true"));
         if (quesType != null) {
             query.addCriteria(Criteria.where("questionType").is(quesType));