From 8bcbb0b65dbb0a59f4c588be624912410fc1fcc9 Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期五, 23 五月 2025 13:12:17 +0800
Subject: [PATCH] [焊缝统计表V2] add:导出功能

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/IApsWeldSeamStatisticsV2Service.java         |    7 ++
 aps-modules/aps-core/src/main/resources/bootstrap-int.yml                                                     |    3 
 aps-common/aps-common-core/src/main/java/com/aps/common/core/utils/poi/ExcelUtil.java                         |    2 
 aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/impl/ApsWeldSeamStatisticsV2ServiceImpl.java |  141 ++++++++++++++++++++++++++++++++++++++++++++++-
 aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamStatisticsV2Controller.java    |    8 +-
 5 files changed, 150 insertions(+), 11 deletions(-)

diff --git a/aps-common/aps-common-core/src/main/java/com/aps/common/core/utils/poi/ExcelUtil.java b/aps-common/aps-common-core/src/main/java/com/aps/common/core/utils/poi/ExcelUtil.java
index 7a3a3c9..6f62c0a 100644
--- a/aps-common/aps-common-core/src/main/java/com/aps/common/core/utils/poi/ExcelUtil.java
+++ b/aps-common/aps-common-core/src/main/java/com/aps/common/core/utils/poi/ExcelUtil.java
@@ -1316,7 +1316,7 @@
     /**
      * 寰楀埌鎵�鏈夊畾涔夊瓧娈�
      */
-    private void createExcelField()
+    public void createExcelField()
     {
         this.fields = getFields();
         this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList());
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamStatisticsV2Controller.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamStatisticsV2Controller.java
index 597c4d9..001df24 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamStatisticsV2Controller.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamStatisticsV2Controller.java
@@ -14,6 +14,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -48,11 +49,8 @@
     @RequiresPermissions("weldSeamStatistics:weldSeamStatisticsV2:export")
     @Log(title = "鐒婄紳缁熻琛╒2", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2)
-    {
-        List<ApsWeldSeamStatisticsV2> list = apsWeldSeamStatisticsV2Service.selectApsWeldSeamStatisticsV2List(apsWeldSeamStatisticsV2);
-        ExcelUtil<ApsWeldSeamStatisticsV2> util = new ExcelUtil<ApsWeldSeamStatisticsV2>(ApsWeldSeamStatisticsV2.class);
-        util.exportExcel(response, list, "鐒婄紳缁熻琛╒2鏁版嵁");
+    public void export(HttpServletResponse response, ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2) throws IOException {
+        apsWeldSeamStatisticsV2Service.exportWeldSeamStatistics(response);
     }
 
     /**
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/IApsWeldSeamStatisticsV2Service.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/IApsWeldSeamStatisticsV2Service.java
index e34d5bf..caaabdd 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/IApsWeldSeamStatisticsV2Service.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/IApsWeldSeamStatisticsV2Service.java
@@ -1,6 +1,9 @@
 package com.aps.core.service.mainPlan;
 
 import com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -32,4 +35,6 @@
      * @return 鍙楀奖鍝嶇殑璁板綍鏁�
      */
     public int refreshWeldSeamStatistics(String username);
-} 
\ No newline at end of file
+
+    void exportWeldSeamStatistics(HttpServletResponse response) throws IOException;
+}
\ No newline at end of file
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/impl/ApsWeldSeamStatisticsV2ServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/impl/ApsWeldSeamStatisticsV2ServiceImpl.java
index 77fd6f8..32599c0 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/impl/ApsWeldSeamStatisticsV2ServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/impl/ApsWeldSeamStatisticsV2ServiceImpl.java
@@ -1,22 +1,36 @@
 package com.aps.core.service.mainPlan.impl;
 
+import com.aps.common.core.annotation.Excel;
 import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.poi.ExcelUtil;
 import com.aps.common.core.utils.uuid.IdUtils;
 import com.aps.common.core.web.page.TableDataInfo;
