Browse Source

导出Wrod开发

anderx 3 years ago
parent
commit
fe04a0b2b5

+ 9 - 0
pom.xml

@@ -401,6 +401,15 @@
 			<version>1.9</version>
 			<type>pom</type>
 		</dependency>
+		<!--word文档操作-->
+		<dependency>
+			<groupId>com.sushengren</groupId>
+			<artifactId>easyword</artifactId>
+			<version>1.1.5</version>
+		</dependency>
+
+
+
 
 	</dependencies>
 	<build>

+ 245 - 0
src/main/java/com/goafanti/RD/bo/OutWordRdDetails.java

@@ -0,0 +1,245 @@
+package com.goafanti.RD.bo;
+
+import com.goafanti.common.utils.excel.Excel;
+import com.sushengren.easyword.annotation.WordProperty;
+import groovy.transform.builder.Builder;
+
+import java.math.BigDecimal;
+
+@Builder
+public class OutWordRdDetails {
+
+
+
+    /**
+     * 公司名称
+     */
+    @WordProperty("公司名称")
+    private String userName;
+
+    /**
+     * 研发活动编号
+     */
+    @WordProperty("研发活动编号")
+    private String rdNo;
+
+    /**
+     * 知识产权编号
+     */
+    @WordProperty("知识产权编号")
+    private String ipNo;
+
+    /**
+     * 发研活动名称
+     */
+    @WordProperty("研发活动名称")
+    private String rdName;
+
+
+
+    private String  rdStartStr;
+
+
+    private String  rdEndStr;
+
+    @WordProperty("项目起止时间")
+    private String startEndTime;
+
+
+    /**
+     * 技术领域
+     */
+    @WordProperty("技术领域")
+    private String technicalField;
+
+    /**
+     * 技术来源
+     */
+    @WordProperty("技术来源")
+    private String technologySource;
+
+    /**
+     * 研发经费总预算(万元)
+     */
+    @WordProperty("研发经费总预算(万元)")
+    private BigDecimal totalAmount;
+
+    /**
+     * 研发经费近三年总支出(万元)
+     */
+    @WordProperty("研发经费近三年总支出(万元)")
+    private BigDecimal recentThreeAmount;
+
+    /**
+     * 研发目的及组织实施方式
+     */
+    @WordProperty("研发目的及组织实施方式")
+    private String rdObjective;
+
+    /**
+     * 核心技术及创新点
+     */
+    @WordProperty("核心技术及创新点")
+    private String coreTechnology;
+
+    /**
+     * 取得的创段性成果
+     */
+    @WordProperty("取得的创段性成果")
+    private String achieveResults;
+
+
+    /**
+     * 咨询师名称
+     */
+    @WordProperty("负责人")
+    private String consultantName;
+
+
+    public String getStartEndTime() {
+        return startEndTime;
+    }
+
+    public void setStartEndTime(String startEndTime) {
+        this.startEndTime = startEndTime;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+
+    public String getRdNo() {
+        return rdNo;
+    }
+
+
+    public void setRdNo(String rdNo) {
+        this.rdNo = rdNo;
+    }
+
+
+    public String getIpNo() {
+        return ipNo;
+    }
+
+
+    public void setIpNo(String ipNo) {
+        this.ipNo = ipNo;
+    }
+
+
+    public String getRdName() {
+        return rdName;
+    }
+
+
+    public void setRdName(String rdName) {
+        this.rdName = rdName;
+    }
+
+
+    public String getRdStartStr() {
+        return rdStartStr;
+    }
+
+
+    public void setRdStartStr(String rdStartStr) {
+        this.rdStartStr = rdStartStr;
+    }
+
+
+    public String getRdEndStr() {
+        return rdEndStr;
+    }
+
+
+    public void setRdEndStr(String rdEndStr) {
+        this.rdEndStr = rdEndStr;
+    }
+
+
+    public String getTechnicalField() {
+        return technicalField;
+    }
+
+
+    public void setTechnicalField(String technicalField) {
+        this.technicalField = technicalField;
+    }
+
+
+    public String getTechnologySource() {
+        return technologySource;
+    }
+
+
+    public void setTechnologySource(String technologySource) {
+        this.technologySource = technologySource;
+    }
+
+
+    public BigDecimal getTotalAmount() {
+        return totalAmount;
+    }
+
+
+    public void setTotalAmount(BigDecimal totalAmount) {
+        this.totalAmount = totalAmount;
+    }
+
+
+    public BigDecimal getRecentThreeAmount() {
+        return recentThreeAmount;
+    }
+
+
+    public void setRecentThreeAmount(BigDecimal recentThreeAmount) {
+        this.recentThreeAmount = recentThreeAmount;
+    }
+
+
+    public String getRdObjective() {
+        return rdObjective;
+    }
+
+
+    public void setRdObjective(String rdObjective) {
+        this.rdObjective = rdObjective;
+    }
+
+
+    public String getCoreTechnology() {
+        return coreTechnology;
+    }
+
+
+    public void setCoreTechnology(String coreTechnology) {
+        this.coreTechnology = coreTechnology;
+    }
+
+
+    public String getAchieveResults() {
+        return achieveResults;
+    }
+
+
+    public void setAchieveResults(String achieveResults) {
+        this.achieveResults = achieveResults;
+    }
+
+
+    public String getConsultantName() {
+        return consultantName;
+    }
+
+
+    public void setConsultantName(String consultantName) {
+        this.consultantName = consultantName;
+    }
+}

+ 4 - 0
src/main/java/com/goafanti/RD/controller/RDContorller.java

@@ -168,6 +168,10 @@ public class RDContorller extends BaseApiController {
         }
     }
 
