From 24c4b9dc96bcfd6a4096004d91816ac2e16a85a3 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 27 八月 2024 09:41:47 +0800
Subject: [PATCH] 2024-08-27 朱宝民 总账记录及明细账记录导出功能

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml                     |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java                     |   33 +++-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java                |   61 +++++--
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java     |   61 +++++++-
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java       |   65 +++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ReportExportCellWriteHandler.java |  173 ++++++++++++++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ExcelUtil.java                    |   22 +++
 7 files changed, 376 insertions(+), 41 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ExcelUtil.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ExcelUtil.java
new file mode 100644
index 0000000..6674095
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ExcelUtil.java
@@ -0,0 +1,22 @@
+package com.dy.pipIrrGlobal.excel;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-08-26 10:28
+ * @LastEditTime 2024-08-26 10:28
+ * @Description 璁剧疆excel涓嬭浇鍝嶅簲澶村睘鎬�
+ */
+public class ExcelUtil {
+    public static void setExcelRespProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
+        String fileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\\+", "%20");
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ReportExportCellWriteHandler.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ReportExportCellWriteHandler.java
new file mode 100644
index 0000000..8f3ede8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/excel/ReportExportCellWriteHandler.java
@@ -0,0 +1,173 @@
+package com.dy.pipIrrGlobal.excel;
+
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.AbstractVerticalCellStyleStrategy;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.DefaultIndexedColorMap;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFColor;
+import org.springframework.util.PropertyPlaceholderHelper;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Properties;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-08-26 14:18
+ * @LastEditTime 2024-08-26 14:18
+ * @Description
+ */
+
+public class ReportExportCellWriteHandler extends AbstractVerticalCellStyleStrategy  {
+    private String title;
+
+    PropertyPlaceholderHelper propertyPlaceholderHelper = new PropertyPlaceholderHelper("${", "}");
+
+    public ReportExportCellWriteHandler(String title) {
+        this.title = title;
+    }
+
+    // 鍔ㄦ�佸鍏ユ爣棰�
+    @Override
+    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
+                                 Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
+        if (head != null) {
+            List<String> headNameList = head.getHeadNameList();
+            if (CollectionUtils.isNotEmpty(headNameList)) {
+                Properties properties = new Properties();
+                properties.setProperty("title", title);
+                headNameList.replaceAll(value -> propertyPlaceholderHelper.replacePlaceholders(value, properties));
+            }
+        }
+    }
+
+    // 璁剧疆鏍囬鏍峰紡锛屽寘鍚瓧浣撱�佽儗鏅�
+    @Override
+    protected void setHeadCellStyle(CellWriteHandlerContext context) {
+        // 鑾峰彇鍜屽垱寤篊ellStyle
+        WriteCellData<?> cellData = context.getFirstCellData();
+        CellStyle originCellStyle = cellData.getOriginCellStyle();
+        Cell cell = context.getCell();
+
+        if (Objects.isNull(originCellStyle)) {
+            originCellStyle = context.getWriteWorkbookHolder().getWorkbook().createCellStyle();
+        }
+
+        ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 255), new DefaultIndexedColorMap()));
+
+        // 璁剧疆鎸囧畾鍒楄儗鏅壊
+        //if(cell.getColumnIndex() == 10
+        //) {
+        //    ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(237, 237, 237), new DefaultIndexedColorMap()));
+        //}
+
+        // 璁剧疆鑳屾櫙棰滆壊
+        originCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        // 鐢变簬鍦‵illStyleCellWriteHandler锛屼細鎶奜riginCellStyle鍜學riteCellStyle鍚堝苟锛屼細浠riteCellStyle鏍峰紡涓轰富锛屾墍鏈夊繀椤绘妸WriteCellStyle璁剧疆鐨勮儗鏅壊娓呯┖
+        // 鍏蜂綋鍚堝苟瑙勫垯鐪媁riteWorkbookHolder.createCellStyle鏂规硶
+        WriteCellStyle writeCellStyle = cellData.getWriteCellStyle();
+        writeCellStyle.setFillForegroundColor(null);
+        // 蹇呴』璁剧疆OriginCellStyle
+        cellData.setOriginCellStyle(originCellStyle);
+
+        WriteFont headWriteFont = new WriteFont();
+        if (cell.getRowIndex() == 0) {
+            headWriteFont.setFontHeightInPoints((short)14);
+            headWriteFont.setFontName("Arial");
+            headWriteFont.setBold(true);
+        }else if (cell.getRowIndex() == 1) {
+            headWriteFont.setFontHeightInPoints((short)12);
+            headWriteFont.setFontName("Arial");
+            headWriteFont.setBold(false);
+        }
+
+        cellData.getWriteCellStyle().setWriteFont(headWriteFont);
+    }
+
+    // 璁剧疆鍐呭鍏ず銆佸唴瀹瑰瓧浣撴牱寮忋�佽儗鏅牱寮�
+    @Override
+    protected void setContentCellStyle(CellWriteHandlerContext context) {
+
+        // 鑾峰彇鍜屽垱寤篊ellStyle
+        WriteCellData<?> cellData = context.getFirstCellData();
+        CellStyle originCellStyle = cellData.getOriginCellStyle();
+        Cell cell = context.getCell();
+
+        if (Objects.isNull(originCellStyle)) {
+            originCellStyle = context.getWriteWorkbookHolder().getWorkbook().createCellStyle();
+        }
+        // 璁剧疆鑳屾櫙棰滆壊
+        ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 192, 0), new DefaultIndexedColorMap()));
+        //System.out.println("Go to row: " +  context.getCell().getRowIndex() + ", column: " +  context.getCell().getColumnIndex());
+
+        if (cell.getRowIndex() >= 2){
+            ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(237, 237, 237), new DefaultIndexedColorMap()));
+            // 绁ㄩ潰鎬讳环
+            //if (cell.getColumnIndex() == 10){
+            //    int actualCellRowNum =  context.getCell().getRowIndex() + 1;
+            //    context.getCell().setCellFormula("I" + actualCellRowNum +"+J" + actualCellRowNum);
+            //    System.out.println("绗�" +   context.getCell().getRowIndex() + "琛�,绗�" +  context.getCell().getColumnIndex() + "绁ㄩ潰鎬讳环鍐欏叆鍏紡瀹屾垚");
+            //}else if (cell.getColumnIndex() == 12){
+            //    // 鏀粯绁ㄦ
+            //    int actualCellRowNum =  context.getCell().getRowIndex() + 1;
+            //    context.getCell().setCellFormula("K" + actualCellRowNum +"-L" + actualCellRowNum);
+            //    System.out.println("绗�" +   context.getCell().getRowIndex() + "琛�,绗�" +  context.getCell().getColumnIndex() + "鏀粯绁ㄦ鍐欏叆鍏紡瀹屾垚");
+            //}else if (cell.getColumnIndex() == 15){
+            //    // 鏀粯鎬婚
+            //    int actualCellRowNum =  context.getCell().getRowIndex() + 1;
+            //    context.getCell().setCellFormula("M" + actualCellRowNum +"+N" + actualCellRowNum +"+O" + actualCellRowNum);
+            //    System.out.println("绗�" +   context.getCell().getRowIndex() + "琛�,绗�" +  context.getCell().getColumnIndex() + "鏀粯鎬婚鍐欏叆鍏紡瀹屾垚");
+            //}else if (cell.getColumnIndex() == 17){
+            //    // 瀹為檯鍒╂鼎
+            //    int actualCellRowNum =  context.getCell().getRowIndex() + 1;
+            //    context.getCell().setCellFormula("L" + actualCellRowNum +"+Q" + actualCellRowNum);
+            //    System.out.println("绗�" +   context.getCell().getRowIndex() + "琛�,绗�" +  context.getCell().getColumnIndex() + "瀹為檯鍒╂鼎鍐欏叆鍏紡瀹屾垚");
+            //}else if (cell.getColumnIndex() == 18){
+            //    // 搴旀敹娆�
+            //    int actualCellRowNum =  context.getCell().getRowIndex() + 1;
+            //    context.getCell().setCellFormula("P" + actualCellRowNum +"+R" + actualCellRowNum);
+            //    System.out.println("绗�" +   context.getCell().getRowIndex() + "琛�,绗�" +  context.getCell().getColumnIndex() + "搴旀敹娆惧啓鍏ュ叕寮忓畬鎴�");
+            //}else if (cell.getColumnIndex() == 20){
+            //    // 鏈敹娆�
+            //    int actualCellRowNum =  context.getCell().getRowIndex() + 1;
+            //    context.getCell().setCellFormula("S" + actualCellRowNum +"-T" + actualCellRowNum);
+            //    System.out.println("绗�" +   context.getCell().getRowIndex() + "琛�,绗�" +  context.getCell().getColumnIndex() + "鏈敹娆惧啓鍏ュ叕寮忓畬鎴�");
+            //}else if (cell.getColumnIndex() >= 2){
+            //    ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(189, 215, 238), new DefaultIndexedColorMap()));
+            //}else if (cell.getColumnIndex() < 2){
+            //    ((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 192, 0), new DefaultIndexedColorMap()));
+            //}
+        }
+
+        originCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        originCellStyle.setBorderLeft(BorderStyle.THIN);                    //宸﹁竟妗嗙嚎
+        originCellStyle.setBorderTop(BorderStyle.THIN);                     //椤堕儴妗嗙嚎
+        originCellStyle.setBorderRight(BorderStyle.THIN);                   //鍙宠竟妗嗙嚎
+        originCellStyle.setBorderBottom(BorderStyle.THIN);                  //搴曢儴妗嗙嚎
+        // 鐢变簬鍦‵illStyleCellWriteHandler锛屼細鎶奜riginCellStyle鍜學riteCellStyle鍚堝苟锛屼細浠riteCellStyle鏍峰紡涓轰富锛屾墍鏈夊繀椤绘妸WriteCellStyle璁剧疆鐨勮儗鏅壊娓呯┖
+        // 鍏蜂綋鍚堝苟瑙勫垯鐪媁riteWorkbookHolder.createCellStyle鏂规硶
+        WriteCellStyle writeCellStyle = cellData.getWriteCellStyle();
+        writeCellStyle.setFillForegroundColor(null);
+        writeCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        writeCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        // 蹇呴』璁剧疆OriginCellStyle
+        cellData.setOriginCellStyle(originCellStyle);
+
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontHeightInPoints((short)12);
+        headWriteFont.setFontName("瀹嬩綋");
+        headWriteFont.setBold(false);
+        headWriteFont.setColor(IndexedColors.BLACK.getIndex());
+
+        cellData.getWriteCellStyle().setWriteFont(headWriteFont);
+    }
+}
+
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
index 49ef7bb..264803d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
@@ -1,5 +1,10 @@
 package com.dy.pipIrrGlobal.voSe;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import com.alibaba.fastjson2.annotation.JSONField;
 import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
 import com.dy.common.po.BaseEntity;
