diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java index 70fc977c..506585e3 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java @@ -40,6 +40,13 @@ public class PaperController { return PageResponse.of(page.getRecords(), page.getTotal()); } + @ApiOperation("机构分页查询试卷") + @GetMapping("/org/page") + public PageResponse orgPage(@Validated PaperOrgPageQueryDTO query) { + IPage page = paperService.pageQueryByOrg(query); + return PageResponse.of(page.getRecords(), page.getTotal()); + } + @ApiOperation("修改试卷基本信息") @PutMapping("/update/basic") public SingleResponse update(@Validated @RequestBody PaperUpdateDTO updateDTO) { @@ -93,24 +100,13 @@ public class PaperController { return SingleResponse.success(pageInfo); } - /** - * 根据试卷id查询试卷基本信息(不含试题列表) - * - * @param paperId 试卷id - * @return 试卷基础信息 - */ @ApiOperation("试卷基本信息查询") @GetMapping("/paper/basic/info") public SingleResponse paperBasicInfo(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) { return SingleResponse.success(paperService.paperBasicInfo(paperId)); } - /** - * 下载试卷PDF:查询试卷考试信息(同paperExamInfo)后渲染为PDF文件流,浏览器直接访问即触发下载 - * - * @param paperId 试卷id - * @return PDF文件字节流(文件名为试卷名称) - */ + @ApiOperation("下载试卷PDF") @GetMapping(value = "/paper/exam/download", produces = MediaType.APPLICATION_PDF_VALUE) public ResponseEntity downloadPaperPdf(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) throws IOException { diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/QuestionController.java b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/QuestionController.java index 26d34a71..bf028e7a 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/QuestionController.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/QuestionController.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.qinan.cedu.model.dto.PaperCoursewarePageQueryDTO; 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.QuestionUpdateDTO; import org.qinan.cedu.model.vo.QuestionCoursewareVO; @@ -45,6 +46,16 @@ public class QuestionController { return SingleResponse.success(); } + /** + * 批量删除习题 + */ + @ApiOperation("批量删除习题") + @PostMapping("/del/batch") + public SingleResponse delBatch(@Validated @RequestBody QuestionBatchDeleteDTO dto) { + questionService.deleteByIds(dto.getQuestionIds()); + return SingleResponse.success(); + } + @ApiOperation("编辑习题") @PostMapping("/modify") public SingleResponse modify(@Validated @RequestBody QuestionUpdateDTO dto) { diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/PaperOrgPageQueryDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/PaperOrgPageQueryDTO.java new file mode 100644 index 00000000..ef44c4b6 --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/PaperOrgPageQueryDTO.java @@ -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; +} diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/QuestionBatchDeleteDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/QuestionBatchDeleteDTO.java new file mode 100644 index 00000000..4fa75b99 --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/QuestionBatchDeleteDTO.java @@ -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 questionIds; +} diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java index 83397f9e..9b00c76f 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.qinan.cedu.model.dto.PaperCopyDTO; import org.qinan.cedu.model.dto.PaperCoursewareQuestionRuleDTO; 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.PaperUpdateDTO; import org.qinan.cedu.model.entity.PaperDO; @@ -28,6 +29,14 @@ public interface PaperService extends IService { */ IPage pageQuery(PaperPageQueryDTO query); + /** + * 机构分页查询试卷(在分页查询条件基础上按机构id过滤) + * + * @param query 查询条件(机构id、试卷名称、试卷类型、创建时间范围) + * @return 分页结果 + */ + IPage pageQueryByOrg(PaperOrgPageQueryDTO query); + /** * 新增试卷 * diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/QuestionService.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/QuestionService.java index 8b1b948d..d202426a 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/QuestionService.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/QuestionService.java @@ -93,6 +93,14 @@ public interface QuestionService extends IService { */ boolean deleteById(Long id); + /** + * 批量逻辑删除试题(同时逻辑删除其选项) + * + * @param ids 试题id列表 + * @return 是否成功 + */ + boolean deleteByIds(List ids); + /** * * @param query query diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java index 41d58edf..40d1436d 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java @@ -95,7 +95,7 @@ public class PaperExamServiceImpl extends ServiceImpl implemen return page.convert(paperConvertor::convertEToVo); } + @Override + public IPage pageQueryByOrg(PaperOrgPageQueryDTO query) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .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 page = this.page(new Page<>(query.getCurrent(), query.getSize()), wrapper); + return page.convert(paperConvertor::convertEToVo); + } + @Override public boolean savePaper(PaperDO paperEntity) { LocalDateTime now = LocalDateTime.now(); diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/QuestionServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/QuestionServiceImpl.java index 9b08574e..4f00e4be 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/QuestionServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/QuestionServiceImpl.java @@ -227,6 +227,26 @@ public class QuestionServiceImpl extends ServiceImpl return deleted; } + @Override + public boolean deleteByIds(List 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() + .set(QuestionOptionDO::getDeleteEnum, DeleteEnum.TRUE.getCode()) + .set(QuestionOptionDO::getUpdateTime, LocalDateTime.now()) + .in(QuestionOptionDO::getQuestionId, ids)); + } + return deleted; + } + @Override public IPage pageCourseware(PaperCoursewarePageQueryDTO query) { return this.baseMapper.pageCourseware(new Page<>(query.getCurrent(), query.getSize()), query); diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/QuestionExcelImporter.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/QuestionExcelImporter.java index e780a753..1c0edcc3 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/QuestionExcelImporter.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/QuestionExcelImporter.java @@ -328,7 +328,7 @@ public class QuestionExcelImporter { question.setAnalysis(row.getAnalysis().trim()); question.setTagType(row.getTagType().trim()); question.setCoursewareManagementId(coursewareManagementId); - InsertFieldDefaults.applyIgnoreOrgId(question); + InsertFieldDefaults.apply(question); return question; } @@ -381,7 +381,7 @@ public class QuestionExcelImporter { question.setTagType(row.getTagType().trim()); question.setCoursewareManagementId(coursewareManagementId); parseResult.getQuestionNumByQuestionId().put(question.getId(), rowIndex - HEAD_ROW_NUMBER); - InsertFieldDefaults.applyIgnoreOrgId(question); + InsertFieldDefaults.apply(question); Map optionTexts = new LinkedHashMap<>(); optionTexts.put(OPTION_KEY_A, JUDGE_CORRECT_OPTION_TEXT); optionTexts.put(OPTION_KEY_B, JUDGE_WRONG_OPTION_TEXT); @@ -414,7 +414,7 @@ public class QuestionExcelImporter { option.setOptionText(entry.getValue()); option.setIsCorrect(answerLetters.contains(entry.getKey())); option.setSortOrder(sortOrder++); - InsertFieldDefaults.applyIgnoreOrgId(option); + InsertFieldDefaults.apply(option); options.add(option); } return options;