Bladeren bron

收据下载调整

LAPTOP-FO2T5SIU\35838 5 maanden geleden
bovenliggende
commit
3781a56358

+ 10 - 0
README.md

@@ -1,2 +1,12 @@
 # settle_down_management
 
+# 安装用友jar包
+mvn install:install-file -Dfile=jar包的位置 -DgroupId=com.openAPIUtil -DartifactId=openAPIUtil -Dversion=1.0.0 -Dpackaging=jar
+
+
+
+
+
+
+
+

+ 10 - 0
pro-base/pom.xml

@@ -13,6 +13,16 @@
     <packaging>jar</packaging>
 
     <dependencies>
+
+        <!-- docx转pdf end -->
+        <dependency>
+            <groupId>com.aspose</groupId>
+            <artifactId>aspose-words</artifactId>
+            <version>15.8.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/aspose-words-15.8.0-jdk16.jar</systemPath>
+        </dependency>
+
         <!-- 用友工具类 -->
 <!--        <dependency>-->
 <!--            <groupId>openAPIUtil</groupId>-->

+ 18 - 1
pro-base/src/main/java/com/idea/customerManagement/service/CustomerManagementService.java

@@ -36,6 +36,7 @@ import com.idea.invoice.util.InvoiceUtil;
 import com.idea.util.DateUtils;
 import com.idea.util.ExcelUtils;
 import com.idea.util.ReplaceWord;
+import com.idea.util.WordToPdfUtil;
 import com.rockstar.common.base.BaseService;
 import com.rockstar.frame.model.FrameUser;
 import com.rockstar.frame.model.extend.DateTrans;
@@ -498,7 +499,23 @@ public class CustomerManagementService implements BaseService<CustomerManagement
             data.put("${month}", month);
             data.put("${date}", date);
             data.put("${region}", region);
-            ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
+
+            try {
+                File tempWord = ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
+                File tempPDF = WordToPdfUtil.word2Pdf(tempWord);
+                response.setContentType("text/html;charset=UTF-8");
+                response.setContentType("application/pdf");
+                response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
+                OutputStream out = response.getOutputStream();
+                IoUtil.copy(FileUtil.getInputStream(tempPDF), out);
+                out.close();
+                tempWord.deleteOnExit();
+                tempPDF.deleteOnExit();
+            }catch (Exception e){
+                log.error("文档生成报错:", e);
+            }
+
+
         }
 
 

+ 21 - 2
pro-base/src/main/java/com/idea/customerManagement/service/IntentionalDepositService.java

@@ -1,6 +1,8 @@
 package com.idea.customerManagement.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
@@ -42,6 +44,7 @@ import com.idea.transactionRecordManage.model.ConvertRecordExample;
 import com.idea.util.DateUtils;
 import com.idea.util.MoneyUtils;
 import com.idea.util.ReplaceWord;
+import com.idea.util.WordToPdfUtil;
 import com.rockstar.common.base.BaseService;
 import com.rockstar.common.domain.AjaxResult;
 import com.rockstar.frame.model.FrameUser;
@@ -60,6 +63,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.URLEncoder;
 import java.util.*;
 
 @Slf4j
@@ -702,8 +708,21 @@ public class IntentionalDepositService implements BaseService<IntentionalDeposit
         settingInfoData.put("topOffset", "0");
         settingData.put("${seal}", settingInfoData);
 
-        ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
-
+        
+        try {
+            ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData)
+            File tempPDF = WordToPdfUtil.word2Pdf(tempWord);
+            response.setContentType("text/html;charset=UTF-8");
+            response.setContentType("application/pdf");
+            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
+            OutputStream out = response.getOutputStream();
+            IoUtil.copy(FileUtil.getInputStream(tempPDF), out);
+            out.close();
+            tempWord.deleteOnExit();
+            tempPDF.deleteOnExit();
+        }catch (Exception e){
+            log.error("文档生成报错:", e);
+        }
 
     }
 

+ 37 - 2
pro-base/src/main/java/com/idea/customerManagement/service/RoomSelectionInfoService.java

@@ -1,5 +1,7 @@
 package com.idea.customerManagement.service;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -27,6 +29,7 @@ import com.idea.paymentManagement.model.PayLogExample;
 import com.idea.util.DateUtils;
 import com.idea.util.MoneyUtils;
 import com.idea.util.ReplaceWord;
+import com.idea.util.WordToPdfUtil;
 import com.rockstar.common.base.BaseService;
 import com.rockstar.common.domain.AjaxResult;
 import com.rockstar.frame.model.extend.DateTrans;
@@ -42,6 +45,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.URLEncoder;
 import java.util.*;
 
 @Slf4j
