From b92fd92933fce8e97fef05207596217bb746cd4d Mon Sep 17 00:00:00 2001
From: 1821349743@qq.com <1821349743@qq.com>
Date: 星期一, 17 四月 2023 12:06:33 +0800
Subject: [PATCH] update export excel

---
 src/main/java/com/product/module/data/utli/CustomMergeStrategy.java              |   98 +++++++
 src/main/java/com/product/module/data/controller/SystemDataExportController.java |  106 +++----
 src/main/java/com/product/module/data/service/SystemDataExportService.java       |  517 +++++++++++++++++++++------------------
 3 files changed, 413 insertions(+), 308 deletions(-)

diff --git a/src/main/java/com/product/module/data/controller/SystemDataExportController.java b/src/main/java/com/product/module/data/controller/SystemDataExportController.java
index 9f009d2..db6e1cc 100644
--- a/src/main/java/com/product/module/data/controller/SystemDataExportController.java
+++ b/src/main/java/com/product/module/data/controller/SystemDataExportController.java
@@ -32,71 +32,49 @@
 public class SystemDataExportController extends AbstractBaseController {
 
 
-    @Autowired
-    SystemDataExportService systemDataExportService;
+	@Autowired
+	SystemDataExportService systemDataExportService;
 
-    @PostMapping("general-list/{version}")
-    @ApiVersion(1)
-    public String generalListDataExport(HttpServletRequest request){
-        try{
-            FieldSetEntity fse = null;
-            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
-            if (bean != null) {
-                RequestParameterEntity reqp = (RequestParameterEntity) bean;
-                fse = reqp.getFormData();
-            }
-            if (bean == null || fse == null) {
-                SpringMVCContextHolder.getSystemLogger().error(CmnCode.SYSTEM_FORM_NODATA.getValue(), CmnCode.SYSTEM_FORM_NODATA.getText());
-                return this.error(CmnCode.SYSTEM_FORM_NODATA.getValue(), CmnCode.SYSTEM_FORM_NODATA.getText());
-            }
-            // 鍒ゆ柇鍙傛暟鏄惁姝e父
-            if (StringUtils.isEmpty(fse.getString(CmnConst.FILE_NAME))) {
-                SpringMVCContextHolder.getSystemLogger().error(CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getValue(), CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getText());
-                return this.error(CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getValue(), CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getText());
-            }
-            if (StringUtils.isEmpty(fse.getString(CmnConst.UPLOAD_API_URL))) {
-                SpringMVCContextHolder.getSystemLogger().error(CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getValue(), CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getText());
-                return this.error(CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getValue(), CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getText());
-            }
-            if(BaseUtil.dataTableIsEmpty(fse.getSubDataTable(CmnConst.EXPORT_PARAM))){
-                SpringMVCContextHolder.getSystemLogger().error(CmnCode.EXPORT_PARAMS_NOT_EMPTY.getValue(), CmnCode.EXPORT_PARAMS_NOT_EMPTY.getText());
-                return this.error(CmnCode.EXPORT_PARAMS_NOT_EMPTY.getValue(), CmnCode.EXPORT_PARAMS_NOT_EMPTY.getText());
-            }
-            systemDataExportService.generalListDataExport(fse.clones());
-            return OK();
-        }catch (BaseException e){
-            e.printStackTrace();
-            SpringMVCContextHolder.getSystemLogger().error(e);
-            return error(e);
-        }
-        catch (Exception e){
-            e.printStackTrace();
-            SpringMVCContextHolder.getSystemLogger().error(e);
-            return error(CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getValue(),CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getText()+e.getMessage());
-        }
-    }
-    @PostMapping("report/{version}")
-    @ApiVersion(1)
-    public String reportDataExport(HttpServletRequest request){
-        try{
-            FieldSetEntity fse = null;
-            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
-            if (bean != null) {
-                RequestParameterEntity reqp = (RequestParameterEntity) bean;
-                return OK_Add(systemDataExportService.reportDataExport(reqp));
-            }
-            return OK();
-        }catch (BaseException e){
-            e.printStackTrace();
-            SpringMVCContextHolder.getSystemLogger().error(e);
-            return error(e);
-        }
-        catch (Exception e){
-            e.printStackTrace();
-            SpringMVCContextHolder.getSystemLogger().error(e);
-            return error(CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getValue(),CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getText()+e.getMessage());
-        }
-    }
+	@PostMapping("general-list/{version}")
+	@ApiVersion(1)
+	public String generalListDataExport(HttpServletRequest request) {
+		try {
+			FieldSetEntity fse = null;
+			Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+			if (bean != null) {
+				RequestParameterEntity reqp = (RequestParameterEntity) bean;
+				fse = reqp.getFormData();
+			}
+			if (bean == null || fse == null) {
+				SpringMVCContextHolder.getSystemLogger().error(CmnCode.SYSTEM_FORM_NODATA.getValue(), CmnCode.SYSTEM_FORM_NODATA.getText());
+				return this.error(CmnCode.SYSTEM_FORM_NODATA.getValue(), CmnCode.SYSTEM_FORM_NODATA.getText());
+			}
+			// 鍒ゆ柇鍙傛暟鏄惁姝e父
+			if (StringUtils.isEmpty(fse.getString(CmnConst.FILE_NAME))) {
+				SpringMVCContextHolder.getSystemLogger().error(CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getValue(), CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getText());
+				return this.error(CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getValue(), CmnCode.EXPORT_FILE_NAME_NOT_EMPTY.getText());
+			}
+			if (StringUtils.isEmpty(fse.getString(CmnConst.UPLOAD_API_URL))) {
+				SpringMVCContextHolder.getSystemLogger().error(CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getValue(), CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getText());
+				return this.error(CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getValue(), CmnCode.EXPORT_UPLOAD_URL_NOT_EMPTY.getText());
+			}
+			if (BaseUtil.dataTableIsEmpty(fse.getSubDataTable(CmnConst.EXPORT_PARAM))) {
+				SpringMVCContextHolder.getSystemLogger().error(CmnCode.EXPORT_PARAMS_NOT_EMPTY.getValue(), CmnCode.EXPORT_PARAMS_NOT_EMPTY.getText());
+				return this.error(CmnCode.EXPORT_PARAMS_NOT_EMPTY.getValue(), CmnCode.EXPORT_PARAMS_NOT_EMPTY.getText());
+			}
+			systemDataExportService.generalListDataExport(fse.clones());
+			return OK();
+		} catch (BaseException e) {
+			e.printStackTrace();
+			SpringMVCContextHolder.getSystemLogger().error(e);
+			return error(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			SpringMVCContextHolder.getSystemLogger().error(e);
+			return error(CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getValue(), CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getText() + e.getMessage());
+		}
+	}
+
 
 
 }
diff --git a/src/main/java/com/product/module/data/service/SystemDataExportService.java b/src/main/java/com/product/module/data/service/SystemDataExportService.java
index f68f537..f35abaa 100644
--- a/src/main/java/com/product/module/data/service/SystemDataExportService.java
+++ b/src/main/java/com/product/module/data/service/SystemDataExportService.java
@@ -22,6 +22,7 @@
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
@@ -35,261 +36,289 @@
  */
 @Service
 public class SystemDataExportService extends AbstractBaseService {
-    @Autowired
-    SystemApiToMethods systemApiToMethods;
+	@Autowired
+	SystemApiToMethods systemApiToMethods;
 
-    @Override
-    public BaseDao getBaseDao() {
-        return super.getBaseDao();
-    }
+	@Override
+	public BaseDao getBaseDao() {
+		return super.getBaseDao();
+	}
 
-    /**
-     * 鏁版嵁鎶ヨ〃瀵煎嚭
-     *
-     * @param reqp
-     * @return 杩斿洖Base64 EXCEL.XLSX
-     * @throws BaseException
-     * @throws IOException
-     */
-    public String reportDataExport(RequestParameterEntity reqp) throws BaseException {
+	public void reportDataExport(FieldSetEntity fse) throws BaseException {
+		//鎶ヨ〃uuid
+		String uuid = fse.getUUID();
+		//鏄惁褰撳墠椤�
+		boolean exportCurrentPage = fse.getBoolean("exportCurrentPage");
+		//褰撳墠椤靛彿
+		int pageIndex = fse.getInteger(CmnConst.CPAGE);
 
-        FieldSetEntity formData = reqp.getFormData();
-        //鎬诲垪鏁�
-        Integer totalColumn = formData.getInteger("totalColumn");
-        //鎬昏鏁�
-        Integer totalRows = formData.getInteger("totalRows");
-        //澶撮儴鍖哄煙琛屾暟
-        Integer headCount = formData.getInteger("headCount");
-        Map<String, File> files = reqp.getFiles();
-        //鍥哄畾鏂囦欢鍚�
-        File portExcel = files.get("portExcel.xlsx");
-        try (InputStream inputStream = new FileInputStream(portExcel); XSSFWorkbook wb = new XSSFWorkbook(inputStream)) {
-            XSSFSheet sheet = wb.getSheetAt(0);
-            //鑾峰彇澶撮儴鏍峰紡
-            XSSFCellStyle headStyle = getReportStyle(wb, IndexedColors.BLACK.getIndex(), true, (short) 15, new java.awt.Color(191, 191, 191));
-            //鑾峰彇鏁版嵁鍖烘牱寮�
-            XSSFCellStyle dataStyle = getReportStyle(wb, IndexedColors.BLACK.getIndex(), false, (short) 13, new java.awt.Color(255, 255, 255));
-            //鎵�鏈夊悓鍒楁渶瀹�
-            Map<Integer, Integer> m = new HashMap<>();
-            for (int i = 0; i < totalRows; i++) {
-                XSSFRow row = sheet.getRow(i);
-                XSSFCellStyle style = null;
-                if (i < headCount) {
-                    //澶撮儴鍖哄煙鏍峰紡
-                    style = headStyle;
-                } else {
-                    //鏁版嵁鍖烘牱寮�
-                    style = dataStyle;
-                }
-                //閬嶅巻姣忎竴涓崟鍏冩牸
-                for (int j = 0; j < totalColumn; j++) {
-                    //鑾峰彇鍗曞厓鏍煎璞�
-                    XSSFCell cell = row.getCell(j);
-                    if (cell == null) {
-                        //濉厖绌虹殑鍗曞厓鏍�
-                        cell = row.createCell(j, CellType.STRING);
-                    }
-                    //璁剧疆鍗曞厓鏍兼牱寮�
-                    cell.setCellStyle(style);
-                    //鑾峰彇鍗曞厓鏍煎��
-                    String val = cell.getStringCellValue();
-                    if (val != null) {
-                        //鏍规嵁瀛楄妭璁$畻澶ц嚧瀹藉害
-                        int i2 = val.getBytes().length * 256;
-                        //瀹藉害涓嶈兘瓒呰繃 256*256
-                        if (i2 > 256 * 256) {
-                            i2 = 256 * 255;
-                        }
-                        if (m.get(j) == null) {
-                            m.put(j, i2);
-                        } else {
-                            //褰撳墠琛岀殑鍒楁槸鍚︽瘮鍏朵粬琛岀殑鍒楀
-                            Integer width = m.get(j);
-                            if (width < i2) {
-                                m.put(j, i2);
-                            }
-                        }
-                    }
+	}
 
-                }
-            }
-            //璁剧疆姣忓垪鐨勫搴�
-            for (Map.Entry<Integer, Integer> v : m.entrySet()) {
-                sheet.setColumnWidth(v.getKey(), v.getValue());
-            }
-            //灏唚orkbook杞崲涓哄瓧鑺傛祦
-            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-            //灏唀xcel杈撳嚭鍒板瓧鑺傛祦
-            wb.write(byteArrayOutputStream);
-            //灏嗗瓧鑺傛祦杞负瀛楄妭
-            byte[] bytes = byteArrayOutputStream.toByteArray();
-            //灏嗗瓧鑺傝浆鎹负Base64
-            String encode = Base64.getEncoder().encodeToString(bytes);
-            //鍒犻櫎浼犲叆鐨勬枃浠�
-            if (portExcel != null && portExcel.exists()) {
-                portExcel.delete();
-            }
-            //杩斿洖Base64瀛楃涓� 鎷兼帴XLSX鏂囦欢鏍煎紡鍓嶇紑
-            return "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," + encode;
-        } catch (Exception e) {
-            throw new BaseException(CmnCode.EXPORT_REPORT_DATA_FIAL.getValue(),CmnCode.EXPORT_REPORT_DATA_FIAL.getValue()+e.getMessage());
-        }
-    }
+	/**
+	 * 鏁版嵁鎶ヨ〃瀵煎嚭
+	 *
+	 * @param reqp
+	 * @return 杩斿洖Base64 EXCEL.XLSX
+	 * @throws BaseException
+	 * @throws IOException
+	 */
+	public String reportDataExport(RequestParameterEntity reqp) throws BaseException {
 
-    /**
-     * 鍗曞厓鏍兼牱寮�
-     *
-     * @param workbook
-     * @param color    瀛椾綋棰滆壊
-     * @param bold     鏄惁鍔犵矖
-     * @param fontSize 瀛椾綋澶у皬
-     * @param bgc      鑳屾櫙鑹�
-     * @return
-     */
-    public XSSFCellStyle getReportStyle(XSSFWorkbook workbook, short color, boolean bold, short fontSize, java.awt.Color bgc) {
-        XSSFCellStyle cellStyle = workbook.createCellStyle();
-        //宸﹀彸灞呬腑
-        cellStyle.setAlignment(HorizontalAlignment.CENTER);
-        //涓婁笅灞呬腑
-        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-        // 涓嬭竟妗�
-        cellStyle.setBorderBottom(BorderStyle.THIN);
-        // 宸﹁竟妗�
-        cellStyle.setBorderLeft(BorderStyle.THIN);
-        // 涓婅竟妗�
-        cellStyle.setBorderTop(BorderStyle.THIN);
-        // 鍙宠竟妗�
-        cellStyle.setBorderRight(BorderStyle.THIN);
-        //璁剧疆鑳屾櫙鑹�
+		FieldSetEntity formData = reqp.getFormData();
+		//鎬诲垪鏁�
+		Integer totalColumn = formData.getInteger("totalColumn");
+		//鎬昏鏁�
+		Integer totalRows = formData.getInteger("totalRows");
+		//澶撮儴鍖哄煙琛屾暟
+		Integer headCount = formData.getInteger("headCount");
+		Map<String, File> files = reqp.getFiles();
+		//鍥哄畾鏂囦欢鍚�
+		File portExcel = files.get("portExcel.xlsx");
+		try (InputStream inputStream = new FileInputStream(portExcel); XSSFWorkbook wb = new XSSFWorkbook(inputStream)) {
+			XSSFSheet sheet = wb.getSheetAt(0);
+			//鑾峰彇澶撮儴鏍峰紡
+			XSSFCellStyle headStyle = getReportStyle(wb, IndexedColors.BLACK.getIndex(), true, (short) 15, new java.awt.Color(191, 191, 191));
+			//鑾峰彇鏁版嵁鍖烘牱寮�
+			XSSFCellStyle dataStyle = getReportStyle(wb, IndexedColors.BLACK.getIndex(), false, (short) 13, new java.awt.Color(255, 255, 255));
+			//鎵�鏈夊悓鍒楁渶瀹�
+			Map<Integer, Integer> m = new HashMap<>();
+			for (int i = 0; i < totalRows; i++) {
+				XSSFRow row = sheet.getRow(i);
+				XSSFCellStyle style = null;
+				if (i < headCount) {
+					//澶撮儴鍖哄煙鏍峰紡
+					style = headStyle;
+				} else {
+					//鏁版嵁鍖烘牱寮�
+					style = dataStyle;
+				}
+				//閬嶅巻姣忎竴涓崟鍏冩牸
+				for (int j = 0; j < totalColumn; j++) {
+					//鑾峰彇鍗曞厓鏍煎璞�
+					XSSFCell cell = row.getCell(j);
+					if (cell == null) {
+						//濉厖绌虹殑鍗曞厓鏍�
+						cell = row.createCell(j, CellType.STRING);
+					}
+					//璁剧疆鍗曞厓鏍兼牱寮�
+					cell.setCellStyle(style);
+					//鑾峰彇鍗曞厓鏍煎��
+					String val = cell.getStringCellValue();
+					if (val != null) {
+						//鏍规嵁瀛楄妭璁$畻澶ц嚧瀹藉害
+						int i2 = val.getBytes().length * 256;
+						//瀹藉害涓嶈兘瓒呰繃 256*256
+						if (i2 > 256 * 256) {
+							i2 = 256 * 255;
+						}
+						if (m.get(j) == null) {
+							m.put(j, i2);
+						} else {
+							//褰撳墠琛岀殑鍒楁槸鍚︽瘮鍏朵粬琛岀殑鍒楀
+							Integer width = m.get(j);
+							if (width < i2) {
+								m.put(j, i2);
+							}
+						}
+					}
+
+				}
+			}
+			//璁剧疆姣忓垪鐨勫搴�
+			for (Map.Entry<Integer, Integer> v : m.entrySet()) {
+				sheet.setColumnWidth(v.getKey(), v.getValue());
+			}
+			//灏唚orkbook杞崲涓哄瓧鑺傛祦
+			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+			//灏唀xcel杈撳嚭鍒板瓧鑺傛祦
+			wb.write(byteArrayOutputStream);
+			//灏嗗瓧鑺傛祦杞负瀛楄妭
+			byte[] bytes = byteArrayOutputStream.toByteArray();
+			//灏嗗瓧鑺傝浆鎹负Base64
+			String encode = Base64.getEncoder().encodeToString(bytes);
+			//鍒犻櫎浼犲叆鐨勬枃浠�
+			if (portExcel != null && portExcel.exists()) {
+				portExcel.delete();
+			}
+			//杩斿洖Base64瀛楃涓� 鎷兼帴XLSX鏂囦欢鏍煎紡鍓嶇紑
+			return "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," + encode;
+		} catch (Exception e) {
+			throw new BaseException(CmnCode.EXPORT_REPORT_DATA_FIAL.getValue(), CmnCode.EXPORT_REPORT_DATA_FIAL.getValue() + e.getMessage());
+		}
+	}
+
+	/**
+	 * 鍗曞厓鏍兼牱寮�
+	 *
+	 * @param workbook
+	 * @param color    瀛椾綋棰滆壊
+	 * @param bold     鏄惁鍔犵矖
+	 * @param fontSize 瀛椾綋澶у皬
+	 * @param bgc      鑳屾櫙鑹�
+	 * @return
+	 */
+	public XSSFCellStyle getReportStyle(XSSFWorkbook workbook, short color, boolean bold, short fontSize, java.awt.Color bgc) {
+		XSSFCellStyle cellStyle = workbook.createCellStyle();
+		//宸﹀彸灞呬腑
+		cellStyle.setAlignment(HorizontalAlignment.CENTER);
+		//涓婁笅灞呬腑
+		cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+		// 涓嬭竟妗�
+		cellStyle.setBorderBottom(BorderStyle.THIN);
+		// 宸﹁竟妗�
+		cellStyle.setBorderLeft(BorderStyle.THIN);
+		// 涓婅竟妗�
+		cellStyle.setBorderTop(BorderStyle.THIN);
+		// 鍙宠竟妗�
+		cellStyle.setBorderRight(BorderStyle.THIN);
+		//璁剧疆鑳屾櫙鑹�
 //        cellStyle.setFillForegroundColor(new XSSFColor());
-        //濉厖妯″紡
-        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
-        XSSFFont font = workbook.createFont();
-        //瀛椾綋棰滆壊
-        font.setColor(color);
-        //鍔犵矖
-        font.setBold(bold);
-        //瀛椾綋澶у皬
-        font.setFontHeightInPoints(fontSize);
-        //瀛椾綋鏍峰紡
-        font.setFontName("寰蒋闆呴粦");
-        //鑷姩鎹㈣
-        cellStyle.setWrapText(true);
-        cellStyle.setFont(font);
-        return cellStyle;
-    }
+		//濉厖妯″紡
+		cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+		XSSFFont font = workbook.createFont();
+		//瀛椾綋棰滆壊
+		font.setColor(color);
+		//鍔犵矖
+		font.setBold(bold);
+		//瀛椾綋澶у皬
+		font.setFontHeightInPoints(fontSize);
+		//瀛椾綋鏍峰紡
+		font.setFontName("寰蒋闆呴粦");
+		//鑷姩鎹㈣
+		cellStyle.setWrapText(true);
+		cellStyle.setFont(font);
+		return cellStyle;
+	}
 
 
-    /**
-     * 閫氱敤鍒楄〃瀵煎嚭
-     *
-     * @param fse
-     * @throws BaseException
-     */
-    public void generalListDataExport(FieldSetEntity fse) throws BaseException {
-        //瀵煎嚭鏂囦欢鍚嶇О
-        String file_name = fse.getString(CmnConst.FILE_NAME);
-        //鏁版嵁鎺ュ彛
-        String upload_api_url = fse.getString(CmnConst.UPLOAD_API_URL);
-        //鏁版嵁鎺ュ彛鎵�闇�鍙傛暟
-        FieldSetEntity export_param = fse.getSubDataTable(CmnConst.EXPORT_PARAM).getFieldSetEntity(0);
-        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-        RequestParameterEntity requestParameterEntity = (RequestParameterEntity) request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
-        FieldSetEntity fs = new FieldSetEntity();
-        fs.setTableName(fse.getString(CmnConst.TABLE_NAME));
-        //寮�濮嬮〉
-        int start_cpage = export_param.getInteger(CmnConst.START_CPAGE);
-        //缁撴潫椤�
-        int end_cpage = export_param.getInteger(CmnConst.END_CPAGE);
-        int pagesize = export_param.getInteger(CmnConst.PAGESIZE);
-        export_param.setValue(CmnConst.CPAGE, ((start_cpage) * pagesize) / pagesize);
-        export_param.setValue(CmnConst.PAGESIZE, pagesize * ((end_cpage - start_cpage) + 1));
-        export_param.remove(CmnConst.START_CPAGE);
-        export_param.remove(CmnConst.END_CPAGE);
-        Map<Object, Object> values = export_param.getValues();
-        for (Map.Entry<Object, Object> v : values.entrySet()) {
-            fs.setValue(v.getKey().toString(), v.getValue());
-        }
-        requestParameterEntity.setFormData(fs);
-        String result = (String) systemApiToMethods.run(upload_api_url, 1);
+	/**
+	 * 閫氱敤鍒楄〃瀵煎嚭
+	 *
+	 * @param fse
+	 * @throws BaseException
+	 */
+	public void generalListDataExport(FieldSetEntity fse) throws BaseException {
+		//瀵煎嚭鏂囦欢鍚嶇О
+		String file_name = fse.getString(CmnConst.FILE_NAME);
+		//鏁版嵁鎺ュ彛
+		String upload_api_url = fse.getString(CmnConst.UPLOAD_API_URL);
+		//鏁版嵁鎺ュ彛鎵�闇�鍙傛暟
+		FieldSetEntity export_param = fse.getSubDataTable(CmnConst.EXPORT_PARAM).getFieldSetEntity(0);
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+		RequestParameterEntity requestParameterEntity = (RequestParameterEntity) request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+		FieldSetEntity fs = new FieldSetEntity();
+		fs.setTableName(fse.getString(CmnConst.TABLE_NAME));
+		//寮�濮嬮〉
+		int start_cpage = export_param.getInteger(CmnConst.START_CPAGE);
+		//缁撴潫椤�
+		int end_cpage = export_param.getInteger(CmnConst.END_CPAGE);
+		int pagesize = export_param.getInteger(CmnConst.PAGESIZE);
+		export_param.setValue(CmnConst.CPAGE, ((start_cpage) * pagesize) / pagesize);
+		export_param.setValue(CmnConst.PAGESIZE, pagesize * ((end_cpage - start_cpage) + 1));
+		export_param.remove(CmnConst.START_CPAGE);
+		export_param.remove(CmnConst.END_CPAGE);
+		Map<Object, Object> values = export_param.getValues();
+		for (Map.Entry<Object, Object> v : values.entrySet()) {
+			fs.setValue(v.getKey().toString(), v.getValue());
+		}
+		requestParameterEntity.setFormData(fs);
+		String result = (String) systemApiToMethods.run(upload_api_url, 1);
 
-        if (JSON.isValidObject(result)) {
-            JSONObject resultJson = JSON.parseObject(result);
-            if (200 == resultJson.getInteger("code")) {
-                //鑾峰彇鏁版嵁鎴愬姛
-                Object data = resultJson.get("data");
-                if (data instanceof JSONObject) {
-                } else if (data instanceof JSONArray) {
-                    DataTableEntity export_field = export_param.getSubDataTable("export_field");
-                    try {
-                        writeExcel((JSONArray) data, export_field, file_name);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-            } else {
-                throw new BaseException(resultJson.getString("code"), resultJson.getString("msg"));
-            }
-        } else {
-            System.out.println("鏈煡鐨勬暟鎹被鍨�");
-        }
-    }
+		if (JSON.isValidObject(result)) {
+			JSONObject resultJson = JSON.parseObject(result);
+			if (200 == resultJson.getInteger("code")) {
+				//鑾峰彇鏁版嵁鎴愬姛
+				Object data = resultJson.get("data");
+				if (data instanceof JSONObject) {
+				} else if (data instanceof JSONArray) {
+					DataTableEntity export_field = export_param.getSubDataTable("export_field");
+					try {
+						writeExcel((JSONArray) data, export_field, file_name);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			} else {
+				throw new BaseException(resultJson.getString("code"), resultJson.getString("msg"));
+			}
+		} else {
+			System.out.println("鏈煡鐨勬暟鎹被鍨�");
+		}
+	}
 
-    /**
-     * 杈撳嚭excel
-     *
-     * @param data
-     * @param fieldInfo
-     * @param main_title
-     * @throws IOException
-     */
-    public void writeExcel(JSONArray data, DataTableEntity fieldInfo, String main_title) throws IOException {
-        //鏍囬
-        List<List<String>> headTitles = Lists.newArrayList();
-        List<String> fields = Lists.newArrayList();
-        //瀵煎嚭鐨勬暟鎹泦
-        List<List<Object>> exportData = Lists.newArrayList();
-        List<String> titles = Lists.newArrayList();
-        List<String> titleTemplate = Lists.newArrayList();
-        titleTemplate.add(main_title);
-        for (int i = 0; i < fieldInfo.getRows(); i++) {
-            titles.add(fieldInfo.getString(i, CmnConst.FIELD_DESC));
-            fields.add(fieldInfo.getString(i, CmnConst.FIELD_NAME));
-        }
-        List<List<Object>> lists = contentData(data, fields);
-        titles.forEach(title -> {
-            List<String> secondTitle = Lists.newArrayList(titleTemplate);
-            secondTitle.add(title);
-            headTitles.add(secondTitle);
-        });
-        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
-        response.setContentType("multipart/form-data");
-        response.setCharacterEncoding("utf-8");
-        // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
-        // 杩欓噷闇�瑕佽缃笉鍏抽棴娴�
-        EasyExcel.write(response.getOutputStream()).
-                registerWriteHandler(new Custemhandler()).head(headTitles).sheet(main_title).doWrite(lists);
-    }
+	/**
+	 * 杈撳嚭excel
+	 *
+	 * @param data
+	 * @param fieldInfo
+	 * @param main_title
+	 * @throws IOException
+	 */
+	public void writeExcel(JSONArray data, DataTableEntity fieldInfo, String main_title) throws IOException {
+		//鏍囬
+		List<List<String>> headTitles = Lists.newArrayList();
+		List<String> fields = Lists.newArrayList();
+		//瀵煎嚭鐨勬暟鎹泦
+		List<String> titles = Lists.newArrayList();
+		List<String> titleTemplate = Lists.newArrayList();
+		titleTemplate.add(main_title);
+		for (int i = 0; i < fieldInfo.getRows(); i++) {
+			titles.add(fieldInfo.getString(i, CmnConst.FIELD_DESC));
+			fields.add(fieldInfo.getString(i, CmnConst.FIELD_NAME));
+		}
+		List<List<Object>> lists = contentData(data, fields);
+		titles.forEach(title -> {
+			List<String> secondTitle = Lists.newArrayList(titleTemplate);
+			secondTitle.add(title);
+			headTitles.add(secondTitle);
+		});
+		HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+		response.setContentType("multipart/form-data");
+		response.setCharacterEncoding("utf-8");
+		// 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+		writeExcel(headTitles, lists, main_title, response);
+	}
 
-    /**
-     * 缁勮鏁版嵁
-     *
-     * @param dataArray
-     * @param fields
-     * @return
-     */
-    private static List<List<Object>> contentData(JSONArray dataArray, List<String> fields) {
-        List<List<Object>> contentList = Lists.newArrayList();
-        dataArray.forEach(data -> {
-            JSONObject dataJson = (JSONObject) data;
-            List<Object> content = Lists.newArrayList();
-            fields.forEach(field -> {
-                content.add(dataJson.get(field));
-            });
-            contentList.add(content);
-        });
-        return contentList;
-    }
+	/**
+	 * 杈撳嚭excel
+	 *
+	 * @param excelHeaders excel琛ㄥご
+	 * @param dataRows     鏁版嵁琛�
+	 * @param sheetName    sheet鍚嶇О
+	 * @throws IOException
+	 */
+	public void writeExcel(List<List<String>> excelHeaders, List dataRows, String sheetName, HttpServletResponse response) throws IOException {
+
+		response.setContentType("multipart/form-data");
+		response.setCharacterEncoding("utf-8");
+		// 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+		// 杩欓噷闇�瑕佽缃笉鍏抽棴娴�
+		try (ServletOutputStream outputStream = response.getOutputStream();) {
+			EasyExcel.write(outputStream).
+					registerWriteHandler(new Custemhandler()).head(excelHeaders).sheet(sheetName).doWrite(dataRows);
+		}
+	}
+
+
+	/**
+	 * 缁勮鏁版嵁
+	 *
+	 * @param dataArray
+	 * @param fields
+	 * @return
+	 */
+	private static List<List<Object>> contentData(JSONArray dataArray, List<String> fields) {
+		List<List<Object>> contentList = Lists.newArrayList();
+		dataArray.forEach(data -> {
+			JSONObject dataJson = (JSONObject) data;
+			List<Object> content = Lists.newArrayList();
+			fields.forEach(field -> {
+				content.add(dataJson.get(field));
+			});
+			contentList.add(content);
+		});
+		return contentList;
+	}
 
 
 }
diff --git a/src/main/java/com/product/module/data/utli/CustomMergeStrategy.java b/src/main/java/com/product/module/data/utli/CustomMergeStrategy.java
new file mode 100644
index 0000000..084a682
--- /dev/null
+++ b/src/main/java/com/product/module/data/utli/CustomMergeStrategy.java
@@ -0,0 +1,98 @@
+package com.product.module.data.utli;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.write.merge.AbstractMergeStrategy;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class CustomMergeStrategy extends AbstractMergeStrategy {
+
+	/**
+	 * 鍒嗙粍锛屾瘡鍑犺鍚堝苟涓�娆�
+	 */
+	private List<List<Integer>> mergeColDataGroupCountList;
+
+	/**
+	 * 鐩爣鍚堝苟鍒梚ndex
+	 */
+	private List<Integer> targetColumnIndex;
+	/**
+	 * 	闇�瑕佸紑濮嬪悎骞跺崟鍏冩牸鐨勯琛宨ndex
+ 	 */
+	private Integer rowIndex;
+
+	/**
+	 * 	mergeColDataList涓哄緟鍚堝苟鐩爣鍒楃殑鍊�
+ 	 */
+	public CustomMergeStrategy(List<List<String>> mergeColDataList, List<Integer> targetColumnIndex) {
+		this.mergeColDataGroupCountList = getGroupCountList(mergeColDataList);
+		this.targetColumnIndex = targetColumnIndex;
+	}
+
+
+	@Override
+	protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
+
+		if (null == rowIndex) {
+			rowIndex = cell.getRowIndex();
+		}
+		// 浠呬粠棣栬浠ュ強鐩爣鍒楃殑鍗曞厓鏍煎紑濮嬪悎骞讹紝蹇界暐鍏朵粬
+		if (cell.getRowIndex() == rowIndex && targetColumnIndex.contains(cell.getColumnIndex())) {
+			//鎵惧埌瀵瑰簲鐨勯渶瑕佸悎骞剁殑鍒�
+			AtomicInteger i = new AtomicInteger(0);
+			Optional<Integer> first = targetColumnIndex.stream().filter(col -> {
+				i.getAndIncrement();
+				return col == cell.getColumnIndex();
+			}).findFirst();
+			mergeGroupColumn(sheet, first.get());
+		}
+	}
+
+	private void mergeGroupColumn(Sheet sheet, Integer index) {
+		int rowCount = rowIndex;
+		for (Integer count : mergeColDataGroupCountList.get(index)) {
+			if (count == 1) {
+				rowCount += count;
+				continue;
+			}
+			// 鍚堝苟鍗曞厓鏍�
+			CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount + count - 1,
+					targetColumnIndex.get(index), targetColumnIndex.get(index));
+			sheet.addMergedRegionUnsafe(cellRangeAddress);
+			rowCount += count;
+		}
+	}
+
+	/**
+	 * 	璇ユ柟娉曞皢鐩爣鍒楁牴鎹�兼槸鍚︾浉鍚岃繛缁彲鍚堝苟锛屽瓨鍌ㄥ彲鍚堝苟鐨勮鏁�
+ 	 */
+	private List<List<Integer>> getGroupCountList(List<List<String>> exportDataList) {
+		if (CollUtil.isEmpty(exportDataList)) {
+			return new ArrayList<>();
+		}
+		List<List<Integer>> groupCountListList = new ArrayList<>();
+		exportDataList.forEach(dataList->{
+			List<Integer> groupCountList = new ArrayList<>();
+			int count = 1;
+			for (int i = 1; i < dataList.size(); i++) {
+				if (dataList.get(i).equals(dataList.get(i - 1))) {
+					count++;
+				} else {
+					groupCountList.add(count);
+					count = 1;
+				}
+			}
+			// 澶勭悊瀹屾渶鍚庝竴鏉″悗
+			groupCountList.add(count);
+			groupCountListList.add(groupCountList);
+		});
+		return groupCountListList;
+	}
+}

--
Gitblit v1.9.2