Browse Source

修改试卷改审核状态

xiatian 2 years ago
parent
commit
b73f859b9b

+ 202 - 178
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperDetailServiceImpl.java

@@ -5,6 +5,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.collections4.CollectionUtils;
 import org.bson.types.ObjectId;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -39,237 +40,260 @@ import cn.com.qmth.examcloud.reports.commons.util.ReportsUtil;
 @Service("paperDetailService")
 public class PaperDetailServiceImpl implements PaperDetailService {
 
-    @Autowired
-    PaperDetailRepo paperDetailRepo;
+	@Autowired
+	PaperDetailRepo paperDetailRepo;
+
+	@Autowired
+	PaperDetailUnitService unitService;
 
-    @Autowired
-    PaperDetailUnitService unitService;
+	@Autowired
+	PaperRepo paperRepo;
 
-    @Autowired
-    PaperRepo paperRepo;
+	@Autowired
+	QuesTypeNameService quesTypeNameService;
 
-    @Autowired
-    QuesTypeNameService quesTypeNameService;
+	@Autowired
+	PaperDetailUnitRepo paperDetailUnitRepo;
 
-    @Autowired
-    PaperDetailUnitRepo paperDetailUnitRepo;
-    
 	@Autowired
 	MongoTemplate mongoTemplate;
 
-    /**
-     * 根据Id获得对应所有小题
-     *
-     * @param id
-     * @return
-     */
-    public List<PaperDetailUnit> getUnitsByPaperDetailId(String id) {
-        return unitService.getUnitsByPaperDetail(Model.of(paperDetailRepo.findById(id)));
-    }
+	/**
+	 * 根据Id获得对应所有小题
+	 *
+	 * @param id
+	 * @return
+	 */
+	public List<PaperDetailUnit> getUnitsByPaperDetailId(String id) {
+		return unitService.getUnitsByPaperDetail(Model.of(paperDetailRepo.findById(id)));
+	}
+
+	/**
+	 * 按ID查询大题
+	 *
+	 * @param id
+	 * @return
+	 */
+	public PaperDetail findById(String id) {
+		return Model.of(paperDetailRepo.findById(id));
+	}
+
+	/**
+	 * 保存大题
+	 *
+	 * @param pd
+	 * @return
+	 */
+	public PaperDetail savePaperDetail(PaperDetail pd, String paperId, User user) {
+		Paper paper = Model.of(paperRepo.findById(paperId));
+		paper.setLastModifyName(user.getDisplayName());
+		if (PaperType.GENERATE.equals(paper.getPaperType())) {
+			paper.setAuditStatus(false);
+		}
+		paper = paperRepo.save(paper);
+		pd.setPaper(paper);
+		PaperDetail oldpaperDetail = Model.of(paperDetailRepo.findById(pd.getId()));
+		PaperDetail paperDetail = paperDetailRepo.save(pd);
+		List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetailOrderByNumber(paperDetail);
+		quesTypeNameService.saveQuesTypeName(paperDetailUnits);
 
-    /**
-     * 按ID查询大题
-     *
-     * @param id
-     * @return
-     */
-    public PaperDetail findById(String id) {
-        return Model.of(paperDetailRepo.findById(id));
-    }
+		if (!oldpaperDetail.getName().equals(paperDetail.getName())) {
+			StringBuilder paperInfo = new StringBuilder();
+			paperInfo.append("课程:" + paper.getCourse().getName() + "(" + paper.getCourse().getCode() + ") 试卷名称:"
+					+ paper.getName());
+			paperInfo.append("第" + paperDetail.getNumber() + "大题名称由改 " + oldpaperDetail.getName() + " 为 "
+					+ paperDetail.getName());
+			if (PaperType.IMPORT.equals(paper.getPaperType())) {
+				ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(),
+						AdminOperateType.TYPE38.getDesc(), paperInfo.toString()));
+			} else {
+				ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(),
+						AdminOperateType.TYPE39.getDesc(), paperInfo.toString()));
+
+			}
+		}
+		return paperDetail;
+	}
 
