dev-tmp1
luotaiqian 2026-08-19 14:17:29 +08:00
parent 1abec00b36
commit 8833a1d575
4 changed files with 37 additions and 15 deletions

View File

@ -12,7 +12,6 @@ import org.qinan.cedu.service.PaperService;
import org.qinan.cedu.service.QuestionService; import org.qinan.cedu.service.QuestionService;
import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.SingleResponse;
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.*; import org.springframework.web.bind.annotation.*;
@ -56,11 +55,16 @@ public class PaperController {
return SingleResponse.success(); return SingleResponse.success();
} }
@ApiOperation("新建试卷-导入试题") @ApiOperation("新建试卷-导入试题")
@PostMapping("/import") @PostMapping("/import")
public PaperImportVO importQuestions(@Validated PaperImportDTO paperImportDTO) { public SingleResponse<PaperImportVO> importQuestions(@Validated PaperImportDTO paperImportDTO) {
return paperService.importQuestions(paperImportDTO); return SingleResponse.success(paperService.importQuestions(paperImportDTO));
}
@ApiOperation("新建试卷-导入试题-模板")
@GetMapping("/import/template")
public SingleResponse<String> importQuestionsTemplate() {
return SingleResponse.success(paperService.importQuestionsTemplate());
} }
@ApiOperation("试卷试题分页查询") @ApiOperation("试卷试题分页查询")

View File

@ -80,4 +80,13 @@ public interface PaperService extends IService<PaperDO> {
* @return + * @return +
*/ */
PaperImportVO importQuestions(PaperImportDTO importDTO); PaperImportVO importQuestions(PaperImportDTO importDTO);
/**
* importQuestionsTemplate
*
* @return String
*/
String importQuestionsTemplate();
} }

View File

@ -28,7 +28,7 @@ import org.qinan.cedu.model.vo.PaperPageVO;
import org.qinan.cedu.service.PaperService; import org.qinan.cedu.service.PaperService;
import org.qinan.cedu.service.support.QuestionExcelImporter; import org.qinan.cedu.service.support.QuestionExcelImporter;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -36,7 +36,6 @@ import org.springframework.util.StringUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -52,9 +51,11 @@ public class PaperServiceImpl extends ServiceImpl<PaperMapper, PaperDO> implemen
private final PaperQuestionRelMapper paperQuestionRelMapper; private final PaperQuestionRelMapper paperQuestionRelMapper;
private final QuestionOptionMapper questionOptionMapper; private final QuestionOptionMapper questionOptionMapper;
private final QuestionExcelImporter questionExcelImporter; private final QuestionExcelImporter questionExcelImporter;
private final PaperConvertor paperConvertor;
@Value("${template.paper.importUrl:}")
private String paperImportUrl;
@Autowired
private PaperConvertor paperConvertor;
@Override @Override
public IPage<PaperPageVO> pageQuery(PaperPageQueryDTO query) { public IPage<PaperPageVO> pageQuery(PaperPageQueryDTO query) {
@ -150,15 +151,18 @@ public class PaperServiceImpl extends ServiceImpl<PaperMapper, PaperDO> implemen
List<QuestionOptionDO> options = allOptions.stream() List<QuestionOptionDO> options = allOptions.stream()
.filter(option -> oldQuestionId.equals(option.getQuestionId())) .filter(option -> oldQuestionId.equals(option.getQuestionId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
List<QuestionOptionDO> newQueOptions = new ArrayList<>();
for (QuestionOptionDO option : options) { for (QuestionOptionDO option : options) {
option.setId(IdUtil.getSnowflakeNextId()); option.setId(IdUtil.getSnowflakeNextId());
option.setQuestionId(newQuestionId); option.setQuestionId(newQuestionId);
InsertFieldDefaults.applyIgnoreOrgId(option); InsertFieldDefaults.applyIgnoreOrgId(option);
newQueOptions.add(option);
newOptions.add(option); newOptions.add(option);
} }
question.setAnswerQuestionOptionIds(newOptions.stream().filter(QuestionOptionDO::getIsCorrect) question.setAnswerQuestionOptionIds(newQueOptions.stream().filter(QuestionOptionDO::getIsCorrect)
.map(it -> String.valueOf(it.getId())).collect(Collectors.joining(","))); .map(it -> String.valueOf(it.getId())).collect(Collectors.joining(",")));
question.setAnswer(newOptions.stream().filter(QuestionOptionDO::getIsCorrect) question.setAnswer(newQueOptions.stream().filter(QuestionOptionDO::getIsCorrect)
.map(QuestionOptionDO::getOptionKey).collect(Collectors.joining(","))); .map(QuestionOptionDO::getOptionKey).collect(Collectors.joining(",")));
PaperQuestionRelDO rel = new PaperQuestionRelDO(); PaperQuestionRelDO rel = new PaperQuestionRelDO();
@ -257,4 +261,9 @@ public class PaperServiceImpl extends ServiceImpl<PaperMapper, PaperDO> implemen
Db.saveBatch(rels); Db.saveBatch(rels);
return new PaperImportVO(questions.size(), parseResult.getErrors()); return new PaperImportVO(questions.size(), parseResult.getErrors());
} }
@Override
public String importQuestionsTemplate() {
return paperImportUrl;
}
} }

View File

@ -4,20 +4,20 @@
<select id="pagePaperQuestions" resultType="org.qinan.cedu.model.vo.PaperQuestionVO"> <select id="pagePaperQuestions" resultType="org.qinan.cedu.model.vo.PaperQuestionVO">
SELECT q.id, q.title, q.score, q.answer_question_option_ids, q.analysis SELECT q.id, q.title, q.score, q.answer_question_option_ids, q.analysis
, q.question_type, q.tag_type, pqr.question_num , q.question_type, q.tag_type, pqr.question_num,q.answer
, cm.courseware_name , cm.courseware_name
FROM paper_question_rel pqr FROM paper_question_rel pqr
JOIN question q ON pqr.question_id = q.id JOIN question q ON pqr.question_id = q.id
LEFT JOIN courseware_management cm ON cm.id = q.courseware_management_id LEFT JOIN courseware_management cm ON cm.id = q.courseware_management_id
WHERE pqr.paper_id = #{query.paperId} WHERE pqr.paper_id = #{query.paperId}
AND pqr.delete_enum = 0 AND pqr.delete_enum = 0
AND q.delete_enum = 0 AND q.delete_enum = 0
<if test="query.title != null and query.title != ''"> <if test="query.title != null and query.title != ''">
AND q.title LIKE CONCAT('%', #{query.title}, '%') AND q.title LIKE CONCAT('%', #{query.title}, '%')
</if> </if>
<if test="query.questionType != null and query.questionType != ''"> <if test="query.questionType != null and query.questionType != ''">
AND q.question_type = #{query.questionType} AND q.question_type = #{query.questionType}
</if> </if>
ORDER BY pqr.question_num ASC ORDER BY pqr.question_num ASC
</select> </select>
</mapper> </mapper>