user paper exam

dev-tmp1
luotaiqian 2026-08-25 09:17:31 +08:00
parent b1c38109b1
commit 425d3a5e6b
10 changed files with 126 additions and 18 deletions

View File

@ -40,6 +40,13 @@ public class PaperController {
return PageResponse.of(page.getRecords(), page.getTotal()); return PageResponse.of(page.getRecords(), page.getTotal());
} }
@ApiOperation("机构分页查询试卷")
@GetMapping("/org/page")
public PageResponse<PaperPageVO> orgPage(@Validated PaperOrgPageQueryDTO query) {
IPage<PaperPageVO> page = paperService.pageQueryByOrg(query);
return PageResponse.of(page.getRecords(), page.getTotal());
}
@ApiOperation("修改试卷基本信息") @ApiOperation("修改试卷基本信息")
@PutMapping("/update/basic") @PutMapping("/update/basic")
public SingleResponse<Void> update(@Validated @RequestBody PaperUpdateDTO updateDTO) { public SingleResponse<Void> update(@Validated @RequestBody PaperUpdateDTO updateDTO) {
@ -93,24 +100,13 @@ public class PaperController {
return SingleResponse.success(pageInfo); return SingleResponse.success(pageInfo);
} }
/**
* id
*
* @param paperId id
* @return
*/
@ApiOperation("试卷基本信息查询") @ApiOperation("试卷基本信息查询")
@GetMapping("/paper/basic/info") @GetMapping("/paper/basic/info")
public SingleResponse<PaperBasicInfoVO> paperBasicInfo(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) { public SingleResponse<PaperBasicInfoVO> paperBasicInfo(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) {
return SingleResponse.success(paperService.paperBasicInfo(paperId)); return SingleResponse.success(paperService.paperBasicInfo(paperId));
} }
/**
* PDFpaperExamInfoPDF访
*
* @param paperId id
* @return PDF
*/
@ApiOperation("下载试卷PDF") @ApiOperation("下载试卷PDF")
@GetMapping(value = "/paper/exam/download", produces = MediaType.APPLICATION_PDF_VALUE) @GetMapping(value = "/paper/exam/download", produces = MediaType.APPLICATION_PDF_VALUE)
public ResponseEntity<byte[]> downloadPaperPdf(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) throws IOException { public ResponseEntity<byte[]> downloadPaperPdf(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) throws IOException {

View File

@ -7,6 +7,7 @@ import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.qinan.cedu.model.dto.PaperCoursewarePageQueryDTO; import org.qinan.cedu.model.dto.PaperCoursewarePageQueryDTO;
import org.qinan.cedu.model.dto.QuestionAddDTO; import org.qinan.cedu.model.dto.QuestionAddDTO;
import org.qinan.cedu.model.dto.QuestionBatchDeleteDTO;
import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO; import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO;
import org.qinan.cedu.model.dto.QuestionUpdateDTO; import org.qinan.cedu.model.dto.QuestionUpdateDTO;
import org.qinan.cedu.model.vo.QuestionCoursewareVO; import org.qinan.cedu.model.vo.QuestionCoursewareVO;
@ -45,6 +46,16 @@ public class QuestionController {
return SingleResponse.success(); return SingleResponse.success();
} }
/**
*
*/
@ApiOperation("批量删除习题")
@PostMapping("/del/batch")
public SingleResponse<Void> delBatch(@Validated @RequestBody QuestionBatchDeleteDTO dto) {
questionService.deleteByIds(dto.getQuestionIds());
return SingleResponse.success();
}
@ApiOperation("编辑习题") @ApiOperation("编辑习题")
@PostMapping("/modify") @PostMapping("/modify")
public SingleResponse<Void> modify(@Validated @RequestBody QuestionUpdateDTO dto) { public SingleResponse<Void> modify(@Validated @RequestBody QuestionUpdateDTO dto) {

View File

@ -0,0 +1,21 @@
package org.qinan.cedu.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
*
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "PaperOrgPageQueryDTO", description = "试卷机构分页查询请求")
public class PaperOrgPageQueryDTO extends PaperPageQueryDTO {
@ApiModelProperty(value = "机构id", required = true)
@NotNull(message = "机构id不能为空")
private Long orgId;
}

View File

@ -0,0 +1,20 @@
package org.qinan.cedu.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
*
*/
@Data
@ApiModel(value = "QuestionBatchDeleteDTO", description = "批量删除习题请求")
public class QuestionBatchDeleteDTO {
@ApiModelProperty(value = "试题id列表", required = true)
@NotEmpty(message = "试题id列表不能为空")
private List<Long> questionIds;
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.qinan.cedu.model.dto.PaperCopyDTO; import org.qinan.cedu.model.dto.PaperCopyDTO;
import org.qinan.cedu.model.dto.PaperCoursewareQuestionRuleDTO; import org.qinan.cedu.model.dto.PaperCoursewareQuestionRuleDTO;
import org.qinan.cedu.model.dto.PaperImportDTO; import org.qinan.cedu.model.dto.PaperImportDTO;
import org.qinan.cedu.model.dto.PaperOrgPageQueryDTO;
import org.qinan.cedu.model.dto.PaperPageQueryDTO; import org.qinan.cedu.model.dto.PaperPageQueryDTO;
import org.qinan.cedu.model.dto.PaperUpdateDTO; import org.qinan.cedu.model.dto.PaperUpdateDTO;
import org.qinan.cedu.model.entity.PaperDO; import org.qinan.cedu.model.entity.PaperDO;
@ -28,6 +29,14 @@ public interface PaperService extends IService<PaperDO> {
*/ */
IPage<PaperPageVO> pageQuery(PaperPageQueryDTO query); IPage<PaperPageVO> pageQuery(PaperPageQueryDTO query);
/**
* id
*
* @param query id
* @return
*/
IPage<PaperPageVO> pageQueryByOrg(PaperOrgPageQueryDTO query);
/** /**
* *
* *

View File

@ -93,6 +93,14 @@ public interface QuestionService extends IService<QuestionDO> {
*/ */
boolean deleteById(Long id); boolean deleteById(Long id);
/**
*
*
* @param ids id
* @return
*/
boolean deleteByIds(List<Long> ids);
/** /**
* *
* @param query query * @param query query

View File

@ -95,7 +95,7 @@ public class PaperExamServiceImpl extends ServiceImpl<PaperExamMapper, PaperExam
public boolean savePaperExam(PaperExamDTO dto) { public boolean savePaperExam(PaperExamDTO dto) {
PaperExamDO entity = paperExamConvertor.convertDtoToE(dto); PaperExamDO entity = paperExamConvertor.convertDtoToE(dto);
// paper_exam 表无 org_id 列插入前不填充机构id // paper_exam 表无 org_id 列插入前不填充机构id
InsertFieldDefaults.applyIgnoreOrgId(entity); InsertFieldDefaults.apply(entity);
return this.save(entity); return this.save(entity);
} }
@ -105,7 +105,7 @@ public class PaperExamServiceImpl extends ServiceImpl<PaperExamMapper, PaperExam
throw new IllegalArgumentException("主键id不能为空"); throw new IllegalArgumentException("主键id不能为空");
} }
PaperExamDO entity = paperExamConvertor.convertDtoToE(dto); PaperExamDO entity = paperExamConvertor.convertDtoToE(dto);
InsertFieldDefaults.applyForUpdateIgnoreOrgId(entity); InsertFieldDefaults.apply(entity);
return this.updateById(entity); return this.updateById(entity);
} }
@ -303,7 +303,7 @@ public class PaperExamServiceImpl extends ServiceImpl<PaperExamMapper, PaperExam
paperExam.setPassed(0); paperExam.setPassed(0);
paperExam.setPaperExamStatus(PaperExamStatusEnum.DOING.getValue()); paperExam.setPaperExamStatus(PaperExamStatusEnum.DOING.getValue());
// paper_exam 表无 org_id 列插入前不填充机构id // paper_exam 表无 org_id 列插入前不填充机构id
InsertFieldDefaults.applyIgnoreOrgId(paperExam); InsertFieldDefaults.apply(paperExam);
return paperExam; return paperExam;
} }

View File

@ -32,6 +32,7 @@ import org.qinan.cedu.model.dto.PaperConfigRuleDTO;
import org.qinan.cedu.model.dto.PaperCopyDTO; import org.qinan.cedu.model.dto.PaperCopyDTO;
import org.qinan.cedu.model.dto.PaperCoursewareQuestionRuleDTO; import org.qinan.cedu.model.dto.PaperCoursewareQuestionRuleDTO;
import org.qinan.cedu.model.dto.PaperImportDTO; import org.qinan.cedu.model.dto.PaperImportDTO;
import org.qinan.cedu.model.dto.PaperOrgPageQueryDTO;
import org.qinan.cedu.model.dto.PaperPageQueryDTO; import org.qinan.cedu.model.dto.PaperPageQueryDTO;
import org.qinan.cedu.model.dto.PaperUpdateDTO; import org.qinan.cedu.model.dto.PaperUpdateDTO;
import org.qinan.cedu.model.entity.PaperDO; import org.qinan.cedu.model.entity.PaperDO;
@ -102,6 +103,28 @@ public class PaperServiceImpl extends ServiceImpl<PaperMapper, PaperDO> implemen
return page.convert(paperConvertor::convertEToVo); return page.convert(paperConvertor::convertEToVo);
} }
@Override
public IPage<PaperPageVO> pageQueryByOrg(PaperOrgPageQueryDTO query) {
LambdaQueryWrapper<PaperDO> wrapper = new LambdaQueryWrapper<PaperDO>()
.eq(PaperDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.eq(PaperDO::getOrgId, query.getOrgId());
if (StringUtils.hasText(query.getPaperName())) {
wrapper.like(PaperDO::getPaperName, query.getPaperName());
}
if (query.getCreateTimeStart() != null) {
wrapper.ge(PaperDO::getCreateTime, query.getCreateTimeStart().atStartOfDay());
}
if (query.getCreateTimeEnd() != null) {
wrapper.lt(PaperDO::getCreateTime, query.getCreateTimeEnd().plusDays(1).atStartOfDay());
}
if (StringUtils.hasText(query.getPaperType())) {
wrapper.eq(PaperDO::getPaperType, query.getPaperType());
}
wrapper.orderByDesc(PaperDO::getId);
IPage<PaperDO> page = this.page(new Page<>(query.getCurrent(), query.getSize()), wrapper);
return page.convert(paperConvertor::convertEToVo);
}
@Override @Override
public boolean savePaper(PaperDO paperEntity) { public boolean savePaper(PaperDO paperEntity) {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();

View File

@ -227,6 +227,26 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, QuestionDO>
return deleted; return deleted;
} }
@Override
public boolean deleteByIds(List<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return false;
}
boolean deleted = this.lambdaUpdate()
.set(QuestionDO::getDeleteEnum, DeleteEnum.TRUE.getCode())
.set(QuestionDO::getUpdateTime, LocalDateTime.now())
.in(QuestionDO::getId, ids)
.eq(QuestionDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.update();
if (deleted) {
questionOptionMapper.update(new LambdaUpdateWrapper<QuestionOptionDO>()
.set(QuestionOptionDO::getDeleteEnum, DeleteEnum.TRUE.getCode())
.set(QuestionOptionDO::getUpdateTime, LocalDateTime.now())
.in(QuestionOptionDO::getQuestionId, ids));
}
return deleted;
}
@Override @Override
public IPage<QuestionCoursewareVO> pageCourseware(PaperCoursewarePageQueryDTO query) { public IPage<QuestionCoursewareVO> pageCourseware(PaperCoursewarePageQueryDTO query) {
return this.baseMapper.pageCourseware(new Page<>(query.getCurrent(), query.getSize()), query); return this.baseMapper.pageCourseware(new Page<>(query.getCurrent(), query.getSize()), query);

View File

@ -328,7 +328,7 @@ public class QuestionExcelImporter {
question.setAnalysis(row.getAnalysis().trim()); question.setAnalysis(row.getAnalysis().trim());
question.setTagType(row.getTagType().trim()); question.setTagType(row.getTagType().trim());
question.setCoursewareManagementId(coursewareManagementId); question.setCoursewareManagementId(coursewareManagementId);
InsertFieldDefaults.applyIgnoreOrgId(question); InsertFieldDefaults.apply(question);
return question; return question;
} }
@ -381,7 +381,7 @@ public class QuestionExcelImporter {
question.setTagType(row.getTagType().trim()); question.setTagType(row.getTagType().trim());
question.setCoursewareManagementId(coursewareManagementId); question.setCoursewareManagementId(coursewareManagementId);
parseResult.getQuestionNumByQuestionId().put(question.getId(), rowIndex - HEAD_ROW_NUMBER); parseResult.getQuestionNumByQuestionId().put(question.getId(), rowIndex - HEAD_ROW_NUMBER);
InsertFieldDefaults.applyIgnoreOrgId(question); InsertFieldDefaults.apply(question);
Map<String, String> optionTexts = new LinkedHashMap<>(); Map<String, String> optionTexts = new LinkedHashMap<>();
optionTexts.put(OPTION_KEY_A, JUDGE_CORRECT_OPTION_TEXT); optionTexts.put(OPTION_KEY_A, JUDGE_CORRECT_OPTION_TEXT);
optionTexts.put(OPTION_KEY_B, JUDGE_WRONG_OPTION_TEXT); optionTexts.put(OPTION_KEY_B, JUDGE_WRONG_OPTION_TEXT);
@ -414,7 +414,7 @@ public class QuestionExcelImporter {
option.setOptionText(entry.getValue()); option.setOptionText(entry.getValue());
option.setIsCorrect(answerLetters.contains(entry.getKey())); option.setIsCorrect(answerLetters.contains(entry.getKey()));
option.setSortOrder(sortOrder++); option.setSortOrder(sortOrder++);
InsertFieldDefaults.applyIgnoreOrgId(option); InsertFieldDefaults.apply(option);
options.add(option); options.add(option);
} }
return options; return options;