-    /**
-     * 保存大题
-     *
-     * @param pd
-     * @return
-     */
-    public PaperDetail savePaperDetail(PaperDetail pd, String paperId, User user) {
-        Paper paper = Model.of(paperRepo.findById(paperId));
-        paper.setLastModifyName(user.getDisplayName());
-        paper = paperRepo.save(paper);
-        pd.setPaper(paper);
-        PaperDetail oldpaperDetail = Model.of(paperDetailRepo.findById(pd.getId()));
-        PaperDetail paperDetail = paperDetailRepo.save(pd);
-        List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetailOrderByNumber(paperDetail);
-        quesTypeNameService.saveQuesTypeName(paperDetailUnits);
-        
-        if(!oldpaperDetail.getName().equals(paperDetail.getName())) {
-        	StringBuilder paperInfo=new StringBuilder();
-        	paperInfo.append("课程:"+paper.getCourse().getName()+"("+paper.getCourse().getCode()+") 试卷名称:"+paper.getName());
-            paperInfo.append("第"+paperDetail.getNumber()+"大题名称由改 "+oldpaperDetail.getName()+" 为 "+paperDetail.getName());
-        	if(PaperType.IMPORT.equals(paper.getPaperType())) {
-	            ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), AdminOperateType.TYPE38.getDesc(),paperInfo.toString()));
-        	}else {
-	            ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), AdminOperateType.TYPE39.getDesc(),paperInfo.toString()));
-        
-        	}
-        }
-        return paperDetail;
-    }
-    
-    /**
-     * 删除大题
-     *
-     * @param id
-     * @return
-     */
-    public void deletePaperDetail(String paperId,String id,User user) {
-    	Paper paper = Model.of(paperRepo.findById(paperId));
-    	if(paper.getInUse()!=null&&paper.getInUse()==1) {
+	/**
+	 * 删除大题
+	 *
+	 * @param id
+	 * @return
+	 */
+	public void deletePaperDetail(String paperId, String id, User user) {
+		Paper paper = Model.of(paperRepo.findById(paperId));
+		if (paper.getInUse() != null && paper.getInUse() == 1) {
 			throw new StatusException("500", "试卷已调用");
 		}
-    	PaperDetail oldpaperDetail = Model.of(paperDetailRepo.findById(id));
-        paperDetailRepo.deleteById(id);
-        StringBuilder paperInfo=new StringBuilder();
-        paperInfo.append("课程:"+paper.getCourse().getName()+"("+paper.getCourse().getCode()+") 试卷名称:"+paper.getName());
-        paperInfo.append("删除第"+oldpaperDetail.getNumber()+"大题");
-        Integer dc=paper.getPaperDetailCount();
-        paperInfo.append(" 试卷大题数量变动("+dc+"变为"+(dc-1)+")");
-    	if(PaperType.IMPORT.equals(paper.getPaperType())) {
-            ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), AdminOperateType.TYPE40.getDesc(),paperInfo.toString()));
-    	}else {
-            ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), AdminOperateType.TYPE41.getDesc(),paperInfo.toString()));
-    	}
-    }
+		PaperDetail oldpaperDetail = Model.of(paperDetailRepo.findById(id));
+		paperDetailRepo.deleteById(id);
+		if (PaperType.GENERATE.equals(paper.getPaperType())) {
+			paper.setAuditStatus(false);
+			paperRepo.save(paper);
+		}
+		StringBuilder paperInfo = new StringBuilder();
+		paperInfo.append(
+				"课程:" + paper.getCourse().getName() + "(" + paper.getCourse().getCode() + ") 试卷名称:" + paper.getName());
+		paperInfo.append("删除第" + oldpaperDetail.getNumber() + "大题");
+		Integer dc = paper.getPaperDetailCount();
+		paperInfo.append(" 试卷大题数量变动(" + dc + "变为" + (dc - 1) + ")");
+		if (PaperType.IMPORT.equals(paper.getPaperType())) {
+			ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(),
+					AdminOperateType.TYPE40.getDesc(), paperInfo.toString()));
+		} else {
+			ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(),
+					AdminOperateType.TYPE41.getDesc(), paperInfo.toString()));
+		}
+	}
 
