From 942ecfc8f02fd750e670eadd7f6e99b978f0dd5a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E4=B8=89=E7=82=AE?= <15856818120@163.com>
Date: Tue, 8 Apr 2025 13:36:52 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=B7=A5=E5=85=B7=E7=B1=BB?=
=?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../controller/CoordinatePhotoController.java | 16 +
.../controller/ImportantMatterController.java | 18 +
.../imageUpload/dto/CoordinatePhotoVo.java | 8 +
.../imageUpload/dto/ImportantMatterVo.java | 7 +
.../imageUpload/dto/SafetyMeasuresVo.java | 8 +
.../impl/CoordinatePhotoServiceImpl.java | 6 +-
.../impl/ImportantMatterServiceImpl.java | 6 +-
.../com/bonus/imgTool/utils/DateUtils.java | 185 +++
.../java/com/bonus/imgTool/utils/Excel.java | 190 +++
.../imgTool/utils/ExcelHandlerAdapter.java | 24 +
.../com/bonus/imgTool/utils/ExcelUtil.java | 1470 +++++++++++++++++
.../java/com/bonus/imgTool/utils/Excels.java | 18 +
.../com/bonus/imgTool/utils/ImageUtils.java | 85 +
.../com/bonus/imgTool/utils/ReflectUtils.java | 402 +++++
.../java/com/bonus/imgTool/utils/StrUtil.java | 2 +-
.../imageUpload/CoordinatePhotoMapper.xml | 19 +-
.../imageUpload/ImportantMatterMapper.xml | 17 +-
.../imageUpload/SafetMeasuresMapper.xml | 10 +-
.../mappers/system/SysFileResourceMapper.xml | 6 +-
20 files changed, 2476 insertions(+), 23 deletions(-)
create mode 100644 src/main/java/com/bonus/imgTool/utils/DateUtils.java
create mode 100644 src/main/java/com/bonus/imgTool/utils/Excel.java
create mode 100644 src/main/java/com/bonus/imgTool/utils/ExcelHandlerAdapter.java
create mode 100644 src/main/java/com/bonus/imgTool/utils/ExcelUtil.java
create mode 100644 src/main/java/com/bonus/imgTool/utils/Excels.java
create mode 100644 src/main/java/com/bonus/imgTool/utils/ImageUtils.java
create mode 100644 src/main/java/com/bonus/imgTool/utils/ReflectUtils.java
diff --git a/pom.xml b/pom.xml
index ddd5125..25b9f5c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -166,7 +166,7 @@
org.apache.commons
commons-lang3
- 3.7
+ 3.12.0
commons-io
diff --git a/src/main/java/com/bonus/imgTool/imageUpload/controller/CoordinatePhotoController.java b/src/main/java/com/bonus/imgTool/imageUpload/controller/CoordinatePhotoController.java
index a743cc2..a2b6255 100644
--- a/src/main/java/com/bonus/imgTool/imageUpload/controller/CoordinatePhotoController.java
+++ b/src/main/java/com/bonus/imgTool/imageUpload/controller/CoordinatePhotoController.java
@@ -7,6 +7,7 @@ import com.bonus.imgTool.imageUpload.dto.CoordinatePhotoReqVo;
import com.bonus.imgTool.imageUpload.dto.CoordinatePhotoVo;
import com.bonus.imgTool.imageUpload.service.CoordinatePhotoService;
import com.bonus.imgTool.system.vo.EncryptedReq;
+import com.bonus.imgTool.utils.ExcelUtil;
import com.bonus.imgTool.utils.ServerResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
@@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
/**
* 协调照片
@@ -86,4 +89,17 @@ public class CoordinatePhotoController {
public ServerResponse getCoordinatePhotoById(EncryptedReq data) {
return coordinatePhotoService.getCoordinatePhotoById(data.getData());
}
+
+ /**
+ * 协调照片--导出
+ */
+ @PostMapping(value = "/coordinatePhotoExport")
+ @DecryptAndVerify(decryptedClass = CoordinatePhotoReqVo.class)
+ @LogAnnotation(operModul = "协调照片--导出", operation = "查询照片", operDesc = "系统级事件",operType="导出")
+ public void coordinatePhotoExport(HttpServletResponse response, EncryptedReq data) {
+
+ List coordinatePhotoVoList = (List) coordinatePhotoService.getCoordinatePhotoList(data.getData()).getData();
+ ExcelUtil util = new ExcelUtil(CoordinatePhotoVo.class);
+ util.exportExcel(response, coordinatePhotoVoList, "协调照片");
+ }
}
diff --git a/src/main/java/com/bonus/imgTool/imageUpload/controller/ImportantMatterController.java b/src/main/java/com/bonus/imgTool/imageUpload/controller/ImportantMatterController.java
index 7aa9b95..d75eefd 100644
--- a/src/main/java/com/bonus/imgTool/imageUpload/controller/ImportantMatterController.java
+++ b/src/main/java/com/bonus/imgTool/imageUpload/controller/ImportantMatterController.java
@@ -3,10 +3,13 @@ package com.bonus.imgTool.imageUpload.controller;
import com.bonus.imgTool.annotation.DecryptAndVerify;
import com.bonus.imgTool.annotation.LogAnnotation;
+import com.bonus.imgTool.imageUpload.dto.CoordinatePhotoReqVo;
+import com.bonus.imgTool.imageUpload.dto.CoordinatePhotoVo;
import com.bonus.imgTool.imageUpload.dto.ImportantMatterReqVo;
import com.bonus.imgTool.imageUpload.dto.ImportantMatterVo;
import com.bonus.imgTool.imageUpload.service.ImportantMatterService;
import com.bonus.imgTool.system.vo.EncryptedReq;
+import com.bonus.imgTool.utils.ExcelUtil;
import com.bonus.imgTool.utils.ServerResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
@@ -14,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
/**
* 重要事项及宣传照片
@@ -86,4 +91,17 @@ public class ImportantMatterController {
public ServerResponse getImportantMatterById(EncryptedReq data) {
return importantMatterService.getImportantMatterById(data.getData());
}
+
+ /**
+ * 重要事项及宣传照片--导出
+ */
+ @PostMapping(value = "/importantMatterExport")
+ @DecryptAndVerify(decryptedClass = ImportantMatterReqVo.class)
+ @LogAnnotation(operModul = "协调照片--导出", operation = "查询照片", operDesc = "系统级事件",operType="导出")
+ public void importantMatterExport(HttpServletResponse response, EncryptedReq data) {
+
+ List coordinatePhotoVoList = (List) importantMatterService.getImportantMatterList(data.getData()).getData();
+ ExcelUtil util = new ExcelUtil(ImportantMatterVo.class);
+ util.exportExcel(response, coordinatePhotoVoList, "重要事项及宣传照片");
+ }
}
diff --git a/src/main/java/com/bonus/imgTool/imageUpload/dto/CoordinatePhotoVo.java b/src/main/java/com/bonus/imgTool/imageUpload/dto/CoordinatePhotoVo.java
index 75c8d41..4721d5d 100644
--- a/src/main/java/com/bonus/imgTool/imageUpload/dto/CoordinatePhotoVo.java
+++ b/src/main/java/com/bonus/imgTool/imageUpload/dto/CoordinatePhotoVo.java
@@ -1,6 +1,8 @@
package com.bonus.imgTool.imageUpload.dto;
+
import com.bonus.imgTool.system.vo.SysFileResourceVo;
+import com.bonus.imgTool.utils.Excel;
import lombok.Data;
import java.util.Date;
@@ -22,6 +24,7 @@ public class CoordinatePhotoVo {
/**
* 工程名称
*/
+ @Excel(name = "工程名称", sort = 1)
private String proName;
/**
@@ -42,26 +45,31 @@ public class CoordinatePhotoVo {
/**
* 工序名称
*/
+ @Excel(name = "工序名称", sort = 2)
private String gxName;
/**
* 建设地点
*/
+ @Excel(name = "建设地点", sort = 3)
private String buildPlace;
/**
* 建设前描述
*/
+ @Excel(name = "建设前描述", sort = 4)
private String buildBeforeDesc;
/**
* 建设中描述
*/
+ @Excel(name = "建设中描述", sort = 5)
private String buildUnderDesc;
/**
* 恢复后描述
*/
+ @Excel(name = "恢复后描述", sort = 6)
private String buildAfterDesc;
/**
diff --git a/src/main/java/com/bonus/imgTool/imageUpload/dto/ImportantMatterVo.java b/src/main/java/com/bonus/imgTool/imageUpload/dto/ImportantMatterVo.java
index 493b577..7af3e07 100644
--- a/src/main/java/com/bonus/imgTool/imageUpload/dto/ImportantMatterVo.java
+++ b/src/main/java/com/bonus/imgTool/imageUpload/dto/ImportantMatterVo.java
@@ -1,6 +1,7 @@
package com.bonus.imgTool.imageUpload.dto;
import com.bonus.imgTool.system.vo.SysFileResourceVo;
+import com.bonus.imgTool.utils.Excel;
import lombok.Data;
import java.util.Date;
@@ -22,6 +23,7 @@ public class ImportantMatterVo {
/**
* 工程名称
*/
+ @Excel(name = "工程名称", sort = 1)
private String proName;
/**
@@ -32,6 +34,7 @@ public class ImportantMatterVo {
/**
* 专业名称
*/
+ @Excel(name = "专业名称", sort = 2)
private String majorName;
/**
@@ -42,21 +45,25 @@ public class ImportantMatterVo {
/**
* 工序名称
*/
+ @Excel(name = "工序名称", sort = 3)
private String gxName;
/**
* 时间
*/
+ @Excel(name = "时间", sort = 4)
private String time;
/**
* 标题
*/
+ @Excel(name = "标题", sort = 5)
private String title;
/**
* 内容
*/
+ @Excel(name = "内容", sort = 6)
private String content;
diff --git a/src/main/java/com/bonus/imgTool/imageUpload/dto/SafetyMeasuresVo.java b/src/main/java/com/bonus/imgTool/imageUpload/dto/SafetyMeasuresVo.java
index 0fa7af6..746f259 100644
--- a/src/main/java/com/bonus/imgTool/imageUpload/dto/SafetyMeasuresVo.java
+++ b/src/main/java/com/bonus/imgTool/imageUpload/dto/SafetyMeasuresVo.java
@@ -1,6 +1,7 @@
package com.bonus.imgTool.imageUpload.dto;
import com.bonus.imgTool.system.vo.SysFileResourceVo;
+import com.bonus.imgTool.utils.Excel;
import lombok.Data;
import java.util.Date;
@@ -22,6 +23,7 @@ public class SafetyMeasuresVo {
/**
* 工程名称
*/
+ @Excel(name = "工程名称", sort = 1)
private String proName;
/**
@@ -32,6 +34,7 @@ public class SafetyMeasuresVo {
/**
* 专业名称
*/
+ @Excel(name = "专业名称", sort = 2)
private String majorName;
/**
@@ -42,26 +45,31 @@ public class SafetyMeasuresVo {
/**
* 工序名称
*/
+ @Excel(name = "工序名称", sort = 3)
private String gxName;
/**
* 检查人
*/
+ @Excel(name = "检查人", sort = 4)
private String checkUserName;
/**
* 检查时间
*/
+ @Excel(name = "检查时间", sort = 5)
private String checkDate;
/**
* 检查地点
*/
+ @Excel(name = "检查地点", sort = 6)
private String checkPlace;
/**
* 违章描述
*/
+ @Excel(name = "违章描述", sort = 7)
private String checkDesc;
/**
diff --git a/src/main/java/com/bonus/imgTool/imageUpload/service/impl/CoordinatePhotoServiceImpl.java b/src/main/java/com/bonus/imgTool/imageUpload/service/impl/CoordinatePhotoServiceImpl.java
index c775136..8422bae 100644
--- a/src/main/java/com/bonus/imgTool/imageUpload/service/impl/CoordinatePhotoServiceImpl.java
+++ b/src/main/java/com/bonus/imgTool/imageUpload/service/impl/CoordinatePhotoServiceImpl.java
@@ -110,9 +110,9 @@ public class CoordinatePhotoServiceImpl implements CoordinatePhotoService {
} catch (Exception e) {
log.error(e.toString(), e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- return ServerResponse.createErroe("删除失败");
+ return ServerResponse.createErroe("新增失败");
}
- return ServerResponse.createSuccess();
+ return ServerResponse.createSuccess("新增成功");
}
/**
@@ -145,7 +145,7 @@ public class CoordinatePhotoServiceImpl implements CoordinatePhotoService {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ServerResponse.createErroe("修改失败");
}
- return ServerResponse.createSuccess();
+ return ServerResponse.createSuccess("修改成功");
}
@Override
diff --git a/src/main/java/com/bonus/imgTool/imageUpload/service/impl/ImportantMatterServiceImpl.java b/src/main/java/com/bonus/imgTool/imageUpload/service/impl/ImportantMatterServiceImpl.java
index a65cddc..8ce055c 100644
--- a/src/main/java/com/bonus/imgTool/imageUpload/service/impl/ImportantMatterServiceImpl.java
+++ b/src/main/java/com/bonus/imgTool/imageUpload/service/impl/ImportantMatterServiceImpl.java
@@ -104,9 +104,9 @@ public class ImportantMatterServiceImpl implements ImportantMatterService {
synthesisQueryService.addComprehensiveQuery(comprehensiveQueryVo);
} catch (Exception e) {
log.error(e.toString(), e);
- return ServerResponse.createErroe("删除失败");
+ return ServerResponse.createErroe("新增失败");
}
- return ServerResponse.createSuccess();
+ return ServerResponse.createSuccess("新增成功");
}
/**
@@ -139,7 +139,7 @@ public class ImportantMatterServiceImpl implements ImportantMatterService {
log.error(e.toString(), e);
return ServerResponse.createErroe("修改失败");
}
- return ServerResponse.createSuccess();
+ return ServerResponse.createSuccess("修改成功");
}
/**
diff --git a/src/main/java/com/bonus/imgTool/utils/DateUtils.java b/src/main/java/com/bonus/imgTool/utils/DateUtils.java
new file mode 100644
index 0000000..336378b
--- /dev/null
+++ b/src/main/java/com/bonus/imgTool/utils/DateUtils.java
@@ -0,0 +1,185 @@
+package com.bonus.imgTool.utils;
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+
+import java.lang.management.ManagementFactory;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.util.Date;
+
+/**
+ * 时间工具类
+ *
+ * @author ruoyi
+ */
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils
+{
+ public static String YYYY = "yyyy";
+
+ public static String YYYY_MM = "yyyy-MM";
+
+ public static String YYYY_MM_DD = "yyyy-MM-dd";
+
+ public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+
+ public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+
+ private static String[] parsePatterns = {
+ "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
+ "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
+ "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+
+ /**
+ * 获取当前Date型日期
+ *
+ * @return Date() 当前日期
+ */
+ public static Date getNowDate()
+ {
+ return new Date();
+ }
+
+ /**
+ * 获取当前日期, 默认格式为yyyy-MM-dd
+ *
+ * @return String
+ */
+ public static String getDate()
+ {
+ return dateTimeNow(YYYY_MM_DD);
+ }
+
+ public static final String getTime()
+ {
+ return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+ }
+
+ public static final String dateTimeNow()
+ {
+ return dateTimeNow(YYYYMMDDHHMMSS);
+ }
+
+ public static final String dateTimeNow(final String format)
+ {
+ return parseDateToStr(format, new Date());
+ }
+
+ public static final String dateTime(final Date date)
+ {
+ return parseDateToStr(YYYY_MM_DD, date);
+ }
+
+ public static final String parseDateToStr(final String format, final Date date)
+ {
+ return new SimpleDateFormat(format).format(date);
+ }
+
+ public static final Date dateTime(final String format, final String ts)
+ {
+ try
+ {
+ return new SimpleDateFormat(format).parse(ts);
+ }
+ catch (ParseException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * 日期路径 即年/月/日 如2018/08/08
+ */
+ public static final String datePath()
+ {
+ Date now = new Date();
+ return DateFormatUtils.format(now, "yyyy/MM/dd");
+ }
+
+ /**
+ * 日期路径 即年/月/日 如20180808
+ */
+ public static final String dateTime()
+ {
+ Date now = new Date();
+ return DateFormatUtils.format(now, "yyyyMMdd");
+ }
+
+ public static final String getDateTimeString(Date date)
+ {
+ return DateFormatUtils.format(date, "yyyyMMdd");
+ }
+
+ /**
+ * 日期型字符串转化为日期 格式
+ */
+ public static Date parseDate(Object str)
+ {
+ if (str == null)
+ {
+ return null;
+ }
+ try
+ {
+ return parseDate(str.toString(), parsePatterns);
+ }
+ catch (ParseException e)
+ {
+ return null;
+ }
+ }
+
+ /**
+ * 获取服务器启动时间
+ */
+ public static Date getServerStartDate()
+ {
+ long time = ManagementFactory.getRuntimeMXBean().getStartTime();
+ return new Date(time);
+ }
+
+ /**
+ * 计算时间差
+ *
+ * @param endDate 最后时间
+ * @param startTime 开始时间
+ * @return 时间差(天/小时/分钟)
+ */
+ public static String timeDistance(Date endDate, Date startTime)
+ {
+ long nd = 1000 * 24 * 60 * 60;
+ long nh = 1000 * 60 * 60;
+ long nm = 1000 * 60;
+ // long ns = 1000;
+ // 获得两个时间的毫秒时间差异
+ long diff = endDate.getTime() - startTime.getTime();
+ // 计算差多少天
+ long day = diff / nd;
+ // 计算差多少小时
+ long hour = diff % nd / nh;
+ // 计算差多少分钟
+ long min = diff % nd % nh / nm;
+ // 计算差多少秒//输出结果
+ // long sec = diff % nd % nh % nm / ns;
+ return day + "天" + hour + "小时" + min + "分钟";
+ }
+
+ /**
+ * 增加 LocalDateTime ==> Date
+ */
+ public static Date toDate(LocalDateTime temporalAccessor)
+ {
+ ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
+ return Date.from(zdt.toInstant());
+ }
+
+ /**
+ * 增加 LocalDate ==> Date
+ */
+ public static Date toDate(LocalDate temporalAccessor)
+ {
+ LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
+ ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
+ return Date.from(zdt.toInstant());
+ }
+}
diff --git a/src/main/java/com/bonus/imgTool/utils/Excel.java b/src/main/java/com/bonus/imgTool/utils/Excel.java
new file mode 100644
index 0000000..2df3431
--- /dev/null
+++ b/src/main/java/com/bonus/imgTool/utils/Excel.java
@@ -0,0 +1,190 @@
+package com.bonus.imgTool.utils;
+
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+
+/**
+ * 自定义导出Excel数据注解
+ *
+ * @author ruoyi
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Excel
+{
+ /**
+ * 导出时在excel中排序
+ */
+ public int sort() default Integer.MAX_VALUE;
+
+ /**
+ * 导出到Excel中的名字.
+ */
+ public String name() default "";
+
+ /**
+ * 日期格式, 如: yyyy-MM-dd
+ */
+ public String dateFormat() default "";
+
+ /**
+ * 读取内容转表达式 (如: 0=男,1=女,2=未知)
+ */
+ public String readConverterExp() default "";
+
+ /**
+ * 分隔符,读取字符串组内容
+ */
+ public String separator() default ",";
+
+ /**
+ * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
+ */
+ public int scale() default -1;
+
+ /**
+ * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
+ */
+ public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
+
+ /**
+ * 导出时在excel中每个列的高度
+ */
+ public double height() default 14;
+
+ /**
+ * 导出时在excel中每个列的宽度
+ */
+ public double width() default 16;
+
+ /**
+ * 文字后缀,如% 90 变成90%
+ */
+ public String suffix() default "";
+
+ /**
+ * 当值为空时,字段的默认值
+ */
+ public String defaultValue() default "";
+
+ /**
+ * 提示信息
+ */
+ public String prompt() default "";
+
+ /**
+ * 设置只能选择不能输入的列内容.
+ */
+ public String[] combo() default {};
+
+ /**
+ * 是否需要纵向合并单元格,应对需求:含有list集合单元格)
+ */
+ public boolean needMerge() default false;
+
+ /**
+ * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
+ */
+ public boolean isExport() default true;
+
+ /**
+ * 另一个类中的属性名称,支持多级获取,以小数点隔开
+ */
+ public String targetAttr() default "";
+
+ /**
+ * 是否自动统计数据,在最后追加一行统计数据总和
+ */
+ public boolean isStatistics() default false;
+
+ /**
+ * 导出类型(0数字 1字符串)
+ */
+ public ColumnType cellType() default ColumnType.STRING;
+
+ /**
+ * 导出列头背景颜色
+ */
+ public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT;
+
+ /**
+ * 导出列头字体颜色
+ */
+ public IndexedColors headerColor() default IndexedColors.WHITE;
+
+ /**
+ * 导出单元格背景颜色
+ */
+ public IndexedColors backgroundColor() default IndexedColors.WHITE;
+
+ /**
+ * 导出单元格字体颜色
+ */
+ public IndexedColors color() default IndexedColors.BLACK;
+
+ /**
+ * 导出字段对齐方式
+ */
+ public HorizontalAlignment align() default HorizontalAlignment.CENTER;
+
+ /**
+ * 自定义数据处理器
+ */
+ public Class> handler() default ExcelHandlerAdapter.class;
+
+ /**
+ * 自定义数据处理器参数
+ */
+ public String[] args() default {};
+
+ /**
+ * 字段类型(0:导出导入;1:仅导出;2:仅导入)
+ */
+ Type type() default Type.ALL;
+
+
+ public enum Type
+ {
+ /**
+ * ALL(0), EXPORT(1), IMPORT(2);
+ */
+ ALL(0), EXPORT(1), IMPORT(2);
+ private final int value;
+
+ Type(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+
+
+ public enum ColumnType
+ {
+ /**
+ * NUMERIC(0), STRING(1), IMAGE(2);
+ */
+ NUMERIC(0), STRING(1), IMAGE(2);
+ private final int value;
+
+ ColumnType(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+}
diff --git a/src/main/java/com/bonus/imgTool/utils/ExcelHandlerAdapter.java b/src/main/java/com/bonus/imgTool/utils/ExcelHandlerAdapter.java
new file mode 100644
index 0000000..9892922
--- /dev/null
+++ b/src/main/java/com/bonus/imgTool/utils/ExcelHandlerAdapter.java
@@ -0,0 +1,24 @@
+package com.bonus.imgTool.utils;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Workbook;
+
+/**
+ * Excel数据格式处理适配器
+ *
+ * @author ruoyi
+ */
+public interface ExcelHandlerAdapter
+{
+ /**
+ * 格式化
+ *
+ * @param value 单元格数据值
+ * @param args excel注解args参数组
+ * @param cell 单元格对象
+ * @param wb 工作簿对象
+ *
+ * @return 处理后的值
+ */
+ Object format(Object value, String[] args, Cell cell, Workbook wb);
+}
diff --git a/src/main/java/com/bonus/imgTool/utils/ExcelUtil.java b/src/main/java/com/bonus/imgTool/utils/ExcelUtil.java
new file mode 100644
index 0000000..b440a8e
--- /dev/null
+++ b/src/main/java/com/bonus/imgTool/utils/ExcelUtil.java
@@ -0,0 +1,1470 @@
+package com.bonus.imgTool.utils;
+
+import cn.hutool.core.exceptions.UtilException;
+import com.bonus.imgTool.webResult.Convert;
+import com.bonus.imgTool.webResult.StrFormatter;
+
+import com.bonus.imgTool.webResult.StringUtils;
+import jdk.nashorn.internal.runtime.GlobalConstants;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.RegExUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
+import org.apache.poi.xssf.usermodel.XSSFDataValidation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Excel相关处理
+ *
+ * @author ruoyi
+ */
+public class ExcelUtil
+{
+ private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class);
+
+ public static final String FORMULA_REGEX_STR = "=|-|\\+|@";
+
+ public static final String[] FORMULA_STR = { "=", "-", "+", "@" };
+
+ /**
+ * Excel sheet最大行数,默认65536
+ */
+ public static final int SHEET_SIZE = 65536;
+
+ /**
+ * 工作表名称
+ */
+ private String sheetName;
+
+ /**
+ * 导出类型(EXPORT:导出数据;IMPORT:导入模板)
+ */
+ private Excel.Type type;
+
+ /**
+ * 工作薄对象
+ */
+ private Workbook wb;
+
+ /**
+ * 工作表对象
+ */
+ private Sheet sheet;
+
+ /**
+ * 样式列表
+ */
+ private Map styles;
+
+ /**
+ * 导入导出数据列表
+ */
+ private List list;
+
+ /**
+ * 注解列表
+ */
+ private List