+    @RequestMapping(value = "/detailsOUtWord",method = RequestMethod.GET)
+    public void detailsOUtWord(Long id,HttpServletResponse response){
+        rdService.detailsOUtWord(id,response);
+    }
 
 
 

+ 5 - 0
src/main/java/com/goafanti/RD/service/RDService.java

@@ -7,6 +7,8 @@ import com.goafanti.common.bo.Result;
 import com.goafanti.common.model.RdDetails;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+
 public interface RDService {
     int add(RdDetails in);
 
@@ -37,4 +39,7 @@ public interface RDService {
      * @return
      */
     int updateBrowseOrDownload(Long id, Integer type);
+
+    void detailsOUtWord(Long id, HttpServletResponse response);
+
 }

+ 27 - 4
src/main/java/com/goafanti/RD/service/impl/RDServiceImpl.java

@@ -1,9 +1,6 @@
 package com.goafanti.RD.service.impl;
 
-import com.goafanti.RD.bo.InputExcelRdDetails;
-import com.goafanti.RD.bo.InputRdDetails;
-import com.goafanti.RD.bo.InputRdList;
-import com.goafanti.RD.bo.OutRdDetails;
+import com.goafanti.RD.bo.*;
 import com.goafanti.RD.service.RDService;
 import com.goafanti.common.bo.Error;
 import com.goafanti.common.bo.Result;
@@ -14,20 +11,26 @@ import com.goafanti.common.enums.NoticeTypes;
 import com.goafanti.common.error.BusinessException;
 import com.goafanti.common.model.Admin;
 import com.goafanti.common.model.RdDetails;
+import com.goafanti.common.utils.Base64Utils;
 import com.goafanti.common.utils.DateUtils;
 import com.goafanti.common.utils.ExcelUtils;
 import com.goafanti.common.utils.StringUtils;
 import com.goafanti.common.utils.excel.NewExcelUtil;
+import com.goafanti.common.utils.word.WordUtils;
 import com.goafanti.core.mybatis.BaseMybatisDao;
 import com.goafanti.core.mybatis.page.Pagination;
 import com.goafanti.core.shiro.token.TokenManager;
 import com.goafanti.order.bo.TemporaryReceivablesBo;
+import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;
 import org.apache.poi.ss.usermodel.*;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
 
@@ -37,6 +40,9 @@ public class RDServiceImpl extends BaseMybatisDao<RdDetailsMapper> implements RD
     private RdDetailsMapper rdDetailsMapper;
 
 
+    @Value(value = "${upload.path}")
+    private final String	uploadPath			= null;
+
 
 
 
@@ -57,6 +63,8 @@ public class RDServiceImpl extends BaseMybatisDao<RdDetailsMapper> implements RD
         return rdDetailsMapper.updateBrowseOrDownload(id,type);
     }
 