-    /**
-     * 查询同一个试卷对象对应大题
-     *
-     * @param paper
-     * @return
-     */
-    public List<PaperDetail> getPaperDetailsByPaper(Paper paper) {
-        return paperDetailRepo.findByPaperOrderByNumber(paper);
-    }
+	/**
+	 * 查询同一个试卷对象对应大题
+	 *
+	 * @param paper
+	 * @return
+	 */
+	public List<PaperDetail> getPaperDetailsByPaper(Paper paper) {
+		return paperDetailRepo.findByPaperOrderByNumber(paper);
+	}
 
-    /**
-     * 删除试卷大题
-     *
-     * @param paper
-     */
-    public void deletePaperDetailsByPaper(Paper paper) {
-        List<PaperDetail> details = getPaperDetailsByPaper(paper);
-        unitService.deleteUnitsByPaperDetails(details);
-        paperDetailRepo.deleteAll(details);
-    }
+	/**
+	 * 删除试卷大题
+	 *
+	 * @param paper
+	 */
+	public void deletePaperDetailsByPaper(Paper paper) {
+		List<PaperDetail> details = getPaperDetailsByPaper(paper);
+		unitService.deleteUnitsByPaperDetails(details);
+		paperDetailRepo.deleteAll(details);
+	}
 
-    /**
-     * 批量删除试卷大题
-     *
-     * @param papers
-     */
-    public void deletePaperDetailsByPapers(List<Paper> papers) {
-        for (Paper paper : papers) {
-            List<PaperDetail> details = getPaperDetailsByPaper(paper);
-            unitService.deleteUnitsByPaperDetails(details);
-            paperDetailRepo.deleteAll(details);
-        }
-    }
+	/**
+	 * 批量删除试卷大题
+	 *
+	 * @param papers
+	 */
+	public void deletePaperDetailsByPapers(List<Paper> papers) {
+		for (Paper paper : papers) {
+			List<PaperDetail> details = getPaperDetailsByPaper(paper);
+			unitService.deleteUnitsByPaperDetails(details);
+			paperDetailRepo.deleteAll(details);
+		}
+	}
 
 	@Override
 	public void movePaperDetail(String paperId, String detailId, String vc, User user) {
 		Paper paper = Model.of(paperRepo.findById(paperId));
-		if(paper.getInUse()!=null&&paper.getInUse()==1) {
+		if (paper.getInUse() != null && paper.getInUse() == 1) {
 			throw new StatusException("500", "试卷已调用");
 		}
-		List<PaperDetail> pds=getPaperDetailsByPaper(paper);
-		if(pds==null||pds.size()<=1) {
+		List<PaperDetail> pds = getPaperDetailsByPaper(paper);
+		if (pds == null || pds.size() <= 1) {
 			throw new StatusException("500", "大题数量未达到两题,无法移动");
 		}
-		if(detailId.equals(pds.get(0).getId())&&"up".equals(vc)) {
+		if (detailId.equals(pds.get(0).getId()) && "up".equals(vc)) {
 			throw new StatusException("500", "第一题无法上移");
 		}
-		if(detailId.equals(pds.get(pds.size()-1).getId())&&"down".equals(vc)) {
+		if (detailId.equals(pds.get(pds.size() - 1).getId()) && "down".equals(vc)) {
 			throw new StatusException("500", "最后一题无法下移");
 		}
-		int number=movePaperDetail(pds, detailId, vc);
-		List<PaperDetailUnit> pdus=paperDetailUnitRepo.findByPaperIdOrderByNumber(paperId);
-		if(pdus!=null&&pdus.size()>0) {
-			int subIndex=0;
-			Map<String,List<PaperDetailUnit>> map=getPaperDetailUnitMap(pdus);
-			for(PaperDetail pd:pds) {
-				for(PaperDetailUnit pdu:map.get(pd.getId())) {
-					subIndex++;
-					pdu.setNumber(subIndex);
+		int number = movePaperDetail(pds, detailId, vc);
+		List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperIdOrderByNumber(paperId);
+		if (pdus != null && pdus.size() > 0) {
+			int subIndex = 0;
+			Map<String, List<PaperDetailUnit>> map = getPaperDetailUnitMap(pdus);
+			for (PaperDetail pd : pds) {
+				if (CollectionUtils.isNotEmpty(map.get(pd.getId()))) {
+					for (PaperDetailUnit pdu : map.get(pd.getId())) {
+						subIndex++;
+						pdu.setNumber(subIndex);
+					}
 				}
 			}
 			savePaperDetailUnitNumber(pds, map);
 		}
 		savePaperDetailNumber(pds);
-		
-		StringBuilder paperInfo=new StringBuilder();
-        paperInfo.append("课程:"+paper.getCourse().getName()+"("+paper.getCourse().getCode()+") 试卷名称:"+paper.getName());
-        if("up".equals(vc)) {
-        	paperInfo.append(" 上移");
-        }else {
-        	paperInfo.append(" 下移");
-        }
-        paperInfo.append("第"+number+"大题");
-        ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), AdminOperateType.TYPE42.getDesc(),paperInfo.toString()));
+		if (PaperType.GENERATE.equals(paper.getPaperType())) {
+			paper.setAuditStatus(false);
+			paperRepo.save(paper);
+		}
+		StringBuilder paperInfo = new StringBuilder();
+		paperInfo.append(
+				"课程:" + paper.getCourse().getName() + "(" + paper.getCourse().getCode() + ") 试卷名称:" + paper.getName());
+		if ("up".equals(vc)) {
+			paperInfo.append(" 上移");
+		} else {
+			paperInfo.append(" 下移");
+		}
+		paperInfo.append("第" + number + "大题");
+		ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(),
+				AdminOperateType.TYPE42.getDesc(), paperInfo.toString()));
 	}
-	
+
 	private void savePaperDetailNumber(List<PaperDetail> pds) {
 		Query query;
-		int index=0;
-		for(PaperDetail pd:pds) {
+		int index = 0;
+		for (PaperDetail pd : pds) {
 			index++;
-			if(pd.getId().length()==24) {
+			if (pd.getId().length() == 24) {
 				query = Query.query(Criteria.where("_id").is(new ObjectId(pd.getId())));
-			}else {
+			} else {
 				query = Query.query(Criteria.where("_id").is(pd.getId()));
 			}
-	        Update update = new Update();
-	        update.set("number", index);
-	        mongoTemplate.updateFirst(query, update, "paperDetail");
+			Update update = new Update();
+			update.set("number", index);
+			mongoTemplate.updateFirst(query, update, "paperDetail");
 		}
 	}
-	
-	private void savePaperDetailUnitNumber(List<PaperDetail> pds,Map<String,List<PaperDetailUnit>> map) {
+
+	private void savePaperDetailUnitNumber(List<PaperDetail> pds, Map<String, List<PaperDetailUnit>> map) {
 		Query query;
-		for(PaperDetail pd:pds) {
-			for(PaperDetailUnit pdu:map.get(pd.getId())) {
-				if(pdu.getId().length()==24) {
-					query = Query.query(Criteria.where("_id").is(new ObjectId(pdu.getId())));
-				}else {
-					query = Query.query(Criteria.where("_id").is(pdu.getId()));
+		for (PaperDetail pd : pds) {
+			if (CollectionUtils.isNotEmpty(map.get(pd.getId()))) {
+				for (PaperDetailUnit pdu : map.get(pd.getId())) {
+					if (pdu.getId().length() == 24) {
+						query = Query.query(Criteria.where("_id").is(new ObjectId(pdu.getId())));
+					} else {
+						query = Query.query(Criteria.where("_id").is(pdu.getId()));
+					}
+					Update update = new Update();
+					update.set("number", pdu.getNumber());
+					mongoTemplate.updateFirst(query, update, "paperDetailUnit");
 				}
-		        Update update = new Update();
-		        update.set("number", pdu.getNumber());
-		        mongoTemplate.updateFirst(query, update, "paperDetailUnit");
 			}
 		}
 	}
-	
-	private int movePaperDetail(List<PaperDetail> pds,String detailId,String vc) {
-		for(int i=0;i<pds.size();i++) {
-			if(pds.get(i).getId().equals(detailId)) {
-				if("up".equals(vc)) {
-					PaperDetail tem=pds.get(i);
-					pds.set(i, pds.get(i-1));
-					pds.set(i-1, tem);
-				}else {
-					PaperDetail tem=pds.get(i);
-					pds.set(i, pds.get(i+1));
-					pds.set(i+1, tem);
+
+	private int movePaperDetail(List<PaperDetail> pds, String detailId, String vc) {
+		for (int i = 0; i < pds.size(); i++) {
+			if (pds.get(i).getId().equals(detailId)) {
+				if ("up".equals(vc)) {
+					PaperDetail tem = pds.get(i);
+					pds.set(i, pds.get(i - 1));
+					pds.set(i - 1, tem);
+				} else {
+					PaperDetail tem = pds.get(i);
+					pds.set(i, pds.get(i + 1));
+					pds.set(i + 1, tem);
 				}
-				return i+1;
+				return i + 1;
 			}
 		}
 		return -1;
 	}
-	
-	private Map<String,List<PaperDetailUnit>> getPaperDetailUnitMap(List<PaperDetailUnit> pdus){
-		Map<String,List<PaperDetailUnit>> map=new HashMap<>();
-		
-		for(PaperDetailUnit pdu:pdus) {
-			List<PaperDetailUnit> pl=map.get(pdu.getPaperDetail().getId());
-			if(pl==null) {
-				pl=new ArrayList<>();
-				map.put(pdu.getPaperDetail().getId(),pl);
+
+	private Map<String, List<PaperDetailUnit>> getPaperDetailUnitMap(List<PaperDetailUnit> pdus) {
+		Map<String, List<PaperDetailUnit>> map = new HashMap<>();
+
+		for (PaperDetailUnit pdu : pdus) {
+			List<PaperDetailUnit> pl = map.get(pdu.getPaperDetail().getId());
+			if (pl == null) {
+				pl = new ArrayList<>();
+				map.put(pdu.getPaperDetail().getId(), pl);
 			}
 			pl.add(pdu);
 		}
-		
+
 		return map;
 	}
 

+ 4 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperDetailUnitServiceImpl.java

@@ -238,6 +238,9 @@ public class PaperDetailUnitServiceImpl implements PaperDetailUnitService {
         Double total=paper.getTotalScore();
         Integer dc=paper.getPaperDetailCount();
         Integer uc=paper.getUnitCount();
+        if(PaperType.GENERATE.equals(paper.getPaperType())) {
+        	paper.setAuditStatus(false);
+        }
         paperService.formatPaper(paper, user);
 
         String changInfo=PaperUtil.getPaperChangeInfo(total, dc, uc, paper);
@@ -363,6 +366,7 @@ public class PaperDetailUnitServiceImpl implements PaperDetailUnitService {
         Double total=paper.getTotalScore();
         Integer dc=paper.getPaperDetailCount();
         Integer uc=paper.getUnitCount();
+        paper.setAuditStatus(false);
         paperService.formatPaper(paper, user);
         changInfo=PaperUtil.getPaperChangeInfo(total, dc, uc, paper);
         if(detailUnit!=null) {

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

@@ -359,6 +359,9 @@ public class PaperServiceImpl implements PaperService {
 
         Paper oldPaper = Model.of(paperRepo.findById(paperExp.getId()));
         if (oldPaper != null) {
+        	if (PaperType.GENERATE.equals(oldPaper.getPaperType())) {
+        		oldPaper.setAuditStatus(false);
+            }
             String oldName = oldPaper.getName().trim();
             oldPaper.setTitle(paperExp.getTitle());
             oldPaper.setName(paperExp.getName().trim());
@@ -1181,7 +1184,7 @@ public class PaperServiceImpl implements PaperService {
 
         //清除缓存
         this.clearPaperCache(paper.getId());
-
+        paper.setAuditStatus(false);
         Double total = paper.getTotalScore();
         Integer dc = paper.getPaperDetailCount();
         Integer uc = paper.getUnitCount();