|
@@ -5,18 +5,25 @@ import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
import com.google.common.collect.Maps;
|
|
|
import com.google.common.collect.Sets;
|
|
import com.google.common.collect.Sets;
|
|
|
|
|
+import com.ruoyi.common.annotation.Excel;
|
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.enums.ExamType;
|
|
import com.ruoyi.common.enums.ExamType;
|
|
|
import com.ruoyi.common.enums.SubjectType;
|
|
import com.ruoyi.common.enums.SubjectType;
|
|
|
|
|
+import com.ruoyi.common.utils.CommonUtils;
|
|
|
import com.ruoyi.common.utils.NumberUtils;
|
|
import com.ruoyi.common.utils.NumberUtils;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.dz.domain.DzClasses;
|
|
import com.ruoyi.dz.domain.DzClasses;
|
|
|
|
|
+import com.ruoyi.dz.domain.DzSubject;
|
|
|
import com.ruoyi.dz.mapper.DzClassesMapper;
|
|
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.enums.PaperType;
|
|
|
import com.ruoyi.ie.domain.AMarjorPlan;
|
|
import com.ruoyi.ie.domain.AMarjorPlan;
|
|
|
import com.ruoyi.ie.mapper.AMarjorPlanMapper;
|
|
import com.ruoyi.ie.mapper.AMarjorPlanMapper;
|
|
|
import com.ruoyi.learn.domain.*;
|
|
import com.ruoyi.learn.domain.*;
|
|
|
import com.ruoyi.learn.mapper.*;
|
|
import com.ruoyi.learn.mapper.*;
|
|
|
|
|
+import com.ruoyi.learn.service.ILearnTestService;
|
|
|
import com.ruoyi.syzy.domain.BBusiWishUniversities;
|
|
import com.ruoyi.syzy.domain.BBusiWishUniversities;
|
|
|
import com.ruoyi.syzy.mapper.BBusiWishUniversitiesMapper;
|
|
import com.ruoyi.syzy.mapper.BBusiWishUniversitiesMapper;
|
|
|
import lombok.Data;
|
|
import lombok.Data;
|
|
@@ -45,8 +52,12 @@ public class LearnTeacherService {
|
|
|
private final LearnTestPaperMapper learnTestPaperMapper;
|
|
private final LearnTestPaperMapper learnTestPaperMapper;
|
|
|
private final LearnQuestionsMapper learnQuestionsMapper;
|
|
private final LearnQuestionsMapper learnQuestionsMapper;
|
|
|
private final LearnKnowledgeCourseMapper learnKnowledgeCourseMapper;
|
|
private final LearnKnowledgeCourseMapper learnKnowledgeCourseMapper;
|
|
|
|
|
+ private final LearnTestStudentMapper learnTestStudentMapper;
|
|
|
|
|
+ private final IDzSubjectService dzSubjectService;
|
|
|
|
|
+ private final ILearnTestService learnTestService;
|
|
|
|
|
+ private final LearnAnswerMapper learnAnswerMapper;
|
|
|
|
|
|
|
|
- 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, LearnAnswerMapper learnAnswerMapper) {
|
|
|
this.dzClassesMapper = dzClassesMapper;
|
|
this.dzClassesMapper = dzClassesMapper;
|
|
|
this.learnKnowledgeTreeMapper = learnKnowledgeTreeMapper;
|
|
this.learnKnowledgeTreeMapper = learnKnowledgeTreeMapper;
|
|
|
this.learnStudentMapper = learnStudentMapper;
|
|
this.learnStudentMapper = learnStudentMapper;
|
|
@@ -58,19 +69,55 @@ public class LearnTeacherService {
|
|
|
this.learnTestPaperMapper = learnTestPaperMapper;
|
|
this.learnTestPaperMapper = learnTestPaperMapper;
|
|
|
this.learnQuestionsMapper = learnQuestionsMapper;
|
|
this.learnQuestionsMapper = learnQuestionsMapper;
|
|
|
this.learnKnowledgeCourseMapper = learnKnowledgeCourseMapper;
|
|
this.learnKnowledgeCourseMapper = learnKnowledgeCourseMapper;
|
|
|
|
|
+ this.learnTestStudentMapper = learnTestStudentMapper;
|
|
|
|
|
+ this.dzSubjectService = dzSubjectService;
|
|
|
|
|
+ this.learnTestService = learnTestService;
|
|
|
|
|
+ this.learnAnswerMapper = learnAnswerMapper;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public List<LearnQuestions> getQuestionTypes(Long subjectId, Collection<Long> knowledgeIds) {
|
|
public List<LearnQuestions> getQuestionTypes(Long subjectId, Collection<Long> knowledgeIds) {
|
|
|
return learnQuestionsMapper.statQuestionTypes(subjectId, 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)){
|
|
if("ExactIntelligent".equals(buildType)){
|
|
|
- return dzClassesMapper.selectClassesDirectedBuildStats(buildType, teacherId, batchId, subjectId, null);
|
|
|
|
|
|
|
+ return dzClassesMapper.selectClassesDirectedBuildStats(req.toMap());
|
|
|
} else if("ExactHand".equals(buildType)){
|
|
} else if("ExactHand".equals(buildType)){
|
|
|
- return dzClassesMapper.selectClassesDirectedBuildStats(buildType, teacherId, batchId, subjectId, planId);
|
|
|
|
|
|
|
+ return dzClassesMapper.selectClassesDirectedBuildStats(req.toMap());
|
|
|
|
|
+ }
|
|
|
|
|
+ return dzClassesMapper.selectClassesBuildStats(req.toMap());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public List<JSONObject> getPaperClassRecords(TestPaperVO.TestPaperBuildReq req, Long teacherId) {
|
|
|
|
|
+ req.setTeacherId(teacherId);
|
|
|
|
|
+ String buildType = req.getBuildType();
|
|
|
|
|
+ if(buildType.startsWith("Exact")) {
|
|
|
|
|
+ req.setSubjectId(11L);
|
|
|
}
|
|
}
|
|
|
- return dzClassesMapper.selectClassesBuildStats(buildType, teacherId, batchId, subjectId, examType.name());
|
|
|
|
|
|
|
+ if("ExactIntelligent".equals(buildType)){
|
|
|
|
|
+ return dzClassesMapper.selectClassesDirectedBuildStats(req.toMap());
|
|
|
|
|
+ } else if("ExactHand".equals(buildType)){
|
|
|
|
|
+ return dzClassesMapper.selectClassesDirectedBuildStats(req.toMap());
|
|
|
|
|
+ }
|
|
|
|
|
+ return dzClassesMapper.selectClassesBuildStats(req.toMap());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public List<JSONObject> getPaperStudentRecords(TestPaperVO.TestPaperBuildReq req) {
|
|
|
|
|
+ return dzClassesMapper.getPaperStudentRecords(req.toMap());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public List<JSONObject> getPaperStudentDetail(Long studentId) {
|
|
|
|
|
+ List<JSONObject> list = learnAnswerMapper.selectKnowledgeStats(Dict.create().set("studentId", studentId).set("knowIds", Sets.newHashSet()));
|
|
|
|
|
+ list.forEach(o -> {
|
|
|
|
|
+ CommonUtils.normalRate(o);
|
|
|
|
|
+ o.put("directed", "1".equals(o.get("directed")));
|
|
|
|
|
+ });
|
|
|
|
|
+ return list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public List<DzClasses> getClasses(Long teacherId)
|
|
public List<DzClasses> getClasses(Long teacherId)
|
|
@@ -86,212 +133,198 @@ public class LearnTeacherService {
|
|
|
return busiWishUniversitiesMapper.selectUniversityListForTeacher(teacherId, batchId);
|
|
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 由于未区分考生类型,好些会重复,暂取最小计划,使用这个去匹配相关的类型
|
|
// 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());
|
|
.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)
|
|
@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());
|
|
List<LearnStudent> studentList = learnStudentMapper.selectLearnStudentsByMap(req.toMap());
|
|
|
if(CollectionUtils.isEmpty(studentList)) {
|
|
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);
|
|
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();
|
|
LearnPaper paper = new LearnPaper();
|
|
|
paper.setSubjectId(req.getSubjectId());
|
|
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.setPaperType(PaperType.Test.name());
|
|
|
paper.setDirectKey(directedKey);
|
|
paper.setDirectKey(directedKey);
|
|
|
paper.setFenshu(0);
|
|
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();
|
|
LearnTestPaper testPaper = new LearnTestPaper();
|
|
|
- testPaper.setBatchId(req.getBatchId());
|
|
|
|
|
|
|
+ testPaper.setBuildType(req.getBuildType());
|
|
|
testPaper.setUniversityId(universityId);
|
|
testPaper.setUniversityId(universityId);
|
|
|
|
|
+ testPaper.setExamType(examType);
|
|
|
|
|
+ testPaper.setBatchId(req.getBatchId());
|
|
|
|
|
+ testPaper.setSubjectId(req.getSubjectId());
|
|
|
testPaper.setDirectKey(directedKey);
|
|
testPaper.setDirectKey(directedKey);
|
|
|
testPaper.setPaperId(paper.getId());
|
|
testPaper.setPaperId(paper.getId());
|
|
|
|
|
+ testPaper.setConditions(JSONObject.toJSONString(req));
|
|
|
|
|
+ testPaper.setCreatorId(SecurityUtils.getUserId());
|
|
|
learnTestPaperMapper.insertLearnTestPaper(testPaper);
|
|
learnTestPaperMapper.insertLearnTestPaper(testPaper);
|
|
|
directPaperMap.put(directedKey, 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)
|
|
@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());
|
|
List<LearnStudent> studentList = learnStudentMapper.selectLearnStudentsByMap(req.toMap());
|
|
|
if(CollectionUtils.isEmpty(studentList)) {
|
|
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());
|
|
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.setDirectKey("");
|
|
|
|
|
+ paper.setStatus(PaperStatus.Valid.getVal());
|
|
|
|
|
+ paper.setRelateId(req.getBatchId().longValue());
|
|
|
paper.setFenshu(0);
|
|
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 "";
|
|
return "";
|
|
|
}
|
|
}
|