|
@@ -7,6 +7,8 @@ import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.nlpcn.commons.lang.util.StringUtil;
|
|
@@ -86,16 +88,10 @@ public class PaperService {
|
|
|
|
|
|
@Autowired
|
|
|
QuesService quesService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- DataMapModelService dataMapModelService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- ComTaskService comTaskService;
|
|
|
-
|
|
|
+
|
|
|
@Autowired
|
|
|
private MongoTemplate mongoTemplate;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 查询所有已导入试卷
|
|
|
*
|
|
@@ -110,7 +106,7 @@ public class PaperService {
|
|
|
importPaper.setPaperType(PaperType.IMPORT);
|
|
|
return paperRepo.findAll(Example.of(importPaper), new PageRequest(curPage - 1, pageSize));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 查询所有待审核和审核不通过的导入试卷
|
|
|
* @param paperSearchInfo
|
|
@@ -130,16 +126,16 @@ public class PaperService {
|
|
|
if(StringUtil.isNotBlank(paperSearchInfo.getCourseNo())){
|
|
|
query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
long totalNumber = this.mongoTemplate.count(query, Paper.class);
|
|
|
query.limit(pageSize);
|
|
|
query.skip((curPage-1)*pageSize);
|
|
|
List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
|
|
|
return new PageImpl<Paper>(paperList,new PageRequest(curPage - 1, pageSize),totalNumber);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * 根据条件查询
|
|
|
+ * 根据条件查询
|
|
|
* @param paperSearchInfo
|
|
|
* @return
|
|
|
*/
|
|
@@ -149,43 +145,22 @@ public class PaperService {
|
|
|
importPaper.setPaperType(PaperType.IMPORT);
|
|
|
return paperRepo.findAll(Example.of(importPaper));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 保存试卷
|
|
|
*
|
|
|
* @param paperExp
|
|
|
* @return
|
|
|
- * @throws Exception
|
|
|
*/
|
|
|
- public Paper savePaper(AccessUser user,PaperExp paperExp) throws Exception {
|
|
|
- Paper paper = BeanCopierUtil.copyProperties(paperExp, Paper.class);
|
|
|
- paper.setOrgId(user.getOrgId()+"");
|
|
|
- formatPaper(paper);
|
|
|
- DataMapModel dataMapModel = dataMapModelService.findDataMapModel(paper.getId());
|
|
|
- String processInstanceId = dataMapModel.getProcessInstanceId();
|
|
|
- //在流程中
|
|
|
- if(StringUtils.isNotBlank(processInstanceId)){
|
|
|
- Map<String, Object> variables = new HashMap<String,Object>();
|
|
|
- /**
|
|
|
- * 审核人员和非审核人员都可以点击保存试卷
|
|
|
- * 如果是 审核人员点击保存,试卷状态为通过
|
|
|
- * 如果不是 审核人员点击保存,试卷状态为待审核
|
|
|
- */
|
|
|
- variables.put("assignee", "admin1");
|
|
|
- variables.put("condition", PassEnum.PASS.getValue());
|
|
|
- paper.setPaperStatus(PaperStatus.PASS);
|
|
|
- /**
|
|
|
- * 非审核人员保存试卷
|
|
|
- * variables.put("assignee", "admin2");
|
|
|
- * variables.put("condition", PassEnum.NOPASS.getValue());
|
|
|
- * paper.setPaperStatus(PaperStatus.DRAFT);
|
|
|
- */
|
|
|
- paper = paperRepo.save(paper);
|
|
|
- comTaskService.completeTaskByProcInstIdAndAssignee(processInstanceId, variables);
|
|
|
- }else{//不在流程中
|
|
|
- paper = paperRepo.save(paper);
|
|
|
- }
|
|
|
- return paper;
|
|
|
+ public Paper savePaper(PaperExp paperExp, AccessUser user) {
|
|
|
+ Paper oldPaper = paperRepo.findOne(paperExp.getId());
|
|
|
+ if (oldPaper != null) {
|
|
|
+ oldPaper.setTitle(paperExp.getTitle());
|
|
|
+ oldPaper.setName(paperExp.getName());
|
|
|
+ oldPaper.setLastModifyName(user.getLoginName());
|
|
|
+ return paperRepo.save(oldPaper);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -240,7 +215,7 @@ public class PaperService {
|
|
|
examPaper.setExamId(examId);
|
|
|
examPaper.setGroupCode(groupCode);
|
|
|
examPaper.setCourseCode(courseCode);
|
|
|
-// examPaper.setPaperId(paperId);
|
|
|
+ // examPaper.setPaperId(paperId);
|
|
|
examPaperRepo.save(examPaper);
|
|
|
}
|
|
|
|
|
@@ -249,7 +224,7 @@ public class PaperService {
|
|
|
examPaper.setExamId(examId);
|
|
|
examPaper.setGroupCode(groupCode);
|
|
|
examPaper.setCourseCode(courseCode);
|
|
|
-// examPaper.setPaperId(paperId);
|
|
|
+ // examPaper.setPaperId(paperId);
|
|
|
examPaperRepo.delete(examPaper);
|
|
|
}
|
|
|
|
|
@@ -309,50 +284,26 @@ public class PaperService {
|
|
|
* 批量通过试卷
|
|
|
*
|
|
|
* @param paperIds
|
|
|
- * @throws Exception
|
|
|
*/
|
|
|
- public void passPapers(AccessUser user,List<String> paperIds) throws Exception {
|
|
|
+ public void passPapers(List<String> paperIds) {
|
|
|
List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
|
|
|
- for(int i = 0;i<papers.size();i++){
|
|
|
- Paper paper = papers.get(i);
|
|
|
- paper.setPaperStatus(PaperStatus.PASS);
|
|
|
- paperRepo.save(paper);
|
|
|
-
|
|
|
- DataMapModel dataMapModel = dataMapModelService.findDataMapModel(papers.get(i).getId());
|
|
|
- String processInstanceId = dataMapModel.getProcessInstanceId();
|
|
|
- if(StringUtils.isNotBlank(processInstanceId)){
|
|
|
- Map<String, Object> variables = new HashMap<String,Object>();
|
|
|
- variables.put("assignee", "admin1");
|
|
|
- variables.put("condition", PassEnum.PASS.getValue());
|
|
|
- comTaskService.completeTaskByProcInstIdAndAssignee(processInstanceId, variables);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ papers.stream().forEach(paper -> {
|
|
|
+ paper.setPaperStatus(PaperStatus.PASS);
|
|
|
+ });
|
|
|
+ paperRepo.save(papers);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 批量不通过试卷
|
|
|
*
|
|
|
* @param paperIds
|
|
|
- * @throws Exception
|
|
|
*/
|
|
|
- public void noPassPapers(AccessUser user,List<String> paperIds) throws Exception {
|
|
|
+ public void noPassPapers(List<String> paperIds) {
|
|
|
List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
|
|
|
+ papers.stream().forEach(paper -> {
|
|
|
+ paper.setPaperStatus(PaperStatus.NOPASS);
|
|
|
+ });
|
|
|
paperRepo.save(papers);
|
|
|
- for(int i = 0;i<papers.size();i++){
|
|
|
- Paper paper = papers.get(i);
|
|
|
- paper.setPaperStatus(PaperStatus.NOPASS);
|
|
|
- paperRepo.save(paper);
|
|
|
-
|
|
|
- DataMapModel dataMapModel = dataMapModelService.findDataMapModel(papers.get(i).getId());
|
|
|
- String processInstanceId = dataMapModel.getProcessInstanceId();
|
|
|
- if(StringUtils.isNotBlank(processInstanceId)){
|
|
|
- Map<String, Object> variables = new HashMap<String,Object>();
|
|
|
- variables.put("assignee", "admin1");
|
|
|
- variables.put("condition", PassEnum.NOPASS.getValue());
|
|
|
- comTaskService.completeTaskByProcInstIdAndAssignee(processInstanceId, variables);
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -404,7 +355,7 @@ public class PaperService {
|
|
|
|
|
|
return paperExp;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 重新对选择题option进行排序(多选、单选、套题下选择题)
|
|
|
*/
|
|
@@ -432,7 +383,7 @@ public class PaperService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private List<QuesOption> reorderOptionCore(List<QuesOption> quesOptions,String optionOrder){
|
|
|
List<QuesOption> newQuesOptions = new ArrayList<QuesOption>();
|
|
|
if(StringUtil.isBlank(optionOrder)||quesOptions.isEmpty()){
|
|
@@ -446,7 +397,7 @@ public class PaperService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- quesOptions = null;
|
|
|
+ quesOptions = null;
|
|
|
return newQuesOptions;
|
|
|
}
|
|
|
|
|
@@ -467,23 +418,27 @@ public class PaperService {
|
|
|
// 大题序号
|
|
|
paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
|
|
|
paperDetail.setNumber(++mainNum);
|
|
|
- if (paperDetail.getPaperDetailUnits() == null || paperDetail.getPaperDetailUnits().size() == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
// 小题序号
|
|
|
- for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
|
|
|
- quesService.formatQuesUnit(paperDetailUnit.getQuestion());
|
|
|
- List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
|
|
|
- // 套题序号
|
|
|
- if (subQuesList != null && subQuesList.size() > 0) {
|
|
|
- for (Question subQues : subQuesList) {
|
|
|
- Map<String, String> params = new HashMap<String, String>();
|
|
|
- params.put("number", String.valueOf(++subNum));
|
|
|
- subQues.setQuesParams(params);
|
|
|
- quesService.formatQuesUnit(subQues);
|
|
|
+ if (paperDetail != null && paperDetail.getPaperDetailUnits() != null
|
|
|
+ && paperDetail.getPaperDetailUnits().size() > 0) {
|
|
|
+ for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
|
|
|
+ quesService.formatQuesUnit(paperDetailUnit.getQuestion());
|
|
|
+ List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
|
|
|
+ // 套题序号
|
|
|
+ if (subQuesList != null && subQuesList.size() > 0) {
|
|
|
+ int index = subNum;
|
|
|
+ for (Question subQues : subQuesList) {
|
|
|
+ Map<String, String> params = new HashMap<String, String>();
|
|
|
+ params.put("number", String.valueOf(++subNum));
|
|
|
+ subQues.setQuesParams(params);
|
|
|
+ quesService.formatQuesUnit(subQues);
|
|
|
+ }
|
|
|
+ String quesBodyHtml = relaceRuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
|
|
|
+ paperDetailUnit.getQuestion().setQuesBody(quesBodyHtml);
|
|
|
+ } else {
|
|
|
+ paperDetailUnit.setNumber(++subNum);
|
|
|
}
|
|
|
- } else {
|
|
|
- paperDetailUnit.setNumber(++subNum);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -514,10 +469,11 @@ public class PaperService {
|
|
|
*
|
|
|
* @param paper
|
|
|
*/
|
|
|
- public String formatPaper(Paper paper) {
|
|
|
+ public void formatPaper(Paper paper, AccessUser user) {
|
|
|
List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
// 计算试卷总分
|
|
|
List<PaperDetailUnit> paperDetailUnitAll = paperDetailUnitRepo.findByPaper(paper);
|
|
|
+ int allQuesCount = 0;
|
|
|
double totalScore = 0;
|
|
|
for (PaperDetailUnit unit : paperDetailUnitAll) {
|
|
|
if (unit.getScore() != null) {
|
|
@@ -537,7 +493,7 @@ public class PaperService {
|
|
|
if (unit.getScore() != null) {
|
|
|
score += unit.getScore();
|
|
|
}
|
|
|
- if (unit.getQuestion().getSubQuestions() != null
|
|
|
+ if (unit.getQuestion() != null && unit.getQuestion().getSubQuestions() != null
|
|
|
&& unit.getQuestion().getSubQuestions().size() > 0) {
|
|
|
nestQusNum += unit.getQuestion().getSubQuestions().size() - 1;
|
|
|
}
|
|
@@ -546,16 +502,19 @@ public class PaperService {
|
|
|
count = paperDetailUnits.size() + nestQusNum;
|
|
|
paperDetail.setScore(score);
|
|
|
paperDetail.setUnitCount(count);
|
|
|
+ allQuesCount += count;
|
|
|
} else {
|
|
|
paperDetail.setScore(0d);
|
|
|
}
|
|
|
}
|
|
|
- paper.setUnitCount(paperDetailUnitAll.size());
|
|
|
+ paper.setUnitCount(allQuesCount);
|
|
|
paper.setPaperDetailCount(paperDetails.size());
|
|
|
paper.setTotalScore(totalScore);
|
|
|
+ if (user != null) {
|
|
|
+ paper.setLastModifyName(user.getLoginName());
|
|
|
+ }
|
|
|
paperDetailRepo.save(paperDetails);
|
|
|
paperRepo.save(paper);
|
|
|
- return paper.getId();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -564,28 +523,31 @@ public class PaperService {
|
|
|
* @param questionId
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<String> deleteImportQuestionById(String questionId) {
|
|
|
+ public List<String> deleteImportQuestionById(String questionId, AccessUser user) {
|
|
|
Question ques = quesRepo.findOne(questionId);
|
|
|
List<PaperDetailUnit> pdus = CommonUtils.toList(paperDetailUnitRepo.findByQuestion(ques));
|
|
|
List<String> paperNames = new ArrayList<String>();
|
|
|
List<PaperDetailUnit> needPdus = new ArrayList<PaperDetailUnit>();// 需要删除的小题
|
|
|
List<Paper> papers = new ArrayList<Paper>();
|
|
|
for (PaperDetailUnit pdu : pdus) {
|
|
|
- if (PaperType.GENERATE == pdu.getPaper().getPaperType()) {
|
|
|
- paperNames.add(pdu.getPaper().getName());
|
|
|
- needPdus.add(pdu);
|
|
|
- if (!papers.contains(pdu.getPaper())) {
|
|
|
- papers.add(pdu.getPaper());
|
|
|
- }
|
|
|
+ if (pdu.getPaper() != null) {
|
|
|
+ if (PaperType.GENERATE == pdu.getPaper().getPaperType()) {
|
|
|
+ paperNames.add(pdu.getPaper().getName());
|
|
|
+ needPdus.add(pdu);
|
|
|
+ if (!papers.contains(pdu.getPaper())) {
|
|
|
+ papers.add(pdu.getPaper());
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
if (paperNames.size() == 0) {// 此试题没有被组卷调用,则可以删除此试题
|
|
|
paperDetailUnitRepo.delete(needPdus);
|
|
|
quesBakRepo.save(BeanCopierUtil.copyProperties(ques, QuestionBak.class));
|
|
|
quesRepo.delete(ques);
|
|
|
for (Paper paper : papers) {
|
|
|
- formatPaper(paper);
|
|
|
+ formatPaper(paper, user);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -617,7 +579,7 @@ public class PaperService {
|
|
|
pdu.setNumber(pdus.indexOf(pdu) + 1);
|
|
|
pdu.setScore(0d);
|
|
|
paperDetailUnitRepo.save(pdu);
|
|
|
- formatPaper(paper);
|
|
|
+ formatPaper(paper, user);
|
|
|
return paper;
|
|
|
|
|
|
}
|
|
@@ -663,7 +625,8 @@ public class PaperService {
|
|
|
return quesService.findByIdExclude(selectedIds, paper.getCourseNo(), quesType, curPage, pageSize);
|
|
|
}
|
|
|
|
|
|
- public Paper selectQuestionsToPaper(String paperId, String paperDetailId, List<Question> questions) {
|
|
|
+ public Paper selectQuestionsToPaper(String paperId, String paperDetailId, List<Question> questions,
|
|
|
+ AccessUser user) {
|
|
|
Paper paper = paperRepo.findOne(paperId);
|
|
|
PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
|
|
|
List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
|
|
@@ -685,14 +648,15 @@ public class PaperService {
|
|
|
}
|
|
|
|
|
|
paperDetailUnitRepo.save(saveUnits);
|
|
|
- formatPaper(paper);
|
|
|
+ formatPaper(paper, user);
|
|
|
return paper;
|
|
|
}
|
|
|
|
|
|
public String checkPaperName(String paperName, String orgId) {
|
|
|
String msg = null;
|
|
|
Paper paperTemp = new Paper();
|
|
|
- paperTemp.setName(paperName);
|
|
|
+ paperTemp.setCreateTime(null);
|
|
|
+ paperTemp.setName(paperName.trim());
|
|
|
paperTemp.setOrgId(orgId);
|
|
|
Paper paper = paperRepo.findOne(Example.of(paperTemp));
|
|
|
if (paper != null) {
|
|
@@ -702,4 +666,23 @@ public class PaperService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private String relaceRuestionIdx(String str, int baseIdx) {
|
|
|
+ StringBuffer sb = new StringBuffer("");
|
|
|
+ Pattern pattern = Pattern.compile("##(\\d+)##");
|
|
|
+
|
|
|
+ Matcher matcher = pattern.matcher(str);
|
|
|
+
|
|
|
+ while (matcher.find()) {
|
|
|
+ String idx = matcher.group(1);
|
|
|
+ matcher.appendReplacement(sb, "___" + String.valueOf(Integer.parseInt(idx) + baseIdx) + "___");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(sb.toString())) {
|
|
|
+ return str;
|
|
|
+ } else {
|
|
|
+ matcher.appendTail(sb);
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|