瀏覽代碼

feature 代码提交

xiahan 1 年之前
父節點
當前提交
c6e6cd7a9b

+ 6 - 0
bs-common/pom.xml

@@ -34,5 +34,11 @@
             <artifactId>rw-admin-common</artifactId>
             <version>1.1-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 20 - 21
bs-common/src/main/java/com/rongwei/safecommon/utils/CXCommonUtils.java

@@ -65,21 +65,18 @@ public class CXCommonUtils {
         sysSerialNumberService = autoSysSerialNumberService;
     }
 
-    /**
-     * 发送通知信息
-     */
-    public static void sendNotify(String title, String content, String remark, List<String> recipientIds) {
-        sendNotify(title, content, remark, recipientIds, null);
-    }
 
     /**
-     * 发送通知信息
+     * 发送消息提醒
+     *
+     * @param title         消息提醒标题
+     * @param content       消息提醒内容
+     * @param remark        消息提醒备注
+     * @param recipientIds  接收人ID
+     * @param roption       目前存的是业务数据ID
+     * @param notifyStatus  消息提醒类型
+     * @param pushWebsocket 是否向webSocket推送消息
      */
-    public static void sendNotify(String title, String content, String remark,
-                                  List<String> recipientIds, String roption) {
-        sendNotify(title, content, remark, recipientIds, roption, DEFAULT_NOTIFY_STATUS);
-    }
-
     public static void sendNotify(String title, String content, String remark,
                                   List<String> recipientIds, String roption,
                                   String notifyStatus,boolean pushWebsocket) {
@@ -109,16 +106,17 @@ public class CXCommonUtils {
                 pushApp(title, content, userIds);
             });
         }
-
     }
