user paper exam

dev-tmp1
luotaiqian 2026-08-24 17:37:50 +08:00
parent 502c83667a
commit 1a97101ee5
7 changed files with 148 additions and 11 deletions

View File

@ -1,14 +1,18 @@
package org.qinan.cedu.controller; package org.qinan.cedu.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.qinan.cedu.model.dto.PaperCoursewarePageQueryDTO;
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.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionTypeCountVO;
import org.qinan.cedu.model.vo.QuestionVO; import org.qinan.cedu.model.vo.QuestionVO;
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.SingleResponse; import org.qinan.safetyeval.client.dto.SingleResponse;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -49,4 +53,11 @@ public class QuestionController {
return SingleResponse.success(questionService.countQuestionType(dto)); return SingleResponse.success(questionService.countQuestionType(dto));
} }
@ApiOperation("分页试题信息根据课件或者试题id")
@GetMapping("/page/courseware")
public PageResponse<QuestionCoursewareVO> pageCourseware(PaperCoursewarePageQueryDTO query) {
IPage<QuestionCoursewareVO> page = questionService.pageCourseware(query);
return PageResponse.of(page.getRecords(), page.getTotal());
}
} }

View File

@ -5,16 +5,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.qinan.cedu.model.dto.PaperCoursewarePageQueryDTO;
import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO; import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO;
import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO; import org.qinan.cedu.model.dto.QuestionTypeCountQueryDTO;
import org.qinan.cedu.model.entity.QuestionDO; import org.qinan.cedu.model.entity.QuestionDO;
import org.qinan.cedu.model.vo.PaperQuestionDetailVO; import org.qinan.cedu.model.vo.*;
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.model.vo.StartExamQuestionVO;
import java.util.List; import java.util.List;
/** /**
* Mapper * Mapper
*/ */
@ -82,4 +80,14 @@ public interface QuestionMapper extends BaseMapper<QuestionDO> {
List<Long> listRandomQuestionIds(@Param("coursewareManagementIdList") List<Long> coursewareManagementIdList, List<Long> listRandomQuestionIds(@Param("coursewareManagementIdList") List<Long> coursewareManagementIdList,
@Param("questionType") String questionType, @Param("questionType") String questionType,
@Param("num") Integer num); @Param("num") Integer num);
/**
* pageCourseware
*
* @param page page
* @param query query
* @return QuestionCoursewareVO
*/
IPage<QuestionCoursewareVO> pageCourseware(Page<PaperQuestionVO> page
,@Param("qry") PaperCoursewarePageQueryDTO query);
} }

View File

@ -0,0 +1,29 @@
package org.qinan.cedu.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.qinan.cedu.enums.PaperTypeEnum;
import org.qinan.cedu.model.query.BasePageQuery;
import javax.validation.constraints.NotNull;
/**
*
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "PaperCoursewarePageQueryDTO", description = "科技分页查询")
public class PaperCoursewarePageQueryDTO extends BasePageQuery {
@ApiModelProperty("课件id")
@NotNull
private Long coursewareManagementId;
@ApiModelProperty(PaperTypeEnum.REMARKS)
private String paperType;
@ApiModelProperty("题干id")
private String title;
}

View File

@ -0,0 +1,52 @@
package org.qinan.cedu.model.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
*
*/
@Data
@ApiModel(value = "QuestionCoursewareVO", description = "课件试题对象")
public class QuestionCoursewareVO {
@ApiModelProperty("试题id")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
@ApiModelProperty("题干")
private String title;
@ApiModelProperty("分值")
private BigDecimal score;
@ApiModelProperty("答案选项id多个逗号隔开")
private String answerQuestionOptionIds;
@ApiModelProperty("答案选项,多个逗号隔开")
private String answer;
@ApiModelProperty("答案解析")
private String analysis;
@ApiModelProperty("题型single单选/multiple多选/judge判断")
private String questionType;
@ApiModelProperty("标签类型")
private String tagType;
@ApiModelProperty("试题号")
private Integer questionNum;
@ApiModelProperty("关联课件名称")
private String coursewareName;
@ApiModelProperty("关联课件id")
@JsonSerialize(using = ToStringSerializer.class)
private Long coursewareManagementId;
}

