Ver Fonte

题库题目 详情

he2802 há 4 anos atrás
pai
commit
7fdb184100
25 ficheiros alterados com 1251 adições e 0 exclusões
  1. 112 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java
  2. 112 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionDetailController.java
  3. 4 0
      zhongzheng-generator/src/main/resources/vm/java/serviceImpl.java.vm
  4. 51 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionAddBo.java
  5. 54 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionDetailAddBo.java
  6. 64 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionDetailEditBo.java
  7. 67 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionDetailQueryBo.java
  8. 60 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionEditBo.java
  9. 64 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionQueryBo.java
  10. 63 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/Question.java
  11. 66 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionDetail.java
  12. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionDetailMapper.java
  13. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionMapper.java
  14. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionDetailService.java
  15. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java
  16. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankChapterServiceImpl.java
  17. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankExamServiceImpl.java
  18. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankSectionServiceImpl.java
  19. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankServiceImpl.java
  20. 107 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionDetailServiceImpl.java
  21. 107 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  22. 64 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionDetailVo.java
  23. 60 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionVo.java
  24. 23 0
      zhongzheng-system/src/main/resources/mapper/modules/bank/QuestionDetailMapper.xml
  25. 22 0
      zhongzheng-system/src/main/resources/mapper/modules/bank/QuestionMapper.xml

