user paper exam
parent
b1c38109b1
commit
425d3a5e6b
|
|
@ -40,6 +40,13 @@ public class PaperController {
|
|||
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("修改试卷基本信息")
|
||||
@PutMapping("/update/basic")
|
||||
public SingleResponse<Void> 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<PaperBasicInfoVO> 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<byte[]> downloadPaperPdf(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) throws IOException {
|
||||
|
|
|
|||
|
|
@ -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<Void> delBatch(@Validated @RequestBody QuestionBatchDeleteDTO dto) {
|
||||
questionService.deleteByIds(dto.getQuestionIds());
|
||||
return SingleResponse.success();
|
||||
}
|
||||
|
||||
@ApiOperation("编辑习题")
|
||||
@PostMapping("/modify")
|
||||
public SingleResponse<Void> modify(@Validated @RequestBody QuestionUpdateDTO dto) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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<PaperDO> {
|
|||
*/
|
||||
IPage<PaperPageVO> pageQuery(PaperPageQueryDTO query);
|
||||
|
||||
/**
|
||||
* 机构分页查询试卷(在分页查询条件基础上按机构id过滤)
|
||||
*
|
||||
* @param query 查询条件(机构id、试卷名称、试卷类型、创建时间范围)
|
||||
* @return 分页结果
|
||||
*/
|
||||
IPage<PaperPageVO> pageQueryByOrg(PaperOrgPageQueryDTO query);
|
||||
|
||||
/**
|
||||
* 新增试卷
|
||||
*
|
||||
|
|
|
|||
|
|
@ -93,6 +93,14 @@ public interface QuestionService extends IService<QuestionDO> {
|
|||
*/
|
||||
boolean deleteById(Long id);
|
||||
|
||||
/**
|
||||
* 批量逻辑删除试题(同时逻辑删除其选项)
|
||||
*
|
||||
* @param ids 试题id列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean deleteByIds(List<Long> ids);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param query query
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ public class PaperExamServiceImpl extends ServiceImpl<PaperExamMapper, PaperExam
|
|||
public boolean savePaperExam(PaperExamDTO dto) {
|
||||
PaperExamDO entity = paperExamConvertor.convertDtoToE(dto);
|
||||
// paper_exam 表无 org_id 列,插入前不填充机构id
|
||||
InsertFieldDefaults.applyIgnoreOrgId(entity);
|
||||
InsertFieldDefaults.apply(entity);
|
||||
return this.save(entity);
|
||||
}
|
||||
|
||||
|
|
@ -105,7 +105,7 @@ public class PaperExamServiceImpl extends ServiceImpl<PaperExamMapper, PaperExam
|
|||
throw new IllegalArgumentException("主键id不能为空");
|
||||
}
|
||||
PaperExamDO entity = paperExamConvertor.convertDtoToE(dto);
|
||||
InsertFieldDefaults.applyForUpdateIgnoreOrgId(entity);
|
||||
InsertFieldDefaults.apply(entity);
|
||||
return this.updateById(entity);
|
||||
}
|
||||
|
||||
|
|
@ -303,7 +303,7 @@ public class PaperExamServiceImpl extends ServiceImpl<PaperExamMapper, PaperExam
|
|||
paperExam.setPassed(0);
|
||||
paperExam.setPaperExamStatus(PaperExamStatusEnum.DOING.getValue());
|
||||
// paper_exam 表无 org_id 列,插入前不填充机构id
|
||||
InsertFieldDefaults.applyIgnoreOrgId(paperExam);
|
||||
InsertFieldDefaults.apply(paperExam);
|
||||
return paperExam;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.qinan.cedu.model.dto.PaperConfigRuleDTO;
|
|||
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;
|
||||
|
|
@ -102,6 +103,28 @@ public class PaperServiceImpl extends ServiceImpl<PaperMapper, PaperDO> implemen
|
|||
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
|
||||
public boolean savePaper(PaperDO paperEntity) {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
|
|
|||
|
|
@ -227,6 +227,26 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, QuestionDO>
|
|||
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
|
||||
public IPage<QuestionCoursewareVO> pageCourseware(PaperCoursewarePageQueryDTO query) {
|
||||
return this.baseMapper.pageCourseware(new Page<>(query.getCurrent(), query.getSize()), query);
|
||||
|
|
|
|||
|
|
@ -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<String, String> 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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue