Administrator 11 сар өмнө
parent
commit
a15d5fa798

+ 5 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/loan/LoanApplicationController.java

@@ -3,6 +3,7 @@ package com.ruoyi.web.controller.loan;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
+import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SendSmsUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -83,6 +84,7 @@ public class LoanApplicationController extends BaseController {
     /**
      * 新增贷款申请主
      */
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
     @PreAuthorize("@ss.hasPermi('system:application:add')")
     @Log(title = "贷款申请主", businessType = BusinessType.INSERT)
     @PostMapping
@@ -93,6 +95,7 @@ public class LoanApplicationController extends BaseController {
     /**
      * 修改贷款申请主
      */
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
     @PreAuthorize("@ss.hasPermi('system:application:edit')")
     @Log(title = "贷款申请主", businessType = BusinessType.UPDATE)
     @PostMapping("/put")
@@ -113,10 +116,11 @@ public class LoanApplicationController extends BaseController {
     /**
      *暂存
      */
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
     @PreAuthorize("@ss.hasPermi('system:application:temporary')")
     @PostMapping("/temporary")
     public AjaxResult temporary(@RequestBody LoanApplication loanApplication) {
-        return toAjax(loanApplicationService.temporary(loanApplication));
+        return loanApplicationService.temporary(loanApplication);
     }
 
     /**

+ 151 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java

@@ -1,6 +1,19 @@
 package com.ruoyi.framework.manager.factory;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import java.util.TimerTask;
+import java.util.stream.Collectors;
+
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.uuid.Seq;
+import com.ruoyi.system.domain.loan.LoanApplicationFj;
+import com.ruoyi.system.domain.loan.ShareholderFj;
+import org.apache.commons.io.FilenameUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.ruoyi.common.constant.Constants;
@@ -15,6 +28,9 @@ import com.ruoyi.system.domain.SysOperLog;
 import com.ruoyi.system.service.ISysLogininforService;
 import com.ruoyi.system.service.ISysOperLogService;
 import eu.bitwalker.useragentutils.UserAgent;
+import org.springframework.scheduling.annotation.Async;
+
+import static com.ruoyi.common.constant.CommonConstants.*;
 
 /**
  * 异步工厂(产生任务用)
@@ -99,4 +115,139 @@ public class AsyncFactory
             }
         };
     }
+
+    /**
+     * 合并图片生成PDF保存为文件
+     *
+     * @param loanApplicationFjList
+     * @return
+     */
+    public static TimerTask createPdfFromImages(List<LoanApplicationFj> loanApplicationFjList, String loanApplicationNumber) {
+        return new TimerTask(){
+            @Override
+            public void run()
+            {
+                //根据文件类型进行判断是否需要合成pdf
+                Map<String, List<LoanApplicationFj>> bigTypeMap = loanApplicationFjList.stream().collect(Collectors.groupingBy(LoanApplicationFj::getBigType));
+                if (bigTypeMap.size() > 0){
+                    List<LoanApplicationFj> loanApplicationFjListA = bigTypeMap.get(A);
+                    List<LoanApplicationFj> loanApplicationFjListB = bigTypeMap.get(B);
+                    createPdfFromImages(loanApplicationFjList,loanApplicationFjListA,loanApplicationNumber,A);
+                    createPdfFromImages(loanApplicationFjList,loanApplicationFjListB,loanApplicationNumber,B);
+                }
+            }
+        };
+    }
+
+    /**
+     *
+     * @param loanApplicationFjList 全体附件
+     * @param loanApplicationFjListA 分附件大类集合
+     * @return
+     */
+    public static List<LoanApplicationFj> createPdfFromImages(List<LoanApplicationFj> loanApplicationFjList, List<LoanApplicationFj> loanApplicationFjListA,String loanApplicationNumber,String bigType){
+        if (loanApplicationFjListA != null && loanApplicationFjListA.size() > 0){
+            Map<String, List<LoanApplicationFj>> typeMap = loanApplicationFjListA.stream().collect(Collectors.groupingBy(LoanApplicationFj::getType));
+            for (String type : typeMap.keySet()) {
+                List<LoanApplicationFj> loanApplicationFjListInsert = typeMap.get(type);
+                //获取附件名称
+                String fjName = loanApplicationFjListInsert.get(0).getName().split("_")[0];
+                List<String> typeList = loanApplicationFjListInsert.stream().filter(e -> type.equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
+                if (typeList.size() > 0){
+                    for (int i = 0; i < typeList.size(); i++) {
+                        ///profile/upload/RZDB202405281147018884551/公司章程_20240528114820A002.png 前缀替换
+                        String replaced = typeList.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
+                        typeList.set(i, replaced);
+                    }
+                    createPdfFromImages(loanApplicationFjList, typeList, loanApplicationNumber, fjName+"_" + Seq.getId(Seq.uploadSeqType), type,bigType);
+                }
+            }
+        }
+        return loanApplicationFjList;
+    }
+
+    /**
+     * @param imagePaths            图片地址集合
+     * @param loanApplicationNumber 申请编号
+     * @param originalFilename      pdf文件名称
+     * @param type                  文件类型
+     */
+    public static List<LoanApplicationFj> createPdfFromImages(List<LoanApplicationFj> loanApplicationFjList, List<String> imagePaths, String loanApplicationNumber, String originalFilename, String type,String bigType) {
+        // 上传文件路径 = 根+申请编号
+        String filePath = StringUtils.format("{}/{}/{}.{}", RuoYiConfig.getUploadPath(), loanApplicationNumber,
+                FilenameUtils.getBaseName(originalFilename), "pdf");
+        //pdf保存位置
+        File outPutPdf = new File(filePath);
+        try {
+            FileUploadUtils.createPdfFromImages(imagePaths, outPutPdf);
+            //往附件信息中插入对应PDF数据
+            LoanApplicationFj applicationFj = new LoanApplicationFj();
+            applicationFj.setLoanApplicationId(loanApplicationFjList.get(0).getLoanApplicationId());
+            applicationFj.setLoanApplicationNumber(loanApplicationNumber);
+            applicationFj.setName(originalFilename + ".pdf");
+            applicationFj.setUrl(StringUtils.format("{}/{}/{}.{}", "/profile/upload", loanApplicationNumber,
+                    FilenameUtils.getBaseName(originalFilename), "pdf"));
+            applicationFj.setBigType(bigType);
+            applicationFj.setType(type);
+            //给前端判断是否是系统生成的pdf
+            applicationFj.setRemark(ONE);
+            loanApplicationFjList.add(applicationFj);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return loanApplicationFjList;
+    }
+
+
+
+    /**
+     * 合并图片生成PDF保存为文件
+     *
+     * @param shareholderFjList
+     * @return
+     */
+
+    public static TimerTask createPdfFromImagesShareholder(List<ShareholderFj> shareholderFjList, String loanApplicationNumber) {
+        return new TimerTask(){
+            @Override
+            public void run()
+            {
+                List<String> imagePaths = new ArrayList<>();
+                //根据文件类型进行判断是否需要合成pdf
+                for (ShareholderFj shareholderFj : shareholderFjList) {
+                    String shareholderZxUrl = shareholderFj.getShareholderZxUrl();
+                    if (StringUtils.isNotEmpty(shareholderZxUrl)) {
+                        String[] split = shareholderZxUrl.split(",");
+                        for (String fileName : split) {
+                            if ("png".equals(fileName.split("\\.")[1]) || "jpg".equals(fileName.split("\\.")[1]) || "jpeg".equals(fileName.split("\\.")[1])){
+                                imagePaths.add(fileName);
+                            }
+                        }
+                    }
+                    if (imagePaths.size() > 0) {
+                        String substring = imagePaths.get(0).substring(imagePaths.get(0).lastIndexOf("/")+1, imagePaths.get(0).lastIndexOf("_"))+Seq.getId(Seq.uploadSeqType);
+
+                        for (int i = 0; i < imagePaths.size(); i++) {
+                            //前缀替换
+                            String replaced = imagePaths.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
+                            imagePaths.set(i, replaced);
+                        }
+
+                        // 上传文件路径 = 根+申请编号
+                        String filePath = StringUtils.format("{}/{}/{}.{}", RuoYiConfig.getUploadPath(), loanApplicationNumber,
+                                FilenameUtils.getBaseName(substring), "pdf");
+                        //pdf保存位置
+                        File outPutPdf = new File(filePath);
+                        try {
+                            FileUploadUtils.createPdfFromImages(imagePaths, outPutPdf);
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                        shareholderFj.setShareholderZxUrlPdf(StringUtils.format("{}/{}/{}.{}", "/profile/upload", loanApplicationNumber,
+                                FilenameUtils.getBaseName(substring), "pdf"));
+                    }
+                }
+            }
+        };
+    }
 }

+ 32 - 222
ruoyi-system/src/main/java/com/ruoyi/system/service/loan/impl/LoanApplicationServiceImpl.java → ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/LoanApplicationServiceImpl.java

@@ -1,22 +1,19 @@
-package com.ruoyi.system.service.loan.impl;
+package com.ruoyi.framework.web.service;
 
 
-import cn.hutool.extra.qrcode.QrCodeUtil;
-import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.deepoove.poi.data.PictureRenderData;
 import com.deepoove.poi.data.Pictures;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.*;
-import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.poi.ExcelFillUtils;
 import com.ruoyi.common.utils.poi.WordUtil;
 import com.ruoyi.common.utils.uuid.Seq;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.common.utils.uuid.UUID;
+import com.ruoyi.framework.manager.AsyncManager;
+import com.ruoyi.framework.manager.factory.AsyncFactory;
 import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.domain.conference.SysUserConference;
 import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
@@ -28,24 +25,16 @@ import com.ruoyi.system.domain.remind.WaitRemind;
 import com.ruoyi.system.domain.review.ReviewComments;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.loan.ILoanApplicationService;
-import lombok.SneakyThrows;
-import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-
 import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.*;
 import java.io.File;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
-
 import static com.ruoyi.common.constant.CommonConstants.*;
 
 import javax.annotation.Resource;
@@ -200,7 +189,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 loanApplicationFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 loanApplicationFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
             }
-            createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber());
+            AsyncManager.me().execute(AsyncFactory.createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber()));
             loanApplicationFjMapper.batchLoanApplicationFj(loanApplicationFjList);
         }
         List<ShareholderFj> shareholderFjList = loanApplication.getShareholderFjList();
@@ -209,7 +198,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 shareholderFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 shareholderFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
             }