+
     /**
-     * 发送通知信息
-     * @param title 标题
-     * @param content 内容
-     * @param remark 备注
-     * @param recipientIds 接收人
-     * @param roption 主键ID
-     * @param notifyStatus 通知类型
+     * 发送消息提醒
+     *
+     * @param title        消息提醒标题
+     * @param content      消息提醒内容
+     * @param remark       消息提醒备注
+     * @param recipientIds 接收人ID
+     * @param roption      目前存的是业务数据ID
+     * @param notifyStatus 消息提醒类型
      */
     public static void sendNotify(String title, String content, String remark,
                                   List<String> recipientIds, String roption,
@@ -126,6 +124,7 @@ public class CXCommonUtils {
         sendNotify(title, content, remark, recipientIds, roption, notifyStatus,true);
     }
 
+
     public static void pushApp(String title, String content, List<String> recipientIds){
         //推送websocket消息给app
         JSONObject jsonObject = new JSONObject();
@@ -232,7 +231,7 @@ public class CXCommonUtils {
     }
 
     public static R upload(MultipartFile file) {
-       return   commonFeginClient.upload(file);
+        return commonFeginClient.upload(file);
     }
 
 }

+ 212 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/CommonEasyExcelUtils.java

@@ -0,0 +1,212 @@
+package com.rongwei.safecommon.utils;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwei.rwadmincommon.system.dao.SysDictDao;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.rwcommonentity.commonservers.domain.SysFileFolderDo;
+import com.rongwei.safecommon.vo.CommonGenerateExcelVo;
+import com.rongwei.safecommon.vo.ExportExcelCommonVo;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.DataFormat;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.apache.poi.xssf.usermodel.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD;
+
+/**
+ * CommonEasyExcelUtils class
+ *
+ * @author XH
+ * @date 2024/02/01
+ */
+@Component
+public class CommonEasyExcelUtils {
+    private static final Logger log = LoggerFactory.getLogger(CommonEasyExcelUtils.class.getClass().getName());
+    private static final int MAX_COLUMN_WIDTH = 255 * 256;
+    @Autowired
+    private SysDictDao autoSysDictDao;
+
+    private static SysDictDao sysDictDao;
+    private static SysFileFolderDo sysFileFolderDo;
+
+
+    @PostConstruct
+    public void init() {
+        sysDictDao = autoSysDictDao;
+    }
+
+    private static final Map<String, String> CONTENT_TYPE_MAP = new HashMap<String, String>(4) {{
+        put(SaveConstans.FileSuffix.XLS, SaveConstans.ContentType.XLS);
+        put(SaveConstans.FileSuffix.XLSX, SaveConstans.ContentType.XLSX);
+
+    }};
+
+    /**
+     * 生成excel文件
+     *
+     * @param exportExcelCommonDTO
+     * @param dataList
+     * @param <T>
+     */
+    public static <T> void exportExcelUtil(ExportExcelCommonVo exportExcelCommonDTO, List<T> dataList) {
+        log.info("开始导出excel");
+        // excel文件名称
+        String excelFileName = exportExcelCommonDTO.getExcelFileName();
+        // excel 文件后缀
+        String excelFileSuffix = exportExcelCommonDTO.getExcelFileSuffix();
+        // 数据字典处理
+        List<CommonGenerateExcelVo> excelFieldDescDTOList = getDictData(exportExcelCommonDTO.getExcelFieldDescDTOList());
+
+        String dateStr = new SimpleDateFormat(DATE_PATTERN_YMD).format(new Date());
+
+        String fileName = StringUtils.isBlank(excelFileName) ? dateStr : excelFileName + dateStr;
+        try (FileOutputStream outputStream = new FileOutputStream(new File("指定目录/文件名"))) {
+//            OutputStream outputStream = response.getOutputStream();
+//            response.setHeader("Content-disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
+//            response.setContentType(String.format("%s;%s", CONTENT_TYPE_MAP.get(excelFileSuffix), "charset=UTF-8"));
+            XSSFWorkbook excelWorkBook = new XSSFWorkbook();
+            /****************************设置单元格居中样式*********************************/
+            XSSFCellStyle centerStyle = excelWorkBook.createCellStyle();
+            // 水平居中
+            centerStyle.setAlignment(HorizontalAlignment.CENTER);
+            // 垂直居中
+            centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+            // 创建sheet
+            XSSFSheet sheet = excelWorkBook.createSheet(StringUtils.isBlank(excelFileName) ? "sheet1" : excelFileName);
+            /********************************创建标题行***********************************/
+//            if(StringUtils.isNotBlank(excelFileName)){
+//                XSSFRow firstRow = sheet.createRow(0);
+//                XSSFCell firstRowCell = firstRow.createCell(0);
+//                firstRowCell.setCellValue(excelFileName);
+//                firstRowCell.setCellStyle(centerStyle);
+//            }
+
+            /********************************创建描述行***********************************/
+            List<String> fieldDescList = excelFieldDescDTOList.stream().map(CommonGenerateExcelVo::getFiledDesc).collect(Collectors.toList());
+            XSSFCell cell;
+            XSSFRow descRow = sheet.createRow(0);
+            for (int i = 0; i < fieldDescList.size(); i++) {
+                cell = descRow.createCell(i);
+                cell.setCellValue(fieldDescList.get(i));
+                cell.setCellType(CellType.STRING);
+                cell.setCellStyle(centerStyle);
+            }
+            /********************************创建内容行***********************************/
+            CommonGenerateExcelVo excelFieldDescDTO;
+            String valueStr = null;
+            Object fileValue;
+            Function getFunction;
+            DataFormat format = excelWorkBook.createDataFormat();
+            // 样式
+            XSSFCellStyle commonStyle = centerStyle;
+            commonStyle.setDataFormat(format.getFormat("@"));
+            XSSFRow valueRow;
+            SimpleDateFormat simpleDateFormat;
+            Map<String, Object> enumMap;
+            for (int j = 0; j < dataList.size(); j++) {
+                valueRow = sheet.createRow(j + 1);
+                Object data = dataList.get(j);
+                boolean isNumber;
+                for (int i = 0; i < excelFieldDescDTOList.size(); i++) {
+                    cell = valueRow.createCell(i);
+                    isNumber = false;
+                    excelFieldDescDTO = excelFieldDescDTOList.get(i);
+                    getFunction = excelFieldDescDTO.getGetOrgNameFunction();
+                    if (getFunction != null) {
+                        fileValue = getFunction.apply(data);
+                    } else {
+                        fileValue = excelFieldDescDTO.getFileValue();
+                    }
+                    String datePattern = excelFieldDescDTO.getDatePattern();
+                    if (fileValue == null) {
+                        valueStr = "";
+                    } else if (fileValue instanceof java.util.Date) {
+                        simpleDateFormat = new SimpleDateFormat(StringUtils.isBlank(datePattern) ? DATE_PATTERN_YMD : datePattern);
+                        // 日期格式处理
+                        valueStr = simpleDateFormat.format(fileValue);
+                    } else if (excelFieldDescDTO.getCustomDictMap() != null && !excelFieldDescDTO.getCustomDictMap().isEmpty()) {
+                        // 数据字典处理
+                        enumMap = excelFieldDescDTO.getCustomDictMap();
+                        valueStr = enumMap == null ? "" : enumMap.getOrDefault(fileValue.toString(), "").toString();
+                    } else if (fileValue instanceof java.math.BigDecimal) {
+                        // 特殊处理 小数位数都是0的情况下 只显示整数部分
+                        valueStr = ((BigDecimal) fileValue).stripTrailingZeros().toPlainString();
+                        isNumber = true;
+                    } else if (fileValue instanceof java.lang.Integer || fileValue instanceof java.lang.Long) {
+                        valueStr = fileValue.toString();
+                        isNumber = true;
+                    } else {
+                        isNumber = false;
+                        valueStr = fileValue.toString();
+                    }
+                    if (isNumber) {
+                        cell.setCellValue(Double.parseDouble(valueStr));
+                        cell.setCellStyle(centerStyle);
+                    } else {
+                        cell.setCellStyle(commonStyle);
+                        cell.setCellValue(valueStr);
+                    }
+                    cell.setCellType(isNumber ? CellType.NUMERIC : CellType.STRING);
+
+                }
+            }
+            for (int i = 0; i < fieldDescList.size(); i++) {
+                sheet.autoSizeColumn(i, true);
+                if (sheet.getColumnWidth(i) * 17 / 10 < MAX_COLUMN_WIDTH) {
+                    sheet.setColumnWidth(i, Math.max(sheet.getColumnWidth(i) * 17 / 10, 3000));
+                } else {
+                    sheet.setColumnWidth(i, 6000);
+                }
+                sheet.setDefaultColumnStyle(i, centerStyle);
+            }
+
+            excelWorkBook.write(outputStream);
+        } catch (Exception e) {
+            log.error("excel导出异常");
+            e.printStackTrace();
+            throw new RuntimeException("excel导出失败!请联系系统管理员");
+        }
+    }
+
+    public static List<CommonGenerateExcelVo> getDictData(List<CommonGenerateExcelVo> excelFieldDescDTOList) {
+        if (excelFieldDescDTOList.isEmpty()) {
+            return excelFieldDescDTOList;
+        }
+        List<String> dictTypeList = excelFieldDescDTOList.stream()
+                .map(info -> info.getDictType())
+                .filter(StringUtils::isNotBlank)
+                .distinct()
+                .collect(Collectors.toList());
+        if (dictTypeList.isEmpty()) {
+            return excelFieldDescDTOList;
+        }
+        List<SysDictDo> sysDictDos = sysDictDao.selectList(new LambdaQueryWrapper<SysDictDo>().eq(BaseDo::getDeleted, "0").in(SysDictDo::getDicttype, dictTypeList));
+        excelFieldDescDTOList.forEach(data -> {
+            if (StringUtils.isNotBlank(data.getDictType())) {
+                data.setCustomDictMap(sysDictDos.stream().filter(dict -> dict.getDicttype().equals(data.getDictType()))
+                        .collect(Collectors.toMap(SysDictDo::getValue, SysDictDo::getName)));
+            }
+        });
+        return excelFieldDescDTOList;
+    }
+}

+ 27 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -368,6 +368,33 @@ public class SaveConstans {
         public static final String PLANNING_TASK_FILE_NAME = "大修任务超期未完成.xls";
 
     }
+    public static class FileSuffix {
+        public static final String XLS = ".xls";
+        public static final String XLSX = ".xlsx";
+        public static final String DOC = ".doc";
+        public static final String DOCX = ".docx";
+    }
 
+    public static class ContentType {
+        public static final String XLS = "application/vnd.ms-excel";
+        public static final String XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+        public static final String DOC = "application/msword";
+        public static final String ZIP = "application/octet-stream";
+        public static final String DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.template";
+        public static final String XML = "text/xml";
+    }
 
+    /**
+     * 时间格式
+     */
+    public static class DatePattern {
+        public static final String DATE_PATTERN_YM_CN = "yyyy年MM月";
+        public static final String DATE_PATTERN_YM = "yyyy-MM";
+        public static final String DATE_PATTERN_YMD_CN = "yyyy年MM月dd日";
+        public static final String DATE_PATTERN_YMD = "yyyy-MM-dd";
+        public static final String DATE_PATTERN_YMDHMS = "yyyy-MM-dd HH:mm:ss";
+        public static final String DATE_PATTERN_YMD_SLASH = "yyyy/MM/dd";
+        public static final String DATE_PATTERN_YM_UNDERLINE = "yyyy_MM";
+        public static final String DATE_PATTERN_YMD_POINT = "yyyy.MM.dd";
+    }
 }

