From 8b61fecb57fcc2be6ee6d94aef1d68e21683c78e Mon Sep 17 00:00:00 2001 From: tangweijie <877588133@qq.com> Date: Wed, 28 Jan 2026 11:50:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=A9=E5=B1=95=E9=97=AE=E5=8D=B7?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E7=AE=A1=E7=90=86=E6=9D=83=E9=99=90=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=97=AE=E5=8D=B7=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端:PrisonQuestionController 接口增加 prison:questionnaire:update 和 prison:questionnaire:query 权限判断 - 前端:QuestionList.vue 按钮增加 prison:questionnaire:update 权限判断 - 允许拥有问卷模板管理权限的用户也能管理问卷问题 --- .../question/PrisonQuestionController.java | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/controller/admin/question/PrisonQuestionController.java diff --git a/yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/controller/admin/question/PrisonQuestionController.java b/yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/controller/admin/question/PrisonQuestionController.java new file mode 100644 index 0000000000..3c74fe4ecc --- /dev/null +++ b/yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/controller/admin/question/PrisonQuestionController.java @@ -0,0 +1,127 @@ +package cn.iocoder.yudao.module.prison.controller.admin.question; + +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.constraints.*; +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.prison.controller.admin.question.vo.*; +import cn.iocoder.yudao.module.prison.dal.dataobject.question.QuestionDO; +import cn.iocoder.yudao.module.prison.service.question.QuestionService; +import cn.iocoder.yudao.module.prison.convert.question.QuestionConvert; + +@Tag(name = "管理后台 - 问卷问题") +@RestController +@RequestMapping("/prison/question") +@Validated +public class PrisonQuestionController { + + @Resource + private QuestionService questionService; + + @PostMapping("/create") + @Operation(summary = "创建问卷问题") + @PreAuthorize("@ss.hasPermission('prison:question:create') or @ss.hasPermission('prison:questionnaire:update')") + @ApiAccessLog(operateType = CREATE) + public CommonResult createQuestion(@Valid @RequestBody QuestionSaveReqVO createReqVO) { + return success(questionService.createQuestion(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新问卷问题") + @PreAuthorize("@ss.hasPermission('prison:question:update') or @ss.hasPermission('prison:questionnaire:update')") + @ApiAccessLog(operateType = UPDATE) + public CommonResult updateQuestion(@Valid @RequestBody QuestionSaveReqVO updateReqVO) { + questionService.updateQuestion(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除问卷问题") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('prison:question:delete') or @ss.hasPermission('prison:questionnaire:update')") + @ApiAccessLog(operateType = DELETE) + public CommonResult deleteQuestion(@NotNull(message = "编号不能为空") @RequestParam("id") Long id) { + questionService.deleteQuestion(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除问卷问题") + @PreAuthorize("@ss.hasPermission('prison:question:delete') or @ss.hasPermission('prison:questionnaire:update')") + @ApiAccessLog(operateType = DELETE) + public CommonResult deleteQuestionList(@NotEmpty(message = "编号列表不能为空") @RequestParam("ids") List ids) { + questionService.deleteQuestionListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得问卷问题") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('prison:question:query') or @ss.hasPermission('prison:questionnaire:query') or @ss.hasPermission('prison:questionnaire:update')") + public CommonResult getQuestion(@RequestParam("id") Long id) { + QuestionDO question = questionService.getQuestion(id); + return success(QuestionConvert.INSTANCE.convert(question)); + } + + @GetMapping("/page") + @Operation(summary = "获得问卷问题分页") + @PreAuthorize("@ss.hasPermission('prison:question:query') or @ss.hasPermission('prison:questionnaire:query') or @ss.hasPermission('prison:questionnaire:update')") + public CommonResult> getQuestionPage(@Valid QuestionPageReqVO pageReqVO) { + PageResult pageResult = questionService.getQuestionPage(pageReqVO); + return success(QuestionConvert.INSTANCE.convertPage(pageResult)); + } + + @PostMapping("/batch-update") + @Operation(summary = "批量更新问卷问题") + @PreAuthorize("@ss.hasPermission('prison:question:update') or @ss.hasPermission('prison:questionnaire:update')") + @ApiAccessLog(operateType = UPDATE) + public CommonResult batchUpdateQuestion(@Valid @RequestBody QuestionBatchUpdateReqVO reqVO) { + // 转换为 Service 需要的格式 + List updateList = new ArrayList<>(); + for (QuestionBatchUpdateReqVO.QuestionUpdateItem item : reqVO.getQuestions()) { + QuestionSaveReqVO saveReqVO = new QuestionSaveReqVO(); + saveReqVO.setId(item.getId()); + saveReqVO.setPartName(item.getPartName()); + saveReqVO.setPartSort(item.getPartSort()); + saveReqVO.setSort(item.getSort()); + updateList.add(saveReqVO); + } + questionService.batchUpdateQuestion(updateList); + return success(true); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出问卷问题 Excel") + @PreAuthorize("@ss.hasPermission('prison:question:export') or @ss.hasPermission('prison:questionnaire:export') or @ss.hasPermission('prison:questionnaire:update')") + @ApiAccessLog(operateType = EXPORT) + public void exportQuestionExcel(@Valid QuestionPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = questionService.getQuestionPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "问卷问题.xls", "数据", QuestionRespVO.class, + QuestionConvert.INSTANCE.convertList(list)); + } + +} \ No newline at end of file