+
+
     @Override
     public boolean checkRdNo(String rdNo, Long id) {
         int i = rdDetailsMapper.checkRdNo(rdNo,id);
@@ -144,4 +152,19 @@ public class RDServiceImpl extends BaseMybatisDao<RdDetailsMapper> implements RD
             }
         }
     }
+
+
+    @Override
+    public void detailsOUtWord(Long id, HttpServletResponse response) {
+        OutRdDetails bo = rdDetailsMapper.details(id);
+        OutWordRdDetails data =new OutWordRdDetails();
+        BeanUtils.copyProperties(bo,data);
+        data.setStartEndTime(bo.getRdStartStr()+"~"+bo.getRdEndStr());
+        WordUtils wordUtils=new WordUtils();
+        try {
+            wordUtils.download(response,data.getRdName(),data,uploadPath);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 1 - 0
src/main/java/com/goafanti/common/utils/excel/FileUtils.java

@@ -207,6 +207,7 @@ public class FileUtils extends org.apache.commons.io.FileUtils
      *
      * @param response 响应对象
      * @param realFileName 真实文件名
+     * @param attName 导出后文件名
      * @return
      */
     public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName,String attName) throws UnsupportedEncodingException

+ 68 - 0
src/main/java/com/goafanti/common/utils/word/WordUtils.java

@@ -0,0 +1,68 @@
+package com.goafanti.common.utils.word;
+
+import com.alibaba.fastjson.JSON;
+import com.goafanti.common.constant.AFTConstants;
+import com.goafanti.common.utils.DateUtils;
+import com.goafanti.common.utils.StringUtils;
+import com.goafanti.common.utils.excel.FileUtils;
+
+
+import com.google.code.appengine.awt.Color;
+import com.lowagie.text.pdf.BaseFont;
+import com.sushengren.easyword.EasyWord;
+import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter;
+import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;
+import fr.opensagres.xdocreport.itext.extension.font.IFontProvider;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.http.MediaType;
+
+
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class WordUtils {
+
+
+    /**
+     * 导出word文件
+     */
+    public void download(HttpServletResponse response, String tableName, Object data,String uploadPath) throws IOException {
+
+        if(StringUtils.isEmpty(tableName) ){
+            return;
+        }
+
+        try {
+            String realFileName = tableName+DateUtils.parseDateToStr(AFTConstants.YYYYMMDDHHMMSS, new Date())+".docx";
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, tableName,realFileName);
+            String url=uploadPath+"/tmp/RD_details_word_template.docx";
+            //获取resources下目中录模板文件
+//            File file = new ClassPathResource(url).getFile();
+            File file=new File(url);
+            //以流的形式 获取resources下目中录模板文件
+//            InputStream file = new ClassPathResource(url).getInputStream();
+            EasyWord.Builder of = EasyWord.of(file);
+            of.doWrite(data);
+            of.toOutputStream(response.getOutputStream());
+        } catch (Exception e) {
+            // 重置response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+            Map<String, String> map = new HashMap<>();
+            map.put("status", "failure");
+            map.put("message", "下载文件失败" + e.getMessage());
+            response.getWriter().println(JSON.toJSONString(map));
+        }
+    }
+
+}