Huanyi 2 месяцев назад
Родитель
Сommit
672ea94553

+ 2 - 2
ruoyi-common/yingpaipay-common-document/src/main/java/com/yingpaipay/common/file/util/PdfUtils.java

@@ -1,5 +1,6 @@
 package com.yingpaipay.common.file.util;
 
+import lombok.extern.slf4j.Slf4j;
 import org.apache.pdfbox.io.MemoryUsageSetting;
 import org.apache.pdfbox.multipdf.PDFMergerUtility;
 import org.apache.pdfbox.pdmodel.PDDocument;
@@ -14,9 +15,8 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
+@Slf4j
 public class PdfUtils {
 
     public static File watermark(File file, String remark) throws IOException {

+ 9 - 0
ruoyi-modules/yingpaipay-business/src/main/java/com/yingpaipay/business/constant/AiAuditResultConst.java

@@ -0,0 +1,9 @@
+package com.yingpaipay.business.constant;
+
+public interface AiAuditResultConst {
+
+    Integer PASS = 0;
+
+    Integer REJECT = 1;
+
+}

+ 13 - 0
ruoyi-modules/yingpaipay-business/src/main/java/com/yingpaipay/business/domain/dto/AiAuditDto.java

@@ -0,0 +1,13 @@
+package com.yingpaipay.business.domain.dto;
+
+import com.yingpaipay.business.enumeration.AiAuditRejectReasonEnum;
+import lombok.Data;
+
+@Data
+public class AiAuditDto {
+
+    private Integer result;
+
+    private AiAuditRejectReasonEnum rejectReason;
+
+}

+ 20 - 0
ruoyi-modules/yingpaipay-business/src/main/java/com/yingpaipay/business/enumeration/AiAuditRejectReasonEnum.java

@@ -0,0 +1,20 @@
+package com.yingpaipay.business.enumeration;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import org.springframework.context.i18n.LocaleContextHolder;
+
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum AiAuditRejectReasonEnum {
+
+    PAGE_ERROR("页码不完整", "The page numbers are incomplete."),
+    ;
+
+    private final String zhContent;
+    private final String enContent;
+
+    public String getContent() {
+        return LocaleContextHolder.getLocale().getLanguage().equals("zh") ? this.zhContent : this.enContent;
+    }
+
+}

+ 19 - 6
ruoyi-modules/yingpaipay-business/src/main/java/com/yingpaipay/business/service/AiAuditService.java

@@ -1,5 +1,8 @@
 package com.yingpaipay.business.service;
 
+import com.yingpaipay.business.constant.AiAuditResultConst;
+import com.yingpaipay.business.domain.dto.AiAuditDto;
+import com.yingpaipay.business.enumeration.AiAuditRejectReasonEnum;
 import com.yingpaipay.setting.service.IAiSettingService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -22,16 +25,14 @@ public class AiAuditService {
     private final IAiSettingService settingService;
     private final ISysOssService ossService;
 
-    public void audit(Long ossId) {
+    public AiAuditDto audit(Long ossId) {
         if (!settingService.query().getEnabledFlag()) {
-            return;
-        }
-        boolean flag = handleAudit(ossId);
-        if (!flag) {
+            return null;
         }
+        return handleAudit(ossId);
     }
 
-    public boolean handleAudit(Long ossId) {
+    public AiAuditDto handleAudit(Long ossId) {
         SysOssVo ossVo = ossService.getById(ossId);
         String url = ossVo.getUrl();
         File file;
@@ -49,8 +50,20 @@ public class AiAuditService {
             throw new RuntimeException("AI 审核文件下载失败", e);
         }
 
+        AiAuditDto dto = new AiAuditDto();
         // TODO 进行具体的审核环节
+        boolean pageFlag = checkPages(file);
+        if (!pageFlag) {
+            dto.setResult(AiAuditResultConst.REJECT);
+            dto.setRejectReason(AiAuditRejectReasonEnum.PAGE_ERROR);
+        }
+
+        dto.setResult(AiAuditResultConst.PASS);
+        return dto;
+    }
 
+    private boolean checkPages(File file) {
+        // TODO 使用 textin 进行 OCR 解析
         return true;
     }
 

+ 8 - 1
ruoyi-modules/yingpaipay-business/src/main/java/com/yingpaipay/business/service/impl/DocumentServiceImpl.java

@@ -954,7 +954,14 @@ public class DocumentServiceImpl implements IDocumentService {
         document.setSpecificationType(bo.getFolder() != 0L ? SpecificationTypeConst.CENTER : SpecificationTypeConst.PROJECT);
         document.setTenantId(TenantHelper.getTenantId());
 
-        return baseMapper.insert(document) > 0;
+        aiAuditService.audit(ossVo.getOssId());
+
+        boolean documentInserFlag = baseMapper.insert(document) == 0;
+        if (documentInserFlag) {
+            throw new RuntimeException("文档插入失败");
+        }
+
+        return true;
     }
 
     @Override

+ 1 - 1
ruoyi-modules/yingpaipay-business/src/main/java/com/yingpaipay/business/service/impl/TextInServiceImpl.java

@@ -118,7 +118,7 @@ public class TextInServiceImpl implements ITextInService {
                 while ((entry = zis.getNextEntry()) != null) {
                     String name = entry.getName();
                     if (name.contains("..")) {
-                        continue; // 跳过非法路径
+                        continue;
                     }
 
                     Path filePath = tempDir.resolve(name).normalize();

+ 15 - 0
script/sql/business/create.sql

@@ -237,6 +237,21 @@ CREATE TABLE `keyword_setting`
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='文件夹关键词设置';
 
+CREATE TABLE `tencent_setting`
+(
+    `id`          bigint unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '序号',
+    `app_id`      varchar(255) COMMENT 'x-ti-app-id ',
+    `secret_code` varchar(255) COMMENT 'x-ti-secret-code',
+    `create_dept` bigint(20) COMMENT '创建部门',
+    `create_by`   bigint(20) COMMENT '创建者',
+    `create_time` datetime COMMENT '创建时间',
+    `update_by`   bigint(20) COMMENT '更新者',
+    `update_time` datetime COMMENT '更新时间',
+    `del_flag`    char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+    `tenant_id`   varchar(40) COMMENT '租户id'
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='腾讯云设置';
+
 CREATE TABLE `folder_keyword`
 (
     `folder_id`  bigint NOT NULL COMMENT '文件夹ID',