diff --git a/src/main/java/com/project/appeal/application/Impl/AppealApplicationImpl.java b/src/main/java/com/project/appeal/application/Impl/AppealApplicationImpl.java index 7847e90..5a4c845 100644 --- a/src/main/java/com/project/appeal/application/Impl/AppealApplicationImpl.java +++ b/src/main/java/com/project/appeal/application/Impl/AppealApplicationImpl.java @@ -75,10 +75,10 @@ public class AppealApplicationImpl implements AppealApplication { if (dto.getId() != null) { exportDTO.setId(String.valueOf(dto.getId())); } - // 格式化操作时间为字符串 - if (dto.getUpdateTime() != null) { - exportDTO.setUpdateTime(sdf.format(dto.getUpdateTime())); - } + // 格式化操作时间为字符串,V1.1去掉 +// if (dto.getUpdateTime() != null) { +// exportDTO.setUpdateTime(sdf.format(dto.getUpdateTime())); +// } appealExportDTOList.add(exportDTO); } diff --git a/src/main/java/com/project/appeal/domain/dto/AppealDTO.java b/src/main/java/com/project/appeal/domain/dto/AppealDTO.java index f7419e1..c980698 100644 --- a/src/main/java/com/project/appeal/domain/dto/AppealDTO.java +++ b/src/main/java/com/project/appeal/domain/dto/AppealDTO.java @@ -1,18 +1,8 @@ package com.project.appeal.domain.dto; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; import com.project.base.domain.dto.BaseDTO; -import com.project.base.domain.entity.BaseEntity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; import lombok.Data; -import lombok.EqualsAndHashCode; -import org.hibernate.annotations.Comment; + import java.util.List; @@ -37,4 +27,9 @@ public class AppealDTO extends BaseDTO { private Integer status = 1; private String remark; private String reason; + // V1.1 新增:题目分数 + private Double score; + private String scoreStr; + // V1.1 新增:修改后得分 + private Double revisedScore; } diff --git a/src/main/java/com/project/appeal/domain/dto/AppealExportDTO.java b/src/main/java/com/project/appeal/domain/dto/AppealExportDTO.java index 6fc51f9..76af844 100644 --- a/src/main/java/com/project/appeal/domain/dto/AppealExportDTO.java +++ b/src/main/java/com/project/appeal/domain/dto/AppealExportDTO.java @@ -8,14 +8,16 @@ public class AppealExportDTO{ @ExcelProperty("ID") private String id; - @ExcelProperty("关联子产品线") - private String subLineName; + /*V1.1去掉*/ +// @ExcelProperty("关联子产品线") +// private String subLineName; @ExcelProperty("用户名") private String username; - @ExcelProperty("知识点") - private String kpContentsStr; + /*V1.1去掉*/ +// @ExcelProperty("知识点") +// private String kpContentsStr; @ExcelProperty("题目") private String questionContent; @@ -29,6 +31,7 @@ public class AppealExportDTO{ @ExcelProperty("申诉备注") private String remark; - @ExcelProperty(value = "操作时间") - private String updateTime; + /*V1.1去掉*/ +// @ExcelProperty(value = "操作时间") +// private String updateTime; } diff --git a/src/main/java/com/project/appeal/domain/entity/AppealEntity.java b/src/main/java/com/project/appeal/domain/entity/AppealEntity.java index 3994c96..2d27f6f 100644 --- a/src/main/java/com/project/appeal/domain/entity/AppealEntity.java +++ b/src/main/java/com/project/appeal/domain/entity/AppealEntity.java @@ -63,4 +63,10 @@ public class AppealEntity extends BaseEntity { @Column(name = "reason",columnDefinition = "varchar(600) comment '审批理由'") private String reason; + + // V1.1 新增:用于存储审批通过后,修改得分 + @Comment("修改后得分") + @Column(name = "revised_score") + @TableField("revised_score") + private Double revisedScore; } diff --git a/src/main/java/com/project/appeal/domain/param/AppealParam.java b/src/main/java/com/project/appeal/domain/param/AppealParam.java index 5a65c8e..611ddb1 100644 --- a/src/main/java/com/project/appeal/domain/param/AppealParam.java +++ b/src/main/java/com/project/appeal/domain/param/AppealParam.java @@ -9,4 +9,9 @@ public class AppealParam extends BaseParam { public Long lineId; public Long businessId; public String subLineName; + // V1.1 新增 + // 考试任务ID + public Long taskId; + // 申诉人用户名 + public String username; } diff --git a/src/main/java/com/project/appeal/domain/service/Impl/CheckAppealDomainServiceImpl.java b/src/main/java/com/project/appeal/domain/service/Impl/CheckAppealDomainServiceImpl.java index 108fb4a..bcbecc6 100644 --- a/src/main/java/com/project/appeal/domain/service/Impl/CheckAppealDomainServiceImpl.java +++ b/src/main/java/com/project/appeal/domain/service/Impl/CheckAppealDomainServiceImpl.java @@ -12,10 +12,16 @@ import com.project.base.domain.exception.MissingParameterException; import com.project.base.domain.exception.PermissionErrorException; import com.project.ding.domain.enums.UserRoleEnum; import com.project.ding.utils.SecurityUtils; +import com.project.question.domain.entity.QuestionEntity; +import com.project.question.domain.service.QuestionBaseService; +import com.project.task.domain.entity.TaskEntity; +import com.project.task.domain.enums.QuestionTypeEnum; +import com.project.task.domain.service.TaskBaseService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.List; @Service @@ -23,32 +29,40 @@ public class CheckAppealDomainServiceImpl implements CheckAppealDomainService { @Autowired private AppealBaseService appealBaseService; + @Autowired + private QuestionBaseService questionBaseService; + + @Autowired + private TaskBaseService taskBaseService; + @Override public void checkDto(AppealDTO appealDTO) { - if (ObjectUtil.isEmpty(appealDTO.getId()) && ObjectUtil.isEmpty(appealDTO.getExamId())){ - throw new MissingParameterException("缺少考试ID"); - } - if (ObjectUtil.isEmpty(appealDTO.getId()) && ObjectUtil.isEmpty(appealDTO.getQuestionId())){ - throw new MissingParameterException("缺少题目ID"); - } - if (ObjectUtil.isEmpty(appealDTO.getId()) && StringUtils.isBlank(appealDTO.getUserAnswer())){ - throw new MissingParameterException("缺少用户答案"); - } - if (ObjectUtil.isEmpty(appealDTO.getId()) && StringUtils.isBlank(appealDTO.getRemark())){ - throw new MissingParameterException("缺少申诉理由"); - } + //申述 + if (ObjectUtil.isEmpty(appealDTO.getId())){ + if (ObjectUtil.isNull(appealDTO.getExamId())){ + throw new MissingParameterException("缺少考试ID"); + } + if (ObjectUtil.isNull(appealDTO.getQuestionId())){ + throw new MissingParameterException("缺少题目ID"); + } + if (StringUtils.isBlank(appealDTO.getUserAnswer())){ + throw new MissingParameterException("缺少用户答案"); + } + if (ObjectUtil.isNull(appealDTO.getTaskId())){ + throw new MissingParameterException("缺少考试任务"); + } + TaskEntity task = taskBaseService.getById(appealDTO.getTaskId()); + if (ObjectUtil.isNull(task)){ + throw new MissingParameterException("考试任务不存在"); + } + if (StringUtils.isBlank(appealDTO.getRemark())){ + throw new MissingParameterException("缺少申诉理由"); + } + if (!appealDTO.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue())){ + throw new BusinessErrorException("申诉状态错误"); + } - if (ObjectUtil.isEmpty(appealDTO.getId()) && !appealDTO.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue())){ - throw new BusinessErrorException("申诉状态错误"); - } - if (ObjectUtil.isNotEmpty(appealDTO.getId()) && appealDTO.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue())){ - throw new BusinessErrorException("申诉状态错误"); - } - if (!appealDTO.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue()) && StringUtils.isBlank(appealDTO.getReason())){ - throw new BusinessErrorException("缺少审批意见"); - } - //校验题目是否以申诉过 - if (ObjectUtil.isEmpty(appealDTO.getId()) ){ + //校验题目是否以申诉过 QueryWrapper entityQueryWrapper = new QueryWrapper<>(); entityQueryWrapper.eq("exam_id", appealDTO.getExamId()); entityQueryWrapper.eq("question_id", appealDTO.getQuestionId()); @@ -57,21 +71,48 @@ public class CheckAppealDomainServiceImpl implements CheckAppealDomainService { throw new BusinessErrorException("题目已申诉"); } } + //审批 + if (ObjectUtil.isNotEmpty(appealDTO.getId()) ){ + if(appealDTO.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue())) { + throw new BusinessErrorException("申诉状态错误"); + } - //校验当前数据是否以审批 - if (ObjectUtil.isNotEmpty(appealDTO.getId())){ + //校验当前数据是否以审批 AppealEntity entity = appealBaseService.getById(appealDTO.getId()); if (!entity.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue())){ throw new BusinessErrorException("题目已审批"); } - } - //权限校验 - if (ObjectUtil.isNotEmpty(appealDTO.getId()) && !appealDTO.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue())){ - //校验权限 - List userRoles = SecurityUtils.getUserRoles(); - if(!userRoles.stream().anyMatch(UserRoleEnum.ROLE_ADMIN.name()::equals)){ - throw new PermissionErrorException(); + + //权限校验 + if (!appealDTO.getStatus().equals(AppealStatusEnum.PENDING_REVIEW.getValue())){ + //校验权限 + List userRoles = SecurityUtils.getUserRoles(); + if(!userRoles.stream().anyMatch(UserRoleEnum.ROLE_ADMIN.name()::equals)){ + throw new PermissionErrorException(); + } + } + + if(StringUtils.isBlank(appealDTO.getReason())){ + throw new BusinessErrorException("缺少审批意见"); + } + + // 简答题审批通过必须填写修改后得分,且不能超过题目分值 + if (appealDTO.getStatus().equals(AppealStatusEnum.PASS_REVIEW.getValue())) { + QuestionEntity question = questionBaseService.getById(entity.getQuestionId()); + if (question != null && QuestionTypeEnum.SHORT_ANSWER.getValue().equals(question.getQuestionType())) { + if (appealDTO.getRevisedScore() == null || new BigDecimal(appealDTO.getRevisedScore()).compareTo(BigDecimal.ZERO) <= 0) { + throw new BusinessErrorException("简答题审批通过必须填写修改后得分或得分必须大于0"); + } + TaskEntity task = taskBaseService.getById(entity.getTaskId()); + if (task == null){ + throw new BusinessErrorException("考试任务不存在"); + } + if (appealDTO.getRevisedScore().compareTo(task.getShortAnswerScore()) > 0) { + throw new BusinessErrorException("修改后得分不能大于简答题分值"); + } + } } } + } } diff --git a/src/main/java/com/project/appeal/domain/service/Impl/SaveAppealDomainServiceImpl.java b/src/main/java/com/project/appeal/domain/service/Impl/SaveAppealDomainServiceImpl.java index c68e6ca..5e4310b 100644 --- a/src/main/java/com/project/appeal/domain/service/Impl/SaveAppealDomainServiceImpl.java +++ b/src/main/java/com/project/appeal/domain/service/Impl/SaveAppealDomainServiceImpl.java @@ -98,9 +98,9 @@ public class SaveAppealDomainServiceImpl implements SaveAppealDomainService { //更新申诉状态 examRecordMapper.updateHasAppealed(index, examRecordDTO.getId()); return Result.success(appealDTO); - }else if(appealDTO.getStatus().equals(AppealStatusEnum.PASS_REVIEW.getValue()) && !questionSnapshotDTO.getIsRight()){ + }else if(appealDTO.getStatus().equals(AppealStatusEnum.PASS_REVIEW.getValue()) && !Boolean.TRUE.equals(questionSnapshotDTO.getIsRight())){ //审批通过需要加分 - calculateScore(appealDTO, examRecordDTO, questionSnapshotDTO.getType()); + calculateScore(appealDTO, examRecord, index, questionSnapshotDTO.getType()); } //通知用户 dingUtil.sendWorkNotice(appealDTO); @@ -111,27 +111,45 @@ public class SaveAppealDomainServiceImpl implements SaveAppealDomainService { /** * 计算分数(审批通过需要加分) */ - public void calculateScore(AppealDTO appealDTO, ExamRecordDTO examRecordDTO,int type) { - //审批通过需要加分 - TaskEntity taskEntity = taskMapper.getTaskByTaskUserId(examRecordDTO.getTaskUserId()); + public void calculateScore(AppealDTO appealDTO, ExamRecordEntity examRecord, int index, int type) { + TaskEntity taskEntity = taskMapper.getTaskByTaskUserId(examRecord.getTaskUserId()); + + List snapshots = examRecord.getAnswerSnapshot(); + ExamRecordEntity.QuestionSnapshot snapshot = snapshots.get(index); QuestionTypeEnum questionType = QuestionTypeEnum.findByValue(type); if (questionType == null) { throw new BusinessErrorException("不支持的题目类型:" + type); } - Double questionScore = switch (questionType) { - case SINGLE_CHOICE-> taskEntity.getSingleChoiceScore(); - case MULTIPLE_CHOICE -> taskEntity.getMultipleChoiceScore(); - case TRUE_FALSE -> taskEntity.getTrueFalseScore(); + + BigDecimal scoreChange; + switch (questionType) { + case SINGLE_CHOICE -> scoreChange = BigDecimal.valueOf(taskEntity.getSingleChoiceScore()); + case MULTIPLE_CHOICE -> scoreChange = BigDecimal.valueOf(taskEntity.getMultipleChoiceScore()); + case TRUE_FALSE -> scoreChange = BigDecimal.valueOf(taskEntity.getTrueFalseScore()); + case SHORT_ANSWER -> { + Double revisedScore = appealDTO.getRevisedScore(); + double originalAiScore = snapshot.getAiScore() == null ? 0D : snapshot.getAiScore(); + //判断简答题是否得满分 + if (taskEntity.getShortAnswerScore() != null) { + snapshot.setIsRight(BigDecimal.valueOf(revisedScore) + .compareTo(BigDecimal.valueOf(taskEntity.getShortAnswerScore())) >= 0); + } + scoreChange = BigDecimal.valueOf(revisedScore).subtract(BigDecimal.valueOf(originalAiScore)); + } default -> throw new BusinessErrorException("不支持的题目类型:" + type); - }; + } - //总分+单题分数 - BigDecimal score = BigDecimal.valueOf(questionScore).add(BigDecimal.valueOf(examRecordDTO.getScore())).setScale(2, RoundingMode.HALF_UP); + if (questionType != QuestionTypeEnum.SHORT_ANSWER) { + snapshot.setIsRight(true); + } + + //总分+分数变化 + BigDecimal score = BigDecimal.valueOf(examRecord.getScore()).add(scoreChange).setScale(2, RoundingMode.HALF_UP); //判断是否考试通过,且是否需要修改当前考试结果 BigDecimal passScoreBig = taskEntity.getPassScore() == null ? BigDecimal.ZERO : new BigDecimal(taskEntity.getPassScore()); - boolean isNeedUpdate = score.compareTo(passScoreBig) >= 0 && !examRecordDTO.getPass(); + boolean isNeedUpdate = score.compareTo(passScoreBig) >= 0 && !examRecord.getPass(); if (isNeedUpdate){ //更新考试结果 taskUserMapper.update( @@ -141,13 +159,15 @@ public class SaveAppealDomainServiceImpl implements SaveAppealDomainService { .eq(TaskUserEntity::getTaskId, taskEntity.getId()) .set(TaskUserEntity::getStatus, 2) ); + examRecord.setPass(true); } if(score.compareTo(new BigDecimal(100)) > 0){ score = new BigDecimal(100); - }; + } - //保存 - examRecordMapper.updateScore(score.doubleValue(),examRecordDTO.getId(),isNeedUpdate); + examRecord.setScore(score.doubleValue()); + examRecord.setAnswerSnapshot(snapshots); + examRecordMapper.updateById(examRecord); } } diff --git a/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java b/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java index d94fd26..9cf23bb 100644 --- a/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java +++ b/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java @@ -1,6 +1,6 @@ package com.project.appeal.domain.service.Impl; -import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -13,14 +13,13 @@ import com.project.appeal.mapper.AppealMapper; import com.project.base.domain.result.PageResult; import com.project.base.domain.result.Result; import com.project.base.domain.utils.PageConverter; -import com.project.information.domain.entity.KnowledgePointEntity; -import com.project.information.domain.service.KnowledgePointBaseService; import com.project.information.mapper.ProductLineMapper; import com.project.question.domain.entity.QuestionEntity; import com.project.question.domain.entity.TaskKnowledgePointEntity; import com.project.question.domain.service.QuestionBaseService; import com.project.question.domain.service.TaskKnowledgePointBaseService; import com.project.task.domain.dto.TaskDTO; +import com.project.task.domain.enums.QuestionTypeEnum; import com.project.task.mapper.TaskMapper; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -28,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.text.NumberFormat; import java.util.*; import java.util.stream.Collectors; @@ -50,22 +50,30 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService public Result> list(AppealParam appealParam) { QueryWrapper appealEntityQueryWrapper = new QueryWrapper<>(); IPage appealDTOIPage = new Page<>(); - Map taskIdToSubLineNameMap = new HashMap<>(); + Map taskIdToLineAndCountMap = new HashMap<>(); + + if (appealParam.getTaskId() != null) { + appealEntityQueryWrapper.eq("task_id", appealParam.getTaskId()); + } + if (StringUtils.isNotBlank(appealParam.getUsername())) { + appealEntityQueryWrapper.like("username", appealParam.getUsername()); + } + appealEntityQueryWrapper.orderByDesc("create_time"); if (appealParam.getBusinessId() == null && appealParam.getLineId() == null && appealParam.getSubLineId() == null && StringUtils.isBlank(appealParam.getSubLineName())) { Page appealEntityPage = appealMapper.selectPage(PageConverter.toMpPage(appealParam), appealEntityQueryWrapper); appealDTOIPage = appealEntityPage.convert(entity -> entity.toDTO(AppealDTO::new)); //查询产品线相关的考试任务 - Set taskIdSet = appealDTOIPage.getRecords().stream().map(appealDTO -> appealDTO.getTaskId()).collect(Collectors.toSet()); + Set taskIdSet = appealDTOIPage.getRecords().stream().map(AppealDTO::getTaskId).collect(Collectors.toSet()); if (!CollectionUtils.isEmpty(taskIdSet)){ List taskByIds = productLineMapper.getSubLineByTaskIDS(taskIdSet); - taskIdToSubLineNameMap = taskByIds.stream().collect(Collectors.toMap(TaskDTO::getId, TaskDTO::getSubLineName)); + taskIdToLineAndCountMap = taskByIds.stream().collect(Collectors.toMap(TaskDTO::getId, taskDTO -> new Object[]{taskDTO.getSubLineName(),taskDTO.getShortAnswerScore()})); } }else{ //查询产品线相关的考试任务 List taskByAppealParam = taskMapper.getTaskByAppealParam(appealParam.getSubLineId(),appealParam.getLineId(),appealParam.getBusinessId(),appealParam.getSubLineName()); - taskIdToSubLineNameMap = taskByAppealParam.stream().collect(Collectors.toMap(TaskDTO::getId, TaskDTO::getSubLineName)); + taskIdToLineAndCountMap = taskByAppealParam.stream().collect(Collectors.toMap(TaskDTO::getId, taskDTO -> new Object[]{taskDTO.getSubLineName(),taskDTO.getShortAnswerScore()})); if (!CollectionUtils.isEmpty(taskByAppealParam)){ //查询申诉列表 @@ -74,7 +82,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService appealDTOIPage = appealEntityPage.convert(entity -> entity.toDTO(AppealDTO::new)); } } - appealDTOIPage.setRecords(buildDTO(appealDTOIPage.getRecords(),taskIdToSubLineNameMap)); + appealDTOIPage.setRecords(buildDTO(appealDTOIPage.getRecords(),taskIdToLineAndCountMap)); return Result.page(appealDTOIPage); } @@ -82,7 +90,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService /** * 构建返回实体 */ - private List buildDTO(List appealDTOList,Map taskIdToSubLineNameMap){ + private List buildDTO(List appealDTOList,Map taskIdToLineAndCountMap){ if (CollectionUtils.isEmpty(appealDTOList)){ return appealDTOList; } @@ -90,10 +98,10 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService //获取题目信息 Set questionIdList = appealDTOList.stream() .filter(appealDTO -> ObjectUtils.isNotEmpty(appealDTO.getExamId())) - .map(appealDTO -> appealDTO.getQuestionId()) + .map(AppealDTO::getQuestionId) .collect(Collectors.toSet()); Map questionEntityMap = questionBaseService.listByIds(questionIdList).stream() - .collect(Collectors.toMap(questionEntity -> questionEntity.getId(), questionEntity -> questionEntity)); + .collect(Collectors.toMap(QuestionEntity::getId, questionEntity -> questionEntity)); //知识点拼接和填充题目相关信息 Set kpIdSet = new HashSet<>(); @@ -102,7 +110,22 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService QuestionEntity questionEntity = questionEntityMap.get(appealDTO.getQuestionId()); QuestionEntity.QuestionDetail questionDetail = questionEntity.getQuestionDetail(); - appealDTO.setSubLineName(taskIdToSubLineNameMap.get(appealDTO.getTaskId())); + Object[] lineCountArr = taskIdToLineAndCountMap.get(appealDTO.getTaskId()); + // 兜底默认值 + String subLineName = ""; + Double score = 0D; + if (lineCountArr != null && lineCountArr.length >= 2) { + subLineName = ObjectUtil.isNull(lineCountArr[0]) ? "" : (String) lineCountArr[0]; + if (QuestionTypeEnum.SHORT_ANSWER.getValue().equals(questionEntity.getQuestionType())) { + score = ObjectUtil.isNull(lineCountArr[1]) ? 0D : (Double) lineCountArr[1]; + } + } + appealDTO.setSubLineName(subLineName); + appealDTO.setScore(score); + // 格式化去除千分位、整数无小数点,统一工具格式化 + String scoreStr = score == score.longValue() ? String.valueOf(score.longValue()) : String.format("%.2f", score); + appealDTO.setScoreStr(scoreStr); + appealDTO.setQuestionContent(questionDetail.getQuestionContent()); appealDTO.setKpIdList(questionEntity.getKpIdList()); kpIdSet.addAll(questionEntity.getKpIdList()); @@ -144,7 +167,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService List kpIdList = Optional.ofNullable(appealDTO.getKpIdList()).orElse(Collections.emptyList()); String kpContentStr = kpIdList.stream() - .filter(kpId -> kpIdToEntityMap.containsKey(kpId)) + .filter(kpIdToEntityMap::containsKey) .map(kpId -> kpIdToEntityMap.get(kpId).getContent()) .filter(StringUtils::isNotBlank) .map(content -> content.replaceAll(KEY_VALUE_PATTERN, "$1:$2")) diff --git a/src/main/java/com/project/exam/domain/entity/ExamRecordEntity.java b/src/main/java/com/project/exam/domain/entity/ExamRecordEntity.java index 4e1eaee..0541821 100644 --- a/src/main/java/com/project/exam/domain/entity/ExamRecordEntity.java +++ b/src/main/java/com/project/exam/domain/entity/ExamRecordEntity.java @@ -2,6 +2,7 @@ package com.project.exam.domain.entity; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -17,8 +18,6 @@ import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; import org.springframework.beans.BeanUtils; -import java.math.BigDecimal; -import java.math.RoundingMode; import java.text.NumberFormat; import java.util.Date; import java.util.List; @@ -129,7 +128,7 @@ public class ExamRecordEntity extends BaseEntity { dto.setAnswerSnapshotDTOList(dtoList); } //转成string类型,如果是整数则不显示小数部分,如果是小数则保留两位小数 - String scoreStr = dto.getScore() == null ? "0" : NumberFormat.getInstance().format(dto.getScore()); + String scoreStr = ObjectUtil.isNull(dto.getScore()) ? "0" : NumberFormat.getInstance().format(dto.getScore()); dto.setScoreStr(scoreStr); } return result; diff --git a/src/main/java/com/project/exam/domain/service/impl/BuildExamRecordDomainServiceImpl.java b/src/main/java/com/project/exam/domain/service/impl/BuildExamRecordDomainServiceImpl.java index cb3436e..647cb7d 100644 --- a/src/main/java/com/project/exam/domain/service/impl/BuildExamRecordDomainServiceImpl.java +++ b/src/main/java/com/project/exam/domain/service/impl/BuildExamRecordDomainServiceImpl.java @@ -49,10 +49,13 @@ public class BuildExamRecordDomainServiceImpl implements BuildExamRecordDomainSe answerSnapshotDTO.setScore(dto.getTaskDTO().getTrueFalseScore()); answerSnapshotDTO.setUserScore(BooleanUtil.isTrue(answerSnapshotDTO.getIsRight()) ? dto.getTaskDTO().getTrueFalseScore() : 0); - } else { + } else if (QuestionTypeEnum.MULTIPLE_CHOICE.getValue().equals(answerSnapshotDTO.getType())){ answerSnapshotDTO.setScore(dto.getTaskDTO().getMultipleChoiceScore()); answerSnapshotDTO.setUserScore(BooleanUtil.isTrue(answerSnapshotDTO.getIsRight()) ? dto.getTaskDTO().getMultipleChoiceScore() : 0); + }else{ + answerSnapshotDTO.setScore(dto.getTaskDTO().getShortAnswerScore()); + answerSnapshotDTO.setUserScore(answerSnapshotDTO.getAiScore()); } answerSnapshotDTO.setTypeText(Try.of(() -> QuestionTypeEnum.findByValue(answerSnapshotDTO.getType()).getDescription()) @@ -89,6 +92,11 @@ public class BuildExamRecordDomainServiceImpl implements BuildExamRecordDomainSe answerSnapshotDTO.setAppealStatus(appeal.getStatus()); answerSnapshotDTO.setAppealStatusText(AppealStatusEnum.getDescByValue(appeal.getStatus())); answerSnapshotDTO.setAppealReason(appeal.getReason()); + //如果是简答题,且审批通过,需要填充修改后的用户得分 + if (QuestionTypeEnum.SHORT_ANSWER.getValue().equals(answerSnapshotDTO.getType()) + && AppealStatusEnum.PASS_REVIEW.getValue().equals(appeal.getStatus())) { + answerSnapshotDTO.setUserScore(appeal.getRevisedScore()); + } } } }); diff --git a/src/main/java/com/project/exam/mapper/ExamRecordMapper.java b/src/main/java/com/project/exam/mapper/ExamRecordMapper.java index e762c55..9e87e4a 100644 --- a/src/main/java/com/project/exam/mapper/ExamRecordMapper.java +++ b/src/main/java/com/project/exam/mapper/ExamRecordMapper.java @@ -20,19 +20,6 @@ public interface ExamRecordMapper extends BaseMapper { @Param("idx") int idx, @Param("answer") String answer); - @Update("") - void updateScore(@Param("score") double score, - @Param("id") Long id, - @Param("isNeedUpdate") boolean isNeedUpdate); - @Update("UPDATE evaluator_exam_record SET " + "answer_snapshot = JSON_SET(answer_snapshot, '$[${index}].hasAppealed', true), " + "update_time = NOW() " + diff --git a/src/main/java/com/project/information/mapper/ProductLineMapper.java b/src/main/java/com/project/information/mapper/ProductLineMapper.java index bc9ef0f..6a1c0ea 100644 --- a/src/main/java/com/project/information/mapper/ProductLineMapper.java +++ b/src/main/java/com/project/information/mapper/ProductLineMapper.java @@ -14,7 +14,7 @@ import java.util.Set; public interface ProductLineMapper extends BaseMapper { @Select({ "