@@ -394,7 +400,23 @@ public class RoomSelectionInfoService implements BaseService<RoomSelectionInfo,
             data.put("${roomNumber}", roomResponse.getRoomNumber() == null ? "" : roomResponse.getRoomNumber());
             data.put("${roomChooseDate}", roomChooseDate);
             data.put("${username}", loginName);
-            ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
+
+            try {
+                File tempWord = ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
+                File tempPDF = WordToPdfUtil.word2Pdf(tempWord);
+                response.setContentType("text/html;charset=UTF-8");
+                response.setContentType("application/pdf");
+                response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
+                OutputStream out = response.getOutputStream();
+                IoUtil.copy(FileUtil.getInputStream(tempPDF), out);
+                out.close();
+                tempWord.deleteOnExit();
+                tempPDF.deleteOnExit();
+            }catch (Exception e){
+                log.error("文档生成报错:", e);
+            }
+            
+            
         }
 
 
@@ -502,8 +524,21 @@ public class RoomSelectionInfoService implements BaseService<RoomSelectionInfo,
         settingInfoData.put("topOffset", "0");
         settingData.put("${seal}", settingInfoData);
 
-        ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
 
+        try {
+            ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData)
+            File tempPDF = WordToPdfUtil.word2Pdf(tempWord);
+            response.setContentType("text/html;charset=UTF-8");
+            response.setContentType("application/pdf");
+            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
+            OutputStream out = response.getOutputStream();
+            IoUtil.copy(FileUtil.getInputStream(tempPDF), out);
+            out.close();
+            tempWord.deleteOnExit();
+            tempPDF.deleteOnExit();
+        }catch (Exception e){
+            log.error("文档生成报错:", e);
+        }
 
     }
 

+ 26 - 21
pro-base/src/main/java/com/idea/invoice/service/InvoiceManageService.java

@@ -173,29 +173,34 @@ public class InvoiceManageService implements BaseService<InvoiceManage, InvoiceM
         model.setCreateTime(new Date());
         model.setCreateUser(ShiroUtils.getUserId());
         model.setSendStatus("0");
-        int result = insertWithoutId(model);
-
-        // 预收款发票 新增后 推送用友
+        // 预收款发票 默认未结转
         if (model.getType().equals("1")) {
-            try {
-                String resultJson = sendInvoice(model);
-                JSONObject jsonObject = JSONObject.parseObject(resultJson);
-                String success = jsonObject.getString("success");
-                if ("true".equals(success)) {
-                    String code = jsonObject.getJSONObject("data").getJSONObject("ar_recbill").getString("code");
-                    model.setSendStatus("1");
-                    model.setSubmitTime(new Date());
-                    model.setSubmitUser(ShiroUtils.getUserId());
-                    model.setNcJson(resultJson);
-                    model.setNcCode(code);
-                    updateByPrimaryKeySelective(model);
-                } else if ("false".equals(success)) {
-                    throw new Exception(jsonObject.getString("message"));
-                }
-            } catch (Exception e) {
-                log.error("推送预收款发票失败", e);
-            }
+            model.setCarryOverStatus("1");
         }
+        int result = insertWithoutId(model);
+
+//        // 预收款发票 新增后 推送用友
+//        if (model.getType().equals("1")) {
+//            try {
+//                String resultJson = sendInvoice(model);
+//                JSONObject jsonObject = JSONObject.parseObject(resultJson);
+//                String success = jsonObject.getString("success");
+//                if ("true".equals(success)) {
+//                    String code = jsonObject.getJSONObject("data").getJSONObject("ar_recbill").getString("code");
+//                    model.setSendStatus("1");
+//                    model.setSubmitTime(new Date());
+//                    model.setSubmitUser(ShiroUtils.getUserId());
+//                    model.setNcJson(resultJson);
+//                    model.setNcCode(code);
+//                    updateByPrimaryKeySelective(model);
+//                } else if ("false".equals(success)) {
+////                    throw new Exception(jsonObject.getString("message"));
+//
+//                }
+//            } catch (Exception e) {
+//                log.error("推送预收款发票失败", e);
+//            }
+//        }
         return result;
     }
 

+ 28 - 6
pro-base/src/main/java/com/idea/invoice/service/ReceiptManageService.java

@@ -1,5 +1,7 @@
 package com.idea.invoice.service;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.IdUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -21,21 +23,28 @@ import com.idea.paymentManagement.service.PayLogService;
 import com.idea.util.DateUtils;
 import com.idea.util.MoneyUtils;
 import com.idea.util.ReplaceWord;
