From 4a9a9fa60f52be1e7c91f01df54b3cbae8c11d6c Mon Sep 17 00:00:00 2001
From: baizonghao <1719256278@qq.com>
Date: 星期日, 23 四月 2023 13:11:21 +0800
Subject: [PATCH] 用户导出

---
 src/main/java/com/example/jz/modle/dto/UserExpDto.java          |   51 ++++++++++++
 src/main/java/com/example/jz/utils/EasyExcelUtils.java          |   41 ++++++++++
 src/main/java/com/example/jz/controller/UserController.java     |   20 +++++
 src/main/java/com/example/jz/excel/ExcelWidthStyleStrategy.java |   96 ++++++++++++++++++++++++
 4 files changed, 208 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/example/jz/controller/UserController.java b/src/main/java/com/example/jz/controller/UserController.java
index e955c8e..5b4cf3b 100644
--- a/src/main/java/com/example/jz/controller/UserController.java
+++ b/src/main/java/com/example/jz/controller/UserController.java
@@ -9,17 +9,23 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.example.jz.modle.R;
 import com.example.jz.modle.dto.ManagerDto;
+import com.example.jz.modle.dto.UserExpDto;
 import com.example.jz.modle.entity.*;
 import com.example.jz.service.*;
+import com.example.jz.utils.EasyExcelUtils;
 import com.example.jz.utils.Md5Utils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.Serializable;
 import java.util.*;
 import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 鐢ㄦ埛琛�(User)琛ㄦ帶鍒跺眰
@@ -238,4 +244,18 @@
         user.setRole(1);
         return R.ok(userService.updateById(user));
     }
+
+
+    @ApiOperation("鐢ㄦ埛淇℃伅瀵煎嚭")
+    @PostMapping("/exp")
+    public void UserExp(HttpServletResponse response){
+        List<User> list = userService.list(Wrappers.<User>lambdaQuery().eq(User::getRole, 0).eq(User::getStatus, 1));
+        List<UserExpDto> userExpDtos = list.stream().map(user -> {
+            UserExpDto userExpDto = new UserExpDto();
+            BeanUtils.copyProperties(user, userExpDto);
+            return userExpDto;
+        }).collect(Collectors.toList());
+        String sheetName = "鐢ㄦ埛瀵煎嚭";
+        EasyExcelUtils.export1(response, sheetName, UserExpDto.class, userExpDtos, "鐢ㄦ埛瀵煎嚭");
+    }
 }