+ 112 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.bank;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.bank.bo.QuestionAddBo;
+import com.zhongzheng.modules.bank.bo.QuestionEditBo;
+import com.zhongzheng.modules.bank.bo.QuestionQueryBo;
+import com.zhongzheng.modules.bank.service.IQuestionService;
+import com.zhongzheng.modules.bank.vo.QuestionVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 题库题目Controller
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Api(value = "题库题目控制器", tags = {"题库题目管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/bank/question")
+public class QuestionController extends BaseController {
+
+    private final IQuestionService iQuestionService;
+
+    /**
+     * 查询题库题目列表
+     */
+    @ApiOperation("查询题库题目列表")
+    @PreAuthorize("@ss.hasPermi('bank:question:list')")
+    @GetMapping("/list")
+    public TableDataInfo<QuestionVo> list(QuestionQueryBo bo) {
+        startPage();
+        List<QuestionVo> list = iQuestionService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出题库题目列表
+     */
+    /*@ApiOperation("导出题库题目列表")
+    @PreAuthorize("@ss.hasPermi('system:question:export')")
+    @Log(title = "题库题目", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<QuestionVo> export(QuestionQueryBo bo) {
+        List<QuestionVo> list = iQuestionService.queryList(bo);
+        ExcelUtil<QuestionVo> util = new ExcelUtil<QuestionVo>(QuestionVo.class);
+        return util.exportExcel(list, "题库题目");
+    }*/
+
+    /**
+     * 获取题库题目详细信息
+     */
+    @ApiOperation("获取题库题目详细信息")
+    @PreAuthorize("@ss.hasPermi('bank:question:query')")
+    @GetMapping("/{questionId}")
+    public AjaxResult<QuestionVo> getInfo(@PathVariable("questionId" ) Long questionId) {
+        return AjaxResult.success(iQuestionService.queryById(questionId));
+    }
+
+    /**
+     * 新增题库题目
+     */
+    @ApiOperation("新增题库题目")
+    @PreAuthorize("@ss.hasPermi('bank:question:add')")
+    @Log(title = "题库题目", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody QuestionAddBo bo) {
+        return toAjax(iQuestionService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改题库题目
+     */
+    @ApiOperation("修改题库题目")
+    @PreAuthorize("@ss.hasPermi('bank:question:edit')")
+    @Log(title = "题库题目", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody QuestionEditBo bo) {
+        return toAjax(iQuestionService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除题库题目
+     */
+    @ApiOperation("删除题库题目")
+    @PreAuthorize("@ss.hasPermi('bank:question:remove')")
+    @Log(title = "题库题目" , businessType = BusinessType.DELETE)
+    @PostMapping("/delete")
+    public AjaxResult<Void> remove(@RequestBody Long[] questionIds) {
+        return toAjax(iQuestionService.deleteWithValidByIds(Arrays.asList(questionIds), true) ? 1 : 0);
+    }
+}

+ 112 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionDetailController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.bank;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.bank.bo.QuestionDetailAddBo;
+import com.zhongzheng.modules.bank.bo.QuestionDetailEditBo;
+import com.zhongzheng.modules.bank.bo.QuestionDetailQueryBo;
+import com.zhongzheng.modules.bank.service.IQuestionDetailService;
+import com.zhongzheng.modules.bank.vo.QuestionDetailVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 题目详情Controller
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Api(value = "题目详情控制器", tags = {"题目详情管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/question/detail")
+public class QuestionDetailController extends BaseController {
+
+    private final IQuestionDetailService iQuestionDetailService;
+
+    /**
+     * 查询题目详情列表
+     */
+    @ApiOperation("查询题目详情列表")
+    @PreAuthorize("@ss.hasPermi('question:detail:list')")
+    @GetMapping("/list")
+    public TableDataInfo<QuestionDetailVo> list(QuestionDetailQueryBo bo) {
+        startPage();
+        List<QuestionDetailVo> list = iQuestionDetailService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出题目详情列表
+     */
+    /*@ApiOperation("导出题目详情列表")
+    @PreAuthorize("@ss.hasPermi('question:detail:export')")
+    @Log(title = "题目详情", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<QuestionDetailVo> export(QuestionDetailQueryBo bo) {
+        List<QuestionDetailVo> list = iQuestionDetailService.queryList(bo);
+        ExcelUtil<QuestionDetailVo> util = new ExcelUtil<QuestionDetailVo>(QuestionDetailVo.class);
+        return util.exportExcel(list, "题目详情");
+    }*/
+
+    /**
+     * 获取题目详情详细信息
+     */
+    @ApiOperation("获取题目详情详细信息")
+    @PreAuthorize("@ss.hasPermi('question:detail:query')")
+    @GetMapping("/{questionDetailId}")
+    public AjaxResult<QuestionDetailVo> getInfo(@PathVariable("questionDetailId" ) Long questionDetailId) {
+        return AjaxResult.success(iQuestionDetailService.queryById(questionDetailId));
+    }
+
+    /**
+     * 新增题目详情
+     */
+    @ApiOperation("新增题目详情")
+    @PreAuthorize("@ss.hasPermi('question:detail:add')")
+    @Log(title = "题目详情", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody QuestionDetailAddBo bo) {
+        return toAjax(iQuestionDetailService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改题目详情
+     */
+    @ApiOperation("修改题目详情")
+    @PreAuthorize("@ss.hasPermi('question:detail:edit')")
+    @Log(title = "题目详情", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody QuestionDetailEditBo bo) {
+        return toAjax(iQuestionDetailService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除题目详情
+     */
+    @ApiOperation("删除题目详情")
+    @PreAuthorize("@ss.hasPermi('question:detail:remove')")
+    @Log(title = "题目详情" , businessType = BusinessType.DELETE)
+    @PostMapping("/delete")
+    public AjaxResult<Void> remove(@PathVariable Long[] questionDetailIds) {
+        return toAjax(iQuestionDetailService.deleteWithValidByIds(Arrays.asList(questionDetailIds), true) ? 1 : 0);
+    }
+}

+ 4 - 0
zhongzheng-generator/src/main/resources/vm/java/serviceImpl.java.vm

@@ -2,6 +2,7 @@ package ${packageName}.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -90,6 +91,8 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C
     public Boolean insertByAddBo(${ClassName}AddBo bo) {
         ${ClassName} add = BeanUtil.toBean(bo, ${ClassName}.class);
         validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
         return this.save(add);
     }
 
@@ -97,6 +100,7 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C
     public Boolean updateByEditBo(${ClassName}EditBo bo) {
         ${ClassName} update = BeanUtil.toBean(bo, ${ClassName}.class);
         validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
         return this.updateById(update);
     }
 

+ 51 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionAddBo.java

@@ -0,0 +1,51 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 题库题目添加对象 question
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@ApiModel("题库题目添加对象")
+public class QuestionAddBo {
+
+    /** 题目正文 */
+    @ApiModelProperty("题目正文")
+    private String content;
+    /** 类型 1单选 2多选 3判断题 4案列题 */
+    @ApiModelProperty("类型 1单选 2多选 3判断题 4案列题")
+    private String type;
+    /** 判断题答案 1正确 0错误 */
+    @ApiModelProperty("判断题答案 1正确 0错误")
+    private Integer answerQuestion;
+    /** 题库小节ID */
+    @ApiModelProperty("题库小节ID")
+    private Long bankSectionId;
+    /**  状态 1正常 0关闭 */
+    @ApiModelProperty(" 状态 1正常 0关闭")
+    private Integer status;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** 解析文本 */
+    @ApiModelProperty("解析文本")
+    private String analysisContent;
+    /** 题库试卷ID */
+    @ApiModelProperty("题库试卷ID")
+    private Long examId;
+    /** 父类型 1普通练习 2试卷练习 3真题练习 */
+    @ApiModelProperty("父类型 1普通练习 2试卷练习 3真题练习")
+    private Long parentType;
+}

+ 54 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionDetailAddBo.java

@@ -0,0 +1,54 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 题目详情添加对象 question_detail
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@ApiModel("题目详情添加对象")
+public class QuestionDetailAddBo {
+
+    /** 题目ID */
+    @ApiModelProperty("题目ID")
+    private Long questionId;
+    /** 选择题正文 */
+    @ApiModelProperty("选择题正文")
+    private String content;
+    /** 图片 */
+    @ApiModelProperty("图片")
+    private String imgUrl;
+    /** 选型答案  1正确  0错误 */
+    @ApiModelProperty("选型答案  1正确  0错误")
+    private Integer optionAnswer;
+    /** 解析文本 */
+    @ApiModelProperty("解析文本")
+    private String analysisContent;
+    /** 父ID */
+    @ApiModelProperty("父ID")
+    private Long pid;
+    /** 类型 1单选 2多选 3判断题 4问答题 */
+    @ApiModelProperty("类型 1单选 2多选 3判断题 4问答题")
+    private String type;
+    /** 判断题答案 1正确 0错误 */
+    @ApiModelProperty("判断题答案 1正确 0错误")
+    private String itemAnswerQuestion;
+    /**  状态 1正常 0关闭 */
+    @ApiModelProperty(" 状态 1正常 0关闭")
+    private Integer status;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+}

+ 64 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionDetailEditBo.java

@@ -0,0 +1,64 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 题目详情编辑对象 question_detail
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@ApiModel("题目详情编辑对象")
+public class QuestionDetailEditBo {
+
+
+    /** 详情ID */
+    @ApiModelProperty("详情ID")
+    private Long questionDetailId;
+
+    /** 题目ID */
+    @ApiModelProperty("题目ID")
+    private Long questionId;
+
+    /** 选择题正文 */
+    @ApiModelProperty("选择题正文")
+    private String content;
+
+    /** 图片 */
+    @ApiModelProperty("图片")
+    private String imgUrl;
+
+    /** 选型答案  1正确  0错误 */
+    @ApiModelProperty("选型答案  1正确  0错误")
+    private Integer optionAnswer;
+
+    /** 解析文本 */
+    @ApiModelProperty("解析文本")
+    private String analysisContent;
+
+    /** 父ID */
+    @ApiModelProperty("父ID")
+    private Long pid;
+
+    /** 类型 1单选 2多选 3判断题 4问答题 */
+    @ApiModelProperty("类型 1单选 2多选 3判断题 4问答题")
+    private String type;
+
+    /** 判断题答案 1正确 0错误 */
+    @ApiModelProperty("判断题答案 1正确 0错误")
+    private String itemAnswerQuestion;
+
+    /**  状态 1正常 0关闭 */
+    @ApiModelProperty(" 状态 1正常 0关闭")
+    private Integer status;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+}

+ 67 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionDetailQueryBo.java

@@ -0,0 +1,67 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 题目详情分页查询对象 question_detail
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("题目详情分页查询对象")
+public class QuestionDetailQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 题目ID */
+	@ApiModelProperty("题目ID")
+	private Long questionId;
+	/** 选择题正文 */
+	@ApiModelProperty("选择题正文")
+	private String content;
+	/** 图片 */
+	@ApiModelProperty("图片")
+	private String imgUrl;
+	/** 选型答案  1正确  0错误 */
+	@ApiModelProperty("选型答案  1正确  0错误")
+	private Integer optionAnswer;
+	/** 解析文本 */
+	@ApiModelProperty("解析文本")
+	private String analysisContent;
+	/** 父ID */
+	@ApiModelProperty("父ID")
+	private Long pid;
+	/** 类型 1单选 2多选 3判断题 4问答题 */
+	@ApiModelProperty("类型 1单选 2多选 3判断题 4问答题")
+	private String type;
+	/** 判断题答案 1正确 0错误 */
+	@ApiModelProperty("判断题答案 1正确 0错误")
+	private String itemAnswerQuestion;
+	/**  状态 1正常 0关闭 */
+	@ApiModelProperty(" 状态 1正常 0关闭")
+	private Integer status;
+
+}

+ 60 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionEditBo.java

@@ -0,0 +1,60 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 题库题目编辑对象 question
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@ApiModel("题库题目编辑对象")
+public class QuestionEditBo {
+
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long questionId;
+
+    /** 题目正文 */
+    @ApiModelProperty("题目正文")
+    private String content;
+
+    /** 类型 1单选 2多选 3判断题 4案列题 */
+    @ApiModelProperty("类型 1单选 2多选 3判断题 4案列题")
+    private String type;
+
+    /** 判断题答案 1正确 0错误 */
+    @ApiModelProperty("判断题答案 1正确 0错误")
+    private Integer answerQuestion;
+
+    /** 题库小节ID */
+    @ApiModelProperty("题库小节ID")
+    private Long bankSectionId;
+
+    /**  状态 1正常 0关闭 */
+    @ApiModelProperty(" 状态 1正常 0关闭")
+    private Integer status;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+    /** 解析文本 */
+    @ApiModelProperty("解析文本")
+    private String analysisContent;
+
+    /** 题库试卷ID */
+    @ApiModelProperty("题库试卷ID")
+    private Long examId;
+
+    /** 父类型 1普通练习 2试卷练习 3真题练习 */
+    @ApiModelProperty("父类型 1普通练习 2试卷练习 3真题练习")
+    private Long parentType;
+}

+ 64 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionQueryBo.java

@@ -0,0 +1,64 @@
+package com.zhongzheng.modules.bank.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 题库题目分页查询对象 question
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("题库题目分页查询对象")
+public class QuestionQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 题目正文 */
+	@ApiModelProperty("题目正文")
+	private String content;
+	/** 类型 1单选 2多选 3判断题 4案列题 */
+	@ApiModelProperty("类型 1单选 2多选 3判断题 4案列题")
+	private String type;
+	/** 判断题答案 1正确 0错误 */
+	@ApiModelProperty("判断题答案 1正确 0错误")
+	private Integer answerQuestion;
+	/** 题库小节ID */
+	@ApiModelProperty("题库小节ID")
+	private Long bankSectionId;
+	/**  状态 1正常 0关闭 */
+	@ApiModelProperty(" 状态 1正常 0关闭")
+	private Integer status;
+	/** 解析文本 */
+	@ApiModelProperty("解析文本")
+	private String analysisContent;
+	/** 题库试卷ID */
+	@ApiModelProperty("题库试卷ID")
+	private Long examId;
+	/** 父类型 1普通练习 2试卷练习 3真题练习 */
+	@ApiModelProperty("父类型 1普通练习 2试卷练习 3真题练习")
+	private Long parentType;
+
+}

+ 63 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/Question.java

@@ -0,0 +1,63 @@
+package com.zhongzheng.modules.bank.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 题库题目对象 question
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("question")
+public class Question implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+
+    /** $column.columnComment */
+    @TableId(value = "question_id")
+    private Long questionId;
+
+    /** 题目正文 */
+    private String content;
+
+    /** 类型 1单选 2多选 3判断题 4案列题 */
+    private String type;
+
+    /** 判断题答案 1正确 0错误 */
+    private Integer answerQuestion;
+
+    /** 题库小节ID */
+    private Long bankSectionId;
+
+    /**  状态 1正常 0关闭 */
+    private Integer status;
+
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+
+    /** 解析文本 */
+    private String analysisContent;
+
+    /** 题库试卷ID */
+    private Long examId;
+
+    /** 父类型 1普通练习 2试卷练习 3真题练习 */
+    private Long parentType;
+
+}

+ 66 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/domain/QuestionDetail.java

@@ -0,0 +1,66 @@
+package com.zhongzheng.modules.bank.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 题目详情对象 question_detail
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("question_detail")
+public class QuestionDetail implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+
+    /** 详情ID */
+    @TableId(value = "question_detail_id")
+    private Long questionDetailId;
+
+    /** 题目ID */
+    private Long questionId;
+
+    /** 选择题正文 */
+    private String content;
+
+    /** 图片 */
+    private String imgUrl;
+
+    /** 选型答案  1正确  0错误 */
+    private Integer optionAnswer;
+
+    /** 解析文本 */
+    private String analysisContent;
+
+    /** 父ID */
+    private Long pid;
+
+    /** 类型 1单选 2多选 3判断题 4问答题 */
+    private String type;
+
+    /** 判断题答案 1正确 0错误 */
+    private String itemAnswerQuestion;
+
+    /**  状态 1正常 0关闭 */
+    private Integer status;
+
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionDetailMapper.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.bank.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.bank.domain.QuestionDetail;
+
+/**
+ * 题目详情Mapper接口
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+public interface QuestionDetailMapper extends BaseMapper<QuestionDetail> {
+
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/mapper/QuestionMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.bank.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.bank.domain.Question;
+
+/**
+ * 题库题目Mapper接口
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+public interface QuestionMapper extends BaseMapper<Question> {
+
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionDetailService.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.bank.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.bank.bo.QuestionDetailAddBo;
+import com.zhongzheng.modules.bank.bo.QuestionDetailEditBo;
+import com.zhongzheng.modules.bank.bo.QuestionDetailQueryBo;
+import com.zhongzheng.modules.bank.domain.QuestionDetail;
+import com.zhongzheng.modules.bank.vo.QuestionDetailVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 题目详情Service接口
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+public interface IQuestionDetailService extends IService<QuestionDetail> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	QuestionDetailVo queryById(Long questionDetailId);
+
+	/**
+	 * 查询列表
+	 */
+	List<QuestionDetailVo> queryList(QuestionDetailQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入题目详情
+	 * @param bo 题目详情新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(QuestionDetailAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改题目详情
+	 * @param bo 题目详情编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(QuestionDetailEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.bank.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.bank.bo.QuestionAddBo;
+import com.zhongzheng.modules.bank.bo.QuestionEditBo;
+import com.zhongzheng.modules.bank.bo.QuestionQueryBo;
+import com.zhongzheng.modules.bank.domain.Question;
+import com.zhongzheng.modules.bank.vo.QuestionVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 题库题目Service接口
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+public interface IQuestionService extends IService<Question> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	QuestionVo queryById(Long questionId);
+
+	/**
+	 * 查询列表
+	 */
+	List<QuestionVo> queryList(QuestionQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入题库题目
+	 * @param bo 题库题目新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(QuestionAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改题库题目
+	 * @param bo 题库题目编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(QuestionEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankChapterServiceImpl.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.bank.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.bank.bo.QuestionBankChapterAddBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankChapterEditBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankChapterQueryBo;
@@ -69,6 +70,8 @@ public class QuestionBankChapterServiceImpl extends ServiceImpl<QuestionBankChap
     public Boolean insertByAddBo(QuestionBankChapterAddBo bo) {
         QuestionBankChapter add = BeanUtil.toBean(bo, QuestionBankChapter.class);
         validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
         return this.save(add);
     }
 
@@ -76,6 +79,7 @@ public class QuestionBankChapterServiceImpl extends ServiceImpl<QuestionBankChap
     public Boolean updateByEditBo(QuestionBankChapterEditBo bo) {
         QuestionBankChapter update = BeanUtil.toBean(bo, QuestionBankChapter.class);
         validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
         return this.updateById(update);
     }
 

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankExamServiceImpl.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.bank.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.bank.bo.QuestionBankExamAddBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankExamEditBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankExamQueryBo;
@@ -70,6 +71,8 @@ public class QuestionBankExamServiceImpl extends ServiceImpl<QuestionBankExamMap
     public Boolean insertByAddBo(QuestionBankExamAddBo bo) {
         QuestionBankExam add = BeanUtil.toBean(bo, QuestionBankExam.class);
         validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
         return this.save(add);
     }
 
@@ -77,6 +80,7 @@ public class QuestionBankExamServiceImpl extends ServiceImpl<QuestionBankExamMap
     public Boolean updateByEditBo(QuestionBankExamEditBo bo) {
         QuestionBankExam update = BeanUtil.toBean(bo, QuestionBankExam.class);
         validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
         return this.updateById(update);
     }
 

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankSectionServiceImpl.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.bank.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.bank.bo.QuestionBankSectionAddBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankSectionEditBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankSectionQueryBo;
@@ -69,6 +70,8 @@ public class QuestionBankSectionServiceImpl extends ServiceImpl<QuestionBankSect
     public Boolean insertByAddBo(QuestionBankSectionAddBo bo) {
         QuestionBankSection add = BeanUtil.toBean(bo, QuestionBankSection.class);
         validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
         return this.save(add);
     }
 
@@ -76,6 +79,7 @@ public class QuestionBankSectionServiceImpl extends ServiceImpl<QuestionBankSect
     public Boolean updateByEditBo(QuestionBankSectionEditBo bo) {
         QuestionBankSection update = BeanUtil.toBean(bo, QuestionBankSection.class);
         validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
         return this.updateById(update);
     }
 

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionBankServiceImpl.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.bank.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.bank.bo.QuestionBankAddBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankEditBo;
 import com.zhongzheng.modules.bank.bo.QuestionBankQueryBo;
@@ -85,6 +86,8 @@ public class QuestionBankServiceImpl extends ServiceImpl<QuestionBankMapper, Que
     public Boolean insertByAddBo(QuestionBankAddBo bo) {
         QuestionBank add = BeanUtil.toBean(bo, QuestionBank.class);
         validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
         return this.save(add);
     }
 
@@ -92,6 +95,7 @@ public class QuestionBankServiceImpl extends ServiceImpl<QuestionBankMapper, Que
     public Boolean updateByEditBo(QuestionBankEditBo bo) {
         QuestionBank update = BeanUtil.toBean(bo, QuestionBank.class);
         validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
         return this.updateById(update);
     }
 

+ 107 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionDetailServiceImpl.java

@@ -0,0 +1,107 @@
+package com.zhongzheng.modules.bank.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.bank.bo.QuestionDetailAddBo;
+import com.zhongzheng.modules.bank.bo.QuestionDetailEditBo;
+import com.zhongzheng.modules.bank.bo.QuestionDetailQueryBo;
+import com.zhongzheng.modules.bank.domain.QuestionDetail;
+import com.zhongzheng.modules.bank.mapper.QuestionDetailMapper;
+import com.zhongzheng.modules.bank.service.IQuestionDetailService;
+import com.zhongzheng.modules.bank.vo.QuestionDetailVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 题目详情Service业务层处理
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Service
+public class QuestionDetailServiceImpl extends ServiceImpl<QuestionDetailMapper, QuestionDetail> implements IQuestionDetailService {
+
+    @Override
+    public QuestionDetailVo queryById(Long questionDetailId){
+        QuestionDetail db = this.baseMapper.selectById(questionDetailId);
+        return BeanUtil.toBean(db, QuestionDetailVo.class);
+    }
+
+    @Override
+    public List<QuestionDetailVo> queryList(QuestionDetailQueryBo bo) {
+        LambdaQueryWrapper<QuestionDetail> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getQuestionId() != null, QuestionDetail::getQuestionId, bo.getQuestionId());
+        lqw.eq(StrUtil.isNotBlank(bo.getContent()), QuestionDetail::getContent, bo.getContent());
+        lqw.eq(StrUtil.isNotBlank(bo.getImgUrl()), QuestionDetail::getImgUrl, bo.getImgUrl());
+        lqw.eq(bo.getOptionAnswer() != null, QuestionDetail::getOptionAnswer, bo.getOptionAnswer());
+        lqw.eq(StrUtil.isNotBlank(bo.getAnalysisContent()), QuestionDetail::getAnalysisContent, bo.getAnalysisContent());
+        lqw.eq(bo.getPid() != null, QuestionDetail::getPid, bo.getPid());
+        lqw.eq(StrUtil.isNotBlank(bo.getType()), QuestionDetail::getType, bo.getType());
+        lqw.eq(StrUtil.isNotBlank(bo.getItemAnswerQuestion()), QuestionDetail::getItemAnswerQuestion, bo.getItemAnswerQuestion());
+        lqw.eq(bo.getStatus() != null, QuestionDetail::getStatus, bo.getStatus());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<QuestionDetailVo> entity2Vo(Collection<QuestionDetail> collection) {
+        List<QuestionDetailVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, QuestionDetailVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<QuestionDetail> page = (Page<QuestionDetail>)collection;
+            Page<QuestionDetailVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(QuestionDetailAddBo bo) {
+        QuestionDetail add = BeanUtil.toBean(bo, QuestionDetail.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(QuestionDetailEditBo bo) {
+        QuestionDetail update = BeanUtil.toBean(bo, QuestionDetail.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(QuestionDetail entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 107 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -0,0 +1,107 @@
+package com.zhongzheng.modules.bank.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.bank.bo.QuestionAddBo;
+import com.zhongzheng.modules.bank.bo.QuestionEditBo;
+import com.zhongzheng.modules.bank.bo.QuestionQueryBo;
+import com.zhongzheng.modules.bank.domain.Question;
+import com.zhongzheng.modules.bank.mapper.QuestionMapper;
+import com.zhongzheng.modules.bank.service.IQuestionService;
+import com.zhongzheng.modules.bank.vo.QuestionVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 题库题目Service业务层处理
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Service
+public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> implements IQuestionService {
+
+    @Override
+    public QuestionVo queryById(Long questionId){
+        Question db = this.baseMapper.selectById(questionId);
+        return BeanUtil.toBean(db, QuestionVo.class);
+    }
+
+    @Override
+    public List<QuestionVo> queryList(QuestionQueryBo bo) {
+        LambdaQueryWrapper<Question> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getContent()), Question::getContent, bo.getContent());
+        lqw.eq(StrUtil.isNotBlank(bo.getType()), Question::getType, bo.getType());
+        lqw.eq(bo.getAnswerQuestion() != null, Question::getAnswerQuestion, bo.getAnswerQuestion());
+        lqw.eq(bo.getBankSectionId() != null, Question::getBankSectionId, bo.getBankSectionId());
+        lqw.eq(bo.getStatus() != null, Question::getStatus, bo.getStatus());
+        lqw.eq(StrUtil.isNotBlank(bo.getAnalysisContent()), Question::getAnalysisContent, bo.getAnalysisContent());
+        lqw.eq(bo.getExamId() != null, Question::getExamId, bo.getExamId());
+        lqw.eq(bo.getParentType() != null, Question::getParentType, bo.getParentType());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<QuestionVo> entity2Vo(Collection<Question> collection) {
+        List<QuestionVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, QuestionVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<Question> page = (Page<Question>)collection;
+            Page<QuestionVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(QuestionAddBo bo) {
+        Question add = BeanUtil.toBean(bo, Question.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(QuestionEditBo bo) {
+        Question update = BeanUtil.toBean(bo, Question.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(Question entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 64 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionDetailVo.java

@@ -0,0 +1,64 @@
+package com.zhongzheng.modules.bank.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 题目详情视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@ApiModel("题目详情视图对象")
+public class QuestionDetailVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 详情ID */
+	@ApiModelProperty("详情ID")
+	private Long questionDetailId;
+
+	/** 题目ID */
+	@Excel(name = "题目ID")
+	@ApiModelProperty("题目ID")
+	private Long questionId;
+	/** 选择题正文 */
+	@Excel(name = "选择题正文")
+	@ApiModelProperty("选择题正文")
+	private String content;
+	/** 图片 */
+	@Excel(name = "图片")
+	@ApiModelProperty("图片")
+	private String imgUrl;
+	/** 选型答案  1正确  0错误 */
+	@Excel(name = "选型答案  1正确  0错误")
+	@ApiModelProperty("选型答案  1正确  0错误")
+	private Integer optionAnswer;
+	/** 解析文本 */
+	@Excel(name = "解析文本")
+	@ApiModelProperty("解析文本")
+	private String analysisContent;
+	/** 父ID */
+	@Excel(name = "父ID")
+	@ApiModelProperty("父ID")
+	private Long pid;
+	/** 类型 1单选 2多选 3判断题 4问答题 */
+	@Excel(name = "类型 1单选 2多选 3判断题 4问答题")
+	@ApiModelProperty("类型 1单选 2多选 3判断题 4问答题")
+	private String type;
+	/** 判断题答案 1正确 0错误 */
+	@Excel(name = "判断题答案 1正确 0错误")
+	@ApiModelProperty("判断题答案 1正确 0错误")
+	private String itemAnswerQuestion;
+	/**  状态 1正常 0关闭 */
+	@Excel(name = " 状态 1正常 0关闭")
+	@ApiModelProperty(" 状态 1正常 0关闭")
+	private Integer status;
+
+}

+ 60 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionVo.java

@@ -0,0 +1,60 @@
+package com.zhongzheng.modules.bank.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 题库题目视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2021-05-20
+ */
+@Data
+@ApiModel("题库题目视图对象")
+public class QuestionVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long questionId;
+
+	/** 题目正文 */
+	@Excel(name = "题目正文")
+	@ApiModelProperty("题目正文")
+	private String content;
+	/** 类型 1单选 2多选 3判断题 4案列题 */
+	@Excel(name = "类型 1单选 2多选 3判断题 4案列题")
+	@ApiModelProperty("类型 1单选 2多选 3判断题 4案列题")
+	private String type;
+	/** 判断题答案 1正确 0错误 */
+	@Excel(name = "判断题答案 1正确 0错误")
+	@ApiModelProperty("判断题答案 1正确 0错误")
+	private Integer answerQuestion;
+	/** 题库小节ID */
+	@Excel(name = "题库小节ID")
+	@ApiModelProperty("题库小节ID")
+	private Long bankSectionId;
+	/**  状态 1正常 0关闭 */
+	@Excel(name = " 状态 1正常 0关闭")
+	@ApiModelProperty(" 状态 1正常 0关闭")
+	private Integer status;
+	/** 解析文本 */
+	@Excel(name = "解析文本")
+	@ApiModelProperty("解析文本")
+	private String analysisContent;
+	/** 题库试卷ID */
+	@Excel(name = "题库试卷ID")
+	@ApiModelProperty("题库试卷ID")
+	private Long examId;
+	/** 父类型 1普通练习 2试卷练习 3真题练习 */
+	@Excel(name = "父类型 1普通练习 2试卷练习 3真题练习")
+	@ApiModelProperty("父类型 1普通练习 2试卷练习 3真题练习")
+	private Long parentType;
+
+}

+ 23 - 0
zhongzheng-system/src/main/resources/mapper/modules/bank/QuestionDetailMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.bank.mapper.QuestionDetailMapper">
+
+    <resultMap type="com.zhongzheng.modules.bank.domain.QuestionDetail" id="QuestionDetailResult">
+        <result property="questionDetailId" column="question_detail_id"/>
+        <result property="questionId" column="question_id"/>
+        <result property="content" column="content"/>
+        <result property="imgUrl" column="img_url"/>
+        <result property="optionAnswer" column="option_answer"/>
+        <result property="analysisContent" column="analysis_content"/>
+        <result property="pid" column="pid"/>
+        <result property="type" column="type"/>
+        <result property="itemAnswerQuestion" column="item_answer_question"/>
+        <result property="status" column="status"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+
+</mapper>

+ 22 - 0
zhongzheng-system/src/main/resources/mapper/modules/bank/QuestionMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.bank.mapper.QuestionMapper">
+
+    <resultMap type="com.zhongzheng.modules.bank.domain.Question" id="QuestionResult">
+        <result property="questionId" column="question_id"/>
+        <result property="content" column="content"/>
+        <result property="type" column="type"/>
+        <result property="answerQuestion" column="answer_question"/>
+        <result property="bankSectionId" column="bank_section_id"/>
+        <result property="status" column="status"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="analysisContent" column="analysis_content"/>
+        <result property="examId" column="exam_id"/>
+        <result property="parentType" column="parent_type"/>
+    </resultMap>
+
+
+</mapper>