View File

@ -2,12 +2,14 @@ package org.qinan.cedu.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.qinan.cedu.model.dto.PaperCoursewarePageQueryDTO;
import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO; import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO;
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.entity.QuestionDO; import org.qinan.cedu.model.entity.QuestionDO;
import org.qinan.cedu.model.entity.QuestionOptionDO; import org.qinan.cedu.model.entity.QuestionOptionDO;
import org.qinan.cedu.model.vo.PaperQuestionVO; import org.qinan.cedu.model.vo.PaperQuestionVO;
import org.qinan.cedu.model.vo.QuestionCoursewareVO;
import org.qinan.cedu.model.vo.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionTypeCountVO;
import org.qinan.cedu.model.vo.QuestionVO; import org.qinan.cedu.model.vo.QuestionVO;
@ -93,4 +95,12 @@ public interface QuestionService extends IService<QuestionDO> {
* @return * @return
*/ */
boolean deleteById(Long id); boolean deleteById(Long id);
/**
*
* @param query query
* @return QuestionCoursewareVO
*/
IPage<QuestionCoursewareVO> pageCourseware(PaperCoursewarePageQueryDTO query);
} }

View File

@ -13,13 +13,11 @@ import org.qinan.cedu.convertor.QuestionConvertor;
import org.qinan.cedu.enums.DeleteEnum; import org.qinan.cedu.enums.DeleteEnum;
import org.qinan.cedu.mapper.QuestionMapper; import org.qinan.cedu.mapper.QuestionMapper;
import org.qinan.cedu.mapper.QuestionOptionMapper; import org.qinan.cedu.mapper.QuestionOptionMapper;
import org.qinan.cedu.model.dto.PaperQuestionPageQueryDTO; import org.qinan.cedu.model.dto.*;
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.QuestionDO;
import org.qinan.cedu.model.entity.QuestionOptionDO; import org.qinan.cedu.model.entity.QuestionOptionDO;
import org.qinan.cedu.model.vo.PaperQuestionVO; import org.qinan.cedu.model.vo.PaperQuestionVO;
import org.qinan.cedu.model.vo.QuestionCoursewareVO;
import org.qinan.cedu.model.vo.QuestionTypeCountVO; import org.qinan.cedu.model.vo.QuestionTypeCountVO;
import org.qinan.cedu.model.vo.QuestionVO; import org.qinan.cedu.model.vo.QuestionVO;
import org.qinan.cedu.service.QuestionService; import org.qinan.cedu.service.QuestionService;
@ -229,6 +227,11 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, QuestionDO>
return deleted; return deleted;
} }
@Override
public IPage<QuestionCoursewareVO> pageCourseware(PaperCoursewarePageQueryDTO query) {
return this.baseMapper.pageCourseware(new Page<>(query.getCurrent(), query.getSize()), query);
}
/** /**
* idid * idid
* *

View File

@ -90,4 +90,28 @@
AND q.delete_enum = 'false' AND q.delete_enum = 'false'
ORDER BY pqr.question_num ASC, pqr.id ASC ORDER BY pqr.question_num ASC, pqr.id ASC
</select> </select>
<select id="pageCourseware" resultType="org.qinan.cedu.model.vo.QuestionCoursewareVO">
SELECT q.id
, q.title
, q.score
, q.answer_question_option_ids
, q.analysis
, q.question_type
, q.tag_type
, q.answer
, cm.courseware_name
, q.courseware_management_id
FROM question q
JOIN courseware_management cm ON cm.id = q.courseware_management_id
WHERE cm.id = #{qry.coursewareManagementId}
AND q.delete_enum = 'false'
<if test="qry.title != null and qry.title != ''">
AND q.title LIKE CONCAT('%', #{qry.title}, '%')
</if>
<if test="qry.questionType != null and qry.questionType != ''">
AND q.question_type = #{qry.questionType}
</if>
ORDER BY q.id DESC
</select>
</mapper> </mapper>