+import com.aps.common.security.utils.DictUtils;
 import com.aps.common.security.utils.SecurityUtils;
 import com.aps.core.controller.basicData.ApsGasPipelineCapacityPlanController;
 import com.aps.core.domain.ApsGasPipelineCapacityPlan;
 import com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2;
 import com.aps.core.mapper.mainPlan.ApsWeldSeamStatisticsV2Mapper;
-import com.aps.core.service.IApsGasPipelineCapacityPlanService;
 import com.aps.core.service.mainPlan.IApsWeldSeamStatisticsV2Service;
+import com.aps.system.api.domain.SysDictData;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.streaming.SXSSFCell;
+import org.apache.poi.xssf.streaming.SXSSFRow;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 鐒婄紳缁熻琛╒2Service涓氬姟灞傚鐞�
@@ -203,4 +217,125 @@
         
         return count;
     }
+    @Override
+    public void exportWeldSeamStatistics(HttpServletResponse response) throws IOException {
+        //1. 鑾峰彇鏁版嵁婧�
+        List<ApsWeldSeamStatisticsV2> list = apsWeldSeamStatisticsV2Mapper.selectApsWeldSeamStatisticsV2List(new ApsWeldSeamStatisticsV2());
+
+
+        List<SysDictData> isRequireDic = DictUtils.getDictCache("aps_task_is_require");
+        List<SysDictData> factoryDic = DictUtils.getDictCache("aps_factory");
+
+
+        //2. 鍒涘缓Excel宸ヤ綔绨�
+        SXSSFWorkbook wb = new SXSSFWorkbook(500);
+        ExcelUtil<ApsWeldSeamStatisticsV2> excelUtil = new ExcelUtil<>(ApsWeldSeamStatisticsV2.class);
+        excelUtil.init(list, "鐒婄紳缁熻琛�", "鐒婄紳缁熻琛�", Excel.Type.EXPORT);
+        excelUtil.createWorkbook();
+        excelUtil.createExcelField();
+
+        Map<String, CellStyle> cellStyleMap = excelUtil.createStyles(wb);
+        CellStyle titleStyle = cellStyleMap.get("header_WHITE_GREY_50_PERCENT");
+        CellStyle dataStyle = cellStyleMap.get("data_CENTER_BLACK_WHITE_STRING_false");
+
+        SXSSFSheet sheet = wb.createSheet("鐒婄紳缁熻琛�");
+        List<LinkedHashMap<String,String>> titleList=  initRowTitle();
+        //3. 鏋勫缓琛ㄥご
+        for (int i = 0; i < titleList.size(); i++) {
+            SXSSFRow titleRow = sheet.createRow(i);
+            LinkedHashMap<String, String> map = titleList.get(i);
+            AtomicInteger index = new AtomicInteger();
+            titleList.get(i).forEach((key,value)->{
+                SXSSFCell cell = titleRow.createCell(index.get());
+                cell.setCellValue(value);
+                cell.setCellStyle(titleStyle);
+                index.getAndIncrement();
+            });
+        }
+        //5. 鏋勫缓鏁版嵁琛�
+        LinkedHashMap<String, String> first = titleList.get(0);
+        ArrayList<Map.Entry<String, String>> titles = new ArrayList<>(first.entrySet());
+        List<String> stringFiledKeys=Arrays.asList("productionBase","isSatisfy");
+        for (int rowInx = 0; rowInx < list.size(); rowInx++) {
+            SXSSFRow dataRow = sheet.createRow(rowInx + 2);
+            ApsWeldSeamStatisticsV2 statistics = list.get(rowInx);
+            ObjectMapper mapper = new ObjectMapper();
+            ObjectNode node = mapper.valueToTree(statistics);
+            for (int colInx = 0; colInx < titles.size(); colInx++) {
+                Map.Entry<String, String> entry = titles.get(colInx);
+                String filedKey = entry.getKey();
+                SXSSFCell cell = dataRow.createCell(colInx);
+                JsonNode jsonNode = node.get(filedKey);
+                if(filedKey.equals("productionBase")){
+                    factoryDic.stream().filter(x->x.getDictValue().equals(jsonNode.textValue())).findFirst().ifPresent(
+                            sysDictData -> cell.setCellValue(sysDictData.getDictLabel())
+                    );
+                }else if(filedKey.equals("isSatisfy")){
+                    isRequireDic.stream().filter(x->x.getDictValue().equals(jsonNode.textValue())).findFirst().ifPresent(
+                            sysDictData -> cell.setCellValue(sysDictData.getDictLabel())
+                    );
+                }else{
+                    cell.setCellValue(jsonNode.longValue());
+                }
+                cell.setCellStyle(dataStyle);
+            }
+        }
+        for (int i = 0; i <  sheet.getRow(0).getLastCellNum(); i++) {
+            sheet.setColumnWidth(i, 20 * 256);
+        }
+
+        //4.鍚堝苟琛ㄥご
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2));
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 3, 4));
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 5, 6));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 7, 7));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 8, 8));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 9, 9));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 10, 10));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 11, 11));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 12, 12));
+        //3. 璁剧疆鍝嶅簲澶�
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        wb.write(response.getOutputStream());
+
+    }
+    private  List<LinkedHashMap<String,String>>  initRowTitle(){
+        List<LinkedHashMap<String,String>> list = new ArrayList<>();
+        LinkedHashMap<String,String> level1 = new LinkedHashMap<>();
+        level1.put("year","骞翠唤");
+        level1.put("month","鏈堜唤");
+        level1.put("productionBase","鐢熶骇鍩哄湴");
+        level1.put("pipingOrderRequirement","璁㈠崟闇�姹�");
+        level1.put("gasOrderRequirement","璁㈠崟闇�姹�");
+        level1.put("pipingPredictionRequirement","棰勬祴闇�姹�");
+        level1.put("gasPredictionRequirement","棰勬祴闇�姹�");
+        level1.put("reserveEmergencyOrderOutput","棰勭暀绱ф�ヨ鍗曚骇鍑�");
+        level1.put("total","鍚堣");
+        level1.put("days","澶╂暟");
+        level1.put("requirementDayWeldSeam","闇�姹傛棩鐒婄紳");
+        level1.put("productionDayWeldSeam","鐢熶骇鏃ョ剨缂�");
+        level1.put("isSatisfy","鏄惁婊¤冻");
+        list.add(level1);
+
+        LinkedHashMap<String,String> level2 = new LinkedHashMap<>();
+        level2.put("year","骞翠唤");
+        level2.put("month","鏈堜唤");
+        level2.put("productionBase","鐢熶骇鍩哄湴");
+        level2.put("pipingOrderRequirement","绠¤矾");
+        level2.put("gasOrderRequirement","姘旀煖");
+        level2.put("pipingPredictionRequirement","绠¤矾");
+        level2.put("gasPredictionRequirement","姘旀煖");
+        level2.put("reserveEmergencyOrderOutput","棰勭暀绱ф�ヨ鍗曚骇鍑�");
+        level2.put("total","鍚堣");
+        level2.put("days","澶╂暟");
+        level2.put("requirementDayWeldSeam","闇�姹傛棩鐒婄紳");
+        level2.put("productionDayWeldSeam","鐢熶骇鏃ョ剨缂�");
+        level2.put("isSatisfy","鏄惁婊¤冻");
+        list.add(level2);
+
+        return list;
+    }
 } 
\ No newline at end of file
diff --git a/aps-modules/aps-core/src/main/resources/bootstrap-int.yml b/aps-modules/aps-core/src/main/resources/bootstrap-int.yml
index 069ef63..fb1cdca 100644
--- a/aps-modules/aps-core/src/main/resources/bootstrap-int.yml
+++ b/aps-modules/aps-core/src/main/resources/bootstrap-int.yml
@@ -7,7 +7,8 @@
         server-addr: 192.168.50.160:8848
         namespace: aafcd57a-d0f7-43e3-a77d-1dc85aec1f0e
         metadata:
-          local: int
+          local: zhl
+        ip: 192.168.50.13
       config:
         # 閰嶇疆涓績鍦板潃
         server-addr: 192.168.50.160:8848

--
Gitblit v1.9.3