From 7a3701de925622c16e767382fe747e5fd53100cb Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Fri, 14 Nov 2025 15:51:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/common/CommonUploadService.java | 20 +- bonus-common/pom.xml | 14 +- .../domain/file/po/ResourceFileRecordPo.java | 22 ++ .../com/bonus/common/utils/ip/IpUtils.java | 86 ++++- .../bonus/file/mapper/ISourceFileMapper.java | 19 ++ .../bonus/file/service/OnlyOfficeService.java | 299 ------------------ .../bonus/file/service/SourceFileService.java | 20 ++ .../resources/mapper/SourceFileMapper.xml | 16 + bonus-framework/pom.xml | 4 + .../bonus/framework/manager/AsyncManager.java | 23 ++ .../filter/JwtAuthenticationTokenFilter.java | 9 + .../com/bonus/ocr/service/OcrService.java | 6 +- pom.xml | 1 + 13 files changed, 220 insertions(+), 319 deletions(-) create mode 100644 bonus-common/src/main/java/com/bonus/common/domain/file/po/ResourceFileRecordPo.java delete mode 100644 bonus-file/src/main/java/com/bonus/file/service/OnlyOfficeService.java diff --git a/bonus-admin/src/main/java/com/bonus/web/service/common/CommonUploadService.java b/bonus-admin/src/main/java/com/bonus/web/service/common/CommonUploadService.java index 3897b2d..b026f75 100644 --- a/bonus-admin/src/main/java/com/bonus/web/service/common/CommonUploadService.java +++ b/bonus-admin/src/main/java/com/bonus/web/service/common/CommonUploadService.java @@ -3,6 +3,7 @@ package com.bonus.web.service.common; import com.alibaba.fastjson2.JSONObject; import com.bonus.common.constant.Constants; import com.bonus.common.core.domain.AjaxResult; +import com.bonus.common.domain.file.po.ResourceFileRecordPo; import com.bonus.common.domain.ocr.dto.OcrRequest; import com.bonus.common.domain.ocr.vo.OcrResponse; import com.bonus.file.config.MinioConfig; @@ -10,6 +11,7 @@ import com.bonus.file.enums.UploadSuffixEnum; import com.bonus.file.service.FileUploadService; import com.bonus.common.utils.FileUtil; import com.bonus.file.util.MinioUtil; +import com.bonus.framework.manager.AsyncManager; import com.bonus.ocr.service.OcrService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -96,7 +98,9 @@ public class CommonUploadService { if(StringUtils.isEmpty(uploadResult)){ return AjaxResult.error(Constants.UPLOAD_ERROR); } - map.put("fileRes", FileUtil.getFileInfo(file,uploadPath,jsonObj.getString("fileUploadType"))); + Map fileUploadType = FileUtil.getFileInfo(file, uploadPath, jsonObj.getString("fileUploadType")); + map.put("fileRes", fileUploadType); + AsyncManager.me().executeSaveResourceFileModule(createVo(fileUploadType)); return AjaxResult.success(Constants.UPLOAD_SUCCESS,map); } @@ -165,10 +169,24 @@ public class CommonUploadService { log.error(e.toString(),e.getMessage()); return AjaxResult.error(Constants.UPLOAD_ERROR); } + Map fileUploadType = FileUtil.getFileInfo(file, uploadPath, jsonObj.getString("fileUploadType")); map.put("fileRes", FileUtil.getFileInfo(file,uploadPath,jsonObj.getString("fileUploadType"))); map.put("ocrResult", ocrResponse); + AsyncManager.me().executeSaveResourceFileModule(createVo(fileUploadType)); return AjaxResult.success(Constants.UPLOAD_SUCCESS,map); } + /** + * 创建资源文件实体 + * @param map + * @return ResourceFileRecordPo + * @author cwchen + * @date 2025/11/14 15:44 + */ + public ResourceFileRecordPo createVo(Map map){ + ResourceFileRecordPo po = new ResourceFileRecordPo(); + po.setFilePath(map.get("filePath").toString()); + return po; + } } diff --git a/bonus-common/pom.xml b/bonus-common/pom.xml index ca97228..982b2cc 100644 --- a/bonus-common/pom.xml +++ b/bonus-common/pom.xml @@ -204,13 +204,6 @@ ${io.jsonwebtoken.version} - - - com.auth0 java-jwt @@ -222,6 +215,13 @@ hutool-all 5.8.11 + + + \ No newline at end of file diff --git a/bonus-common/src/main/java/com/bonus/common/domain/file/po/ResourceFileRecordPo.java b/bonus-common/src/main/java/com/bonus/common/domain/file/po/ResourceFileRecordPo.java new file mode 100644 index 0000000..66308e1 --- /dev/null +++ b/bonus-common/src/main/java/com/bonus/common/domain/file/po/ResourceFileRecordPo.java @@ -0,0 +1,22 @@ +package com.bonus.common.domain.file.po; + +import lombok.Data; + +import java.util.Date; + +/** + * @className:ResourceFileRecordPo + * @author:cwchen + * @date:2025-11-14-15:23 + * @version:1.0 + * @description:系统资源存储记录-po + */ +@Data +public class ResourceFileRecordPo { + + private Long id; + + private String filePath; + + private Date createDate = new Date(); +} diff --git a/bonus-common/src/main/java/com/bonus/common/utils/ip/IpUtils.java b/bonus-common/src/main/java/com/bonus/common/utils/ip/IpUtils.java index 2aa678a..e655dab 100644 --- a/bonus-common/src/main/java/com/bonus/common/utils/ip/IpUtils.java +++ b/bonus-common/src/main/java/com/bonus/common/utils/ip/IpUtils.java @@ -1,7 +1,7 @@ package com.bonus.common.utils.ip; -import java.net.InetAddress; -import java.net.UnknownHostException; +import java.net.*; +import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import com.bonus.common.utils.ServletUtils; import com.bonus.common.utils.StringUtils; @@ -216,16 +216,84 @@ public class IpUtils * * @return 本地IP地址 */ - public static String getHostIp() - { - try - { + public static String getHostIp() { + return getHostIp(false); + } + + public static String getHostIp(boolean preferPublic) { + // 先尝试获取本地IP + String ip = getLocalNetworkIp(); + + if (!"127.0.0.1".equals(ip)) { + return ip; + } + + // 如果还是127.0.0.1,尝试其他方法 + if (preferPublic) { + String publicIp = getPublicIpBySocket(); + if (!"127.0.0.1".equals(publicIp)) { + return publicIp; + } + } + + return ip; + } + + private static String getLocalNetworkIp() { + try { + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface networkInterface = interfaces.nextElement(); + + // 过滤条件 + if (networkInterface.isLoopback() || + !networkInterface.isUp() || + networkInterface.isVirtual() || + networkInterface.isPointToPoint()) { + continue; + } + + // 排除Docker、VMware等虚拟网卡 + String displayName = networkInterface.getDisplayName().toLowerCase(); + if (displayName.contains("docker") || + displayName.contains("vmware") || + displayName.contains("virtual")) { + continue; + } + + Enumeration addresses = networkInterface.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress address = addresses.nextElement(); + if (address instanceof Inet4Address && !address.isLoopbackAddress()) { + String ip = address.getHostAddress(); + // 排除特殊网段 + if (!ip.startsWith("169.254") && + !ip.startsWith("127.") && + !ip.startsWith("0.")) { + return ip; + } + } + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + + // 最终回退 + try { return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + return "127.0.0.1"; } - catch (UnknownHostException e) - { + } + + private static String getPublicIpBySocket() { + try (Socket socket = new Socket()) { + socket.connect(new InetSocketAddress("8.8.8.8", 53), 3000); + return socket.getLocalAddress().getHostAddress(); + } catch (Exception e) { + return "127.0.0.1"; } - return "127.0.0.1"; } /** diff --git a/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java b/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java index c6e551f..312bfbc 100644 --- a/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java +++ b/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java @@ -1,6 +1,7 @@ package com.bonus.file.mapper; import com.bonus.common.domain.file.po.ResourceFilePo; +import com.bonus.common.domain.file.po.ResourceFileRecordPo; import com.bonus.common.domain.file.vo.ResourceFileVo; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -66,4 +67,22 @@ public interface ISourceFileMapper { * @date 2025/10/24 11:10 */ void delResourceFileBybusinessId(List delFiles); + + /** + * 根据文件id获取文件对象 + * @param po + * @return ResourceFileVo + * @author cwchen + * @date 2025/11/7 22:15 + */ + ResourceFileVo getFileById(ResourceFilePo po); + + /** + * 添加系统资源存储记录 + * @param list + * @return void + * @author cwchen + * @date 2025/11/14 15:26 + */ + void addResourceFileRecord(List list); } diff --git a/bonus-file/src/main/java/com/bonus/file/service/OnlyOfficeService.java b/bonus-file/src/main/java/com/bonus/file/service/OnlyOfficeService.java deleted file mode 100644 index a243134..0000000 --- a/bonus-file/src/main/java/com/bonus/file/service/OnlyOfficeService.java +++ /dev/null @@ -1,299 +0,0 @@ -/* -package com.bonus.file.service; - -import com.bonus.common.core.domain.model.LoginUser; -import com.bonus.common.domain.file.vo.OnlyOfficeCallback; -import com.bonus.common.utils.FileUtil; -import com.bonus.common.utils.SecurityUtils; -import com.bonus.common.utils.ip.IpUtils; -import com.bonus.file.config.OnlyOfficeConfig; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.client.RestTemplate; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayInputStream; -import java.io.PrintWriter; -import java.time.Duration; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - -*/ -/** - * @className:OnlyOfficeService - * @author:cwchen - * @date:2025-11-03-16:14 - * @version:1.0 - * @description:OnlyOffice 服务类 - *//* - -@Service(value = "OnlyOfficeService") -@Slf4j -@CrossOrigin(origins = "*") -public class OnlyOfficeService { - - @Resource(name = "FileUploadService") - private FileUploadService fileUploadService; - - @Resource(name = "OnlyOfficeJwtService") - private OnlyOfficeJwtService onlyOfficeJwtService; - - @Resource(name = "OnlyOfficeConfig") - private OnlyOfficeConfig onlyOfficeConfig; - - @Resource - private RedisTemplate redisTemplate; - - private static final String DOCUMENT_CACHE_KEY = "document:"; - - public Map getConfigWithToken(String fileKey, String fileName, String type, String mode) throws Exception { - Map map = buildEditorConfig(fileKey, fileName, type, mode); - String token = generateJwtToken(map); - map.put("token", token); - return map; - } - - public Map buildEditorConfig(String fileKey, String fileName, String type, String mode) throws Exception { - - // 清理文件名,只保留最终文件名 - String cleanFileName = extractFileName(fileName); - String fileUrl = fileUploadService.getFile(fileName).getFilePath(); - Map config = new HashMap<>(); - - // 文档配置 - Map document = new HashMap<>(); - document.put("title", cleanFileName); - document.put("url", fileUrl); - document.put("fileType", getFileExtension(fileName)); - document.put("key", fileKey); - document.put("permissions", buildPermissions(mode)); - - // 编辑器配置 - Map editorConfig = new HashMap<>(); - editorConfig.put("mode", mode); - editorConfig.put("lang", "zh-CN"); - editorConfig.put("callbackUrl", buildCallbackUrl()); - - // 用户信息 - Map user = new HashMap<>(); - user.put("id", getCurrentUserId() + ""); - user.put("name", getCurrentUserName()); - - editorConfig.put("user", user); - - // 自定义配置 - Map customization = new HashMap<>(); - customization.put("forcesave", false); - customization.put("about", true); - customization.put("feedback", true); - customization.put("hideRightMenu", true); - customization.put("compactToolbar", true); - editorConfig.put("customization", customization); - - config.put("document", document); - config.put("documentType", getDocumentType(fileName)); - config.put("editorConfig", editorConfig); - config.put("type", type); - config.put("width", "100%"); - config.put("height", "100%"); - // 缓存文档信息 -// cacheDocumentInfo(fileKey, fileName); - return config; - } - - public void handleCallback(OnlyOfficeCallback callback, HttpServletResponse response) throws Exception { - PrintWriter writer = response.getWriter(); - log.info("收到 OnlyOffice 回调, 状态: {}, Key: {}", callback.getStatus(), callback.getKey()); - switch (callback.getStatus()) { - case OnlyOfficeCallback.STATUS_READY_FOR_SAVE: - case OnlyOfficeCallback.STATUS_FORCE_SAVE: - saveDocumentFromCallback(callback); - break; - case OnlyOfficeCallback.STATUS_DOCUMENT_EDITED: - log.info("文档已被编辑: {}", callback.getKey()); - break; - case OnlyOfficeCallback.STATUS_CLOSED_NO_CHANGES: - log.info("文档关闭,无更改: {}", callback.getKey()); - break; - default: - log.info("文档状态: {}", callback.getStatus()); - } - writer.write("{\"error\":0}"); - } - - private void saveDocumentFromCallback(OnlyOfficeCallback callback) { - try { - String fileName = getCachedFileName(callback.getKey()); - if (fileName == null) { - log.error("未找到缓存的文档信息: {}", callback.getKey()); - return; - } - - // 从 OnlyOffice 下载最新版本 - String downloadUrl = callback.getUrl(); - byte[] fileContent = downloadFileFromUrl(downloadUrl); - - // 保存到 MinIO - saveToMinio(fileName, fileContent); - - log.info("文档保存成功: {}", fileName); - } catch (Exception e) { - log.error("保存文档失败", e); - } - } - - private byte[] downloadFileFromUrl(String url) throws Exception { - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.getForEntity(url, byte[].class); - return response.getBody(); - } - - private void saveToMinio(String fileName, byte[] content) throws Exception { - ByteArrayInputStream inputStream = new ByteArrayInputStream(content); - fileUploadService.uploadFile(FileUtil.createMultipartFile(fileName, fileName, - "application/octet-stream", inputStream), fileName); - } - - private void cacheDocumentInfo(String fileKey, String fileName) { - redisTemplate.opsForValue().set(DOCUMENT_CACHE_KEY + fileKey, fileName, - Duration.ofHours(1)); - } - - private String getCachedFileName(String fileKey) { - return (String) redisTemplate.opsForValue().get(DOCUMENT_CACHE_KEY + fileKey); - } - - private String buildCallbackUrl() { - String hostIp = IpUtils.getHostIp(); -// log.info("服务器ip:{}", hostIp); - return "http://" + hostIp + ":" + onlyOfficeConfig.getServerPort() + "/smartBid/documents/callback"; - } - - - private String getFileExtension(String fileName) { - return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); - } - - private Map buildPermissions(String mode) { - Map permissions = new HashMap<>(); - boolean canEdit = "edit".equals(mode); - permissions.put("edit", canEdit); - permissions.put("download", true); - permissions.put("review", true); - permissions.put("print", true); - permissions.put("copy", true); - return permissions; - } - - private String getDocumentType(String fileName) { - String ext = getFileExtension(fileName); - switch (ext) { - case "docx": - case "doc": - case "odt": - case "rtf": - case "txt": - case "docm": - case "dot": - case "dotx": - case "dotm": - case "fodt": - case "ott": - case "html": - case "htm": - case "mht": - case "xml": - return "word"; // 修改: text → word - case "xlsx": - case "xls": - case "ods": - case "csv": - case "xlsm": - case "xlt": - case "xltx": - case "xltm": - case "fods": - case "ots": - return "cell"; // 修改: spreadsheet → cell - case "pptx": - case "ppt": - case "odp": - case "pptm": - case "pot": - case "potx": - case "potm": - case "fodp": - case "otp": - return "slide"; // 修改: presentation → slide - case "pdf": - return "pdf"; // 保持不变 - case "vsdx": - case "vssx": - case "vsd": - case "vss": - return "diagram"; // 新增图表类型 - default: - return "word"; // 修改: text → word - } - } - - private Long getCurrentUserId() { - // 获取用户ID - return Optional.ofNullable(SecurityUtils.getLoginUser()) - .map(LoginUser::getUserId) - .orElse(null); - } - - private String getCurrentUserName() { - // 获取用户名 - return Optional.ofNullable(SecurityUtils.getLoginUser()) - .map(LoginUser::getUsername) - .orElse(null); - } - - // 提取文件名(去掉路径) - private String extractFileName(String filePath) { - if (filePath == null) return "document"; - int lastSlash = filePath.lastIndexOf("/"); - int lastBackslash = filePath.lastIndexOf("\\"); - int lastIndex = Math.max(lastSlash, lastBackslash); - return lastIndex >= 0 ? filePath.substring(lastIndex + 1) : filePath; - } - - */ -/** - * 生成 JWT Token(OnlyOffice 专用格式) - *//* - - private String generateJwtToken(Map config) { - try { - // OnlyOffice 需要的 payload 结构 - Map payload = new HashMap<>(); - // 复制整个配置到 payload - payload.put("document", config.get("document")); - payload.put("editorConfig", config.get("editorConfig")); - payload.put("documentType", config.get("documentType")); - payload.put("type", config.get("type")); - payload.put("width", config.get("width")); - payload.put("height", config.get("height")); - - // 使用 JWTUtil 生成 token - String token = onlyOfficeJwtService.generateToken(payload); - if (token == null) { - log.error("生成JWT Token失败"); - return null; - } - log.debug("生成的JWT Token: {}", token); - return token; - } catch (Exception e) { - log.error("生成JWT Token异常", e); - return null; - } - } -} -*/ diff --git a/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java b/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java index 53cb2c6..f697420 100644 --- a/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java +++ b/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java @@ -1,11 +1,14 @@ package com.bonus.file.service; import com.bonus.common.domain.file.po.ResourceFilePo; +import com.bonus.common.domain.file.po.ResourceFileRecordPo; import com.bonus.common.domain.file.vo.ResourceFileVo; import com.bonus.common.domain.mainDatabase.dto.EnterpriseDto; import com.bonus.file.mapper.ISourceFileMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.Resource; import javax.validation.constraints.NotNull; @@ -101,4 +104,21 @@ public class SourceFileService { public ResourceFileVo getFileById(ResourceFilePo po) { return mapper.getFileById(po); } + + /** + * 添加系统资源存储记录 + * @param list + * @return void + * @author cwchen + * @date 2025/11/14 15:26 + */ + @Transactional(rollbackFor = Exception.class) + public void addResourceFileRecord(List list){ + try { + mapper.addResourceFileRecord(list); + } catch (Exception e) { + log.error(e.toString(),e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + } } diff --git a/bonus-file/src/main/resources/mapper/SourceFileMapper.xml b/bonus-file/src/main/resources/mapper/SourceFileMapper.xml index 74ee125..221cae4 100644 --- a/bonus-file/src/main/resources/mapper/SourceFileMapper.xml +++ b/bonus-file/src/main/resources/mapper/SourceFileMapper.xml @@ -93,4 +93,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM sys_resource_file WHERE source_id = #{sourceId} AND del_flag = '0' + + + + INSERT INTO sys_resource_file_record + + file_path, + create_date, + + VALUES + + ( + #{item.filePath}, + #{item.createDate} + ) + + diff --git a/bonus-framework/pom.xml b/bonus-framework/pom.xml index 9e8c39e..aae3b8c 100644 --- a/bonus-framework/pom.xml +++ b/bonus-framework/pom.xml @@ -64,6 +64,10 @@ com.bonus bonus-mainDatabase + + com.bonus + bonus-file + diff --git a/bonus-framework/src/main/java/com/bonus/framework/manager/AsyncManager.java b/bonus-framework/src/main/java/com/bonus/framework/manager/AsyncManager.java index c21d621..b3f266d 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/manager/AsyncManager.java +++ b/bonus-framework/src/main/java/com/bonus/framework/manager/AsyncManager.java @@ -1,11 +1,15 @@ package com.bonus.framework.manager; +import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.TimerTask; import java.util.concurrent.*; +import com.bonus.common.domain.file.po.ResourceFileRecordPo; import com.bonus.common.utils.Threads; import com.bonus.common.utils.spring.SpringUtils; +import com.bonus.file.service.SourceFileService; import com.bonus.system.domain.SysLogsVo; import com.bonus.system.service.ISysOperLogService; @@ -90,6 +94,25 @@ public class AsyncManager return execute(callable); } + /** + * 执行保存系统资源文件的异步任务 + * @param resourceFileRecordPo + * @return Future> + * @author cwchen + * @date 2025/11/14 15:35 + */ + public Future executeSaveResourceFileModule(final ResourceFileRecordPo resourceFileRecordPo) { + Callable callable = new Callable() { + @Override + public Void call() throws Exception { + List list = Collections.singletonList(resourceFileRecordPo); + SpringUtils.getBean(SourceFileService.class).addResourceFileRecord(list); + return null; // 必须返回 null + } + }; + return execute(callable); + } + /** * 停止任务线程池 */ diff --git a/bonus-framework/src/main/java/com/bonus/framework/security/filter/JwtAuthenticationTokenFilter.java b/bonus-framework/src/main/java/com/bonus/framework/security/filter/JwtAuthenticationTokenFilter.java index 44409d9..bc83bcc 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/security/filter/JwtAuthenticationTokenFilter.java +++ b/bonus-framework/src/main/java/com/bonus/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -10,6 +10,7 @@ import com.bonus.common.constant.HttpStatus; import com.bonus.common.core.domain.AjaxResult; import com.bonus.common.utils.ServletUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.annotation.Order; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; @@ -33,10 +34,18 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter @Autowired private TokenService tokenService; + // onlyoffice忽略的回调函数访问路径 + @Value("${ignoreUrl.callBackUrl}") + private String callBackUrl; + @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { + if(request.getRequestURI().contains(callBackUrl)){ + chain.doFilter(request, response); + return; + } LoginUser loginUser = tokenService.getLoginUser(request); // 若检测到被其他设备挤下线,直接返回特定提示 Object forced = request.getAttribute("forceLogoutByOtherDevice"); diff --git a/bonus-ocr/src/main/java/com/bonus/ocr/service/OcrService.java b/bonus-ocr/src/main/java/com/bonus/ocr/service/OcrService.java index c6ce3ce..230d0eb 100644 --- a/bonus-ocr/src/main/java/com/bonus/ocr/service/OcrService.java +++ b/bonus-ocr/src/main/java/com/bonus/ocr/service/OcrService.java @@ -89,7 +89,7 @@ public class OcrService { log.info("OCR服务开始识别"); // 执行请求 - /*try (CloseableHttpResponse response = httpClient.execute(httpPost)) { + try (CloseableHttpResponse response = httpClient.execute(httpPost)) { HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString(entity, "UTF-8"); log.info("OCR服务响应状态: {}", response.getStatusLine().getStatusCode()); @@ -112,8 +112,8 @@ public class OcrService { } return ocrResponse; - }*/ - return null; + } +// return null; } catch (Exception e) { log.error("调用OCR服务失败", e); return null; diff --git a/pom.xml b/pom.xml index dbf9781..e04e2a4 100644 --- a/pom.xml +++ b/pom.xml @@ -41,6 +41,7 @@ 8.2.2 1.4 0.9.1 + 5.16.0