|
@@ -28,6 +28,7 @@ import com.qmth.teachcloud.common.bean.dto.excel.*;
|
|
|
import com.qmth.teachcloud.common.bean.dto.excel.export.BasicStudentErrorExportDto;
|
|
|
import com.qmth.teachcloud.common.bean.dto.excel.export.SysUserErrorExportDto;
|
|
|
import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
|
|
|
+import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
|
|
|
import com.qmth.teachcloud.common.bean.params.ArraysParams;
|
|
|
import com.qmth.teachcloud.common.bean.params.UserSaveParams;
|
|
|
import com.qmth.teachcloud.common.bean.result.ExcelResult;
|
|
@@ -40,7 +41,10 @@ import com.qmth.teachcloud.common.enums.*;
|
|
|
import com.qmth.teachcloud.common.service.*;
|
|
|
import com.qmth.teachcloud.common.util.*;
|
|
|
import com.qmth.teachcloud.common.util.excel.ExcelError;
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupDto;
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupSingleDto;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkPaper;
|
|
|
+import com.qmth.teachcloud.mark.enums.ScorePolicy;
|
|
|
import com.qmth.teachcloud.mark.params.MarkQuestionParams;
|
|
|
import com.qmth.teachcloud.mark.service.MarkGroupService;
|
|
|
import com.qmth.teachcloud.mark.service.MarkPaperService;
|
|
@@ -2558,7 +2562,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|
|
}
|
|
|
|
|
|
// 3.评卷员校验
|
|
|
- if (Objects.isNull(markerCount) && Objects.isNull(markerCodes)){
|
|
|
+ if (Objects.isNull(markerCount) && Objects.isNull(markerCodes)) {
|
|
|
excelErrorList.add("[评卷员数量(系统生成)]和[绑定工号(英文逗号分隔)]不能同时为空");
|
|
|
}
|
|
|
|
|
@@ -2577,154 +2581,172 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|
|
throw ExceptionResultEnum.ERROR.exception(
|
|
|
subjectiveStructDtoList.stream().map(SubjectiveStructDto::getErrorMsg).filter(SystemConstant::strNotNull).collect(Collectors.joining(System.lineSeparator())));
|
|
|
} else {
|
|
|
- List<String> logicErrorList = new ArrayList<>();
|
|
|
+ List<String> paperErrorList = new ArrayList<>();
|
|
|
// 试卷编号-> 题目集合 Map
|
|
|
Map<String, List<SubjectiveStructDto>> paperQuestionsMap = subjectiveStructDtoList.stream().collect(Collectors.groupingBy(SubjectiveStructDto::getPaperNumber));
|
|
|
paperQuestionsMap.forEach((paperNumber, paperQuestionList) -> {
|
|
|
- if (markGroupService.countByExamIdAndPaperNumber(examId,paperNumber) > 0){
|
|
|
- logicErrorList.add(String.format("[试卷编号]%s,已存在分组,请先删除该试卷的所有分组再导入试题", paperNumber));
|
|
|
- }
|
|
|
- // 创建评卷试题
|
|
|
- List<MarkQuestion> markQuestionList = paperQuestionList.stream().flatMap(e -> {
|
|
|
- MarkQuestion markQuestion = new MarkQuestion();
|
|
|
- markQuestion.setExamId(examId);
|
|
|
- markQuestion.setPaperNumber(paperNumber);
|
|
|
- markQuestion.setPaperType(OptionsEnum.A.getCode());
|
|
|
- markQuestion.setObjective(false);
|
|
|
- markQuestion.setMainNumber(e.getMainNumber());
|
|
|
- markQuestion.setSubNumber(e.getSubNumber());
|
|
|
- markQuestion.setMainTitle(e.getMainTitle());
|
|
|
- markQuestion.setTotalScore(e.getTotalScore());
|
|
|
- markQuestion.setIntervalScore(e.getIntervalScore());
|
|
|
- return Stream.of(markQuestion);
|
|
|
- }).collect(Collectors.toList());
|
|
|
- MarkQuestionParams markQuestionParams = new MarkQuestionParams();
|
|
|
- markQuestionParams.setQuestions(markQuestionList);
|
|
|
- markQuestionParams.setExamId(examId);
|
|
|
- markQuestionParams.setPaperNumber(paperNumber);
|
|
|
- markQuestionService.saveQuestions(markQuestionParams);
|
|
|
-
|
|
|
-
|
|
|
- // 试卷下分组集合
|
|
|
- List<Integer> groupNumberList = paperQuestionList.stream()
|
|
|
- .map(SubjectiveStructDto::getGroupNumber)
|
|
|
- .distinct().sorted()
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- // 评卷员序号
|
|
|
- AtomicInteger markerNumber = new AtomicInteger(0);
|
|
|
- for (Integer groupNumber : groupNumberList) {
|
|
|
- // 分组下题目集合
|
|
|
- List<SubjectiveStructDto> groupQuestionList = paperQuestionList.stream()
|
|
|
- .filter(e -> e.getGroupNumber().equals(groupNumber))
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- String paperNumberGroupNumberNotice = String.format("[试卷编号]%s,[评卷分组(只能用小写数字)]%s",paperNumber, groupNumber);
|
|
|
-
|
|
|
- String orgName = null;
|
|
|
- Long orgId = null;
|
|
|
- BasicCourse basicCourse = basicCourseService.getOne(new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId,schoolId).eq(BasicCourse::getCode,groupQuestionList.get(0).getCourseCode()));
|
|
|
- if (Objects.isNull(basicCourse)){
|
|
|
- logicErrorList.add(paperNumberGroupNumberNotice + "的[课程代码]不存在");
|
|
|
- } else {
|
|
|
- Long teachingRoomId = basicCourse.getTeachingRoomId();
|
|
|
- SysOrg sysOrg = sysOrgService.getById(teachingRoomId);
|
|
|
- if (Objects.isNull(sysOrg)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("无法找到机构");
|
|
|
+ if (markGroupService.countByExamIdAndPaperNumber(examId, paperNumber) > 0) {
|
|
|
+ paperErrorList.add(String.format("[试卷编号]%s,已存在分组,请先删除该试卷的所有分组再导入试题", paperNumber));
|
|
|
+ } else {
|
|
|
+ // 优先删除该试卷的主观题
|
|
|
+ markQuestionService.remove(
|
|
|
+ new QueryWrapper<MarkQuestion>().lambda().eq(MarkQuestion::getExamId, examId)
|
|
|
+ .eq(MarkQuestion::getPaperNumber, paperNumber).eq(MarkQuestion::getObjective, false));
|
|
|
+
|
|
|
+ // 试卷下分组集合
|
|
|
+ List<Integer> groupNumberList = paperQuestionList.stream().map(SubjectiveStructDto::getGroupNumber)
|
|
|
+ .distinct().sorted().collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 评卷员序号
|
|
|
+ AtomicInteger markerNumber = new AtomicInteger(0);
|
|
|
+ for (Integer groupNumber : groupNumberList) {
|
|
|
+ List<String> groupErrorList = new ArrayList<>();
|
|
|
+ // 分组下题目集合
|
|
|
+ List<SubjectiveStructDto> groupQuestionList = paperQuestionList.stream()
|
|
|
+ .filter(e -> e.getGroupNumber().equals(groupNumber)).collect(Collectors.toList());
|
|
|
+
|
|
|
+ String paperNumberGroupNumberNotice = String.format("[试卷编号]%s,[评卷分组(只能用小写数字)]%s,的", paperNumber,
|
|
|
+ groupNumber);
|
|
|
+
|
|
|
+ String orgName = null;
|
|
|
+ Long orgId = null;
|
|
|
+ BasicCourse basicCourse = basicCourseService.getOne(
|
|
|
+ new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId)
|
|
|
+ .eq(BasicCourse::getCode, groupQuestionList.get(0).getCourseCode()));
|
|
|
+ if (Objects.isNull(basicCourse)) {
|
|
|
+ groupErrorList.add("[课程代码]不存在");
|
|
|
+ } else {
|
|
|
+ Long teachingRoomId = basicCourse.getTeachingRoomId();
|
|
|
+ SysOrg sysOrg = sysOrgService.getById(teachingRoomId);
|
|
|
+ if (Objects.isNull(sysOrg)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("无法找到机构");
|
|
|
+ }
|
|
|
+ orgName = sysOrg.getName();
|
|
|
+ orgId = sysOrg.getId();
|
|
|
}
|
|
|
- orgName = sysOrg.getName();
|
|
|
- orgId = sysOrg.getId();
|
|
|
- }
|
|
|
- Integer markerCount = null;
|
|
|
- String markerCodes = null;
|
|
|
- List<Integer> markerCountList = groupQuestionList.stream().map(SubjectiveStructDto::getMarkerCount).distinct().collect(Collectors.toList());
|
|
|
- if (CollectionUtils.isNotEmpty(markerCountList)){
|
|
|
- if (markerCountList.size() > 1){
|
|
|
- logicErrorList.add(paperNumberGroupNumberNotice + "的[评卷员数量(系统生成)]不一致");
|
|
|
- } else if (markerCountList.size() == 1){
|
|
|
- markerCount = markerCountList.get(0);
|
|
|
+ Integer markerCount = null;
|
|
|
+ String markerCodes = null;
|
|
|
+ List<Integer> markerCountList = groupQuestionList.stream().map(SubjectiveStructDto::getMarkerCount).distinct().collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(markerCountList)) {
|
|
|
+ if (markerCountList.size() > 1) {
|
|
|
+ groupErrorList.add("[评卷员数量(系统生成)]不一致");
|
|
|
+ } else if (markerCountList.size() == 1) {
|
|
|
+ markerCount = markerCountList.get(0);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
-
|
|
|
- List<String> markerCodesList= groupQuestionList.stream().map(SubjectiveStructDto::getMarkerCodes).distinct().collect(Collectors.toList());
|
|
|
- if (CollectionUtils.isNotEmpty(markerCodesList)){
|
|
|
- if (markerCodesList.size() > 1){
|
|
|
- logicErrorList.add(paperNumberGroupNumberNotice + "的[绑定工号(英文逗号分隔)]不一致");
|
|
|
- } else if (markerCodesList.size() == 1){
|
|
|
- markerCodes = markerCodesList.get(0);
|
|
|
+ List<String> markerCodesList = groupQuestionList.stream().map(SubjectiveStructDto::getMarkerCodes).distinct().collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(markerCodesList)) {
|
|
|
+ if (markerCodesList.size() > 1) {
|
|
|
+ groupErrorList.add("[绑定工号(英文逗号分隔)]不一致");
|
|
|
+ } else if (markerCodesList.size() == 1) {
|
|
|
+ markerCodes = markerCodesList.get(0);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // 组装评卷员信息
|
|
|
- List<MarkUser> markUsers = new ArrayList<>();
|
|
|
- if (SystemConstant.strNotNull(markerCodes)) {
|
|
|
- // 优先以绑定工号为准
|
|
|
- String[] markerCodeArray = markerCodes.split(SystemConstant.COMMA);
|
|
|
- for (String markerCode : markerCodeArray) {
|
|
|
- SysUser sysUser = sysUserService.getOne(
|
|
|
- new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getLoginName, markerCode).last(SystemConstant.LIMIT1));
|
|
|
- if (Objects.isNull(sysUser)) {
|
|
|
- logicErrorList.add(String.format("[试卷编号]%s,[评卷分组(只能用小写数字)]%s,[绑定工号(英文逗号分隔)]%s不存在", paperNumber, groupNumber, markerCode));
|
|
|
- } else {
|
|
|
- // 添加评卷员信息
|
|
|
+ // 组装评卷员信息
|
|
|
+ List<MarkUser> markUsers = new ArrayList<>();
|
|
|
+ if (SystemConstant.strNotNull(markerCodes)) {
|
|
|
+ // 优先以绑定工号为准
|
|
|
+ String[] markerCodeArray = markerCodes.split(SystemConstant.COMMA);
|
|
|
+ for (String markerCode : markerCodeArray) {
|
|
|
+ SysUser sysUser = sysUserService.getOne(
|
|
|
+ new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getLoginName, markerCode).last(SystemConstant.LIMIT1));
|
|
|
+ if (Objects.isNull(sysUser)) {
|
|
|
+ groupErrorList.add(paperNumberGroupNumberNotice + String.format(
|
|
|
+ "[绑定工号(英文逗号分隔)]中的%s,在系统中不存在请先创建用户", markerCode));
|
|
|
+ } else {
|
|
|
+ // 添加评卷员信息
|
|
|
+ MarkUser markUser = new MarkUser();
|
|
|
+ markUser.setUserId(sysUser.getId());
|
|
|
+ markUser.setLoginName(sysUser.getLoginName());
|
|
|
+ markUser.setName(sysUser.getRealName());
|
|
|
+ markUser.setOrgName(orgName);
|
|
|
+ markUsers.add(markUser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (Objects.nonNull(markerCount) && markerCount > 0) {
|
|
|
+ // 没有绑定工号且评卷员生成数量大于0,生成评卷员(或使用之前工号相同的评卷员)
|
|
|
+ for (int i = 0; i < markerCount; i++) {
|
|
|
+ int num = markerNumber.incrementAndGet();
|
|
|
+ if (num > 99) {
|
|
|
+ paperErrorList.add("[试卷编号]%s的[评卷员数量(系统生成)]总有效数量不能超过99");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ String markerCode = paperNumber + String.format("%02d", num);
|
|
|
+
|
|
|
+ SysUser sysUser = sysUserService.getOne(
|
|
|
+ new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getLoginName, markerCode).last(SystemConstant.LIMIT1));
|
|
|
+
|
|
|
MarkUser markUser = new MarkUser();
|
|
|
- markUser.setUserId(sysUser.getId());
|
|
|
- markUser.setLoginName(sysUser.getLoginName());
|
|
|
- markUser.setName(sysUser.getRealName());
|
|
|
+ markUser.setLoginName(markerCode);
|
|
|
markUser.setOrgName(orgName);
|
|
|
markUsers.add(markUser);
|
|
|
- }
|
|
|
- }
|
|
|
- } else if (Objects.nonNull(markerCount) && markerCount > 0) {
|
|
|
- // 没有绑定工号且评卷员生成数量大于0,生成评卷员(或使用之前工号相同的评卷员)
|
|
|
- for (int i = 0; i < markerCount; i++) {
|
|
|
- int num = markerNumber.incrementAndGet();
|
|
|
- if (num > 99){
|
|
|
- logicErrorList.add("[试卷编号]%s的[评卷员数量(系统生成)]总有效数量不能超过99");
|
|
|
- break;
|
|
|
- }
|
|
|
- String markerCode = String.format("%02d",num);
|
|
|
-
|
|
|
- SysUser sysUser = sysUserService.getOne(new QueryWrapper<SysUser>().lambda()
|
|
|
- .eq(SysUser::getSchoolId, schoolId)
|
|
|
- .eq(SysUser::getLoginName, markerCode)
|
|
|
- .last(SystemConstant.LIMIT1));
|
|
|
-
|
|
|
- MarkUser markUser = new MarkUser();
|
|
|
- markUser.setLoginName(markerCode);
|
|
|
- markUser.setOrgName(orgName);
|
|
|
- markUsers.add(markUser);
|
|
|
- if (Objects.nonNull(sysUser)){
|
|
|
- markUser.setUserId(sysUser.getId());
|
|
|
- markUser.setName(sysUser.getRealName());
|
|
|
- } else {
|
|
|
- // 创建用户
|
|
|
- UserSaveParams userSaveParams = new UserSaveParams();
|
|
|
- userSaveParams.setSchoolId(schoolId);
|
|
|
- userSaveParams.setLoginName(markerCode);
|
|
|
- userSaveParams.setRealName(markerCode);
|
|
|
- userSaveParams.setCode(markerCode);
|
|
|
- userSaveParams.setPassword(SystemConstant.DEFAULT_PASSWORD);
|
|
|
- userSaveParams.setOrgId(orgId);
|
|
|
- userSaveParams.setEnable(true);
|
|
|
- userSaveParams.setRoleIds(new Long[] { markerRole.getId() });
|
|
|
- try {
|
|
|
- markUser.setUserId(sysUserService.saveUser(userSaveParams));
|
|
|
- markUser.setName(markerCode);
|
|
|
- } catch (IllegalAccessException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ if (Objects.nonNull(sysUser)) {
|
|
|
+ markUser.setUserId(sysUser.getId());
|
|
|
+ markUser.setName(sysUser.getRealName());
|
|
|
+ } else {
|
|
|
+ // 创建用户
|
|
|
+ UserSaveParams userSaveParams = new UserSaveParams();
|
|
|
+ userSaveParams.setSchoolId(schoolId);
|
|
|
+ userSaveParams.setLoginName(markerCode);
|
|
|
+ userSaveParams.setRealName(markerCode);
|
|
|
+ userSaveParams.setCode(markerCode);
|
|
|
+ userSaveParams.setPassword(SystemConstant.DEFAULT_PASSWORD);
|
|
|
+ userSaveParams.setOrgId(orgId);
|
|
|
+ userSaveParams.setEnable(true);
|
|
|
+ userSaveParams.setRoleIds(new Long[] { markerRole.getId() });
|
|
|
+ try {
|
|
|
+ markUser.setUserId(sysUserService.saveUser(userSaveParams));
|
|
|
+ markUser.setName(markerCode);
|
|
|
+ } catch (IllegalAccessException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ if (CollectionUtils.isEmpty(groupErrorList) && CollectionUtils.isEmpty(paperErrorList)) {
|
|
|
+ // 创建评卷试题
|
|
|
+ List<MarkQuestion> markQuestionList = paperQuestionList.stream().filter(e -> groupNumber.equals(e.getGroupNumber())).flatMap(e -> {
|
|
|
+ MarkQuestion markQuestion = new MarkQuestion();
|
|
|
+ markQuestion.setExamId(examId);
|
|
|
+ markQuestion.setPaperNumber(paperNumber);
|
|
|
+ markQuestion.setPaperType(OptionsEnum.A.getCode());
|
|
|
+ markQuestion.setObjective(false);
|
|
|
+ markQuestion.setMainNumber(e.getMainNumber());
|
|
|
+ markQuestion.setSubNumber(e.getSubNumber());
|
|
|
+ markQuestion.setMainTitle(e.getMainTitle());
|
|
|
+ markQuestion.setTotalScore(e.getTotalScore());
|
|
|
+ markQuestion.setIntervalScore(e.getIntervalScore());
|
|
|
+ markQuestion.setQuestionType(QuestionType.QUESTION_ANSWER.getValue());
|
|
|
+ return Stream.of(markQuestion);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ markQuestionService.saveBatch(markQuestionList);
|
|
|
+
|
|
|
+ MarkGroupDto markGroupDto = new MarkGroupDto();
|
|
|
+ markGroupDto.setDoubleEnable(false);
|
|
|
+ markGroupDto.setGroupNumber(groupNumber);
|
|
|
+ markGroupDto.setMarkers(markUsers);
|
|
|
+ markGroupDto.setQuestions(markQuestionList);
|
|
|
+ markGroupDto.setPictureConfigs(new ArrayList<>());
|
|
|
+ MarkGroupSingleDto markGroupSingleDto = new MarkGroupSingleDto();
|
|
|
+ markGroupSingleDto.setExamId(examId);
|
|
|
+ markGroupSingleDto.setPaperNumber(paperNumber);
|
|
|
+ markGroupSingleDto.setGroupInfo(markGroupDto);
|
|
|
+ markGroupService.saveGroup(markGroupSingleDto);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(groupErrorList)) {
|
|
|
+ String groupErrorMsg = paperNumberGroupNumberNotice + String.join(",", groupErrorList);
|
|
|
+ paperErrorList.add(groupErrorMsg);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
});
|
|
|
+ if (CollectionUtils.isNotEmpty(paperErrorList)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(String.join(System.lineSeparator(), paperErrorList));
|
|
|
+ }
|
|
|
}
|
|
|
- return null;
|
|
|
+ return map;
|
|
|
}
|
|
|
|
|
|
/**
|