@@ -16,40 +21,50 @@
 
 @Data
 @JsonPropertyOrder({ "generalId", "cashierId", "cashierName", "tradeAmount", "gift", "refundAmount", "totalAmount", "operateDate", "auditStatus"})
-@Schema(title = "璐㈠姟瀵硅处涔嬫�昏处瑙嗗浘瀵硅薄")
+@HeadRowHeight(30)
+@ContentRowHeight(20)
 public class VoGeneral implements BaseEntity {
     private static final long serialVersionUID = 202401241706001L;
 
     @Schema(title = "鎬昏处ID")
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @ExcelIgnore
     private Long generalId;
 
     @Schema(title = "鏀堕摱鍛業D")
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @ExcelIgnore
     private Long cashierId;
 
-    @Schema(title = "鏀堕摱鍛樺鍚�")
+    @ExcelProperty(value = {"${title}", "鏀堕摱鍛樺鍚�"})
+    @ColumnWidth(18)
     private String cashierName;
 
-    @Schema(title = "瀹炴敹閲戦")
+    @ExcelProperty(value = {"${title}", "瀹炴敹閲戦"})
+    @ColumnWidth(15)
     private Float tradeAmount;
 
-    @Schema(title = "璧犻�侀噾棰�")
+    @ExcelProperty(value = {"${title}", "璧犻�侀噾棰�"})
+    @ColumnWidth(15)
     private Float gift;
 
-    @Schema(title = "杩旇繕閲戦")
+    @ExcelProperty(value = {"${title}", "杩旇繕閲戦"})
+    @ColumnWidth(15)
     private Float refundAmount;
 
     /**
-     * 鎬婚 = 瀹炴敹閲戦 + 璧犻�侀噾棰� + 杩旇繕閲戦
+     * 鎬婚 = 瀹炴敹閲戦 + 璧犻�侀噾棰� - 杩旇繕閲戦
      */
-    @Schema(title = "鎬婚")
+    @ExcelProperty(value = {"${title}", "鎬婚"})
+    @ColumnWidth(10)
     private Float totalAmount;
 
-    @Schema(title = "浜ゆ槗鏃ユ湡")
+    @ExcelProperty(value = {"${title}", "浜ゆ槗鏃ユ湡"})
+    @ColumnWidth(15)
     private String operateDate;
 
-    @Schema(title = "瀹℃牳鐘舵��")
+    @ExcelProperty(value = {"${title}", "瀹℃牳鐘舵��"})
+    @ColumnWidth(15)
     private String auditStatus;
 
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java
index 3caef8d..559f77e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java
@@ -1,7 +1,12 @@
 package com.dy.pipIrrGlobal.voSe;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import com.dy.common.po.BaseEntity;
-import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -16,51 +21,67 @@
  */
 
 @Data
-@Schema(title = "璐㈠姟瀵硅处锛屼氦鏄撴槑缁嗚鍥惧璞�")
+@JsonPropertyOrder({ "cashierId", "villageId", "clientNum", "districtTitle", "clientName", "phone", "operateType", "tradeAmount", "waterCost", "cardCost", "gift", "refundAmount", "paymentName", "tradeTime"})
+@HeadRowHeight(30)
+@ContentRowHeight(20)
 public class VoTradeDetails implements BaseEntity {
     private static final long serialVersionUID = 202402012040001L;
 
     @Schema(title = "鏀堕摱鍛業D")
+    @ExcelIgnore
     private String cashierId;
 
-    @Schema(title = "鍖哄垝鍚嶇О涓�")
-    private String districtTitle;
-
     @Schema(title = "鏉戝簞ID")
+    @ExcelIgnore
     private String villageId;
 
-    @Schema(title = "鍐滄埛濮撳悕")
-    private String clientName;
-
-    @Schema(title = "鑱旂郴鐢佃瘽")
-    private String phone;
-
     @Schema(title = "鍐滄埛缂栧彿")
+    @ExcelIgnore
     private String clientNum;
 
-    @Schema(title = "涓氬姟绫诲瀷")
+    @ExcelProperty(value = {"${title}", "鏉戝簞鍚嶇О"})
+    @ColumnWidth(20)
+    private String districtTitle;
+
+    @ExcelProperty(value = {"${title}", "鍐滄埛濮撳悕"})
+    @ColumnWidth(15)
+    private String clientName;
+
+    @ExcelProperty(value = {"${title}", "鑱旂郴鐢佃瘽"})
+    @ColumnWidth(15)
+    private String phone;
+
+    @ExcelProperty(value = {"${title}", "涓氬姟绫诲瀷"})
+    @ColumnWidth(15)
     private String operateType;
 
-    @Schema(title = "浜ゆ槗閲戦")
+    @ExcelProperty(value = {"${title}", "浜ゆ槗閲戦"})
+    @ColumnWidth(15)
     private Double tradeAmount;
 
-    @Schema(title = "璐按閲戦")
+    @ExcelProperty(value = {"${title}", "璐按閲戦"})
+    @ColumnWidth(15)
     private Double waterCost;
 
-    @Schema(title = "璐崱閲戦")
+    @ExcelProperty(value = {"${title}", "璐崱閲戦"})
+    @ColumnWidth(15)
     private Double cardCost;
 
-    @Schema(title = "璧犻�侀噾棰�")
+    @ExcelProperty(value = {"${title}", "璧犻�侀噾棰�"})
+    @ColumnWidth(15)
     private Double gift;
 
-    @Schema(title = "杩斿洖閲戦")
+    @ExcelProperty(value = {"${title}", "杩旇繕閲戦"})
+    @ColumnWidth(15)
     private Double refundAmount;
 
-    @Schema(title = "浠樻鏂瑰紡")
+    @ExcelProperty(value = {"${title}", "浠樻鏂瑰紡"})
+    @ColumnWidth(15)
     private String paymentName;
 
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @Schema(title = "浜ゆ槗鏃堕棿")
+    @ExcelProperty(value = {"${title}", "浜ゆ槗鏃堕棿"})
+    @ColumnWidth(20)
     private Date tradeTime;
+
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
index 0a4eb71..9e7786d 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -3,7 +3,7 @@
     datasource: #閰嶇疆鏁版嵁婧�
         type: com.alibaba.druid.pool.DruidDataSource
         driver-class-name: com.mysql.cj.jdbc.Driver
-        #url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
+#        url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
         #url: jdbc:mysql://8.130.130.233:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
         #url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
         url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
index f8f3b8b..94fdf5c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
@@ -1,14 +1,18 @@
 package com.dy.pipIrrSell.general;
 
+import com.alibaba.excel.EasyExcel;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.excel.ExcelUtil;
+import com.dy.pipIrrGlobal.excel.ReportExportCellWriteHandler;
 import com.dy.pipIrrGlobal.pojoBa.BaClient;
 import com.dy.pipIrrGlobal.pojoSe.SeAudits;
 import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
 import com.dy.pipIrrGlobal.voSe.VoGeneral;
+import com.dy.pipIrrGlobal.voSe.VoTradeDetails;
 import com.dy.pipIrrSell.general.dto.DtoGeneral;
 import com.dy.pipIrrSell.general.qo.QoGeneral;
 import com.dy.pipIrrSell.general.qo.QoSummary;
@@ -20,14 +24,18 @@
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
+import java.time.LocalDate;
 import java.util.*;
 
 /**
@@ -66,15 +74,27 @@
         try {
             add_general();
             QueryResultVo<List<VoGeneral>> res = generalSv.getGenerals(vo);
-            if(res.itemTotal > 0) {
-                return BaseResponseUtils.buildSuccess(res);
-            }else {
-                return BaseResponseUtils.buildSuccess(SellResultCode.No_GENERALS.getMessage());
-            }
+            return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
+    }
+
+    /**
+     * 瀵煎嚭鎬昏处璁板綍
+     * @param response
+     * @param vo
+     */
+    @SneakyThrows(IOException.class)
+    @RequestMapping(value = "/export_general", method = RequestMethod.GET)
+    public void exportGeneral(HttpServletResponse response, QoGeneral vo) {
+        ExcelUtil.setExcelRespProp(response, "鎬昏处" + LocalDate.now());
+        List<VoGeneral> generalList = generalSv.exportGenerals(vo).getObj();
+        EasyExcel.write(response.getOutputStream(), VoGeneral.class)
+                .registerWriteHandler(new ReportExportCellWriteHandler("璐㈠姟瀵硅处-鎬昏处"))
+                .sheet("鎬昏处")
+                .doWrite(generalList);
     }
 
     /**
@@ -218,15 +238,34 @@
     @SsoAop()
     public BaseResponse<Map> getTradeDetails(QoToAudit vo){
         try {
-            Map res = Optional.ofNullable(generalSv.getTradeDetails(vo)).orElse(new HashMap());
-            if(res.size() > 0) {
-                return BaseResponseUtils.buildSuccess(res);
-            }else {
-                return BaseResponseUtils.buildFail(SellResultCode.No_TRADE_DETAILS.getMessage());
-            }
+            return BaseResponseUtils.buildSuccess(generalSv.getTradeDetails(vo));
         } catch (Exception e) {
             log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
+
+    /**
+     * 瀵煎嚭璐㈠姟瀵硅处_浜ゆ槗鏄庣粏
+     * @param response
+     * @param vo
+     */
+    @SneakyThrows(IOException.class)
+    @RequestMapping(value = "/export_trade_details", method = RequestMethod.GET)
+    public void exportTradeDetails(HttpServletResponse response, QoToAudit vo) {
+        ExcelUtil.setExcelRespProp(response, "浜ゆ槗鏄庣粏" + LocalDate.now());
+
+        Map map_result = generalSv.exportTradeDetails(vo);
+        Map map_record = (Map) map_result.get("records");
+        List<VoTradeDetails> list = (List<VoTradeDetails>) map_record.get("list");
+        Double totalTradeAmount = Double.parseDouble(map_result.get("totalTradeAmount").toString());
+        VoTradeDetails po = new VoTradeDetails();
+        po.setTradeAmount(totalTradeAmount);
+        list.add(po);
+
+        EasyExcel.write(response.getOutputStream(), VoTradeDetails.class)
+                .registerWriteHandler(new ReportExportCellWriteHandler("璐㈠姟瀵硅处-浜ゆ槗鏄庣粏"))
+                .sheet("浜ゆ槗鏄庣粏")
+                .doWrite(list);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
index 7c6804d..49c1cce 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
@@ -88,8 +88,25 @@
         rsVo.pageSize = queryVo.pageSize ;
         rsVo.pageCurr = queryVo.pageCurr ;
 
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = seGeneralMapper.getGenerals(params);
+        return rsVo ;
+    }
+
+    /**
+     * 瀵煎嚭鎸囧畾鏉′欢鐨勬�昏处璁板綍
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoGeneral>> exportGenerals(QoGeneral queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seGeneralMapper.getRecordCount(params);
+        QueryResultVo<List<VoGeneral>> rsVo = new QueryResultVo<>() ;
 
         rsVo.calculateAndSet(itemTotal, params);
+        params.remove("start");
+        params.remove("count");
         rsVo.obj = seGeneralMapper.getGenerals(params);
         return rsVo ;
     }
@@ -279,4 +296,52 @@
         return map_result;
 
     }
+
+    /**
+     * 瀵煎嚭浜ゆ槗鏄庣粏璁板綍
+     * @param queryVo
+     * @return
+     */
+    public Map exportTradeDetails(QoToAudit queryVo) {
+        DecimalFormat df = new DecimalFormat("0.00");
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        Long itemTotal = seGeneralMapper.getTradeDetailsRecordCount(params);
+
+        QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        params.remove("start");
+        params.remove("count");
+        List<VoTradeDetails> list = Optional.ofNullable(seGeneralMapper.getTradeDetails(params)).orElse(new ArrayList<>());
+        if(list.size() == 0) {
+            return new HashMap();
+        }
+
+        // 閬嶅巻浜ゆ槗鏄庣粏璁板綍锛屾眹鎬讳氦鏄撻噾棰�
+        Double totalTradeAmount = 0.0;
+        JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
+        for(int i = 0; i < array.size(); i++) {
+            JSONObject job = array.getJSONObject(i);
+            Double tradeAmount = Optional.ofNullable(job.getDouble("tradeAmount")).orElse(0.0);
+            totalTradeAmount = totalTradeAmount + tradeAmount;
+        }
+
+        Map map_record = new HashMap();
+        map_record.put("itemTotal", rsVo.itemTotal);
+        map_record.put("pageCurr", rsVo.pageCurr);
+        map_record.put("pageSize", rsVo.pageSize);
+        map_record.put("pageTotal", rsVo.pageTotal);
+        map_record.put("list", list);
+
+        Map map_result = new HashMap();
+
+        map_result.put("totalTradeAmount", df.format(totalTradeAmount));
+        map_result.put("records", map_record);
+
+        return map_result;
+
+    }
 }

--
Gitblit v1.8.0