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 63274ab2..5c29a7c4 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 @@ -4,13 +4,17 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; +import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO; import org.qinan.cedu.model.dto.QuestionUpdateDTO; +import org.qinan.cedu.model.vo.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionVO; import org.qinan.cedu.service.QuestionService; import org.qinan.safetyeval.client.dto.SingleResponse; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 试题管理 */ @@ -36,4 +40,13 @@ public class QuestionController { return SingleResponse.success(questionVO); } + /** + * 按题型统计试题数量(按关联课件过滤) + */ + @ApiOperation("根据课件按题型统计试题数量") + @PostMapping("/countType") + public SingleResponse> countType(@Validated @RequestBody QuestionTypeCountQueryDTO dto) { + return SingleResponse.success(questionService.countQuestionType(dto)); + } + } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java index f0338772..da22a20a 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/QuestionMapper.java @@ -6,10 +6,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO; +import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO; import org.qinan.cedu.model.entity.QuestionDO; import org.qinan.cedu.model.vo.PaperQuestionVO; +import org.qinan.cedu.model.vo.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionVO; +import java.util.List; /** * 试题 Mapper */ @@ -32,4 +35,12 @@ public interface QuestionMapper extends BaseMapper { * @return 习题详情 */ QuestionVO findQuestion(@Param("questionId") Long questionId); + + /** + * 按题型统计试题数量(按关联课件过滤,一条SQL聚合) + * + * @param dto 查询条件(关联课件管理id集合) + * @return 各题型的试题数量 + */ + List countQuestionType(@Param("dto") QuestionTypeCountQueryDTO dto); } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/QuestionTypeCountQueryDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/QuestionTypeCountQueryDTO.java new file mode 100644 index 00000000..f94942e3 --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/QuestionTypeCountQueryDTO.java @@ -0,0 +1,22 @@ +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 javax.validation.constraints.Size; +import java.util.List; + +/** + * 题型数量统计查询请求 + */ +@Data +@ApiModel(value = "QuestionTypeCountQueryDTO", description = "题型数量统计查询请求") +public class QuestionTypeCountQueryDTO { + + @ApiModelProperty(value = "关联课件管理id集合", required = true) + @NotEmpty(message = "关联课件不能为空") + @Size(min = 1, max = 200) + private List coursewareManagementIdList; +} diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/QuestionTypeCountVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/QuestionTypeCountVO.java new file mode 100644 index 00000000..2886e4bc --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/QuestionTypeCountVO.java @@ -0,0 +1,18 @@ +package org.qinan.cedu.model.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.qinan.cedu.enums.QuestionTypeEnum; + +/** + * 题型数量统计结果 + */ +@Data +public class QuestionTypeCountVO { + + @ApiModelProperty(QuestionTypeEnum.REMARKS) + private String questionType; + + @ApiModelProperty("试题数量") + private Long count; +} 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 8bb2e479..3356306c 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 @@ -3,10 +3,12 @@ package org.qinan.cedu.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO; +import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO; import org.qinan.cedu.model.dto.QuestionUpdateDTO; import org.qinan.cedu.model.entity.QuestionDO; import org.qinan.cedu.model.entity.QuestionOptionDO; import org.qinan.cedu.model.vo.PaperQuestionVO; +import org.qinan.cedu.model.vo.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionVO; import java.util.List; @@ -31,6 +33,14 @@ public interface QuestionService extends IService { */ QuestionVO find(Long questionId); + /** + * 按题型统计试题数量(按关联课件过滤,一条SQL聚合) + * + * @param dto 查询条件(关联课件管理id集合) + * @return 各题型的试题数量 + */ + List countQuestionType(QuestionTypeCountQueryDTO dto); + /** * 试卷试题分页查询(XML关联查询,含课件名称) * 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 178aa5d5..6bcab515 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 @@ -12,10 +12,12 @@ import org.qinan.cedu.enums.DeleteEnum; import org.qinan.cedu.mapper.QuestionMapper; import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO; import org.qinan.cedu.model.dto.QuestionOptionUpdateDTO; +import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO; import org.qinan.cedu.model.dto.QuestionUpdateDTO; import org.qinan.cedu.model.entity.QuestionDO; import org.qinan.cedu.model.entity.QuestionOptionDO; import org.qinan.cedu.model.vo.PaperQuestionVO; +import org.qinan.cedu.model.vo.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionVO; import org.qinan.cedu.service.QuestionOptionService; import org.qinan.cedu.service.QuestionService; @@ -70,6 +72,11 @@ public class QuestionServiceImpl extends ServiceImpl return questionVO; } + @Override + public List countQuestionType(QuestionTypeCountQueryDTO dto) { + return this.baseMapper.countQuestionType(dto); + } + @Override @Transactional(rollbackFor = Exception.class) public void updateQuestion(QuestionUpdateDTO dto) { diff --git a/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml b/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml index 7e535324..5d03b871 100644 --- a/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml +++ b/safety-cedu-service/src/main/resources/mapper/QuestionMapper.xml @@ -31,4 +31,15 @@ WHERE q.id = #{questionId} AND q.delete_enum = 'false' + +