From 32da85daabbb0e574f12bc7f1e0af6ff5b0cee6a Mon Sep 17 00:00:00 2001 From: zhouweiyi Date: 星期二, 13 五月 2025 10:55:39 +0800 Subject: [PATCH] 提取PDF中的图片并调用大模型,识别图片内容并返回 --- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/knowledge/KnowledgeController.java | 219 ++++++++++++++++++++++++++++++------------------------ 1 files changed, 121 insertions(+), 98 deletions(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/knowledge/KnowledgeController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/knowledge/KnowledgeController.java index e573c82..d8066e7 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/knowledge/KnowledgeController.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/knowledge/KnowledgeController.java @@ -1,9 +1,12 @@ package org.ruoyi.chat.controller.knowledge; import cn.dev33.satoken.stp.StpUtil; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import java.io.IOException; import lombok.RequiredArgsConstructor; import org.ruoyi.common.core.domain.R; import org.ruoyi.common.core.validate.AddGroup; @@ -14,6 +17,7 @@ import org.ruoyi.common.web.core.BaseController; import org.ruoyi.core.page.PageQuery; import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.domain.PdfFileContentResult; import org.ruoyi.domain.bo.KnowledgeAttachBo; import org.ruoyi.domain.bo.KnowledgeFragmentBo; import org.ruoyi.domain.bo.KnowledgeInfoBo; @@ -24,6 +28,7 @@ import org.ruoyi.service.IKnowledgeAttachService; import org.ruoyi.service.IKnowledgeFragmentService; import org.ruoyi.service.IKnowledgeInfoService; +import org.ruoyi.service.PdfImageExtractService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -41,117 +46,135 @@ @RequestMapping("/knowledge") public class KnowledgeController extends BaseController { - private final IKnowledgeInfoService knowledgeInfoService; + private final IKnowledgeInfoService knowledgeInfoService; - private final IKnowledgeAttachService attachService; + private final IKnowledgeAttachService attachService; - private final IKnowledgeFragmentService fragmentService; + private final IKnowledgeFragmentService fragmentService; - /** - * 鏍规嵁鐢ㄦ埛淇℃伅鏌ヨ鏈湴鐭ヨ瘑搴� - */ - @GetMapping("/list") - public TableDataInfo<KnowledgeInfoVo> list(KnowledgeInfoBo bo, PageQuery pageQuery) { - if (!StpUtil.isLogin()) { - throw new SecurityException("璇峰厛鍘荤櫥褰�!"); - } - bo.setUid(LoginHelper.getUserId()); - return knowledgeInfoService.queryPageList(bo, pageQuery); + private final PdfImageExtractService pdfImageExtractService; + + /** + * 鏍规嵁鐢ㄦ埛淇℃伅鏌ヨ鏈湴鐭ヨ瘑搴� + */ + @GetMapping("/list") + public TableDataInfo<KnowledgeInfoVo> list(KnowledgeInfoBo bo, PageQuery pageQuery) { + if (!StpUtil.isLogin()) { + throw new SecurityException("璇峰厛鍘荤櫥褰�!"); } + bo.setUid(LoginHelper.getUserId()); + return knowledgeInfoService.queryPageList(bo, pageQuery); + } - /** - * 鏂板鐭ヨ瘑搴� - */ - @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.INSERT) - @PostMapping("/save") - public R<Void> save(@Validated(AddGroup.class) @RequestBody KnowledgeInfoBo bo) { - knowledgeInfoService.saveOne(bo); - return R.ok(); - } + /** + * 鏂板鐭ヨ瘑搴� + */ + @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.INSERT) + @PostMapping("/save") + public R<Void> save(@Validated(AddGroup.class) @RequestBody KnowledgeInfoBo bo) { + knowledgeInfoService.saveOne(bo); + return R.ok(); + } - /** - * 鍒犻櫎鐭ヨ瘑搴� - */ - @PostMapping("/remove/{id}") - public R<String> remove(@PathVariable String id) { - knowledgeInfoService.removeKnowledge(id); - return R.ok("鍒犻櫎鐭ヨ瘑搴撴垚鍔�!"); - } + /** + * 鍒犻櫎鐭ヨ瘑搴� + */ + @PostMapping("/remove/{id}") + public R<String> remove(@PathVariable String id) { + knowledgeInfoService.removeKnowledge(id); + return R.ok("鍒犻櫎鐭ヨ瘑搴撴垚鍔�!"); + } - /** - * 淇敼鐭ヨ瘑搴� - */ - @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.UPDATE) - @PostMapping("/edit") - public R<Void> edit(@RequestBody KnowledgeInfoBo bo) { - return toAjax(knowledgeInfoService.updateByBo(bo)); - } + /** + * 淇敼鐭ヨ瘑搴� + */ + @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + public R<Void> edit(@RequestBody KnowledgeInfoBo bo) { + return toAjax(knowledgeInfoService.updateByBo(bo)); + } - /** - * 瀵煎嚭鐭ヨ瘑搴撳垪琛� - */ - @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(KnowledgeInfoBo bo, HttpServletResponse response) { - List<KnowledgeInfoVo> list = knowledgeInfoService.queryList(bo); - ExcelUtil.exportExcel(list, "鐭ヨ瘑搴�", KnowledgeInfoVo.class, response); - } + /** + * 瀵煎嚭鐭ヨ瘑搴撳垪琛� + */ + @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(KnowledgeInfoBo bo, HttpServletResponse response) { + List<KnowledgeInfoVo> list = knowledgeInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "鐭ヨ瘑搴�", KnowledgeInfoVo.class, response); + } - /** - * 鏌ヨ鐭ヨ瘑闄勪欢淇℃伅 - */ - @GetMapping("/detail/{kid}") - public TableDataInfo<KnowledgeAttachVo> attach(KnowledgeAttachBo bo, PageQuery pageQuery, @PathVariable String kid) { - bo.setKid(kid); - return attachService.queryPageList(bo, pageQuery); - } + /** + * 鏌ヨ鐭ヨ瘑闄勪欢淇℃伅 + */ + @GetMapping("/detail/{kid}") + public TableDataInfo<KnowledgeAttachVo> attach(KnowledgeAttachBo bo, PageQuery pageQuery, + @PathVariable String kid) { + bo.setKid(kid); + return attachService.queryPageList(bo, pageQuery); + } - /** - * 涓婁紶鐭ヨ瘑搴撻檮浠� - */ - @PostMapping(value = "/attach/upload") - public R<String> upload(KnowledgeInfoUploadBo bo) { - knowledgeInfoService.upload(bo); - return R.ok("涓婁紶鐭ヨ瘑搴撻檮浠舵垚鍔�!"); - } + /** + * 涓婁紶鐭ヨ瘑搴撻檮浠� + */ + @PostMapping(value = "/attach/upload") + public R<String> upload(KnowledgeInfoUploadBo bo) { + knowledgeInfoService.upload(bo); + return R.ok("涓婁紶鐭ヨ瘑搴撻檮浠舵垚鍔�!"); + } - /** - * 鑾峰彇鐭ヨ瘑搴撻檮浠惰缁嗕俊鎭� - * - * @param id 涓婚敭 - */ - @GetMapping("attach/info/{id}") - public R<KnowledgeAttachVo> getAttachInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(attachService.queryById(id)); - } + /** + * 鑾峰彇鐭ヨ瘑搴撻檮浠惰缁嗕俊鎭� + * + * @param id 涓婚敭 + */ + @GetMapping("attach/info/{id}") + public R<KnowledgeAttachVo> getAttachInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long id) { + return R.ok(attachService.queryById(id)); + } - /** - * 鍒犻櫎鐭ヨ瘑搴撻檮浠� - */ - @PostMapping("attach/remove/{kid}") - public R<Void> removeAttach(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable String kid) { - attachService.removeKnowledgeAttach(kid); - return R.ok(); - } + /** + * 鍒犻櫎鐭ヨ瘑搴撻檮浠� + */ + @PostMapping("attach/remove/{kid}") + public R<Void> removeAttach(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable String kid) { + attachService.removeKnowledgeAttach(kid); + return R.ok(); + } - /** - * 鏌ヨ鐭ヨ瘑鐗囨 - */ - @GetMapping("/fragment/list/{docId}") - public TableDataInfo<KnowledgeFragmentVo> fragmentList(KnowledgeFragmentBo bo, PageQuery pageQuery, @PathVariable String docId) { - bo.setDocId(docId); - return fragmentService.queryPageList(bo, pageQuery); - } + /** + * 鏌ヨ鐭ヨ瘑鐗囨 + */ + @GetMapping("/fragment/list/{docId}") + public TableDataInfo<KnowledgeFragmentVo> fragmentList(KnowledgeFragmentBo bo, + PageQuery pageQuery, @PathVariable String docId) { + bo.setDocId(docId); + return fragmentService.queryPageList(bo, pageQuery); + } - /** - * 涓婁紶鏂囦欢缈昏瘧 - */ - @PostMapping("/translationByFile") - @ResponseBody - public String translationByFile(@RequestParam("file") MultipartFile file, String targetLanguage) { - return attachService.translationByFile(file, targetLanguage); - } + /** + * 涓婁紶鏂囦欢缈昏瘧 + */ + @PostMapping("/translationByFile") + @ResponseBody + public String translationByFile(@RequestParam("file") MultipartFile file, String targetLanguage) { + return attachService.translationByFile(file, targetLanguage); + } + + /** + * 鎻愬彇PDF涓殑鍥剧墖骞惰皟鐢╣pt-4o-mini,璇嗗埆鍥剧墖鍐呭骞惰繑鍥� + * + * @param file PDF鏂囦欢 + * @return 淇濆瓨鐨勬枃浠惰矾寰勪俊鎭� + */ + @PostMapping("/extract-images") + @Operation(summary = "鎻愬彇PDF涓殑鍥剧墖骞惰皟鐢ㄥぇ妯″瀷,璇嗗埆鍥剧墖鍐呭骞惰繑鍥�", description = "鎻愬彇PDF涓殑鍥剧墖骞惰皟鐢╣pt-4o-mini,璇嗗埆鍥剧墖鍐呭骞惰繑鍥�") + public R<List<PdfFileContentResult>> extractImages( + @RequestPart("file") MultipartFile file + ) throws IOException { + return R.ok(pdfImageExtractService.extractImages(file)); + } } -- Gitblit v1.9.3