diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperQuestionRelController.java b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperQuestionRelController.java index 030ed833..9d41ad24 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperQuestionRelController.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperQuestionRelController.java @@ -2,18 +2,21 @@ package org.qinan.cedu.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.qinan.cedu.model.dto.PaperQuestionDeleteDTO; import org.qinan.cedu.model.dto.PaperQuestionRelUpdateDTO; import org.qinan.cedu.model.dto.PaperQuestionSaveDTO; -import org.qinan.cedu.model.dto.QuestionUpdateDTO; +import org.qinan.cedu.model.vo.PaperQuestionDetailVO; import org.qinan.cedu.service.PaperQuestionRelService; import org.qinan.safetyeval.client.dto.SingleResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -41,6 +44,17 @@ public class PaperQuestionRelController { return SingleResponse.success(); } + /** + * 查询试卷习题详情(分值取自试卷试题关系) + */ + @ApiOperation("查询试卷习题详情") + @GetMapping("/find") + public SingleResponse find(@RequestParam @ApiParam(value = "试卷id", required = true) Long paperId, + @RequestParam @ApiParam(value = "试题id", required = true) Long questionId) { + PaperQuestionDetailVO detailVO = paperQuestionRelService.findPaperQuestion(paperId, questionId); + return SingleResponse.success(detailVO); + } + @ApiOperation("编辑试卷习题") @PostMapping("/modify") public SingleResponse modify(@Validated @RequestBody PaperQuestionRelUpdateDTO dto) { diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/convertor/PaperConvertor.java b/safety-cedu-service/src/main/java/org/qinan/cedu/convertor/PaperConvertor.java index 7f078a48..b336446b 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/convertor/PaperConvertor.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/convertor/PaperConvertor.java @@ -1,6 +1,8 @@ package org.qinan.cedu.convertor; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.qinan.cedu.model.dto.PaperCopyDTO; import org.qinan.cedu.model.entity.PaperDO; import org.qinan.cedu.model.vo.PaperBasicInfoVO; import org.qinan.cedu.model.vo.PaperPageVO; @@ -21,4 +23,21 @@ public interface PaperConvertor { * @return 试卷基础信息VO */ PaperBasicInfoVO convertEToBasicVo(PaperDO entity); + + /** + * 复制试卷:新试卷名称/总分/合格分数取请求,状态/类型/组卷规则/考试时长沿用源试卷 + * + * @param dto 复制试卷请求 + * @param source 源试卷实体 + * @return 新试卷实体(id为空,由保存时生成) + */ + @Mapping(target = "id", ignore = true) + @Mapping(target = "paperName", expression = "java(dto.getPaperName().trim())") + @Mapping(target = "paperTotalScore", source = "dto.paperTotalScore") + @Mapping(target = "paperPassScore", source = "dto.paperPassScore") + @Mapping(target = "status", source = "source.status") + @Mapping(target = "paperType", source = "source.paperType") + @Mapping(target = "configRule", source = "source.configRule") + @Mapping(target = "examTime", source = "source.examTime") + PaperDO convertCopyDtoToE(PaperCopyDTO dto, PaperDO source); } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java index d4887758..dc686d97 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java @@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param; import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO; import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO; import org.qinan.cedu.model.entity.QuestionDO; +import org.qinan.cedu.model.vo.PaperQuestionDetailVO; import org.qinan.cedu.model.vo.PaperQuestionVO; import org.qinan.cedu.model.vo.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionVO; @@ -36,6 +37,15 @@ public interface QuestionMapper extends BaseMapper { */ QuestionVO findQuestion(@Param("questionId") Long questionId); + /** + * 查询试卷下的习题详情(关联试卷试题关系,分值取试卷试题关系的分值) + * + * @param paperId 试卷id + * @param questionId 试题id + * @return 试卷习题详情 + */ + PaperQuestionDetailVO findPaperQuestion(@Param("paperId") Long paperId, @Param("questionId") Long questionId); + /** * 查询试卷下的试题列表(关联课件名称) * diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/PaperQuestionDetailVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/PaperQuestionDetailVO.java new file mode 100644 index 00000000..21c61dd0 --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/PaperQuestionDetailVO.java @@ -0,0 +1,60 @@ + +package org.qinan.cedu.model.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 试卷习题详情(分值取自试卷试题关系) + */ +@Data +public class PaperQuestionDetailVO { + + @ApiModelProperty("主键") + @JsonSerialize(using = ToStringSerializer.class) + private String id; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @ApiModelProperty("题目内容") + private String title; + + @ApiModelProperty("题型:single单选/multiple多选/judge判断/fill填空/short简答") + private String questionType; + + @ApiModelProperty("参考答案:逗号隔开") + private String answer; + + @ApiModelProperty("答案选项id 多个逗号隔开") + private String answerQuestionOptionIds; + + @ApiModelProperty("子题 多个逗号分割") + private String childrenQuestionIds; + + @ApiModelProperty("分值(取自试卷试题关系)") + private BigDecimal score; + + @ApiModelProperty("答案解析") + private String analysis; + + @ApiModelProperty("标签类型") + private String tagType; + + @ApiModelProperty("关联课件管理id") + @JsonSerialize(using = ToStringSerializer.class) + private Long coursewareManagementId; + + @ApiModelProperty("试题选项信息") + private List questionOptionVOList; +} diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperQuestionRelService.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperQuestionRelService.java index af095fe5..a51a540b 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperQuestionRelService.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperQuestionRelService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.qinan.cedu.model.dto.PaperQuestionRelUpdateDTO; import org.qinan.cedu.model.dto.PaperQuestionSaveDTO; import org.qinan.cedu.model.entity.PaperQuestionRelDO; +import org.qinan.cedu.model.vo.PaperQuestionDetailVO; import javax.validation.constraints.NotNull; @@ -27,6 +28,15 @@ public interface PaperQuestionRelService extends IService { */ void deletePaperQuestion(@NotNull Long paperId, @NotNull Long questionId); + /** + * 查询试卷下的习题详情(含选项信息,分值取自试卷试题关系) + * + * @param paperId 试卷id + * @param questionId 试题id + * @return 试卷习题详情 + */ + PaperQuestionDetailVO findPaperQuestion(Long paperId, Long questionId); + /** * modify * @param dto dto diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperQuestionRelServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperQuestionRelServiceImpl.java index b92f3d4b..17252b98 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperQuestionRelServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperQuestionRelServiceImpl.java @@ -21,6 +21,7 @@ import org.qinan.cedu.model.entity.PaperDO; import org.qinan.cedu.model.entity.PaperQuestionRelDO; import org.qinan.cedu.model.entity.QuestionDO; import org.qinan.cedu.model.entity.QuestionOptionDO; +import org.qinan.cedu.model.vo.PaperQuestionDetailVO; import org.qinan.cedu.service.PaperQuestionRelService; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.stereotype.Service; @@ -94,6 +95,7 @@ public class PaperQuestionRelServiceImpl extends ServiceImpl options = questionOptionMapper.selectList(new LambdaQueryWrapper() + .select(QuestionOptionDO::getId, QuestionOptionDO::getQuestionId, + QuestionOptionDO::getOptionKey, QuestionOptionDO::getOptionName, + QuestionOptionDO::getOptionText, QuestionOptionDO::getIsCorrect, + QuestionOptionDO::getSortOrder) + .eq(QuestionOptionDO::getQuestionId, questionId) + .eq(QuestionOptionDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) + .orderByAsc(QuestionOptionDO::getSortOrder)); + detailVO.setQuestionOptionVOList(questionConvertor.convertOptionEListToVoList(options)); + return detailVO; + } + @Override public void modify(PaperQuestionRelUpdateDTO dto) { // 校验试题存在且未删除 diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperServiceImpl.java index a79ce14f..0672f9df 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperServiceImpl.java @@ -152,15 +152,8 @@ public class PaperServiceImpl extends ServiceImpl implemen .in(QuestionOptionDO::getQuestionId, existQuestionIds) .eq(QuestionOptionDO::getDeleteEnum, DeleteEnum.FALSE.getCode())); - // 新增试卷(使用请求中的名称/总分/合格分数) - PaperDO target = new PaperDO(); - target.setPaperName(copyDTO.getPaperName().trim()); - target.setPaperTotalScore(copyDTO.getPaperTotalScore()); - target.setPaperPassScore(copyDTO.getPaperPassScore()); - target.setStatus(source.getStatus()); - target.setPaperType(source.getPaperType()); - target.setConfigRule(source.getConfigRule()); - target.setExamTime(source.getExamTime()); + // 新增试卷(名称/总分/合格分数取请求,其余属性沿用源试卷) + PaperDO target = paperConvertor.convertCopyDtoToE(copyDTO, source); InsertFieldDefaults.applyIgnoreOrgId(target); this.savePaper(target); diff --git a/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml b/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml index 5c5b54f4..f0034a5d 100644 --- a/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml +++ b/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml @@ -32,6 +32,18 @@ AND q.delete_enum = 'false' + +