diff --git a/src/main/java/com/example/jz/excel/ExcelWidthStyleStrategy.java b/src/main/java/com/example/jz/excel/ExcelWidthStyleStrategy.java
new file mode 100644
index 0000000..735647a
--- /dev/null
+++ b/src/main/java/com/example/jz/excel/ExcelWidthStyleStrategy.java
@@ -0,0 +1,96 @@
+package com.example.jz.excel;
+
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
+import org.apache.poi.ss.usermodel.Cell;
+import org.springframework.util.CollectionUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {
+
+    // 鍗曞厓鏍肩殑鏈�澶у搴�
+    /*private static final int MAX_COLUMN_WIDTH = 50;
+    // 缂撳瓨锛堢涓�涓狹ap鐨勯敭鏄痵heet鐨刬ndex, 绗簩涓狹ap鐨勯敭鏄垪鐨刬ndex, 鍊兼槸鏁版嵁闀垮害锛�
+    private  Map<Integer, Map<Integer, Integer>> CACHE = new HashMap(8);
+
+    // 閲嶅啓璁剧疆鍒楀鐨勬柟娉�
+    @Override
+    protected void setColumnWidth(WriteSheetHolder writeSheetHolder,
+                                  List<WriteCellData<?>> cellDataList,
+                                  Cell cell,
+                                  Head head,
+                                  Integer relativeRowIndex,
+                                  Boolean isHead) {
+        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
+        // 褰撴椂琛ㄥご鎴栬�呭崟鍏冩牸鏁版嵁鍒楄〃鏈夋暟鎹椂鎵嶈繘琛屽鐞�
+        if (needSetWidth) {
+            Map<Integer, Integer> maxColumnWidthMap =
+                    CACHE.get(writeSheetHolder.getSheetNo());
+
+            if (maxColumnWidthMap == null) {
+                maxColumnWidthMap = new HashMap(16);
+                CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
+            }
+            // 鑾峰彇鏁版嵁闀垮害
+            Integer columnWidth = this.getLength(cellDataList, cell, isHead);
+            if (columnWidth >= 0) {
+                if (columnWidth > MAX_COLUMN_WIDTH) {
+                    columnWidth = MAX_COLUMN_WIDTH;
+                }
+                // 纭繚涓�涓垪鐨勫垪瀹戒互琛ㄥご涓轰富锛屽鏋滆〃澶村凡缁忚缃簡鍒楀锛屽崟鍏冩牸灏嗕細璺熼殢琛ㄥご鐨勫垪瀹�
+                Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
+
+                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
+                    maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
+                    // 濡傛灉浣跨敤EasyExcel榛樿琛ㄥご锛岄偅涔堜娇鐢╟olumnWidth * 512
+                    // 濡傛灉涓嶄娇鐢‥asyExcel榛樿琛ㄥご锛岄偅涔堜娇鐢╟olumnWidth * 256
+                    // 濡傛灉鏄嚜宸卞畾涔夌殑瀛椾綋澶у皬锛屽彲浠ュ啀鍘绘祴璇曡繖涓弬鏁板父閲�
+                    writeSheetHolder
+                            .getSheet()
+                            .setColumnWidth(cell.getColumnIndex(), columnWidth * 512);
+                }
+
+            }
+        }
+    }
+
+    *//**
+     * 鑾峰彇褰撳墠鍗曞厓鏍肩殑鏁版嵁闀垮害
+     * @param cellDataList
+     * @param cell
+     * @param isHead
+     * @return
+     *//*
+    private Integer dataLength(List<WriteCellData<?>> cellDataList,
+                               Cell cell,
+                               Boolean isHead) {
+        if (isHead) {
+            return cell.getStringCellValue().getBytes().length;
+        } else {
+            WriteCellData cellData = cellDataList.get(0);
+            CellDataTypeEnum type = cellData.getType();
+            if (type == null) {
+                return -1;
+            } else {
+                switch(type) {
+                    case STRING:
+                        return cellData.getStringValue().getBytes().length;
+                    case BOOLEAN:
+                        return cellData.getBooleanValue().toString().getBytes().length;
+                    case NUMBER:
+                        return cellData.getNumberValue().toString().getBytes().length;
+                    default:
+                        return -1;
+                }
+            }
+        }
+    }*/
+
+}
+
diff --git a/src/main/java/com/example/jz/modle/dto/UserExpDto.java b/src/main/java/com/example/jz/modle/dto/UserExpDto.java
new file mode 100644
index 0000000..5c2f0f8
--- /dev/null
+++ b/src/main/java/com/example/jz/modle/dto/UserExpDto.java
@@ -0,0 +1,51 @@
+package com.example.jz.modle.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class UserExpDto {
+    @ApiModelProperty(value = "濮撳悕",dataType = "String", position = 0)
+    @ExcelProperty(value = "鎶ユ浜�",index = 0)
+    private String realName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙风爜",dataType = "String", position = 1)
+    @ExcelProperty(value = "鎵嬫満鍙风爜",index = 1)
+    private String userMobile;
+
+    @ApiModelProperty(value = "韬唤璇�",dataType = "String", position = 2)
+    @ExcelProperty(value = "韬唤璇�",index = 2)
+    private String userIdcard;
+
+    @ApiModelProperty(value = "鎬у埆",dataType = "String", position = 3)
+    @ExcelProperty(value = "鎬у埆",index = 3)
+    private String sex;
+
+    @ApiModelProperty(value = "鐜板眳鍦�",dataType = "String", position = 4)
+    @ExcelProperty(value = "鐜板眳鍦�",index = 4)
+    private String location;
+
+    @ApiModelProperty(value = "宸ヤ綔鍗曚綅鍦板潃",dataType = "String", position = 5)
+    @ExcelProperty(value = "宸ヤ綔鍗曚綅鍦板潃",index = 5)
+    private String workingLocation;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿",dataType = "Date",position = 6)
+    @ExcelProperty(value = "鍒涘缓鏃堕棿", index = 6)
+    @DateTimeFormat("yyyy/MM/dd")
+    private Date ctime;
+
+    @ApiModelProperty(value = "澶囨敞",dataType = "String", position = 7)
+    @ExcelProperty(value = "澶囨敞",index = 7)
+    private String userMemo;
+
+}
diff --git a/src/main/java/com/example/jz/utils/EasyExcelUtils.java b/src/main/java/com/example/jz/utils/EasyExcelUtils.java
new file mode 100644
index 0000000..f13ea1e
--- /dev/null
+++ b/src/main/java/com/example/jz/utils/EasyExcelUtils.java
@@ -0,0 +1,41 @@
+package com.example.jz.utils;
+
+import com.alibaba.excel.EasyExcel;
+import lombok.SneakyThrows;
+
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Collection;
+
+public class EasyExcelUtils {
+
+    /**
+     * @Description 瀵煎嚭
+     * @Param [response , sheetName sheet鍚嶅瓧, className 绫诲悕, collection data]
+     * @return void
+     **/
+    @SneakyThrows
+    public static void export(HttpServletResponse response, String sheetName, Class className, Collection<?> collection) {
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), className)
+                .sheet(sheetName)
+                .doWrite(collection);
+    }
+
+    @SneakyThrows
+    public static void export1(HttpServletResponse response, String sheetName, Class className, Collection<?> collection, String fileName) {
+        fileName = URLEncoder.encode(fileName, "UTF-8");
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + fileName  + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), className)
+                .sheet(sheetName)
+                .doWrite(collection);
+    }
+
+
+}
\ No newline at end of file

--
Gitblit v1.8.0