+ 45 - 0
bs-common/src/main/java/com/rongwei/safecommon/vo/CommonGenerateExcelVo.java

@@ -0,0 +1,45 @@
+package com.rongwei.safecommon.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * CommonGenerateExcelVo class
+ *
+ * @author XH
+ * @date 2024/02/01
+ */
+@Data
+public class CommonGenerateExcelVo<T> {
+    /**
+     * 对应的字段描述
+     */
+    private String filedDesc;
+
+    /**
+     * 对应字段的get方法
+     */
+    private Function<T, Object> getOrgNameFunction;
+
+    /**
+     * 固定值
+     */
+    private Object fileValue;
+
+    /**
+     * 时间格式转化
+     */
+    private String datePattern;
+
+    /**
+     * 数据字典值集编号
+     */
+    private String  dictType;
+
+    /**
+     * 数据字典集合
+     */
+    private Map<String, Object> customDictMap;
+}

+ 29 - 0
bs-common/src/main/java/com/rongwei/safecommon/vo/ExportExcelCommonVo.java

@@ -0,0 +1,29 @@
+package com.rongwei.safecommon.vo;
+
+import com.rongwei.safecommon.utils.SaveConstans;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * ExportExcelCommonDTO class
+ *
+ * @author XH
+ * @date 2022/10/20
+ */
+@Data
+public class ExportExcelCommonVo {
+    /**
+     * excel文件名称
+     */
+    private String excelFileName;
+
+    /**
+     * excel文件后缀
+     */
+    private String excelFileSuffix= SaveConstans.FileSuffix.XLS;;
+    // 文件夹编码
+    private String folderCode;
+
+    private List<CommonGenerateExcelVo> excelFieldDescDTOList;
+}