-            createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber());
+            AsyncManager.me().execute(AsyncFactory.createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber()));
             shareholderFjMapper.batchShareholderFj(shareholderFjList);
         }
 
@@ -225,203 +214,9 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         return i;
     }
 
-    /**
-     * 合并图片生成PDF保存为文件
-     *
-     * @param shareholderFjList
-     * @return
-     */
-    @Async
-    public List<ShareholderFj> createPdfFromImagesShareholder(List<ShareholderFj> shareholderFjList, String loanApplicationNumber) {
-        List<String> imagePaths = new ArrayList<>();
-        //根据文件类型进行判断是否需要合成pdf
-        for (ShareholderFj shareholderFj : shareholderFjList) {
-            String shareholderZxUrl = shareholderFj.getShareholderZxUrl();
-            if (StringUtils.isNotEmpty(shareholderZxUrl)) {
-                String[] split = shareholderZxUrl.split(",");
-                for (String fileName : split) {
-                    if ("png".equals(fileName.split("\\.")[1]) || "jpg".equals(fileName.split("\\.")[1]) || "jpeg".equals(fileName.split("\\.")[1])){
-                        imagePaths.add(fileName);
-                    }
-                }
-            }
-            if (imagePaths.size() > 0) {
-                String substring = imagePaths.get(0).substring(imagePaths.get(0).lastIndexOf("/")+1, imagePaths.get(0).lastIndexOf("_"))+Seq.getId(Seq.uploadSeqType);
 
-                for (int i = 0; i < imagePaths.size(); i++) {
-                    //前缀替换
-                    String replaced = imagePaths.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                    imagePaths.set(i, replaced);
-                }
 
-                // 上传文件路径 = 根+申请编号
-                String filePath = StringUtils.format("{}/{}/{}.{}", RuoYiConfig.getUploadPath(), loanApplicationNumber,
-                        FilenameUtils.getBaseName(substring), "pdf");
-                //pdf保存位置
-                File outPutPdf = new File(filePath);
-                try {
-                    FileUploadUtils.createPdfFromImages(imagePaths, outPutPdf);
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-                shareholderFj.setShareholderZxUrlPdf(StringUtils.format("{}/{}/{}.{}", "/profile/upload", loanApplicationNumber,
-                        FilenameUtils.getBaseName(substring), "pdf"));
-            }
-        }
-        return shareholderFjList;
-    }
 
-    /**
-     * 合并图片生成PDF保存为文件
-     *
-     * @param loanApplicationFjList
-     * @return
-     */
-    @Async
-    public List<LoanApplicationFj> createPdfFromImages(List<LoanApplicationFj> loanApplicationFjList, String loanApplicationNumber) {
-        //根据文件类型进行判断是否需要合成pdf
-        Map<String, List<LoanApplicationFj>> bigTypeMap = loanApplicationFjList.stream().collect(Collectors.groupingBy(LoanApplicationFj::getBigType));
-        if (bigTypeMap.size() > 0){
-            List<LoanApplicationFj> loanApplicationFjListA = bigTypeMap.get(A);
-            List<LoanApplicationFj> loanApplicationFjListB = bigTypeMap.get(B);
-            createPdfFromImages(loanApplicationFjList,loanApplicationFjListA,loanApplicationNumber,A);
-            createPdfFromImages(loanApplicationFjList,loanApplicationFjListB,loanApplicationNumber,B);
-        }
-/*        //公司章程
-        List<String> gszc = loanApplicationFjList.stream().filter(e -> "gszc".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-        //申请企业征信报告
-        List<String> sqqyzxbg = loanApplicationFjList.stream().filter(e -> "sqqyzxbg".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-        //关联企业征信报告
-        List<String> glqyzxbg = loanApplicationFjList.stream().filter(e -> "glqyzxbg".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-        //企业法人征信报告
-        List<String> qyfrzxbg = loanApplicationFjList.stream().filter(e -> "qyfrzxbg".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-        //实际控股人征信报告
-        List<String> sjkgrzxbg = loanApplicationFjList.stream().filter(e -> "sjkgrzxbg".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-        //实际控股人配偶征信报告
-        List<String> sjkgrpozxbg = loanApplicationFjList.stream().filter(e -> "sjkgrpozxbg".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-        //反担保人个人征信报告
-        List<String> fdbrgrzxbg = loanApplicationFjList.stream().filter(e -> "fdbrgrzxbg".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-        //反担保企业征信报告
-        List<String> fdbqyzx = loanApplicationFjList.stream().filter(e -> "fdbqyzx".equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-
-        if (gszc.size() > 0) {
-            for (int i = 0; i < gszc.size(); i++) {
-                ///profile/upload/RZDB202405281147018884551/公司章程_20240528114820A002.png 前缀替换
-                String replaced = gszc.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                gszc.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, gszc, loanApplicationNumber, "公司章程_" + Seq.getId(Seq.uploadSeqType), "gszc");
-        }
-        if (sqqyzxbg.size() > 0) {
-            for (int i = 0; i < sqqyzxbg.size(); i++) {
-                String replaced = sqqyzxbg.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                sqqyzxbg.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, sqqyzxbg, loanApplicationNumber, "申请企业征信报告_" + Seq.getId(Seq.uploadSeqType), "sqqyzxbg");
-        }
-        if (glqyzxbg.size() > 0) {
-            for (int i = 0; i < glqyzxbg.size(); i++) {
-                String replaced = glqyzxbg.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                glqyzxbg.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, glqyzxbg, loanApplicationNumber, "关联企业征信报告_" + Seq.getId(Seq.uploadSeqType), "glqyzxbg");
-        }
-        if (qyfrzxbg.size() > 0) {
-            for (int i = 0; i < qyfrzxbg.size(); i++) {
-                String replaced = qyfrzxbg.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                qyfrzxbg.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, qyfrzxbg, loanApplicationNumber, "企业法人征信报告_" + Seq.getId(Seq.uploadSeqType), "qyfrzxbg");
-        }
-        if (sjkgrzxbg.size() > 0) {
-            for (int i = 0; i < sjkgrzxbg.size(); i++) {
-                String replaced = sjkgrzxbg.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                sjkgrzxbg.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, sjkgrzxbg, loanApplicationNumber, "实际控股人征信报告_" + Seq.getId(Seq.uploadSeqType), "sjkgrzxbg");
-        }
-        if (sjkgrpozxbg.size() > 0) {
-            for (int i = 0; i < sjkgrpozxbg.size(); i++) {
-                String replaced = sjkgrpozxbg.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                sjkgrpozxbg.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, sjkgrpozxbg, loanApplicationNumber, "实际控股人配偶征信报告_" + Seq.getId(Seq.uploadSeqType), "sjkgrpozxbg");
-        }
-        if (fdbrgrzxbg.size() > 0) {
-            for (int i = 0; i < fdbrgrzxbg.size(); i++) {
-                String replaced = fdbrgrzxbg.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                fdbrgrzxbg.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, fdbrgrzxbg, loanApplicationNumber, "反担保人个人征信报告_" + Seq.getId(Seq.uploadSeqType), "fdbrgrzxbg");
-        }
-        if (fdbqyzx.size() > 0) {
-            for (int i = 0; i < fdbqyzx.size(); i++) {
-                String replaced = fdbqyzx.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                fdbqyzx.set(i, replaced);
-            }
-            createPdfFromImages(loanApplicationFjList, fdbqyzx, loanApplicationNumber, "反担保企业征信报告_" + Seq.getId(Seq.uploadSeqType), "fdbqyzx");
-        }*/
-        return loanApplicationFjList;
-    }
-
-    /**
-     *
-     * @param loanApplicationFjList 全体附件
-     * @param loanApplicationFjListA 分附件大类集合
-     * @return
-     */
-    public List<LoanApplicationFj> createPdfFromImages(List<LoanApplicationFj> loanApplicationFjList, List<LoanApplicationFj> loanApplicationFjListA,String loanApplicationNumber,String bigType){
-        if (loanApplicationFjListA != null && loanApplicationFjListA.size() > 0){
-            Map<String, List<LoanApplicationFj>> typeMap = loanApplicationFjListA.stream().collect(Collectors.groupingBy(LoanApplicationFj::getType));
-            for (String type : typeMap.keySet()) {
-                List<LoanApplicationFj> loanApplicationFjListInsert = typeMap.get(type);
-                //获取附件名称
-                String fjName = loanApplicationFjListInsert.get(0).getName().split("_")[0];
-                List<String> typeList = loanApplicationFjListInsert.stream().filter(e -> type.equals(e.getType()) && ("png".equals(e.getName().split("\\.")[1]) || "jpg".equals(e.getName().split("\\.")[1]) || "jpeg".equals(e.getName().split("\\.")[1]))).map(LoanApplicationFj::getUrl).collect(Collectors.toList());
-                if (typeList.size() > 0){
-                    for (int i = 0; i < typeList.size(); i++) {
-                        ///profile/upload/RZDB202405281147018884551/公司章程_20240528114820A002.png 前缀替换
-                        String replaced = typeList.get(i).replace("/profile/upload", RuoYiConfig.getUploadPath());
-                        typeList.set(i, replaced);
-                    }
-                    createPdfFromImages(loanApplicationFjList, typeList, loanApplicationNumber, fjName+"_" + Seq.getId(Seq.uploadSeqType), type,bigType);
-                }
-            }
-        }
-        return loanApplicationFjList;
-    }
-
-    /**
-     * @param imagePaths            图片地址集合
-     * @param loanApplicationNumber 申请编号
-     * @param originalFilename      pdf文件名称
-     * @param type                  文件类型
-     */
-    public List<LoanApplicationFj> createPdfFromImages(List<LoanApplicationFj> loanApplicationFjList, List<String> imagePaths, String loanApplicationNumber, String originalFilename, String type,String bigType) {
-        // 上传文件路径 = 根+申请编号
-        String filePath = StringUtils.format("{}/{}/{}.{}", RuoYiConfig.getUploadPath(), loanApplicationNumber,
-                FilenameUtils.getBaseName(originalFilename), "pdf");
-        //pdf保存位置
-        File outPutPdf = new File(filePath);
-        try {
-            FileUploadUtils.createPdfFromImages(imagePaths, outPutPdf);
-            //往附件信息中插入对应PDF数据
-            LoanApplicationFj applicationFj = new LoanApplicationFj();
-            applicationFj.setLoanApplicationId(loanApplicationFjList.get(0).getLoanApplicationId());
-            applicationFj.setLoanApplicationNumber(loanApplicationNumber);
-            applicationFj.setName(originalFilename + ".pdf");
-            applicationFj.setUrl(StringUtils.format("{}/{}/{}.{}", "/profile/upload", loanApplicationNumber,
-                    FilenameUtils.getBaseName(originalFilename), "pdf"));
-            applicationFj.setBigType(bigType);
-            applicationFj.setType(type);
-            //给前端判断是否是系统生成的pdf
-            applicationFj.setRemark(ONE);
-            loanApplicationFjList.add(applicationFj);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return loanApplicationFjList;
-    }
 
     /**
      * 修改贷款申请主
@@ -443,7 +238,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 loanApplicationFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 loanApplicationFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
             }
-            createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber());
+            AsyncManager.me().execute(AsyncFactory.createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber()));
+
             loanApplicationFjMapper.batchLoanApplicationFj(loanApplicationFjList);
         }
         shareholderFjMapper.deleteShareholderFjByLoanApplicationId(loanApplicationId);
@@ -453,7 +249,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 shareholderFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 shareholderFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
             }
-            createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber());
+            AsyncManager.me().execute(AsyncFactory.createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber()));
             shareholderFjMapper.batchShareholderFj(shareholderFjList);
         }
         return loanApplicationMapper.updateLoanApplication(loanApplication);
@@ -466,7 +262,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
      * @return
      */
     @Override
-    public int temporary(LoanApplication loanApplication) {
+    public AjaxResult temporary(LoanApplication loanApplication) {
         loanApplication.setLoanApplicationType(ONE);
         Long loanApplicationId = loanApplication.getLoanApplicationId();
         //走修改
@@ -479,7 +275,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     loanApplicationFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                     loanApplicationFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
                 }
-                createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber());
+                AsyncManager.me().execute(AsyncFactory.createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber()));
+
                 loanApplicationFjMapper.batchLoanApplicationFj(loanApplicationFjList);
             }
             shareholderFjMapper.deleteShareholderFjByLoanApplicationId(loanApplicationId);
