From 1d01fb0b3c48dc7e202942ef574f5c292d68d788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E6=88=90?= <2847920761@qq.com> Date: Mon, 17 Feb 2025 18:10:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=85=A8=E6=95=99=E8=82=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wgz/controller/WgzAppController.java | 102 ++++++++++++++- .../controller/WgzQuestionBankController.java | 109 ++++++++++++++++ .../WgzQuestionCategoryController.java | 108 ++++++++++++++++ .../controller/WgzQuestionSaveController.java | 108 ++++++++++++++++ .../WgzQuestionsConfigurationController.java | 108 ++++++++++++++++ .../ruoyi/wgz/bo/WgzQuestionBankQueryBo.java | 49 ++++++++ .../wgz/bo/WgzQuestionCategoryQueryBo.java | 46 +++++++ .../ruoyi/wgz/bo/WgzQuestionSaveQueryBo.java | 46 +++++++ .../bo/WgzQuestionsConfigurationQueryBo.java | 43 +++++++ .../req/WgzAppAttachmentAcquisitionReq.java | 2 - .../com/ruoyi/wgz/bo/req/WgzQuestionReq.java | 35 ++++++ .../res/WgzAppAttachmentAcquisitionRes.java | 2 +- .../wgz/bo/res/WgzAppGetTestPaperRes.java | 25 ++++ .../wgz/bo/rests/WgzAppGetTestPaperThree.java | 28 +++++ .../wgz/bo/rests/WgzAppGetTestPaperTwo.java | 19 +++ .../wgz/bo/{ => rests}/WgzAutonymAnnex.java | 5 +- .../com/ruoyi/wgz/domain/WgzQuestionBank.java | 104 +++++++++++++++ .../ruoyi/wgz/domain/WgzQuestionCategory.java | 44 +++++++ .../com/ruoyi/wgz/domain/WgzQuestionSave.java | 119 ++++++++++++++++++ .../wgz/domain/WgzQuestionsConfiguration.java | 84 +++++++++++++ .../wgz/mapper/WgzQuestionBankMapper.java | 18 +++ .../wgz/mapper/WgzQuestionCategoryMapper.java | 18 +++ .../wgz/mapper/WgzQuestionSaveMapper.java | 18 +++ .../WgzQuestionsConfigurationMapper.java | 18 +++ .../wgz/service/IWgzQuestionBankService.java | 73 +++++++++++ .../service/IWgzQuestionCategoryService.java | 55 ++++++++ .../wgz/service/IWgzQuestionSaveService.java | 55 ++++++++ .../IWgzQuestionsConfigurationService.java | 68 ++++++++++ .../impl/WgzQuestionBankServiceImpl.java | 103 +++++++++++++++ .../impl/WgzQuestionCategoryServiceImpl.java | 84 +++++++++++++ .../impl/WgzQuestionSaveServiceImpl.java | 84 +++++++++++++ .../WgzQuestionsConfigurationServiceImpl.java | 95 ++++++++++++++ .../main/resources/mapper/wgz/bankMenu.sql | 22 ++++ .../resources/mapper/wgz/categoryMenu.sql | 22 ++++ .../mapper/wgz/configurationMenu.sql | 22 ++++ .../main/resources/mapper/wgz/saveMenu.sql | 22 ++++ 36 files changed, 1950 insertions(+), 13 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionBankController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionCategoryController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionSaveController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionsConfigurationController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionBankQueryBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionCategoryQueryBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionSaveQueryBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionsConfigurationQueryBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzQuestionReq.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppGetTestPaperRes.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperThree.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperTwo.java rename ruoyi-system/src/main/java/com/ruoyi/wgz/bo/{ => rests}/WgzAutonymAnnex.java (83%) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionBank.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionCategory.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionSave.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionsConfiguration.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionBankMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionCategoryMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionsConfigurationMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionBankService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionCategoryService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionSaveService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionsConfigurationService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionBankServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionCategoryServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionsConfigurationServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/mapper/wgz/bankMenu.sql create mode 100644 ruoyi-system/src/main/resources/mapper/wgz/categoryMenu.sql create mode 100644 ruoyi-system/src/main/resources/mapper/wgz/configurationMenu.sql create mode 100644 ruoyi-system/src/main/resources/mapper/wgz/saveMenu.sql diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java index 838d858..780214e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java @@ -6,13 +6,18 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.domain.Annex; import com.ruoyi.common.service.IAnnexService; -import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictTypeService; -import com.ruoyi.wgz.bo.WgzAutonymAnnex; -import com.ruoyi.wgz.bo.WgzUserQueryBo; +import com.ruoyi.wgz.bo.res.WgzAppGetTestPaperRes; +import com.ruoyi.wgz.bo.rests.WgzAppGetTestPaperThree; +import com.ruoyi.wgz.bo.rests.WgzAppGetTestPaperTwo; +import com.ruoyi.wgz.bo.rests.WgzAutonymAnnex; import com.ruoyi.wgz.bo.req.*; import com.ruoyi.wgz.bo.res.WgzAppAttachmentAcquisitionRes; import com.ruoyi.wgz.bo.res.WgzAppPersonalBasicInformationRes; +import com.ruoyi.wgz.domain.WgzQuestionBank; +import com.ruoyi.wgz.domain.WgzQuestionsConfiguration; +import com.ruoyi.wgz.service.IWgzQuestionBankService; +import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService; import com.ruoyi.wgz.service.IWgzUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -22,7 +27,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.validation.constraints.NotEmpty; import java.util.ArrayList; import java.util.List; @@ -47,6 +51,10 @@ public class WgzAppController { @Autowired private IAnnexService iAnnexService; + @Autowired + private IWgzQuestionBankService iWgzQuestionBankService; + + /** * 【注册】务工者注册 @@ -59,7 +67,7 @@ public class WgzAppController { } /** - * 【我的】【个人基本信息】查询基础用户信息(还未带附件信息) + * 【我的】【个人基本信息】修改用户头像 */ @ApiOperation("APP务工者-修改用户头像") @PreAuthorize("@ss.hasPermi('wgzApp:user:userModifyingUserProfilePicture')") @@ -71,7 +79,7 @@ public class WgzAppController { /** * 【我的】【个人基本信息】查询基础用户信息(还未带附件信息) */ - @ApiOperation("APP务工者-个人基本信息") + @ApiOperation("APP务工者-个人基本信息(还未带附件信息)") @PreAuthorize("@ss.hasPermi('wgzApp:user:userPersonalBasicInformation')") @GetMapping("/wgzUserPersonalBasicInformation") public AjaxResult userPersonalBasicInformation(@Validated WgzAppPersonalBasicInformationReq req) { @@ -136,4 +144,86 @@ public class WgzAppController { public AjaxResult userRealNameAuthentication(@Validated @RequestBody WgzRealNameAuthenticationReq req) { return AjaxResult.success(iWgzUserService.userRealNameAuthentication(req)); } + + + @Autowired + private IWgzQuestionsConfigurationService iWgzQuestionsConfigurationService; + + /** + * 【我的】【岗前培训】获取安全教育考试试卷(随机获取) + */ + @ApiOperation("APP务工者-岗前培训·获取随机试卷") + @PreAuthorize("@ss.hasPermi('wgzApp:user:userGetTestPaper')") + @GetMapping("/WgzUserGetTestPaper") + public AjaxResult userGetTestPaper() { + //1、获取配置信息 + WgzQuestionsConfiguration configuration = iWgzQuestionsConfigurationService.appQueryById(2L); + if (configuration == null) { + throw new RuntimeException("未查询到配置信息"); + } + + //2、随机获取数据,返回id和score + Integer s = configuration.getSingleChoice(); + Integer m = configuration.getMultipleChoice(); + Integer e = configuration.getEstimate(); + + List sEntity = iWgzQuestionBankService.appQueryList(1, s); + List mEntity = iWgzQuestionBankService.appQueryList(2, m); + List eEntity = iWgzQuestionBankService.appQueryList(3, e); + //3、组装数据 + WgzAppGetTestPaperRes res = new WgzAppGetTestPaperRes(); + res.setSingleList(createQuestionSection("一、单选题", sEntity, configuration.getSingleScore(), s)); + res.setMultipleList(createQuestionSection("二、多选题", mEntity, configuration.getMultipleScore(), m)); + res.setEstimateList(createQuestionSection("三、判断题", eEntity, configuration.getEstimateScore(), e)); +// WgzAppGetTestPaperTwo one = new WgzAppGetTestPaperTwo(); +// one.setTopic("一、单选题,共" + s + "道题,每小题" + configuration.getSingleScore() + "分,共计" + s * configuration.getSingleScore() + "分"); +// sEntity.forEach(item -> { +// item.setScore(configuration.getSingleScore()); +// }); +// one.setList(sEntity); +// res.setSingleList(one); +// +// WgzAppGetTestPaperTwo two = new WgzAppGetTestPaperTwo(); +// two.setTopic("二、多选题,共" + m + "道题,每小题" + configuration.getMultipleScore() + "分,共计" + m * configuration.getMultipleScore() + "分"); +// mEntity.forEach(item -> { +// item.setScore(configuration.getMultipleScore()); +// }); +// two.setList(mEntity); +// res.setMultipleList(two); +// +// WgzAppGetTestPaperTwo three = new WgzAppGetTestPaperTwo(); +// three.setTopic("三、判断题,共" + e + "道题,每小题" + configuration.getEstimateScore() + "分,共计" + e * configuration.getEstimateScore() + "分"); +// eEntity.forEach(item -> { +// item.setScore(configuration.getEstimateScore()); +// }); +// three.setList(eEntity); +// res.setMultipleList(three); + //4、设置最大考试时间 + res.setMaximum(configuration.getAnswerTime()); + return AjaxResult.success(res); + } + + /** + * 控制层业务 + * ================================================================================================================= + * ================================================================================================================= + * ================================================================================================================= + */ + + + /** + * 创建题目板块 + * @param topicPrefix 板块标题前缀 + * @param questions 题目列表 + * @param score 每题分数 + * @param questionCount 题目数量 + * @return 题目板块实体 + */ + private WgzAppGetTestPaperTwo createQuestionSection(String topicPrefix, List questions, Float score, int questionCount) { + WgzAppGetTestPaperTwo section = new WgzAppGetTestPaperTwo(); + section.setTopic(String.format("%s,共%d道题,每小题%.2f分,共计%.2f分", topicPrefix, questionCount, score, questionCount * score)); + questions.forEach(item -> item.setScore(score)); + section.setList(questions); + return section; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionBankController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionBankController.java new file mode 100644 index 0000000..2593d19 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionBankController.java @@ -0,0 +1,109 @@ +package com.ruoyi.web.controller.wgz.controller; + +import java.util.List; +import java.util.Arrays; + +import com.ruoyi.wgz.bo.req.WgzQuestionReq; +import com.ruoyi.wgz.domain.WgzQuestionBank; +import lombok.RequiredArgsConstructor; +import javax.validation.constraints.*; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.wgz.bo.WgzQuestionBankQueryBo; +import com.ruoyi.wgz.service.IWgzQuestionBankService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 题库Controller + * + * @author ruoyi + * @date 2025-02-17 + */ +@Api(value = "题库控制器", tags = {"题库管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/wgz/bank") +public class WgzQuestionBankController extends BaseController { + + private final IWgzQuestionBankService iWgzQuestionBankService; + + /** + * 查询题库列表 + */ + @ApiOperation("查询题库列表") + @PreAuthorize("@ss.hasPermi('wgz:bank:list')") + @GetMapping("/list") + public TableDataInfo list(@Validated WgzQuestionBankQueryBo bo) { + return iWgzQuestionBankService.queryPageList(bo); + } + + /** + * 导出题库列表 + */ + @ApiOperation("导出题库列表") + @PreAuthorize("@ss.hasPermi('wgz:bank:export')") + @Log(title = "题库", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(@Validated WgzQuestionBankQueryBo bo) { + List list = iWgzQuestionBankService.queryList(bo); + ExcelUtil util = new ExcelUtil(WgzQuestionBank.class); + return util.exportExcel(list, "题库"); + } + + /** + * 获取题库详细信息 + */ + @ApiOperation("获取题库详细信息") + @PreAuthorize("@ss.hasPermi('wgz:bank:query')") + @GetMapping("/{id}") + public AjaxResult getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return AjaxResult.success(iWgzQuestionBankService.queryById(id)); + } + + /** + * 新增题库 + */ + @ApiOperation("新增题库") + @PreAuthorize("@ss.hasPermi('wgz:bank:add')") + @Log(title = "题库", businessType = BusinessType.INSERT) + @RepeatSubmit + @PostMapping() + public AjaxResult add(@Validated @RequestBody WgzQuestionReq bo) { + return toAjax(iWgzQuestionBankService.insert(bo) ? 1 : 0); + } + + /** + * 修改题库 + */ + @ApiOperation("修改题库") + @PreAuthorize("@ss.hasPermi('wgz:bank:edit')") + @Log(title = "题库", businessType = BusinessType.UPDATE) + @RepeatSubmit + @PutMapping() + public AjaxResult edit(@Validated @RequestBody WgzQuestionBank bo) { + return toAjax(iWgzQuestionBankService.update(bo) ? 1 : 0); + } + + /** + * 删除题库 + */ + @ApiOperation("删除题库") + @PreAuthorize("@ss.hasPermi('wgz:bank:remove')") + @Log(title = "题库" , businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iWgzQuestionBankService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionCategoryController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionCategoryController.java new file mode 100644 index 0000000..7800b3e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionCategoryController.java @@ -0,0 +1,108 @@ +package com.ruoyi.web.controller.wgz.controller; + +import java.util.List; +import java.util.Arrays; + +import com.ruoyi.wgz.domain.WgzQuestionCategory; +import lombok.RequiredArgsConstructor; +import javax.validation.constraints.*; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.wgz.bo.WgzQuestionCategoryQueryBo; +import com.ruoyi.wgz.service.IWgzQuestionCategoryService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 题库_题库类别Controller + * + * @author ruoyi + * @date 2025-02-17 + */ +@Api(value = "题库_题库类别控制器", tags = {"题库_题库类别管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/wgz/category") +public class WgzQuestionCategoryController extends BaseController { + + private final IWgzQuestionCategoryService iWgzQuestionCategoryService; + + /** + * 查询题库_题库类别列表 + */ + @ApiOperation("查询题库_题库类别列表") + @PreAuthorize("@ss.hasPermi('wgz:category:list')") + @GetMapping("/list") + public TableDataInfo list(@Validated WgzQuestionCategoryQueryBo bo) { + return iWgzQuestionCategoryService.queryPageList(bo); + } + + /** + * 导出题库_题库类别列表 + */ + @ApiOperation("导出题库_题库类别列表") + @PreAuthorize("@ss.hasPermi('wgz:category:export')") + @Log(title = "题库_题库类别", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(@Validated WgzQuestionCategoryQueryBo bo) { + List list = iWgzQuestionCategoryService.queryList(bo); + ExcelUtil util = new ExcelUtil(WgzQuestionCategory.class); + return util.exportExcel(list, "题库_题库类别"); + } + + /** + * 获取题库_题库类别详细信息 + */ + @ApiOperation("获取题库_题库类别详细信息") + @PreAuthorize("@ss.hasPermi('wgz:category:query')") + @GetMapping("/{id}") + public AjaxResult getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return AjaxResult.success(iWgzQuestionCategoryService.queryById(id)); + } + + /** + * 新增题库_题库类别 + */ + @ApiOperation("新增题库_题库类别") + @PreAuthorize("@ss.hasPermi('wgz:category:add')") + @Log(title = "题库_题库类别", businessType = BusinessType.INSERT) + @RepeatSubmit + @PostMapping() + public AjaxResult add(@Validated @RequestBody WgzQuestionCategory bo) { + return toAjax(iWgzQuestionCategoryService.insert(bo) ? 1 : 0); + } + + /** + * 修改题库_题库类别 + */ + @ApiOperation("修改题库_题库类别") + @PreAuthorize("@ss.hasPermi('wgz:category:edit')") + @Log(title = "题库_题库类别", businessType = BusinessType.UPDATE) + @RepeatSubmit + @PutMapping() + public AjaxResult edit(@Validated @RequestBody WgzQuestionCategory bo) { + return toAjax(iWgzQuestionCategoryService.update(bo) ? 1 : 0); + } + + /** + * 删除题库_题库类别 + */ + @ApiOperation("删除题库_题库类别") + @PreAuthorize("@ss.hasPermi('wgz:category:remove')") + @Log(title = "题库_题库类别" , businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iWgzQuestionCategoryService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionSaveController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionSaveController.java new file mode 100644 index 0000000..6b7791a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionSaveController.java @@ -0,0 +1,108 @@ +package com.ruoyi.web.controller.wgz.controller; + +import java.util.List; +import java.util.Arrays; + +import com.ruoyi.wgz.domain.WgzQuestionSave; +import lombok.RequiredArgsConstructor; +import javax.validation.constraints.*; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo; +import com.ruoyi.wgz.service.IWgzQuestionSaveService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 用户试卷存储Controller + * + * @author ruoyi + * @date 2025-02-17 + */ +@Api(value = "用户试卷存储控制器", tags = {"用户试卷存储管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/wgz/save") +public class WgzQuestionSaveController extends BaseController { + + private final IWgzQuestionSaveService iWgzQuestionSaveService; + + /** + * 查询用户试卷存储列表 + */ + @ApiOperation("查询用户试卷存储列表") + @PreAuthorize("@ss.hasPermi('wgz:save:list')") + @GetMapping("/list") + public TableDataInfo list(@Validated WgzQuestionSaveQueryBo bo) { + return iWgzQuestionSaveService.queryPageList(bo); + } + + /** + * 导出用户试卷存储列表 + */ + @ApiOperation("导出用户试卷存储列表") + @PreAuthorize("@ss.hasPermi('wgz:save:export')") + @Log(title = "用户试卷存储", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(@Validated WgzQuestionSaveQueryBo bo) { + List list = iWgzQuestionSaveService.queryList(bo); + ExcelUtil util = new ExcelUtil(WgzQuestionSave.class); + return util.exportExcel(list, "用户试卷存储"); + } + + /** + * 获取用户试卷存储详细信息 + */ + @ApiOperation("获取用户试卷存储详细信息") + @PreAuthorize("@ss.hasPermi('wgz:save:query')") + @GetMapping("/{id}") + public AjaxResult getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return AjaxResult.success(iWgzQuestionSaveService.queryById(id)); + } + + /** + * 新增用户试卷存储 + */ + @ApiOperation("新增用户试卷存储") + @PreAuthorize("@ss.hasPermi('wgz:save:add')") + @Log(title = "用户试卷存储", businessType = BusinessType.INSERT) + @RepeatSubmit + @PostMapping() + public AjaxResult add(@Validated @RequestBody WgzQuestionSave bo) { + return toAjax(iWgzQuestionSaveService.insert(bo) ? 1 : 0); + } + + /** + * 修改用户试卷存储 + */ + @ApiOperation("修改用户试卷存储") + @PreAuthorize("@ss.hasPermi('wgz:save:edit')") + @Log(title = "用户试卷存储", businessType = BusinessType.UPDATE) + @RepeatSubmit + @PutMapping() + public AjaxResult edit(@Validated @RequestBody WgzQuestionSave bo) { + return toAjax(iWgzQuestionSaveService.update(bo) ? 1 : 0); + } + + /** + * 删除用户试卷存储 + */ + @ApiOperation("删除用户试卷存储") + @PreAuthorize("@ss.hasPermi('wgz:save:remove')") + @Log(title = "用户试卷存储" , businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iWgzQuestionSaveService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionsConfigurationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionsConfigurationController.java new file mode 100644 index 0000000..81992ab --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzQuestionsConfigurationController.java @@ -0,0 +1,108 @@ +package com.ruoyi.web.controller.wgz.controller; + +import java.util.List; +import java.util.Arrays; + +import com.ruoyi.wgz.domain.WgzQuestionsConfiguration; +import lombok.RequiredArgsConstructor; +import javax.validation.constraints.*; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.wgz.bo.WgzQuestionsConfigurationQueryBo; +import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 题库配置Controller + * + * @author ruoyi + * @date 2025-02-17 + */ +@Api(value = "题库配置控制器", tags = {"题库配置管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/wgz/configuration") +public class WgzQuestionsConfigurationController extends BaseController { + + private final IWgzQuestionsConfigurationService iWgzQuestionsConfigurationService; + + /** + * 查询题库配置列表 + */ + @ApiOperation("查询题库配置列表") + @PreAuthorize("@ss.hasPermi('wgz:configuration:list')") + @GetMapping("/list") + public TableDataInfo list(@Validated WgzQuestionsConfigurationQueryBo bo) { + return iWgzQuestionsConfigurationService.queryPageList(bo); + } + + /** + * 导出题库配置列表 + */ + @ApiOperation("导出题库配置列表") + @PreAuthorize("@ss.hasPermi('wgz:configuration:export')") + @Log(title = "题库配置", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(@Validated WgzQuestionsConfigurationQueryBo bo) { + List list = iWgzQuestionsConfigurationService.queryList(bo); + ExcelUtil util = new ExcelUtil(WgzQuestionsConfiguration.class); + return util.exportExcel(list, "题库配置"); + } + + /** + * 获取题库配置详细信息 + */ + @ApiOperation("获取题库配置详细信息") + @PreAuthorize("@ss.hasPermi('wgz:configuration:query')") + @GetMapping("/{id}") + public AjaxResult getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return AjaxResult.success(iWgzQuestionsConfigurationService.queryById(id)); + } + + /** + * 新增题库配置 + */ + @ApiOperation("新增题库配置") + @PreAuthorize("@ss.hasPermi('wgz:configuration:add')") + @Log(title = "题库配置", businessType = BusinessType.INSERT) + @RepeatSubmit + @PostMapping() + public AjaxResult add(@Validated @RequestBody WgzQuestionsConfiguration bo) { + return toAjax(iWgzQuestionsConfigurationService.insert(bo) ? 1 : 0); + } + + /** + * 修改题库配置 + */ + @ApiOperation("修改题库配置") + @PreAuthorize("@ss.hasPermi('wgz:configuration:edit')") + @Log(title = "题库配置", businessType = BusinessType.UPDATE) + @RepeatSubmit + @PutMapping() + public AjaxResult edit(@Validated @RequestBody WgzQuestionsConfiguration bo) { + return toAjax(iWgzQuestionsConfigurationService.update(bo) ? 1 : 0); + } + + /** + * 删除题库配置 + */ + @ApiOperation("删除题库配置") + @PreAuthorize("@ss.hasPermi('wgz:configuration:remove')") + @Log(title = "题库配置" , businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iWgzQuestionsConfigurationService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionBankQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionBankQueryBo.java new file mode 100644 index 0000000..b47de8f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionBankQueryBo.java @@ -0,0 +1,49 @@ +package com.ruoyi.wgz.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 题库分页查询对象 wgz_question_bank + * + * @author ruoyi + * @date 2025-02-17 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("题库分页查询对象") +public class WgzQuestionBankQueryBo 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 Long categoryId; + /** 题目类型(1单选、2多选、3判断、4填空、5问答) */ + @ApiModelProperty("题目类型(1单选、2多选、3判断、4填空、5问答)") + private String questionType; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionCategoryQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionCategoryQueryBo.java new file mode 100644 index 0000000..545cf6a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionCategoryQueryBo.java @@ -0,0 +1,46 @@ +package com.ruoyi.wgz.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 题库_题库类别分页查询对象 wgz_question_category + * + * @author ruoyi + * @date 2025-02-17 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("题库_题库类别分页查询对象") +public class WgzQuestionCategoryQueryBo 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 categoryName; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionSaveQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionSaveQueryBo.java new file mode 100644 index 0000000..17b34e0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionSaveQueryBo.java @@ -0,0 +1,46 @@ +package com.ruoyi.wgz.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 用户试卷存储分页查询对象 wgz_question_save + * + * @author ruoyi + * @date 2025-02-17 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("用户试卷存储分页查询对象") +public class WgzQuestionSaveQueryBo 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 Long userId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionsConfigurationQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionsConfigurationQueryBo.java new file mode 100644 index 0000000..64c4e83 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionsConfigurationQueryBo.java @@ -0,0 +1,43 @@ +package com.ruoyi.wgz.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 题库配置分页查询对象 wgz_questions_configuration + * + * @author ruoyi + * @date 2025-02-17 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("题库配置分页查询对象") +public class WgzQuestionsConfigurationQueryBo extends BaseEntity { + + /** 分页大小 */ + @ApiModelProperty("分页大小") + private Integer pageSize; + /** 当前页数 */ + @ApiModelProperty("当前页数") + private Integer pageNum; + /** 排序列 */ + @ApiModelProperty("排序列") + private String orderByColumn; + /** 排序的方向desc或者asc */ + @ApiModelProperty(value = "排序的方向", example = "asc,desc") + private String isAsc; + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppAttachmentAcquisitionReq.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppAttachmentAcquisitionReq.java index f0f495e..8bcc9d6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppAttachmentAcquisitionReq.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppAttachmentAcquisitionReq.java @@ -1,6 +1,5 @@ package com.ruoyi.wgz.bo.req; -import com.ruoyi.wgz.bo.WgzAutonymAnnex; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,7 +8,6 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotNull; import java.io.Serializable; -import java.util.List; @Data @NoArgsConstructor diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzQuestionReq.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzQuestionReq.java new file mode 100644 index 0000000..6363dc7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzQuestionReq.java @@ -0,0 +1,35 @@ +package com.ruoyi.wgz.bo.req; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + + +@Data +@NoArgsConstructor +@Accessors(chain = true) +@ApiModel("题库新增对象") +public class WgzQuestionReq implements Serializable { + + @ApiModelProperty("题目类别(外键关联到类别表)") + private Long categoryId; + + + @ApiModelProperty("题目类型(1单选、2多选、3判断)") + private String questionType; + + @ApiModelProperty("题目内容") + private String questionText; + + + @ApiModelProperty("选项(对单选、多选、判断这种固定答案有效,以JSON数组形式存储)") + private String options; + + @ApiModelProperty("正确答案") + private String correctAnswer; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppAttachmentAcquisitionRes.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppAttachmentAcquisitionRes.java index f6b40a2..8b91f7e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppAttachmentAcquisitionRes.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppAttachmentAcquisitionRes.java @@ -1,6 +1,6 @@ package com.ruoyi.wgz.bo.res; -import com.ruoyi.wgz.bo.WgzAutonymAnnex; +import com.ruoyi.wgz.bo.rests.WgzAutonymAnnex; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppGetTestPaperRes.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppGetTestPaperRes.java new file mode 100644 index 0000000..98b6f9c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppGetTestPaperRes.java @@ -0,0 +1,25 @@ +package com.ruoyi.wgz.bo.res; + +import com.ruoyi.wgz.bo.rests.WgzAppGetTestPaperTwo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@NoArgsConstructor +@Accessors(chain = true) +@ApiModel("获取试卷返回") +public class WgzAppGetTestPaperRes implements Serializable { + @ApiModelProperty("最大考试时间(分钟)") + private int maximum; + @ApiModelProperty("单选题") + private WgzAppGetTestPaperTwo singleList; + @ApiModelProperty("多选题") + private WgzAppGetTestPaperTwo multipleList; + @ApiModelProperty("判断题") + private WgzAppGetTestPaperTwo estimateList; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperThree.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperThree.java new file mode 100644 index 0000000..fcd1f25 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperThree.java @@ -0,0 +1,28 @@ +package com.ruoyi.wgz.bo.rests; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class WgzAppGetTestPaperThree implements Serializable { + @ApiModelProperty("题库id") + private long id; + + @ApiModelProperty("题类型") + private String questionType; + + @ApiModelProperty("题内容") + private String questionText; + + @ApiModelProperty("题选项") + private String options; + + @ApiModelProperty("题分数") + private double score; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperTwo.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperTwo.java new file mode 100644 index 0000000..60c3f3e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAppGetTestPaperTwo.java @@ -0,0 +1,19 @@ +package com.ruoyi.wgz.bo.rests; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class WgzAppGetTestPaperTwo implements Serializable { + @ApiModelProperty("题目+分数") + private String topic; + @ApiModelProperty("题目选项") + private List list; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzAutonymAnnex.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAutonymAnnex.java similarity index 83% rename from ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzAutonymAnnex.java rename to ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAutonymAnnex.java index 5204ab8..fbe6486 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzAutonymAnnex.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/rests/WgzAutonymAnnex.java @@ -1,6 +1,5 @@ -package com.ruoyi.wgz.bo; +package com.ruoyi.wgz.bo.rests; -import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.domain.Annex; import io.swagger.annotations.ApiModelProperty; @@ -9,8 +8,6 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; import java.util.List; @Data diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionBank.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionBank.java new file mode 100644 index 0000000..b17f9ee --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionBank.java @@ -0,0 +1,104 @@ +package com.ruoyi.wgz.domain; + +import com.ruoyi.common.annotation.Excel; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +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 java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; + +/** + * 题库对象 wgz_question_bank + * + * @author ruoyi + * @date 2025-02-17 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("wgz_question_bank") +@ApiModel("题库视图对象") +public class WgzQuestionBank implements Serializable { + + private static final long serialVersionUID=1L; + + /** 主键ID */ + @ApiModelProperty("主键ID") + @TableId(value = "id") + private Long id; + + /** 题目类别(外键关联到类别表) */ + @Excel(name = "题目类别" , readConverterExp = "外=键关联到类别表") + @ApiModelProperty("题目类别(外键关联到类别表)") + private Long categoryId; + + /** 题目类型(1单选、2多选、3判断、4填空、5问答) */ + @Excel(name = "题目类型" , readConverterExp = "1=单选、2多选、3判断、4填空、5问答") + @ApiModelProperty("题目类型(1单选、2多选、3判断、4填空、5问答)") + private String questionType; + + /** 题目内容 */ + @Excel(name = "题目内容") + @ApiModelProperty("题目内容") + private String questionText; + + /** 选项(对单选、多选、判断这种固定答案有效,以JSON数组形式存储) */ + @Excel(name = "选项" , readConverterExp = "对=单选、多选、判断这种固定答案有效,以JSON数组形式存储") + @ApiModelProperty("选项(对单选、多选、判断这种固定答案有效,以JSON数组形式存储)") + private String options; + + /** 正确答案 */ + @Excel(name = "正确答案") + @ApiModelProperty("正确答案") + private String correctAnswer; + + /** 得分 */ + @Excel(name = "得分") + @ApiModelProperty("得分") + private Long score; + + /** 删除标志(0代表存在 2代表删除) */ + @Excel(name = "删除标志" , readConverterExp = "0=代表存在,2=代表删除") + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + @TableLogic + private String delFlag; + + /** 创建者 */ + @Excel(name = "创建者") + @ApiModelProperty("创建者") + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 创建时间 */ + @Excel(name = "创建时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("创建时间") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 更新者 */ + @Excel(name = "更新者") + @ApiModelProperty("更新者") + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** 更新时间 */ + @Excel(name = "更新时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("更新时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** 备注 */ + @Excel(name = "备注") + @ApiModelProperty("备注") + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionCategory.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionCategory.java new file mode 100644 index 0000000..6539af5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionCategory.java @@ -0,0 +1,44 @@ +package com.ruoyi.wgz.domain; + +import com.ruoyi.common.annotation.Excel; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +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 java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; + +/** + * 题库_题库类别对象 wgz_question_category + * + * @author ruoyi + * @date 2025-02-17 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("wgz_question_category") +@ApiModel("题库_题库类别视图对象") +public class WgzQuestionCategory implements Serializable { + + private static final long serialVersionUID=1L; + + /** 主键ID */ + @ApiModelProperty("主键ID") + @TableId(value = "id") + private Long id; + + /** 题库类别 */ + @Excel(name = "题库类别") + @ApiModelProperty("题库类别") + private String categoryName; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionSave.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionSave.java new file mode 100644 index 0000000..7fdc995 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionSave.java @@ -0,0 +1,119 @@ +package com.ruoyi.wgz.domain; + +import com.ruoyi.common.annotation.Excel; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +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 java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; + +/** + * 用户试卷存储对象 wgz_question_save + * + * @author ruoyi + * @date 2025-02-17 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("wgz_question_save") +@ApiModel("用户试卷存储视图对象") +public class WgzQuestionSave implements Serializable { + + private static final long serialVersionUID=1L; + + /** 主键ID */ + @ApiModelProperty("主键ID") + @TableId(value = "id") + private Long id; + + /** 务工者唯一标识 */ + @Excel(name = "务工者唯一标识") + @ApiModelProperty("务工者唯一标识") + private Long userId; + + /** 题库ID */ + @Excel(name = "题库ID") + @ApiModelProperty("题库ID") + private Long bankId; + + /** 答案 */ + @Excel(name = "答案") + @ApiModelProperty("答案") + private String answer; + + /** 答题是否正确(1正确 2错误) */ + @Excel(name = "答题是否正确" , readConverterExp = "1=正确,2=错误") + @ApiModelProperty("答题是否正确(1正确 2错误)") + private String correct; + + /** 得分(当前题) */ + @Excel(name = "得分" , readConverterExp = "当=前题") + @ApiModelProperty("得分(当前题)") + private Long score; + + /** 签名路径 */ + @Excel(name = "签名路径") + @ApiModelProperty("签名路径") + private String sign; + + /** 用时时间(时间戳/秒) */ + @Excel(name = "用时时间" , readConverterExp = "时=间戳/秒") + @ApiModelProperty("用时时间(时间戳/秒)") + private Long takeTime; + + /** 最大超时时间(单位/分钟) */ + @Excel(name = "最大超时时间" , readConverterExp = "单=位/分钟") + @ApiModelProperty("最大超时时间(单位/分钟)") + private Long timeOut; + + /** 及格线/总分(格式:60,100) */ + @Excel(name = "及格线/总分" , readConverterExp = "格=式:60,100") + @ApiModelProperty("及格线/总分(格式:60,100)") + private String pass; + + /** 删除标志(0代表存在 2代表删除) */ + @Excel(name = "删除标志" , readConverterExp = "0=代表存在,2=代表删除") + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + @TableLogic + private String delFlag; + + /** 创建者 */ + @Excel(name = "创建者") + @ApiModelProperty("创建者") + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 创建时间 */ + @Excel(name = "创建时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("创建时间") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 更新者 */ + @Excel(name = "更新者") + @ApiModelProperty("更新者") + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** 更新时间 */ + @Excel(name = "更新时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("更新时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** 备注 */ + @Excel(name = "备注") + @ApiModelProperty("备注") + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionsConfiguration.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionsConfiguration.java new file mode 100644 index 0000000..c86cc38 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionsConfiguration.java @@ -0,0 +1,84 @@ +package com.ruoyi.wgz.domain; + +import com.ruoyi.common.annotation.Excel; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +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 java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; + +/** + * 题库配置对象 wgz_questions_configuration + * + * @author ruoyi + * @date 2025-02-17 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("wgz_questions_configuration") +@ApiModel("题库配置视图对象") +public class WgzQuestionsConfiguration implements Serializable { + + private static final long serialVersionUID=1L; + + /** 主键ID */ + @ApiModelProperty("主键ID") + @TableId(value = "id") + private Long id; + + /** 单选题(单位/道) */ + @Excel(name = "单选题" , readConverterExp = "单=位/道") + @ApiModelProperty("单选题(单位/道)") + private Integer singleChoice; + + /** 单选分数 */ + @Excel(name = "单选分数") + @ApiModelProperty("单选分数") + private Float singleScore; + + /** 多选题(单位/道) */ + @Excel(name = "多选题" , readConverterExp = "单=位/道") + @ApiModelProperty("多选题(单位/道)") + private Integer multipleChoice; + + /** 多选分数 */ + @Excel(name = "多选分数") + @ApiModelProperty("多选分数") + private Float multipleScore; + + /** 判断题(单位/道) */ + @Excel(name = "判断题" , readConverterExp = "单=位/道") + @ApiModelProperty("判断题(单位/道)") + private Integer estimate; + + /** 判断分数 */ + @Excel(name = "判断分数") + @ApiModelProperty("判断分数") + private Float estimateScore; + + /** 满分 */ + @Excel(name = "满分") + @ApiModelProperty("满分") + private Long fullMark; + + /** 及格线 */ + @Excel(name = "及格线") + @ApiModelProperty("及格线") + private Long passingScore; + + /** 答题最大时间(单位/分钟) */ + @Excel(name = "答题最大时间" , readConverterExp = "单=位/分钟") + @ApiModelProperty("答题最大时间(单位/分钟)") + private int answerTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionBankMapper.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionBankMapper.java new file mode 100644 index 0000000..cfa6d31 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionBankMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.wgz.mapper; + +import com.ruoyi.wgz.domain.WgzQuestionBank; +import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; +import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; +import org.apache.ibatis.annotations.CacheNamespace; + +/** + * 题库Mapper接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象 +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) +public interface WgzQuestionBankMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionCategoryMapper.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionCategoryMapper.java new file mode 100644 index 0000000..aa5db02 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionCategoryMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.wgz.mapper; + +import com.ruoyi.wgz.domain.WgzQuestionCategory; +import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; +import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; +import org.apache.ibatis.annotations.CacheNamespace; + +/** + * 题库_题库类别Mapper接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象 +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) +public interface WgzQuestionCategoryMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java new file mode 100644 index 0000000..a287ad8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.wgz.mapper; + +import com.ruoyi.wgz.domain.WgzQuestionSave; +import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; +import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; +import org.apache.ibatis.annotations.CacheNamespace; + +/** + * 用户试卷存储Mapper接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象 +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) +public interface WgzQuestionSaveMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionsConfigurationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionsConfigurationMapper.java new file mode 100644 index 0000000..bcd11e3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionsConfigurationMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.wgz.mapper; + +import com.ruoyi.wgz.domain.WgzQuestionsConfiguration; +import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; +import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; +import org.apache.ibatis.annotations.CacheNamespace; + +/** + * 题库配置Mapper接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象 +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) +public interface WgzQuestionsConfigurationMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionBankService.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionBankService.java new file mode 100644 index 0000000..1cf0f61 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionBankService.java @@ -0,0 +1,73 @@ +package com.ruoyi.wgz.service; + +import com.ruoyi.wgz.bo.req.WgzQuestionReq; +import com.ruoyi.wgz.bo.rests.WgzAppGetTestPaperThree; +import com.ruoyi.wgz.domain.WgzQuestionBank; +import com.ruoyi.wgz.bo.WgzQuestionBankQueryBo; +import com.ruoyi.common.core.mybatisplus.core.IServicePlus; +import com.ruoyi.common.core.page.TableDataInfo; + +import java.util.Collection; +import java.util.List; + +/** + * 题库Service接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +public interface IWgzQuestionBankService extends IServicePlus { + /** + * 查询单个 + * @return + */ + WgzQuestionBank queryById(Long id); + + /** + * 查询列表 + */ + TableDataInfo queryPageList(WgzQuestionBankQueryBo bo); + + /** + * 查询列表 + */ + List queryList(WgzQuestionBankQueryBo bo); + + /** + * 根据新增业务对象插入题库 + * @param bo 题库新增业务对象 + * @return + */ + Boolean insert(WgzQuestionReq bo); + + /** + * 根据编辑业务对象修改题库 + * @param bo 题库编辑业务对象 + * @return + */ + Boolean update(WgzQuestionBank bo); + + /** + * 校验并删除数据 + * @param ids 主键集合 + * @param isValid 是否校验,true-删除前校验,false-不校验 + * @return + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 务工者APP相关 + * ================================================================================================================= + * ================================================================================================================= + * ================================================================================================================= + */ + /** + * 随机获取指定个数类型的题 + * @param type 类型 + * 1:单选 + * 2:多选 + * 3:判断 + * @param num 数量 + */ + List appQueryList(int type, int num); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionCategoryService.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionCategoryService.java new file mode 100644 index 0000000..ffc92ba --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionCategoryService.java @@ -0,0 +1,55 @@ +package com.ruoyi.wgz.service; + +import com.ruoyi.wgz.domain.WgzQuestionCategory; +import com.ruoyi.wgz.bo.WgzQuestionCategoryQueryBo; +import com.ruoyi.common.core.mybatisplus.core.IServicePlus; +import com.ruoyi.common.core.page.TableDataInfo; + +import java.util.Collection; +import java.util.List; + +/** + * 题库_题库类别Service接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +public interface IWgzQuestionCategoryService extends IServicePlus { + /** + * 查询单个 + * @return + */ + WgzQuestionCategory queryById(Long id); + + /** + * 查询列表 + */ + TableDataInfo queryPageList(WgzQuestionCategoryQueryBo bo); + + /** + * 查询列表 + */ + List queryList(WgzQuestionCategoryQueryBo bo); + + /** + * 根据新增业务对象插入题库_题库类别 + * @param bo 题库_题库类别新增业务对象 + * @return + */ + Boolean insert(WgzQuestionCategory bo); + + /** + * 根据编辑业务对象修改题库_题库类别 + * @param bo 题库_题库类别编辑业务对象 + * @return + */ + Boolean update(WgzQuestionCategory bo); + + /** + * 校验并删除数据 + * @param ids 主键集合 + * @param isValid 是否校验,true-删除前校验,false-不校验 + * @return + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionSaveService.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionSaveService.java new file mode 100644 index 0000000..2c0a91c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionSaveService.java @@ -0,0 +1,55 @@ +package com.ruoyi.wgz.service; + +import com.ruoyi.wgz.domain.WgzQuestionSave; +import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo; +import com.ruoyi.common.core.mybatisplus.core.IServicePlus; +import com.ruoyi.common.core.page.TableDataInfo; + +import java.util.Collection; +import java.util.List; + +/** + * 用户试卷存储Service接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +public interface IWgzQuestionSaveService extends IServicePlus { + /** + * 查询单个 + * @return + */ + WgzQuestionSave queryById(Long id); + + /** + * 查询列表 + */ + TableDataInfo queryPageList(WgzQuestionSaveQueryBo bo); + + /** + * 查询列表 + */ + List queryList(WgzQuestionSaveQueryBo bo); + + /** + * 根据新增业务对象插入用户试卷存储 + * @param bo 用户试卷存储新增业务对象 + * @return + */ + Boolean insert(WgzQuestionSave bo); + + /** + * 根据编辑业务对象修改用户试卷存储 + * @param bo 用户试卷存储编辑业务对象 + * @return + */ + Boolean update(WgzQuestionSave bo); + + /** + * 校验并删除数据 + * @param ids 主键集合 + * @param isValid 是否校验,true-删除前校验,false-不校验 + * @return + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionsConfigurationService.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionsConfigurationService.java new file mode 100644 index 0000000..3429241 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionsConfigurationService.java @@ -0,0 +1,68 @@ +package com.ruoyi.wgz.service; + +import com.ruoyi.wgz.domain.WgzQuestionsConfiguration; +import com.ruoyi.wgz.bo.WgzQuestionsConfigurationQueryBo; +import com.ruoyi.common.core.mybatisplus.core.IServicePlus; +import com.ruoyi.common.core.page.TableDataInfo; + +import java.util.Collection; +import java.util.List; + +/** + * 题库配置Service接口 + * + * @author ruoyi + * @date 2025-02-17 + */ +public interface IWgzQuestionsConfigurationService extends IServicePlus { + /** + * 查询单个 + * @return + */ + WgzQuestionsConfiguration queryById(Long id); + + /** + * 查询列表 + */ + TableDataInfo queryPageList(WgzQuestionsConfigurationQueryBo bo); + + /** + * 查询列表 + */ + List queryList(WgzQuestionsConfigurationQueryBo bo); + + /** + * 根据新增业务对象插入题库配置 + * @param bo 题库配置新增业务对象 + * @return + */ + Boolean insert(WgzQuestionsConfiguration bo); + + /** + * 根据编辑业务对象修改题库配置 + * @param bo 题库配置编辑业务对象 + * @return + */ + Boolean update(WgzQuestionsConfiguration bo); + + /** + * 校验并删除数据 + * @param ids 主键集合 + * @param isValid 是否校验,true-删除前校验,false-不校验 + * @return + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 务工者APP相关 + * ================================================================================================================= + * ================================================================================================================= + * ================================================================================================================= + */ + + + /** + * 根据id查询到具体信息 + */ + WgzQuestionsConfiguration appQueryById(Long id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionBankServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionBankServiceImpl.java new file mode 100644 index 0000000..6cb45e5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionBankServiceImpl.java @@ -0,0 +1,103 @@ +package com.ruoyi.wgz.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.wgz.bo.req.WgzQuestionReq; +import com.ruoyi.wgz.bo.rests.WgzAppGetTestPaperThree; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.wgz.bo.WgzQuestionBankQueryBo; +import com.ruoyi.wgz.domain.WgzQuestionBank; +import com.ruoyi.wgz.mapper.WgzQuestionBankMapper; +import com.ruoyi.wgz.service.IWgzQuestionBankService; + +import java.util.*; + +/** + * 题库Service业务层处理 + * + * @author ruoyi + * @date 2025-02-17 + */ +@Service +public class WgzQuestionBankServiceImpl extends ServicePlusImpl implements IWgzQuestionBankService { + + @Override + public WgzQuestionBank queryById(Long id){ + return getById(id); + } + + @Override + public TableDataInfo queryPageList(WgzQuestionBankQueryBo bo) { + Page result = page(PageUtils.buildPage(), buildQueryWrapper(bo)); + return PageUtils.buildDataInfo(result); + } + + @Override + public List queryList(WgzQuestionBankQueryBo bo) { + return list(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(WgzQuestionBankQueryBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getCategoryId() != null, WgzQuestionBank::getCategoryId, bo.getCategoryId()); + lqw.eq(StrUtil.isNotBlank(bo.getQuestionType()), WgzQuestionBank::getQuestionType, bo.getQuestionType()); + return lqw; + } + + @Override + public Boolean insert(WgzQuestionReq bo) { + WgzQuestionBank add = BeanUtil.toBean(bo, WgzQuestionBank.class); + validEntityBeforeSave(add); + return save(add); + } + + @Override + public Boolean update(WgzQuestionBank bo) { + WgzQuestionBank update = BeanUtil.toBean(bo, WgzQuestionBank.class); + validEntityBeforeSave(update); + return updateById(update); + } + + /** + * 保存前的数据校验 + * + * @param entity 实体类数据 + */ + private void validEntityBeforeSave(WgzQuestionBank entity){ + //TODO 做一些数据校验,如唯一约束 + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return removeByIds(ids); + } + + /** + * 务工者APP相关 + * ================================================================================================================= + * ================================================================================================================= + * ================================================================================================================= + */ + + @Override + public List appQueryList(int type, int num) { + LambdaQueryWrapper last = new LambdaQueryWrapper(). + eq(WgzQuestionBank::getQuestionType, type). + last("order by rand() limit " + num); + List wgzQuestionBanks = baseMapper.selectList(last); + List wgzAppGetTestPaperThrees = new ArrayList<>(); + BeanUtils.copyProperties(wgzQuestionBanks, wgzAppGetTestPaperThrees); + return wgzAppGetTestPaperThrees; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionCategoryServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionCategoryServiceImpl.java new file mode 100644 index 0000000..f22befd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionCategoryServiceImpl.java @@ -0,0 +1,84 @@ +package com.ruoyi.wgz.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.core.page.PagePlus; +import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.wgz.bo.WgzQuestionCategoryQueryBo; +import com.ruoyi.wgz.domain.WgzQuestionCategory; +import com.ruoyi.wgz.mapper.WgzQuestionCategoryMapper; +import com.ruoyi.wgz.service.IWgzQuestionCategoryService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 题库_题库类别Service业务层处理 + * + * @author ruoyi + * @date 2025-02-17 + */ +@Service +public class WgzQuestionCategoryServiceImpl extends ServicePlusImpl implements IWgzQuestionCategoryService { + + @Override + public WgzQuestionCategory queryById(Long id){ + return getById(id); + } + + @Override + public TableDataInfo queryPageList(WgzQuestionCategoryQueryBo bo) { + Page result = page(PageUtils.buildPage(), buildQueryWrapper(bo)); + return PageUtils.buildDataInfo(result); + } + + @Override + public List queryList(WgzQuestionCategoryQueryBo bo) { + return list(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(WgzQuestionCategoryQueryBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StrUtil.isNotBlank(bo.getCategoryName()), WgzQuestionCategory::getCategoryName, bo.getCategoryName()); + return lqw; + } + + @Override + public Boolean insert(WgzQuestionCategory bo) { + WgzQuestionCategory add = BeanUtil.toBean(bo, WgzQuestionCategory.class); + validEntityBeforeSave(add); + return save(add); + } + + @Override + public Boolean update(WgzQuestionCategory bo) { + WgzQuestionCategory update = BeanUtil.toBean(bo, WgzQuestionCategory.class); + validEntityBeforeSave(update); + return updateById(update); + } + + /** + * 保存前的数据校验 + * + * @param entity 实体类数据 + */ + private void validEntityBeforeSave(WgzQuestionCategory entity){ + //TODO 做一些数据校验,如唯一约束 + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return removeByIds(ids); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java new file mode 100644 index 0000000..465b8d1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java @@ -0,0 +1,84 @@ +package com.ruoyi.wgz.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.core.page.PagePlus; +import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo; +import com.ruoyi.wgz.domain.WgzQuestionSave; +import com.ruoyi.wgz.mapper.WgzQuestionSaveMapper; +import com.ruoyi.wgz.service.IWgzQuestionSaveService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 用户试卷存储Service业务层处理 + * + * @author ruoyi + * @date 2025-02-17 + */ +@Service +public class WgzQuestionSaveServiceImpl extends ServicePlusImpl implements IWgzQuestionSaveService { + + @Override + public WgzQuestionSave queryById(Long id){ + return getById(id); + } + + @Override + public TableDataInfo queryPageList(WgzQuestionSaveQueryBo bo) { + Page result = page(PageUtils.buildPage(), buildQueryWrapper(bo)); + return PageUtils.buildDataInfo(result); + } + + @Override + public List queryList(WgzQuestionSaveQueryBo bo) { + return list(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(WgzQuestionSaveQueryBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, WgzQuestionSave::getUserId, bo.getUserId()); + return lqw; + } + + @Override + public Boolean insert(WgzQuestionSave bo) { + WgzQuestionSave add = BeanUtil.toBean(bo, WgzQuestionSave.class); + validEntityBeforeSave(add); + return save(add); + } + + @Override + public Boolean update(WgzQuestionSave bo) { + WgzQuestionSave update = BeanUtil.toBean(bo, WgzQuestionSave.class); + validEntityBeforeSave(update); + return updateById(update); + } + + /** + * 保存前的数据校验 + * + * @param entity 实体类数据 + */ + private void validEntityBeforeSave(WgzQuestionSave entity){ + //TODO 做一些数据校验,如唯一约束 + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return removeByIds(ids); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionsConfigurationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionsConfigurationServiceImpl.java new file mode 100644 index 0000000..29746f5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionsConfigurationServiceImpl.java @@ -0,0 +1,95 @@ +package com.ruoyi.wgz.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.core.page.PagePlus; +import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.wgz.bo.WgzQuestionsConfigurationQueryBo; +import com.ruoyi.wgz.domain.WgzQuestionsConfiguration; +import com.ruoyi.wgz.mapper.WgzQuestionsConfigurationMapper; +import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 题库配置Service业务层处理 + * + * @author ruoyi + * @date 2025-02-17 + */ +@Service +public class WgzQuestionsConfigurationServiceImpl extends ServicePlusImpl implements IWgzQuestionsConfigurationService { + + @Override + public WgzQuestionsConfiguration queryById(Long id){ + return getById(id); + } + + @Override + public TableDataInfo queryPageList(WgzQuestionsConfigurationQueryBo bo) { + Page result = page(PageUtils.buildPage(), buildQueryWrapper(bo)); + return PageUtils.buildDataInfo(result); + } + + @Override + public List queryList(WgzQuestionsConfigurationQueryBo bo) { + return list(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(WgzQuestionsConfigurationQueryBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + return lqw; + } + + @Override + public Boolean insert(WgzQuestionsConfiguration bo) { + WgzQuestionsConfiguration add = BeanUtil.toBean(bo, WgzQuestionsConfiguration.class); + validEntityBeforeSave(add); + return save(add); + } + + @Override + public Boolean update(WgzQuestionsConfiguration bo) { + WgzQuestionsConfiguration update = BeanUtil.toBean(bo, WgzQuestionsConfiguration.class); + validEntityBeforeSave(update); + return updateById(update); + } + + /** + * 保存前的数据校验 + * + * @param entity 实体类数据 + */ + private void validEntityBeforeSave(WgzQuestionsConfiguration entity){ + //TODO 做一些数据校验,如唯一约束 + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return removeByIds(ids); + } + + /** + * 务工者APP相关 + * ================================================================================================================= + * ================================================================================================================= + * ================================================================================================================= + */ + + @Override + public WgzQuestionsConfiguration appQueryById(Long id) { + return baseMapper.selectById(id); + } +} diff --git a/ruoyi-system/src/main/resources/mapper/wgz/bankMenu.sql b/ruoyi-system/src/main/resources/mapper/wgz/bankMenu.sql new file mode 100644 index 0000000..6d72bcb --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/wgz/bankMenu.sql @@ -0,0 +1,22 @@ +-- 菜单 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库', '${parentMenuId}', '1', 'bank', 'wgz/bank/index', 1, 0, 'C', '0', '0', 'wgz:bank:list', '#', 'admin', sysdate(), '', null, '题库菜单'); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', 'wgz:bank:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', 'wgz:bank:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', 'wgz:bank:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', 'wgz:bank:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', 'wgz:bank:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/wgz/categoryMenu.sql b/ruoyi-system/src/main/resources/mapper/wgz/categoryMenu.sql new file mode 100644 index 0000000..c9fadc6 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/wgz/categoryMenu.sql @@ -0,0 +1,22 @@ +-- 菜单 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库_题库类别', '3', '1', 'category', 'wgz/category/index', 1, 0, 'C', '0', '0', 'wgz:category:list', '#', 'admin', sysdate(), '', null, '题库_题库类别菜单'); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库_题库类别查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', 'wgz:category:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库_题库类别新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', 'wgz:category:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库_题库类别修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', 'wgz:category:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库_题库类别删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', 'wgz:category:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库_题库类别导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', 'wgz:category:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/wgz/configurationMenu.sql b/ruoyi-system/src/main/resources/mapper/wgz/configurationMenu.sql new file mode 100644 index 0000000..5524725 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/wgz/configurationMenu.sql @@ -0,0 +1,22 @@ +-- 菜单 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库配置', '${parentMenuId}', '1', 'configuration', 'wgz/configuration/index', 1, 0, 'C', '0', '0', 'wgz:configuration:list', '#', 'admin', sysdate(), '', null, '题库配置菜单'); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库配置查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', 'wgz:configuration:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库配置新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', 'wgz:configuration:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库配置修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', 'wgz:configuration:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库配置删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', 'wgz:configuration:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('题库配置导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', 'wgz:configuration:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/wgz/saveMenu.sql b/ruoyi-system/src/main/resources/mapper/wgz/saveMenu.sql new file mode 100644 index 0000000..6d880f5 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/wgz/saveMenu.sql @@ -0,0 +1,22 @@ +-- 菜单 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('用户试卷存储', '${parentMenuId}', '1', 'save', 'wgz/save/index', 1, 0, 'C', '0', '0', 'wgz:save:list', '#', 'admin', sysdate(), '', null, '用户试卷存储菜单'); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('用户试卷存储查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', 'wgz:save:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('用户试卷存储新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', 'wgz:save:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('用户试卷存储修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', 'wgz:save:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('用户试卷存储删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', 'wgz:save:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('用户试卷存储导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', 'wgz:save:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file