|
|
@@ -5,18 +5,24 @@ import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.google.common.collect.Sets;
|
|
|
+import com.ruoyi.common.annotation.Excel;
|
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.enums.ExamType;
|
|
|
import com.ruoyi.common.enums.SubjectType;
|
|
|
import com.ruoyi.common.utils.NumberUtils;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.dz.domain.DzClasses;
|
|
|
+import com.ruoyi.dz.domain.DzSubject;
|
|
|
import com.ruoyi.dz.mapper.DzClassesMapper;
|
|
|
+import com.ruoyi.dz.service.IDzSubjectService;
|
|
|
+import com.ruoyi.enums.ExamineeStatus;
|
|
|
+import com.ruoyi.enums.PaperStatus;
|
|
|
import com.ruoyi.enums.PaperType;
|
|
|
import com.ruoyi.ie.domain.AMarjorPlan;
|
|
|
import com.ruoyi.ie.mapper.AMarjorPlanMapper;
|
|
|
import com.ruoyi.learn.domain.*;
|
|
|
import com.ruoyi.learn.mapper.*;
|
|
|
+import com.ruoyi.learn.service.ILearnTestService;
|
|
|
import com.ruoyi.syzy.domain.BBusiWishUniversities;
|
|
|
import com.ruoyi.syzy.mapper.BBusiWishUniversitiesMapper;
|
|
|
import lombok.Data;
|
|
|
@@ -45,8 +51,11 @@ public class LearnTeacherService {
|
|
|
private final LearnTestPaperMapper learnTestPaperMapper;
|
|
|
private final LearnQuestionsMapper learnQuestionsMapper;
|
|
|
private final LearnKnowledgeCourseMapper learnKnowledgeCourseMapper;
|
|
|
+ private final LearnTestStudentMapper learnTestStudentMapper;
|
|
|
+ private final IDzSubjectService dzSubjectService;
|
|
|
+ private final ILearnTestService learnTestService;
|
|
|
|
|
|
- public LearnTeacherService(DzClassesMapper dzClassesMapper, LearnKnowledgeTreeMapper learnKnowledgeTreeMapper, LearnStudentMapper learnStudentMapper, AMarjorPlanMapper marjorPlanMapper, BBusiWishUniversitiesMapper busiWishUniversitiesMapper, LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper, PaperService paperService, CommService commService, LearnTestPaperMapper learnTestPaperMapper, LearnQuestionsMapper learnQuestionsMapper, LearnKnowledgeCourseMapper learnKnowledgeCourseMapper) {
|
|
|
+ public LearnTeacherService(DzClassesMapper dzClassesMapper, LearnKnowledgeTreeMapper learnKnowledgeTreeMapper, LearnStudentMapper learnStudentMapper, AMarjorPlanMapper marjorPlanMapper, BBusiWishUniversitiesMapper busiWishUniversitiesMapper, LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper, PaperService paperService, CommService commService, LearnTestPaperMapper learnTestPaperMapper, LearnQuestionsMapper learnQuestionsMapper, LearnKnowledgeCourseMapper learnKnowledgeCourseMapper, LearnTestStudentMapper learnTestStudentMapper, IDzSubjectService dzSubjectService, ILearnTestService learnTestService) {
|
|
|
this.dzClassesMapper = dzClassesMapper;
|
|
|
this.learnKnowledgeTreeMapper = learnKnowledgeTreeMapper;
|
|
|
this.learnStudentMapper = learnStudentMapper;
|
|
|
@@ -58,19 +67,27 @@ public class LearnTeacherService {
|
|
|
this.learnTestPaperMapper = learnTestPaperMapper;
|
|
|
this.learnQuestionsMapper = learnQuestionsMapper;
|
|
|
this.learnKnowledgeCourseMapper = learnKnowledgeCourseMapper;
|
|
|
+ this.learnTestStudentMapper = learnTestStudentMapper;
|
|
|
+ this.dzSubjectService = dzSubjectService;
|
|
|
+ this.learnTestService = learnTestService;
|
|
|
}
|
|
|
|
|
|
public List<LearnQuestions> getQuestionTypes(Long subjectId, Collection<Long> knowledgeIds) {
|
|
|
return learnQuestionsMapper.statQuestionTypes(subjectId, knowledgeIds);
|
|
|
}
|
|
|
|
|
|
- public List<JSONObject> getClassesBuildStats(String buildType, Long teacherId, Long batchId, ExamType examType, Long subjectId, Long planId) {
|
|
|
+ public List<JSONObject> getClassesBuildStats(TestPaperVO.TestPaperBuildReq req, Long teacherId) {
|
|
|
+ req.setTeacherId(teacherId);
|
|
|
+ String buildType = req.getBuildType();
|
|
|
+ if(buildType.startsWith("Exact")) {
|
|
|
+ req.setSubjectId(11L);
|
|
|
+ }
|
|
|
if("ExactIntelligent".equals(buildType)){
|
|
|
- return dzClassesMapper.selectClassesDirectedBuildStats(buildType, teacherId, batchId, subjectId, null);
|
|
|
+ return dzClassesMapper.selectClassesDirectedBuildStats(req.toMap());
|
|
|
} else if("ExactHand".equals(buildType)){
|
|
|
- return dzClassesMapper.selectClassesDirectedBuildStats(buildType, teacherId, batchId, subjectId, planId);
|
|
|
+ return dzClassesMapper.selectClassesDirectedBuildStats(req.toMap());
|
|
|
}
|
|
|
- return dzClassesMapper.selectClassesBuildStats(buildType, teacherId, batchId, subjectId, examType.name());
|
|
|
+ return dzClassesMapper.selectClassesBuildStats(req.toMap());
|
|
|
}
|
|
|
|
|
|
public List<DzClasses> getClasses(Long teacherId)
|
|
|
@@ -86,212 +103,198 @@ public class LearnTeacherService {
|
|
|
return busiWishUniversitiesMapper.selectUniversityListForTeacher(teacherId, batchId);
|
|
|
}
|
|
|
|
|
|
- public List<Dict> selectMajorList(Long universityId, Integer year, Long batchId) {
|
|
|
+ public List<Dict> selectMajorList(Long universityId, Integer year, Long batchId, String examType) {
|
|
|
// TODO 由于未区分考生类型,好些会重复,暂取最小计划,使用这个去匹配相关的类型
|
|
|
- return marjorPlanMapper.selectMajorForUniversity(universityId, year, batchId).stream().map(t -> Dict.create().set("id", t.getId()).set("majorGroup", t.getMajorGroup())
|
|
|
+ return marjorPlanMapper.selectMajorForUniversity(universityId, year, "ExactHand", batchId, 11L, examType).stream().map(t -> Dict.create().set("id", t.getId()).set("majorGroup", t.getMajorGroup())
|
|
|
.set("majorName", t.getMajorName()).set("count", t.getXuefei()).set("total", t.getPlanTotal())).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
+ public String buildDirectKey(LearnDirectedKnowledge dk) {
|
|
|
+ return dk.getUniversityId() + "_" + dk.getExamineeTypes() + "_" + StringUtils.trimToEmpty(dk.getDirectKey());
|
|
|
+ }
|
|
|
+ public String buildDirectKey(LearnStudent dk) {
|
|
|
+ return dk.getUniversityId() + "_" + dk.getExamType() + "_" + StringUtils.trimToEmpty(dk.getDirectKey());
|
|
|
+ }
|
|
|
+
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public String buildPapersAuto(TestPaperVO.TestPapersAutoReq req) {
|
|
|
- if(null != req) {
|
|
|
- return "";
|
|
|
- }
|
|
|
- // 查询 院校,专业组,专业计划范围, 明细一级时只有一个,否则就是批量
|
|
|
+ public String buildPapersDirect(TestPaperVO.TestPaperBuildReq req) {
|
|
|
+ // 查询待生成或发布的学生列表
|
|
|
List<LearnStudent> studentList = learnStudentMapper.selectLearnStudentsByMap(req.toMap());
|
|
|
if(CollectionUtils.isEmpty(studentList)) {
|
|
|
- throw new ValidationException("无可用计划可检查");
|
|
|
- }
|
|
|
- Set<Long> planIdSet = Sets.newHashSet();
|
|
|
- Map<Long, List<LearnStudent>> universityMap = Maps.newHashMap();
|
|
|
- for(LearnStudent ls : studentList){
|
|
|
- planIdSet.add(ls.getMajorPlanId());
|
|
|
- List<LearnStudent> list = universityMap.get(ls.getUniversityId());
|
|
|
- if(null == list) {
|
|
|
- list = Lists.newArrayList();
|
|
|
- universityMap.put(ls.getUniversityId(), list);
|
|
|
- }
|
|
|
- list.add(ls);
|
|
|
+ throw new ValidationException("无学生可发布");
|
|
|
}
|
|
|
+ // 定向手动是精准到一个计划,定向自动是对应一组计划
|
|
|
+ Map<Long, Map<String, List<LearnStudent>>> universityDirectStudentMap = studentList.stream()
|
|
|
+ .collect(Collectors.groupingBy(LearnStudent::getUniversityId, Collectors.groupingBy(this::buildDirectKey, Collectors.toList())));
|
|
|
// 查询已经生成的
|
|
|
- Map<Long, Map<String, LearnTestPaper>> universityDirectPaperMap = learnTestPaperMapper.selectByBatchAndUniversityIds(req.getBatchId(), universityMap.keySet()).stream()
|
|
|
- .collect(Collectors.groupingBy(LearnTestPaper::getUniversityId, Collectors.toMap(LearnTestPaper::getDirectKey, a -> a)));
|
|
|
- if(null == req.getDirectType() || !req.getDirectType()) { // 全量
|
|
|
- LearnPaper paper = new LearnPaper();
|
|
|
- paper.setPaperName(req.getTitle());
|
|
|
- paper.setYear(Calendar.getInstance().get(Calendar.YEAR));
|
|
|
- paper.setPaperType(PaperType.Test.name());
|
|
|
- paper.setSubjectId(req.getSubjectId());
|
|
|
- paper.setDirectKey("");
|
|
|
- paper.setFenshu(0);
|
|
|
- for(Long universityId : universityMap.keySet()) {
|
|
|
+ Map<Long, Map<String, LearnTestPaper>> universityDirectPaperMap = learnTestPaperMapper.selectByBatchAndUniversityIds(req.getBuildType(), req.getBatchId(), req.getSubjectId(), universityDirectStudentMap.keySet()).stream()
|
|
|
+ .collect(Collectors.groupingBy(LearnTestPaper::getUniversityId, Collectors.toMap(t -> StringUtils.trimToEmpty(t.getDirectKey()), a -> a)));
|
|
|
+ // 补充发卷
|
|
|
+ if("ExactHand".equals(req.getBuildType())) { // 肯定只有一个计划
|
|
|
+ for(Long universityId : universityDirectStudentMap.keySet()) {
|
|
|
+ Map<String, List<LearnStudent>> directedStudentsMap = universityDirectStudentMap.get(universityId);
|
|
|
Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
|
|
|
- if(null != directPaperMap && directPaperMap.containsKey("")) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if(null == paper.getId()) {
|
|
|
- Pair<LearnPaper, List<LearnPaperQuestion>> paperResult = paperService.buildPaper(null, paper, req.getPaperDef());
|
|
|
- paperService.savePaper(paper, paperResult.getRight());
|
|
|
- }
|
|
|
- LearnTestPaper testPaper = new LearnTestPaper();
|
|
|
- testPaper.setBatchId(req.getBatchId());
|
|
|
- testPaper.setUniversityId(universityId);
|
|
|
- testPaper.setDirectKey("");
|
|
|
- testPaper.setPaperId(paper.getId());
|
|
|
- learnTestPaperMapper.insertLearnTestPaper(testPaper);
|
|
|
+ buildPapersDirect(req, universityId, req.getExamType(), null, directedStudentsMap, directPaperMap);
|
|
|
}
|
|
|
- return "";
|
|
|
- }
|
|
|
- TestPaperVO.PaperDef paperDef = req.getPaperDef();
|
|
|
- if(null != req.getPlanIds() && req.getPlanIds().size() == 1) {
|
|
|
- if(!CollectionUtils.isEmpty(paperDef.getKnowIds())) {
|
|
|
- throw new ValidationException("批量时不支持自定义知识点");
|
|
|
+ } else {
|
|
|
+ // directKey = universityId_examType_directKey
|
|
|
+ Map<Long, Map<String, LearnDirectedKnowledge>> universityDirectedKnowledgeMap = learnDirectedKnowledgeMapper.selectByUniversityIds(universityDirectStudentMap.keySet().toArray(new Long[universityDirectStudentMap.size()])).stream().collect(
|
|
|
+ Collectors.groupingBy(LearnDirectedKnowledge::getUniversityId, Collectors.toMap(this::buildDirectKey, a -> a)));
|
|
|
+ for(Long universityId : universityDirectedKnowledgeMap.keySet()) {
|
|
|
+ Map<String, LearnDirectedKnowledge> directedKnowledgeMap = universityDirectedKnowledgeMap.get(universityId);
|
|
|
+ Map<String, List<LearnStudent>> directedStudentsMap = universityDirectStudentMap.get(universityId);
|
|
|
+ Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
|
|
|
+ if(null == directedKnowledgeMap) {
|
|
|
+ throw new ValidationException("院校无定向定义");
|
|
|
+ }
|
|
|
+ buildPapersDirect(req, universityId, req.getExamType(), directedKnowledgeMap, directedStudentsMap, directPaperMap);
|
|
|
}
|
|
|
}
|
|
|
- Map<Long, Map<String, LearnDirectedKnowledge>> universityDirectedKnowledgeMap = learnDirectedKnowledgeMapper.selectByUniversityIds(universityMap.keySet().toArray(new Long[universityMap.size()])).stream().collect(
|
|
|
- Collectors.groupingBy(LearnDirectedKnowledge::getUniversityId, Collectors.toMap(LearnDirectedKnowledge::getDirectKey, a -> a)));
|
|
|
- Map<Long, AMarjorPlan> planMap = marjorPlanMapper.selectAMarjorPlanByIds(planIdSet.toArray(new Long[planIdSet.size()])).stream().collect(Collectors.toMap(AMarjorPlan::getId, a -> a));
|
|
|
-
|
|
|
- LearnDirectedKnowledge directedKnowledge = null;
|
|
|
- String directedKey = null;
|
|
|
+ return "";
|
|
|
+ }
|
|
|
|
|
|
- for(Long universityId : universityMap.keySet()) {
|
|
|
- Map<String, LearnDirectedKnowledge> directedKnowledgeMap = universityDirectedKnowledgeMap.get(universityId);
|
|
|
- for(LearnStudent ls : universityMap.get(universityId)) {
|
|
|
- AMarjorPlan plan = planMap.get(ls.getMajorPlanId());
|
|
|
- String groupName = StringUtils.trimToEmpty(plan.getMajorGroup());
|
|
|
- if(CollectionUtils.isEmpty(paperDef.getKnowIds())) {
|
|
|
- if(null != (directedKnowledge = directedKnowledgeMap.get((directedKey = groupName + "_" + plan.getMajorName())))) {
|
|
|
- paperDef.setKnowIds(Stream.of(directedKnowledge.getKnowledges().split(",")).map(t -> Long.parseLong(t.trim())).collect(Collectors.toList()));
|
|
|
- } else if(null != (directedKnowledge = directedKnowledgeMap.get(directedKey = groupName))) {
|
|
|
- paperDef.setKnowIds(Stream.of(directedKnowledge.getKnowledges().split(",")).map(t -> Long.parseLong(t.trim())).collect(Collectors.toList()));
|
|
|
- } else {
|
|
|
- throw new ValidationException("院校没有配置定向知识点,生成失败: " + universityId + ":" + groupName + ":" + plan.getMajorName());
|
|
|
- }
|
|
|
- } else if(null != directedKnowledgeMap) {
|
|
|
- if(null != (directedKnowledge = directedKnowledgeMap.get((directedKey = groupName + "_" + plan.getMajorName())))) {
|
|
|
- } else if(null != (directedKnowledge = directedKnowledgeMap.get(directedKey = groupName))) {
|
|
|
- } else {
|
|
|
- throw new ValidationException("院校没有配置定向知识点,生成失败" + universityId + ":" + directedKey);
|
|
|
- }
|
|
|
- } else {
|
|
|
- throw new ValidationException("院校没有配置定向知识点,生成失败: " + universityId);
|
|
|
- }
|
|
|
- Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
|
|
|
- if(null != directPaperMap && directPaperMap.containsKey(directedKey)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
+ private void buildPapersDirect(TestPaperVO.TestPaperBuildReq req, Long universityId, String examType, Map<String, LearnDirectedKnowledge> directedKnowledgeMap, Map<String, List<LearnStudent>> directedStudentsMap, Map<String, LearnTestPaper> directPaperMap) {
|
|
|
+ if(null == directPaperMap) {
|
|
|
+ directPaperMap = Maps.newHashMap();
|
|
|
+ }
|
|
|
+ DzSubject dzSubject = dzSubjectService.selectDzSubjectBySubjectId(req.getSubjectId());
|
|
|
+ LearnTest learnTest = learnTestService.selectLearnTestByBatchId(req.getBatchId());
|
|
|
+ for(String directedKey : directedStudentsMap.keySet()) {
|
|
|
+ LearnTestPaper learnTestPaper;
|
|
|
+ if(null == (learnTestPaper = directPaperMap.get(directedKey))) {
|
|
|
LearnPaper paper = new LearnPaper();
|
|
|
paper.setSubjectId(req.getSubjectId());
|
|
|
- paper.setPaperName(req.getTitle());
|
|
|
- paper.setYear(plan.getYear());
|
|
|
+ String paperName = StringUtils.isBlank(req.getName()) ? learnTest.getName() + "_" + dzSubject.getSubjectName() + "_" + directedKey : req.getName();
|
|
|
+ paper.setPaperName(paperName.length() > 254 ? paperName.substring(0, 254) : paperName);
|
|
|
+ paper.setYear(Calendar.getInstance().get(Calendar.YEAR)); // TODO 年度
|
|
|
paper.setPaperType(PaperType.Test.name());
|
|
|
paper.setDirectKey(directedKey);
|
|
|
paper.setFenshu(0);
|
|
|
- Pair<LearnPaper, List<LearnPaperQuestion>> paperResult = paperService.buildPaper(null, paper, paperDef);
|
|
|
- paperService.savePaper(paperResult.getKey(), paperResult.getValue());
|
|
|
-
|
|
|
+ if(null == directedKnowledgeMap) {
|
|
|
+ List<LearnPaperQuestion> pqList = Lists.newArrayList();
|
|
|
+ for (LearnPaperQuestion q : req.getQuestions()) {
|
|
|
+ LearnPaperQuestion pq = new LearnPaperQuestion();
|
|
|
+ pq.setQuestionId(q.getId()); // 没传questionId?
|
|
|
+ pq.setSeq(pqList.size() + 1);
|
|
|
+ pq.setKnowledgeId(q.getKnowledgeId());
|
|
|
+ pq.setScore(null == q.getScore() ? 1.0 : q.getScore());
|
|
|
+ pqList.add(pq);
|
|
|
+ }
|
|
|
+ paperService.savePaper(paper, pqList);
|
|
|
+ } else {
|
|
|
+ LearnDirectedKnowledge directedKnowledge = directedKnowledgeMap.get(directedKey);
|
|
|
+ TestPaperVO.PaperDef paperDef = req.getPaperDef();
|
|
|
+ examType = directedKnowledge.getExamineeTypes();
|
|
|
+ paperDef.setKnowIds(Stream.of(directedKnowledge.getKnowledges().split(",")).map(t -> Long.parseLong(t.trim())).collect(Collectors.toList()));
|
|
|
+ if (CollectionUtils.isEmpty(paperDef.getTypes())) {
|
|
|
+ paperDef.setTypes(getQuestionTypes(null, paperDef.getKnowIds()).stream().map(t -> {
|
|
|
+ TestPaperVO.TypeDef typeDef = new TestPaperVO.TypeDef();
|
|
|
+ typeDef.setType(t.getQtpye());
|
|
|
+ typeDef.setScore(1);
|
|
|
+ typeDef.setTitle(t.getQtpye());
|
|
|
+ return typeDef;
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ if(paperDef.getTotal().equals(0L)) { // TODO 总数怎么定?
|
|
|
+ paperDef.setTotal(15L);
|
|
|
+ }
|
|
|
+ Pair<LearnPaper, List<LearnPaperQuestion>> paperResult = paperService.buildPaper(null, paper, paperDef);
|
|
|
+ paperService.savePaper(paperResult.getKey(), paperResult.getValue());
|
|
|
+ }
|
|
|
LearnTestPaper testPaper = new LearnTestPaper();
|
|
|
- testPaper.setBatchId(req.getBatchId());
|
|
|
+ testPaper.setBuildType(req.getBuildType());
|
|
|
testPaper.setUniversityId(universityId);
|
|
|
+ testPaper.setExamType(examType);
|
|
|
+ testPaper.setBatchId(req.getBatchId());
|
|
|
+ testPaper.setSubjectId(req.getSubjectId());
|
|
|
testPaper.setDirectKey(directedKey);
|
|
|
testPaper.setPaperId(paper.getId());
|
|
|
+ testPaper.setConditions(JSONObject.toJSONString(req));
|
|
|
+ testPaper.setCreatorId(SecurityUtils.getUserId());
|
|
|
learnTestPaperMapper.insertLearnTestPaper(testPaper);
|
|
|
directPaperMap.put(directedKey, testPaper);
|
|
|
+ learnTestPaper = testPaper;
|
|
|
+ }
|
|
|
+ for(LearnStudent student : directedStudentsMap.get(directedKey)) {
|
|
|
+ LearnTestStudent lts = new LearnTestStudent();
|
|
|
+ lts.setBatchId(req.getBatchId());
|
|
|
+ lts.setStudentId(student.getStudentId());
|
|
|
+ lts.setBuildType(req.getBuildType());
|
|
|
+ lts.setSubjectId(req.getSubjectId());
|
|
|
+ lts.setDirectKey(directedKey);
|
|
|
+ lts.setPaperId(learnTestPaper.getPaperId());
|
|
|
+ lts.setClassId(student.getClassId());
|
|
|
+ lts.setStatus(ExamineeStatus.Sign.getVal());
|
|
|
+ learnTestStudentMapper.insertLearnTestStudent(lts);
|
|
|
}
|
|
|
}
|
|
|
- return "";
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public String buildPapersManual(TestPaperVO.TestPapersHandReq req) {
|
|
|
- if(null != req) {
|
|
|
- return "";
|
|
|
- }
|
|
|
- if(null == req.getSubjectId()) {
|
|
|
- throw new ValidationException("未选择科目");
|
|
|
- }
|
|
|
- // 查询 院校,专业组,专业计划范围, 明细一级时只有一个,否则就是批量
|
|
|
+ public String buildPapersFull(TestPaperVO.TestPaperBuildReq req) {
|
|
|
List<LearnStudent> studentList = learnStudentMapper.selectLearnStudentsByMap(req.toMap());
|
|
|
if(CollectionUtils.isEmpty(studentList)) {
|
|
|
- throw new ValidationException("无可用计划可检查");
|
|
|
- }
|
|
|
- Set<Long> planIdSet = Sets.newHashSet();
|
|
|
- Map<Long, List<LearnStudent>> universityMap = Maps.newHashMap();
|
|
|
- for(LearnStudent ls : studentList){
|
|
|
- planIdSet.add(ls.getMajorPlanId());
|
|
|
- List<LearnStudent> list = universityMap.get(ls.getUniversityId());
|
|
|
- if(null == list) {
|
|
|
- list = Lists.newArrayList();
|
|
|
- universityMap.put(ls.getUniversityId(), list);
|
|
|
- }
|
|
|
- list.add(ls);
|
|
|
+ throw new ValidationException("无学生可发布");
|
|
|
}
|
|
|
+ DzSubject dzSubject = dzSubjectService.selectDzSubjectBySubjectId(req.getSubjectId());
|
|
|
+ LearnTest learnTest = learnTestService.selectLearnTestByBatchId(req.getBatchId());
|
|
|
// 查询已经生成的
|
|
|
- Map<Long, Map<String, LearnTestPaper>> universityDirectPaperMap = learnTestPaperMapper.selectByBatchAndUniversityIds(req.getBatchId(), universityMap.keySet()).stream()
|
|
|
- .collect(Collectors.groupingBy(LearnTestPaper::getUniversityId, Collectors.toMap(LearnTestPaper::getDirectKey, a -> a)));
|
|
|
-
|
|
|
- LearnPaper paper = new LearnPaper();
|
|
|
- paper.setPaperName(req.getTitle());
|
|
|
- paper.setYear(Calendar.getInstance().get(Calendar.YEAR));
|
|
|
- paper.setPaperType(PaperType.Test.name());
|
|
|
- if(null == req.getDirectType() || !req.getDirectType()) { // 全量
|
|
|
+ List<LearnTestPaper> learnTestPaperList = learnTestPaperMapper.selectByBatchAndUniversityIds(req.getBuildType(), req.getBatchId(), req.getSubjectId(),null);
|
|
|
+ LearnTestPaper learnTestPaper;
|
|
|
+ if(CollectionUtils.isEmpty(learnTestPaperList)) {
|
|
|
+ LearnPaper paper = new LearnPaper();
|
|
|
paper.setSubjectId(req.getSubjectId());
|
|
|
+ String paperName = StringUtils.isBlank(req.getName()) ? learnTest.getName() + "_" + dzSubject.getSubjectName() : req.getName();
|
|
|
+ paper.setPaperName(paperName.length() > 254 ? paperName.substring(0, 254) : paperName);
|
|
|
+ paper.setYear(Calendar.getInstance().get(Calendar.YEAR)); // TODO 年度
|
|
|
+ paper.setPaperType(PaperType.Test.name());
|
|
|
paper.setDirectKey("");
|
|
|
+ paper.setStatus(PaperStatus.Valid.getVal());
|
|
|
+ paper.setRelateId(req.getBatchId().longValue());
|
|
|
paper.setFenshu(0);
|
|
|
- for(Long universityId : universityMap.keySet()) {
|
|
|
- Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
|
|
|
- if(null != directPaperMap && directPaperMap.containsKey("")) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if(null == paper.getId()) {
|
|
|
- paperService.savePaper(paper, req.getQuestions());
|
|
|
+ if("FullHand".equals(req.getBuildType())) {
|
|
|
+ List<LearnPaperQuestion> pqList = Lists.newArrayList();
|
|
|
+ Double fenScore = 0.0;
|
|
|
+ for (LearnPaperQuestion q : req.getQuestions()) {
|
|
|
+ LearnPaperQuestion pq = new LearnPaperQuestion();
|
|
|
+ pq.setQuestionId(q.getId()); // 没传questionId?
|
|
|
+ pq.setSeq(pqList.size() + 1);
|
|
|
+ pq.setKnowledgeId(q.getKnowledgeId());
|
|
|
+ pq.setScore(null == q.getScore() ? 1.0 : q.getScore());
|
|
|
+ fenScore += q.getScore();
|
|
|
+ pqList.add(pq);
|
|
|
}
|
|
|
- LearnTestPaper testPaper = new LearnTestPaper();
|
|
|
- testPaper.setBatchId(req.getBatchId());
|
|
|
- testPaper.setUniversityId(universityId);
|
|
|
- testPaper.setDirectKey("");
|
|
|
- testPaper.setPaperId(paper.getId());
|
|
|
- testPaper.setConditions("");
|
|
|
- testPaper.setCreatorId(SecurityUtils.getUserId());
|
|
|
- learnTestPaperMapper.insertLearnTestPaper(testPaper);
|
|
|
- }
|
|
|
- return "";
|
|
|
- } // 定向
|
|
|
- // 准备定向数据
|
|
|
- Map<Long, Map<String, LearnDirectedKnowledge>> universityDirectedKnowledgeMap = learnDirectedKnowledgeMapper.selectByUniversityIds(universityMap.keySet().toArray(new Long[universityMap.size()])).stream().collect(
|
|
|
- Collectors.groupingBy(LearnDirectedKnowledge::getUniversityId, Collectors.toMap(LearnDirectedKnowledge::getDirectKey, a -> a)));
|
|
|
- Map<Long, AMarjorPlan> planMap = marjorPlanMapper.selectAMarjorPlanByIds(planIdSet.toArray(new Long[planIdSet.size()])).stream().collect(Collectors.toMap(AMarjorPlan::getId, a -> a));
|
|
|
-
|
|
|
- String directedKey = null;
|
|
|
- for(Long universityId : universityMap.keySet()) {
|
|
|
- Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
|
|
|
- Map<String, LearnDirectedKnowledge> directedKnowledgeMap = universityDirectedKnowledgeMap.get(universityId);
|
|
|
- for(LearnStudent ls : universityMap.get(universityId)) { // Group+Name
|
|
|
- AMarjorPlan plan = planMap.get(ls.getMajorPlanId());
|
|
|
- String groupName = StringUtils.trimToEmpty(plan.getMajorGroup());
|
|
|
- if(null != (directedKnowledgeMap.get(directedKey = groupName + "_" + plan.getMajorName()))) {
|
|
|
- if(null != directPaperMap.get(directedKey)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- } else if(null != directedKnowledgeMap.get(directedKey = groupName)) {
|
|
|
- if(null != directPaperMap.get(directedKey)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- } else {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if(null == paper.getId()) {
|
|
|
- paperService.savePaper(paper, req.getQuestions());
|
|
|
- }
|
|
|
- LearnTestPaper testPaper = new LearnTestPaper();
|
|
|
- testPaper.setBatchId(req.getBatchId());
|
|
|
- testPaper.setUniversityId(universityId);
|
|
|
- testPaper.setDirectKey(directedKey);
|
|
|
- testPaper.setPaperId(paper.getId());
|
|
|
- learnTestPaperMapper.insertLearnTestPaper(testPaper);
|
|
|
- directPaperMap.put(directedKey, testPaper);
|
|
|
+ paper.setFenshu((int) Math.round(fenScore));
|
|
|
+ paperService.savePaper(paper, pqList);
|
|
|
+ } else {
|
|
|
+ Pair<LearnPaper, List<LearnPaperQuestion>> paperResult = paperService.buildPaper(null, paper, req.getPaperDef());
|
|
|
+ paperService.savePaper(paperResult.getKey(), paperResult.getValue());
|
|
|
}
|
|
|
+ LearnTestPaper testPaper = new LearnTestPaper();
|
|
|
+ testPaper.setBuildType(req.getBuildType());
|
|
|
+ testPaper.setBatchId(req.getBatchId());
|
|
|
+ testPaper.setExamType(req.getExamType());
|
|
|
+ testPaper.setSubjectId(req.getSubjectId());
|
|
|
+ testPaper.setDirectKey("");
|
|
|
+ testPaper.setPaperId(paper.getId());
|
|
|
+ testPaper.setConditions(JSONObject.toJSONString(req));
|
|
|
+ testPaper.setCreatorId(SecurityUtils.getUserId());
|
|
|
+ learnTestPaperMapper.insertLearnTestPaper(testPaper);
|
|
|
+ learnTestPaper = testPaper;
|
|
|
+ } else {
|
|
|
+ learnTestPaper = learnTestPaperList.get(0);
|
|
|
+ }
|
|
|
+ for(LearnStudent student : studentList) {
|
|
|
+ LearnTestStudent lts = new LearnTestStudent();
|
|
|
+ lts.setBatchId(req.getBatchId());
|
|
|
+ lts.setStudentId(student.getStudentId());
|
|
|
+ lts.setBuildType(req.getBuildType());
|
|
|
+ lts.setSubjectId(req.getSubjectId());
|
|
|
+ lts.setDirectKey("");
|
|
|
+ lts.setPaperId(learnTestPaper.getPaperId());
|
|
|
+ lts.setClassId(student.getClassId());
|
|
|
+ lts.setStatus(ExamineeStatus.Sign.getVal());
|
|
|
+ learnTestStudentMapper.insertLearnTestStudent(lts);
|
|
|
}
|
|
|
return "";
|
|
|
}
|