+import com.idea.util.WordToPdfUtil;
 import com.rockstar.common.base.BaseService;
 import com.rockstar.frame.model.extend.Tablepar;
 import com.rockstar.shiro.util.ShiroUtils;
 import com.rockstar.system.service.SysDictService;
 import com.rockstar.util.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.URLEncoder;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @Service
 public class ReceiptManageService implements BaseService<ReceiptManage, ReceiptManageExample> {
 
@@ -129,13 +138,13 @@ public class ReceiptManageService implements BaseService<ReceiptManage, ReceiptM
      * @param model
      * @return
      */
-    public int add(ReceiptManage model,String userId) {
+    public int add(ReceiptManage model, String userId) {
 
         if (model.getReceiptStatus() == null) {
             // 默认 已开
             model.setReceiptStatus(1);
         }
-        if(StringUtils.isEmpty(userId)){
+        if (StringUtils.isEmpty(userId)) {
             userId = ShiroUtils.getUserId();
         }
         model.setCreatedAt(new Date());
@@ -248,14 +257,14 @@ public class ReceiptManageService implements BaseService<ReceiptManage, ReceiptM
         settingInfoData = new HashMap<>();
         settingInfoData.put("leftOffset", "50");
         settingInfoData.put("topOffset", "0");
-        settingData.put("${seal}",settingInfoData);
+        settingData.put("${seal}", settingInfoData);
 
 
         // 已换票 已红冲
         if (receiptManage.getReceiptStatus() == 2 || receiptManage.getReceiptStatus() == 3) {
             filePath = "/home/project/settleDown/tem/receipt_huanpiao.docx";
             // 意向金收据 已换票的 用另一个模板
-            if(receiptManage.getReceiptType().equals("1")){
+            if (receiptManage.getReceiptType().equals("1")) {
                 filePath = "/home/project/settleDown/tem/receipt_huanpiao_yxj.docx";
             }
             sealData.put("${huanpiao}", sealPath2);
@@ -263,11 +272,24 @@ public class ReceiptManageService implements BaseService<ReceiptManage, ReceiptM
             settingInfoData = new HashMap<>();
             settingInfoData.put("leftOffset", "300");
             settingInfoData.put("topOffset", "0");
-            settingData.put("${huanpiao}",settingInfoData);
+            settingData.put("${huanpiao}", settingInfoData);
 
         }
 
-        ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
+        try {
+            File tempWord = ReplaceWord.operateWord(response, filePath, filePath, data, picData, sealData, settingData);
+            File tempPDF = WordToPdfUtil.word2Pdf(tempWord);
+            response.setContentType("text/html;charset=UTF-8");
+            response.setContentType("application/pdf");
+            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
+            OutputStream out = response.getOutputStream();
+            IoUtil.copy(FileUtil.getInputStream(tempPDF), out);
+            out.close();
+            tempWord.deleteOnExit();
+            tempPDF.deleteOnExit();
+        } catch (Exception e) {
+            log.error("文档生成报错:", e);
+        }
 
 
     }

+ 21 - 1
pro-base/src/main/java/com/idea/paymentManagement/service/PayLogService.java

@@ -1,6 +1,8 @@
 package com.idea.paymentManagement.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
@@ -42,6 +44,7 @@ import com.idea.transactionRecordManage.model.ConvertRecord;
 import com.idea.util.DateUtils;
 import com.idea.util.MoneyUtils;
 import com.idea.util.ReplaceWord;
+import com.idea.util.WordToPdfUtil;
 import com.rockstar.common.base.BaseService;
 import com.rockstar.common.domain.AjaxResult;
 import com.rockstar.frame.model.FrameUser;
@@ -58,7 +61,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.OutputStream;
 import java.math.BigDecimal;
+import java.net.URLEncoder;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -503,7 +509,21 @@ public class PayLogService implements BaseService<PayLog, PayLogExample> {
         settingInfoData.put("topOffset", "0");
         settingData.put("${seal}",settingInfoData);
 
-        ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData);
+
+        try {
+            ReplaceWord.operateWord(response, filePath, fileName, data, picData, sealData, settingData)
+            File tempPDF = WordToPdfUtil.word2Pdf(tempWord);
+            response.setContentType("text/html;charset=UTF-8");
+            response.setContentType("application/pdf");
+            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
+            OutputStream out = response.getOutputStream();
+            IoUtil.copy(FileUtil.getInputStream(tempPDF), out);
+            out.close();
+            tempWord.deleteOnExit();
+            tempPDF.deleteOnExit();
+        }catch (Exception e){
+            log.error("文档生成报错:", e);
+        }
 
 
     }

+ 17 - 5
pro-base/src/main/java/com/idea/util/ReplaceWord.java

@@ -6,6 +6,8 @@ import org.apache.poi.xwpf.usermodel.*;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObject;
 import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
@@ -23,6 +25,11 @@ import java.util.Map;
 @Slf4j
 public class ReplaceWord {
 
+
+//    @Autowired
+//    private WordToPdfUtil wordToPdfUtil;
+
+
     /***
      * @Description :替换段落文本
      * @param document docx解析对象
@@ -330,7 +337,7 @@ public class ReplaceWord {
         }
     }
 
-    public static void operateWord(HttpServletResponse response, String filePath, String fileName, Map<String, Object> data,
+    public static File operateWord(HttpServletResponse response, String filePath, String fileName, Map<String, Object> data,
                                    Map<String, Object> picData, Map<String, Object> sealData, Map<String, Object> settingData) {
         try {
             FileInputStream is = new FileInputStream(filePath);
@@ -351,12 +358,16 @@ public class ReplaceWord {
                 // 替换内容图片
                 ReplaceWord.changeSeal(document, sealData, settingData);
             }
-            response.setContentType("text/html;charset=UTF-8");
-            response.setContentType("application/msword");
-            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
-            BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
+//            response.setContentType("text/html;charset=UTF-8");
+//            response.setContentType("application/msword");
+//            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
+//            BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
+
+            File tempWord = File.createTempFile("myTempWord", ".docx");
+            FileOutputStream bos = new FileOutputStream(tempWord);
             document.write(bos);
             bos.close();
+            return tempWord;
         } catch (FileNotFoundException e) {
             log.error("文件不存在", e);
             e.printStackTrace();
@@ -364,6 +375,7 @@ public class ReplaceWord {
             e.printStackTrace();
             log.error("文件生成报错", e);
         }
+        return null;
     }
 
 

+ 74 - 0
pro-base/src/main/java/com/idea/util/WordToPdfUtil.java

@@ -0,0 +1,74 @@
+package com.idea.util;
+
+import com.aspose.words.*;
+import com.aspose.words.Document;
+import com.aspose.words.License;
+import com.aspose.words.SaveFormat;
+import com.rockstar.util.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.io.*;
+import java.nio.file.Files;
+
+/**
+ * word转PDF
+ */
+@Component
+@Slf4j
+public class WordToPdfUtil {
+
+    @Value("${pdfIsLinux}")
+    private static boolean isLinux;
+
+    @Value("${pdfIsLinux}")
+    public void setIsLinux(boolean flag) {
+        isLinux = flag;
+    }
+
+
+
+
+    public static boolean getLicense() {
+        boolean result = false;
+        try {
+            InputStream is = WordToPdfUtil.class.getClassLoader().getResourceAsStream("license.xml");
+            License aposeLic = new License();
+            aposeLic.setLicense(is);
+            result = true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+    public static File word2Pdf(File file) throws Exception {
+        log.info("进入PDF生成工具类");
+        if (!getLicense()) {          // 验证License 若不验证则转化出的pdf文档会有水印产生
+            System.out.println("非法------------");
+        }
+
+        //解决乱码
+        //如果是windows执行,不需要加这个
+        //TODO 如果是linux执行,需要添加这个*****
+        if (isLinux){
+            FontSettings.setFontsFolder("/usr/share/fonts",true);
+        }
+
+        File tempPDF = File.createTempFile("myTempPDF", ".docx");
+        FileOutputStream os = new FileOutputStream(tempPDF);
+
+        Document doc = new Document(Files.newInputStream(file.toPath()));                    //Address是将要被转化的word文档
+        doc.save(os, SaveFormat.PDF);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
+        log.info("word转PDF成功");
+        return tempPDF;
+    }
+
+
+
+}

BIN
pro-base/src/main/resources/lib/aspose-words-15.8.0-jdk16.jar


+ 13 - 0
pro-base/src/main/resources/license.xml

@@ -0,0 +1,13 @@
+<License>
+    <Data>
+        <Products>
+            <Product>Aspose.Total for Java</Product>
+            <Product>Aspose.Words for Java</Product>
+        </Products>
+        <EditionType>Enterprise</EditionType>
+        <SubscriptionExpiry>20991231</SubscriptionExpiry>
+        <LicenseExpiry>20991231</LicenseExpiry>
+        <SerialNumber>23dcc79f-44ec-4a23-be3a-03c1632404e9</SerialNumber>
+    </Data>
+    <Signature>0nRuwNEddXwLfXB7pw66G71MS93gW8mNzJ7vuh3Sf4VAEOBfpxtHLCotymv1PoeukxYe31K441Ivq0Pkvx1yZZG4O1KCv3Omdbs7uqzUB4xXHlOub4VsTODzDJ5MWHqlRCB1HHcGjlyT2sVGiovLt0Grvqw5+QXBuinoBY0suX0=</Signature>
+</License>

+ 2 - 2
pro-main/src/main/resources/application-test.yml

@@ -20,10 +20,10 @@ spring:
       cluster-nodes: 36.134.98.30:9300    # 测试es服务器
 
 server:
-  port: 9016
+  port: 9001
 
 serverUrl: https://www.idea-co-sf.com/settleDown/#/ssoLogin
 
 ssoKey: SbNj1F0oG6F5l07pV8n4Ag==
 
-
+pdfIsLinux: false