@@ -489,10 +286,19 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     shareholderFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                     shareholderFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
                 }
-                createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber());
+                AsyncManager.me().execute(AsyncFactory.createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber()));
+
                 shareholderFjMapper.batchShareholderFj(shareholderFjList);
             }
-            return loanApplicationMapper.updateLoanApplication(loanApplication);
+            int rows = loanApplicationMapper.updateLoanApplication(loanApplication);
+            return rows>0?AjaxResult.success() : AjaxResult.error();
+        }
+        LoanApplication loanApplicationNew = new LoanApplication();
+        loanApplicationNew.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
+        //暂存先去判断项目编号是否重复
+        List<LoanApplication> loanApplications = loanApplicationMapper.selectLoanApplicationList(loanApplicationNew);
+        if (loanApplications != null && loanApplications.size() > 0){
+            return AjaxResult.error("请勿重复暂存");
         }
         //设置为audit_schedule=1 audit_type=1
         loanApplication.setAuditSchedule(ONE);
@@ -501,14 +307,14 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         loanApplication.setUserId(SecurityUtils.getUserId());
         //贷款申请进度进入申报提交
         loanApplication.setLoanSchedule(ONE);
-        int i = loanApplicationMapper.insertLoanApplication(loanApplication);
+        int rows = loanApplicationMapper.insertLoanApplication(loanApplication);
         List<LoanApplicationFj> loanApplicationFjList = loanApplication.getLoanApplicationFjList();
         if (loanApplicationFjList != null && loanApplicationFjList.size() > 0) {
             for (LoanApplicationFj loanApplicationFj : loanApplicationFjList) {
                 loanApplicationFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 loanApplicationFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
             }
-            createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber());
+            AsyncManager.me().execute(AsyncFactory.createPdfFromImages(loanApplicationFjList, loanApplication.getLoanApplicationNumber()));
             loanApplicationFjMapper.batchLoanApplicationFj(loanApplicationFjList);
         }
         List<ShareholderFj> shareholderFjList = loanApplication.getShareholderFjList();
