Pārlūkot izejas kodu

fix - 报价导出init

jinyw 1 mēnesi atpakaļ
vecāks
revīzija
96ff9ea8af

+ 69 - 15
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/common/utils/office/doc/CommonDocUtils.java

@@ -2,32 +2,45 @@ package com.ruoyi.common.utils.office.doc;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ReflectUtil;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ServletUtils;
 import fr.opensagres.xdocreport.core.XDocReportException;
 import fr.opensagres.xdocreport.document.IXDocReport;
 import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
 import fr.opensagres.xdocreport.template.IContext;
 import fr.opensagres.xdocreport.template.TemplateEngineKind;
 import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import javax.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
 
 
 @Slf4j
 public class CommonDocUtils {
 
     private IXDocReport report;
+
     private IContext context;
+
     private FieldsMetadata metadata;
 
+    public static final String GEN_DIRECTORY = "wordTemp";
+
     /***************************************** ↓初始文件加载↓ ********************************************************/
 
     /**
      * 从类路径加载
+     *
      * @param path 文件路径
      * @return
      */
@@ -50,11 +63,12 @@ public class CommonDocUtils {
 
     /**
      * 文本替换  !!!!!${placeholder}必须从文本编辑器复制到word里,不能直接在word里输入,不然会被分割成多段导致本方法无法替换!!!
+     *
      * @param data
      * @return
      */
-    public CommonDocUtils replaceData(Map<String, String> data){
-        if (CollectionUtil.isEmpty(data)){
+    public CommonDocUtils replaceData(Map<String, Object> data) {
+        if (CollectionUtil.isEmpty(data)) {
             return this;
         }
         data.keySet().forEach(key -> {
@@ -129,15 +143,55 @@ public class CommonDocUtils {
 //            report.process(context, tempOut);
 //
 //            long wordEnd = System.currentTimeMillis();
-//            final DocumentFormat targetFormat = DefaultDocumentFormatRegistry.getFormatByExtension("pdf");
-//            converter.convert(tempIn).to(out).as(targetFormat).execute();
-//
-//            temp.delete();
-//            long pdfEnd = System.currentTimeMillis();
-//            log.info("PDF文件生成成功 路径:{} word生成耗时:{}ms pdf转换耗时:{}ms", path, wordEnd-start, pdfEnd-wordEnd);
-//        } catch (Exception e) {
-//            throw new RuntimeException(e);
-//        }
-//    }
+    //            final DocumentFormat targetFormat = DefaultDocumentFormatRegistry.getFormatByExtension("pdf");
+    //            converter.convert(tempIn).to(out).as(targetFormat).execute();
+    //
+    //            temp.delete();
+    //            long pdfEnd = System.currentTimeMillis();
+    //            log.info("PDF文件生成成功 路径:{} word生成耗时:{}ms pdf转换耗时:{}ms", path, wordEnd-start, pdfEnd-wordEnd);
+    //        } catch (Exception e) {
+    //            throw new RuntimeException(e);
+    //        }
+    //    }
+
+    /***************************************** ↓获取最终文件↓ ********************************************************/
+
+    /**
+     * 下载文件
+     */
+    public void download() {
+        HttpServletResponse response = ServletUtils.getResponse();
+        try (OutputStream out = response.getOutputStream()) {
+            report.process(context, out);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public File genFile(String quotationNo) {
+        createWordDirectory();
+        String filePath =
+            getGenDirectory() + File.separator + "报价_" + quotationNo + "_" + DateUtils.parseDateToStr(
+                "yyyyMMddHHmmssSSS", new Date())
+                + ".docx";
+        File f = new File(filePath);
+        try (OutputStream out = Files.newOutputStream(f.toPath())) {
+            report.process(context, out);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return f;
+    }
+
+    private static void createWordDirectory() {
+        File file = new File(getGenDirectory());
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+    }
+
+    private static String getGenDirectory() {
+        return GEN_DIRECTORY + File.separator + DateUtils.dateTime();
+    }
 
 }

+ 13 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/service/quotation/impl/QuotationExportServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.WordUtil;
+import com.ruoyi.common.utils.office.doc.CommonDocUtils;
 import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.project.business.domain.TqQuotation;
 import com.ruoyi.project.business.domain.bo.quotation.QuotationExportBO;
@@ -75,6 +76,16 @@ public class QuotationExportServiceImpl
             map.put(EMAIL, getStr(quotation.getEmail()));
             map.put(DATE, getStr(DateUtils.parseDateToStr(MM_DD_YYYY, quotation.getSubmitDate())));
             map.put(IS_ELEVATOR, true);
+
+            File file = new CommonDocUtils().loadFromClasspath("/wordTemplate/KW2600模版.docx")
+                .replaceData(map).genFile(getStr(quotation.getQuotationNo()));
+            fileList.add(file);
+            WordUtil.exportZip(response, fileList);
+
+            if (true) {
+                return;
+            }
+
             // 电梯价格表
             List<WPrice> priceList = new ArrayList<>();
             for (ElevatorExportVO elevator : elevatorDataList) {
@@ -102,6 +113,8 @@ public class QuotationExportServiceImpl
                         elevator.getPrice().multiply(BigDecimal.valueOf(elevator.getElevatorNumber())))));
                 // 电梯参数
                 elevatorList.add(getMap(elevator));
+
+                return;
             }
             map.put(PRICE_LIST, priceList);
             map.put(FREIGHT_PRICE, quotation.getFreightPrice());

BIN
RuoYi-Vue-fast-master/src/main/resources/wordTemplate/KW2600模版.docx


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 2921
RuoYi-Vue-fast-master/src/main/resources/wordTemplate/报价模板.ftl


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels