Procházet zdrojové kódy

处理出运明细导出数值格式问题

zengtx před 2 roky
rodič
revize
2170da0e3c

+ 38 - 18
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/controller/SyShippingDetailsController.java

@@ -1,13 +1,11 @@
 package org.jeecg.modules.documents.shippingDetails.controller;
 
-import java.io.File;
+import java.io.*;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
@@ -15,12 +13,17 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 //import org.apache.shiro.SecurityUtils;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
@@ -1536,7 +1539,7 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 				 result.setMessage("没有获取到数据,导出失败!");
 				 return result;
 			 }
-			 org.jeecgframework.poi.excel.entity.TemplateExportParams params = new org.jeecgframework.poi.excel.entity.TemplateExportParams("D:\\单证模板\\出运明细列表.xlsx");
+			 //org.jeecgframework.poi.excel.entity.TemplateExportParams params = new org.jeecgframework.poi.excel.entity.TemplateExportParams("D:\\单证模板\\出运明细列表.xlsx");
 
 			 //集合转map
 			 for (SyShippingDetailsVo li : pageList.getRecords()) {
@@ -1556,30 +1559,47 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 				 }
 
 			 	li.setPreDeliveryDate1(sf.format(li.getPreDeliveryDate()));
-				 orderQuantity = orderQuantity.add(li.getOrderQuantity());
+				 orderQuantity = orderQuantity.add(new BigDecimal(li.getShipmentQuantity()));
 				 BigDecimal p = new BigDecimal(li.getSalesUnitPrice()).multiply(li.getOrderQuantity());
-				 li.setPrice(p.setScale(4,BigDecimal.ROUND_DOWN));
+				 li.setPrice(p.setScale(4,BigDecimal.ROUND_DOWN).doubleValue());
 				 price = price.add(p);
 
-				 Field[] fieldsList = li.getClass().getDeclaredFields();
-				 Map<String, Object> mapList = new HashMap<String, Object>();
-				 for (Field field : fieldsList) {
-					 field.setAccessible(true);
-					 mapList.put(field.getName(), field.get(li));
-				 }
-				 listMap.add(mapList);
+//				 Field[] fieldsList = li.getClass().getDeclaredFields();
+//				 Map<String, Object> mapList = new HashMap<String, Object>();
+//				 for (Field field : fieldsList) {
+//					 field.setAccessible(true);
+//					 mapList.put(field.getName(), field.get(li));
+//				 }
+//				 listMap.add(mapList);
 			 }
 			 map.put("orderQuantity",orderQuantity);
 			 map.put("price",price.setScale(4,BigDecimal.ROUND_DOWN));
-			 map.put("item", listMap);
+			// map.put("item", listMap);
 
 			 //sheet.createFreezePane(0, 1, 0, 1);
-			 Workbook workbook = ExcelExportUtil.exportExcel(params, map);
-			 req.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
-			 req.setCharacterEncoding("utf-8");
+			 //获取模板输入流
+			 InputStream inStream = new FileInputStream("D:\\单证模板\\出运明细列表.xlsx");
+			 //通过poi创建表对象
+			 XSSFWorkbook workbook = new XSSFWorkbook(inStream);
+			 //遍历复制sheet
+			 ByteArrayOutputStream bos = new ByteArrayOutputStream();
+			 //写到流
+			 workbook.write(bos);
 			 ServletOutputStream outputStream = req.getOutputStream();
+			 ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());
+			 ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(is).build();
+
+			 //填充配置, 这里的意义是给模板中的集合数据添加新行, 保证导出不会错乱
+			 FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
+
+			 WriteSheet writeSheet1 = EasyExcel.writerSheet("出运明细列表").build();
+			 excelWriter.fill(map, fillConfig, writeSheet1);
+			 excelWriter.fill(pageList.getRecords(), fillConfig, writeSheet1);
+
 
-			 workbook.write(outputStream);
+			 //关流
+			 excelWriter.finish();
+			 inStream.close();
 
 		 }catch (Exception ex){
 			 ex.printStackTrace();

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/entity/VO/SyShippingDetailsVo.java

@@ -94,7 +94,7 @@ public class SyShippingDetailsVo {
     /**发货数量*/
     @Excel(name = "发货数量", width = 15)
     @ApiModelProperty(value = "发货数量")
-    private java.math.BigDecimal shipmentQuantity;
+    private Double shipmentQuantity;
 
     /**报关单价*/
     @Excel(name = "报关单价", width = 15)
@@ -331,7 +331,7 @@ public class SyShippingDetailsVo {
     //单位
     private String masterMetering;
     //金额
-    private BigDecimal price;
+    private double price;
 
     //季节
     private String season;