@@ -517,10 +323,10 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 shareholderFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 shareholderFj.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
             }
-            createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber());
+            AsyncManager.me().execute(AsyncFactory.createPdfFromImagesShareholder(shareholderFjList,loanApplication.getLoanApplicationNumber()));
             shareholderFjMapper.batchShareholderFj(shareholderFjList);
         }
-        return i;
+        return rows>0?AjaxResult.success() : AjaxResult.error();
     }
 
     /**
@@ -1019,7 +825,6 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
     /**
      * 导出模板附件
      */
-    @SneakyThrows
     @Override
     public AjaxResult exportMb(LoanApplication loanApplication) {
         Map<String, Object> map = new HashMap<>();
@@ -1075,7 +880,12 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         json.put("loanApplicationNumber", loanApplication.getLoanApplicationNumber());
         json.put("bigType", bigType);
         json.put("fileType", fileType);
-        String imagePath = QRCodeUtils.encodeNodate(json.toString(), null, ewmPath, true);
+        String imagePath = null;
+        try {
+            imagePath = QRCodeUtils.encodeNodate(json.toString(), null, ewmPath, true);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         if (StringUtils.isNotEmpty(imagePath)) {
             PictureRenderData picture = Pictures.ofLocal(imagePath).size(70, 70).create();//本地图片地址
             params.put("signPicture", picture);

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/loan/ILoanApplicationService.java

@@ -53,7 +53,7 @@ public interface ILoanApplicationService
      * @param loanApplication
      * @return
      */
-    public int temporary(LoanApplication loanApplication);
+    public AjaxResult temporary(LoanApplication loanApplication);
 
     /**
      * 批量删除贷款申请主