PaperBasicInfo
parent
1e8386f7c4
commit
4817abfde5
|
|
@ -2,18 +2,21 @@ package org.qinan.cedu.controller;
|
||||||
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.qinan.cedu.model.dto.PaperQuestionDeleteDTO;
|
import org.qinan.cedu.model.dto.PaperQuestionDeleteDTO;
|
||||||
import org.qinan.cedu.model.dto.PaperQuestionRelUpdateDTO;
|
import org.qinan.cedu.model.dto.PaperQuestionRelUpdateDTO;
|
||||||
import org.qinan.cedu.model.dto.PaperQuestionSaveDTO;
|
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.cedu.service.PaperQuestionRelService;
|
||||||
import org.qinan.safetyeval.client.dto.SingleResponse;
|
import org.qinan.safetyeval.client.dto.SingleResponse;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.validation.annotation.Validated;
|
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.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -41,6 +44,17 @@ public class PaperQuestionRelController {
|
||||||
return SingleResponse.success();
|
return SingleResponse.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询试卷习题详情(分值取自试卷试题关系)
|
||||||
|
*/
|
||||||
|
@ApiOperation("查询试卷习题详情")
|
||||||
|
@GetMapping("/find")
|
||||||
|
public SingleResponse<PaperQuestionDetailVO> 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("编辑试卷习题")
|
@ApiOperation("编辑试卷习题")
|
||||||
@PostMapping("/modify")
|
@PostMapping("/modify")
|
||||||
public SingleResponse<Void> modify(@Validated @RequestBody PaperQuestionRelUpdateDTO dto) {
|
public SingleResponse<Void> modify(@Validated @RequestBody PaperQuestionRelUpdateDTO dto) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package org.qinan.cedu.convertor;
|
package org.qinan.cedu.convertor;
|
||||||
|
|
||||||
import org.mapstruct.Mapper;
|
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.entity.PaperDO;
|
||||||
import org.qinan.cedu.model.vo.PaperBasicInfoVO;
|
import org.qinan.cedu.model.vo.PaperBasicInfoVO;
|
||||||
import org.qinan.cedu.model.vo.PaperPageVO;
|
import org.qinan.cedu.model.vo.PaperPageVO;
|
||||||
|
|
@ -21,4 +23,21 @@ public interface PaperConvertor {
|
||||||
* @return 试卷基础信息VO
|
* @return 试卷基础信息VO
|
||||||
*/
|
*/
|
||||||
PaperBasicInfoVO convertEToBasicVo(PaperDO entity);
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param;
|
||||||
import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO;
|
import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO;
|
||||||
import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO;
|
import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO;
|
||||||
import org.qinan.cedu.model.entity.QuestionDO;
|
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.PaperQuestionVO;
|
||||||
import org.qinan.cedu.model.vo.QuestionTypeCountVO;
|
import org.qinan.cedu.model.vo.QuestionTypeCountVO;
|
||||||
import org.qinan.cedu.model.vo.QuestionVO;
|
import org.qinan.cedu.model.vo.QuestionVO;
|
||||||
|
|
@ -36,6 +37,15 @@ public interface QuestionMapper extends BaseMapper<QuestionDO> {
|
||||||
*/
|
*/
|
||||||
QuestionVO findQuestion(@Param("questionId") Long questionId);
|
QuestionVO findQuestion(@Param("questionId") Long questionId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询试卷下的习题详情(关联试卷试题关系,分值取试卷试题关系的分值)
|
||||||
|
*
|
||||||
|
* @param paperId 试卷id
|
||||||
|
* @param questionId 试题id
|
||||||
|
* @return 试卷习题详情
|
||||||
|
*/
|
||||||
|
PaperQuestionDetailVO findPaperQuestion(@Param("paperId") Long paperId, @Param("questionId") Long questionId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询试卷下的试题列表(关联课件名称)
|
* 查询试卷下的试题列表(关联课件名称)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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<QuestionOptionVO> questionOptionVOList;
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import org.qinan.cedu.model.dto.PaperQuestionRelUpdateDTO;
|
import org.qinan.cedu.model.dto.PaperQuestionRelUpdateDTO;
|
||||||
import org.qinan.cedu.model.dto.PaperQuestionSaveDTO;
|
import org.qinan.cedu.model.dto.PaperQuestionSaveDTO;
|
||||||
import org.qinan.cedu.model.entity.PaperQuestionRelDO;
|
import org.qinan.cedu.model.entity.PaperQuestionRelDO;
|
||||||
|
import org.qinan.cedu.model.vo.PaperQuestionDetailVO;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
|
@ -27,6 +28,15 @@ public interface PaperQuestionRelService extends IService<PaperQuestionRelDO> {
|
||||||
*/
|
*/
|
||||||
void deletePaperQuestion(@NotNull Long paperId, @NotNull Long questionId);
|
void deletePaperQuestion(@NotNull Long paperId, @NotNull Long questionId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询试卷下的习题详情(含选项信息,分值取自试卷试题关系)
|
||||||
|
*
|
||||||
|
* @param paperId 试卷id
|
||||||
|
* @param questionId 试题id
|
||||||
|
* @return 试卷习题详情
|
||||||
|
*/
|
||||||
|
PaperQuestionDetailVO findPaperQuestion(Long paperId, Long questionId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* modify
|
* modify
|
||||||
* @param dto dto
|
* @param dto dto
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import org.qinan.cedu.model.entity.PaperDO;
|
||||||
import org.qinan.cedu.model.entity.PaperQuestionRelDO;
|
import org.qinan.cedu.model.entity.PaperQuestionRelDO;
|
||||||
import org.qinan.cedu.model.entity.QuestionDO;
|
import org.qinan.cedu.model.entity.QuestionDO;
|
||||||
import org.qinan.cedu.model.entity.QuestionOptionDO;
|
import org.qinan.cedu.model.entity.QuestionOptionDO;
|
||||||
|
import org.qinan.cedu.model.vo.PaperQuestionDetailVO;
|
||||||
import org.qinan.cedu.service.PaperQuestionRelService;
|
import org.qinan.cedu.service.PaperQuestionRelService;
|
||||||
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -94,6 +95,7 @@ public class PaperQuestionRelServiceImpl extends ServiceImpl<PaperQuestionRelMap
|
||||||
PaperQuestionRelDO rel = new PaperQuestionRelDO();
|
PaperQuestionRelDO rel = new PaperQuestionRelDO();
|
||||||
rel.setPaperId(dto.getPaperId());
|
rel.setPaperId(dto.getPaperId());
|
||||||
rel.setQuestionId(question.getId());
|
rel.setQuestionId(question.getId());
|
||||||
|
rel.setScore(dto.getScore());
|
||||||
InsertFieldDefaults.applyIgnoreOrgId(rel);
|
InsertFieldDefaults.applyIgnoreOrgId(rel);
|
||||||
this.save(rel);
|
this.save(rel);
|
||||||
}
|
}
|
||||||
|
|
@ -134,6 +136,25 @@ public class PaperQuestionRelServiceImpl extends ServiceImpl<PaperQuestionRelMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PaperQuestionDetailVO findPaperQuestion(Long paperId, Long questionId) {
|
||||||
|
PaperQuestionDetailVO detailVO = questionMapper.findPaperQuestion(paperId, questionId);
|
||||||
|
if (detailVO == null) {
|
||||||
|
throw new IllegalArgumentException("试卷试题不存在");
|
||||||
|
}
|
||||||
|
// 查询选项信息(仅查询VO需要的字段)
|
||||||
|
List<QuestionOptionDO> options = questionOptionMapper.selectList(new LambdaQueryWrapper<QuestionOptionDO>()
|
||||||
|
.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
|
@Override
|
||||||
public void modify(PaperQuestionRelUpdateDTO dto) {
|
public void modify(PaperQuestionRelUpdateDTO dto) {
|
||||||
// 校验试题存在且未删除
|
// 校验试题存在且未删除
|
||||||
|
|
|
||||||
|
|
@ -152,15 +152,8 @@ public class PaperServiceImpl extends ServiceImpl<PaperMapper, PaperDO> implemen
|
||||||
.in(QuestionOptionDO::getQuestionId, existQuestionIds)
|
.in(QuestionOptionDO::getQuestionId, existQuestionIds)
|
||||||
.eq(QuestionOptionDO::getDeleteEnum, DeleteEnum.FALSE.getCode()));
|
.eq(QuestionOptionDO::getDeleteEnum, DeleteEnum.FALSE.getCode()));
|
||||||
|
|
||||||
// 新增试卷(使用请求中的名称/总分/合格分数)
|
// 新增试卷(名称/总分/合格分数取请求,其余属性沿用源试卷)
|
||||||
PaperDO target = new PaperDO();
|
PaperDO target = paperConvertor.convertCopyDtoToE(copyDTO, source);
|
||||||
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());
|
|
||||||
InsertFieldDefaults.applyIgnoreOrgId(target);
|
InsertFieldDefaults.applyIgnoreOrgId(target);
|
||||||
this.savePaper(target);
|
this.savePaper(target);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,18 @@
|
||||||
AND q.delete_enum = 'false'
|
AND q.delete_enum = 'false'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="findPaperQuestion" resultType="org.qinan.cedu.model.vo.PaperQuestionDetailVO">
|
||||||
|
SELECT q.id, q.create_time, q.title, q.question_type, q.answer
|
||||||
|
, q.answer_question_option_ids, q.children_question_ids
|
||||||
|
, pqr.score, q.analysis, q.tag_type, q.courseware_management_id
|
||||||
|
FROM paper_question_rel pqr
|
||||||
|
JOIN question q ON pqr.question_id = q.id
|
||||||
|
WHERE pqr.paper_id = #{paperId}
|
||||||
|
AND pqr.question_id = #{questionId}
|
||||||
|
AND pqr.delete_enum = 'false'
|
||||||
|
AND q.delete_enum = 'false'
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="listPaperQuestions" resultType="org.qinan.cedu.model.vo.QuestionVO">
|
<select id="listPaperQuestions" resultType="org.qinan.cedu.model.vo.QuestionVO">
|
||||||
SELECT q.id, q.title, q.question_type, q.answer, q.answer_question_option_ids
|
SELECT q.id, q.title, q.question_type, q.answer, q.answer_question_option_ids
|
||||||
, q.score, q.analysis, q.tag_type, q.courseware_management_id
|
, q.score, q.analysis, q.tag_type, q.courseware_management_id
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue