diff --git a/pom.xml b/pom.xml
index 5a85a01..ac93e82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,7 @@
0.9.1
3.0.3
3.5.2
+ 3.3.2
@@ -201,6 +202,18 @@
${ruoyi.version}
+
+
+ com.alibaba
+ easyexcel
+ ${easyexcel.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
index dd1a73e..dad62fd 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
@@ -48,7 +48,7 @@ public class SysOperlogController extends BaseController
{
List list = operLogService.selectOperLogList(operLog);
ExcelUtil util = new ExcelUtil(SysOperLog.class);
- util.exportExcel(response, list, "操作日志");
+ util.exportEasyExcel(response, list, "操作日志");
}
@Log(title = "操作日志", businessType = BusinessType.DELETE)
diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml
index 461f1c4..724a80f 100644
--- a/ruoyi-admin/src/main/resources/logback.xml
+++ b/ruoyi-admin/src/main/resources/logback.xml
@@ -5,11 +5,23 @@
+
+
+
+
+
+
+
-
- ${log.pattern}
-
+
+
+ ${logging.pattern.console}
+
+
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 4f0f8c6..3bdcd82 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -128,6 +128,11 @@
com.baomidou
mybatis-plus-boot-starter
+
+
+ com.alibaba
+ easyexcel
+
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
index 49dea95..6989316 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -24,6 +24,8 @@ import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.excel.EasyExcel;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
@@ -1809,4 +1811,34 @@ public class ExcelUtil
}
return method;
}
+
+ /**
+ * 对excel表单默认第一个索引名转换成list(EasyExcel)
+ *
+ * @param is 输入流
+ * @return 转换后集合
+ */
+ public List importEasyExcel(InputStream is) throws Exception
+ {
+ return EasyExcel.read(is).head(clazz).sheet().doReadSync();
+ }
+
+ /**
+ * 对list数据源将其里面的数据导入到excel表单(EasyExcel)
+ *
+ * @param list 导出数据集合
+ * @param sheetName 工作表的名称
+ * @return 结果
+ */
+ public void exportEasyExcel(HttpServletResponse response, List list, String sheetName)
+ {
+ try
+ {
+ EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(list);
+ }
+ catch (IOException e)
+ {
+ log.error("导出EasyExcel异常{}", e.getMessage());
+ }
+ }
}
diff --git a/ruoyi-plan/src/main/java/com/ruoyi/dhc/service/impl/DhcCountryServiceImpl.java b/ruoyi-plan/src/main/java/com/ruoyi/dhc/service/impl/DhcCountryServiceImpl.java
index 8dd6599..00611ee 100644
--- a/ruoyi-plan/src/main/java/com/ruoyi/dhc/service/impl/DhcCountryServiceImpl.java
+++ b/ruoyi-plan/src/main/java/com/ruoyi/dhc/service/impl/DhcCountryServiceImpl.java
@@ -44,9 +44,7 @@ public class DhcCountryServiceImpl implements IDhcCountryService
public List selectDhcCountryList(DhcCountry dhcCountry)
{
dhcCountry.setDelFlag("0");
-// return dhcCountryMapper.selectDhcCountryList(dhcCountry);
- LambdaQueryWrapper eq = new LambdaQueryWrapper();
- return dhcCountryMapper.selectList(eq);
+ return dhcCountryMapper.selectDhcCountryList(dhcCountry);
}
/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/EnumFiledConvert.java b/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/EnumFiledConvert.java
new file mode 100644
index 0000000..7680c73
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/EnumFiledConvert.java
@@ -0,0 +1,35 @@
+package com.ruoyi.dhc.domain;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 对excel导入时,处理枚举转化
+ * @Author 996
+ * @Date 2024/3/13
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EnumFiledConvert {
+
+
+ /**
+ * 枚举映射map key-value,key-value,key-value,key-value
+ * @return
+ */
+ String enumMap() default "";
+
+ /**
+ * 枚举类导入、导出在excel中的分隔符号
+ * @return
+ */
+ String spiteChar() default ",";
+
+ /**
+ * 单选 or 多选
+ * @return
+ */
+ boolean single() default true;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/SysOperLog.java
index 95ae47a..76f9581 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/SysOperLog.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/SysOperLog.java
@@ -1,269 +1,304 @@
package com.ruoyi.dhc.domain;
import java.util.Date;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
-import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.dhc.domain.read.EasyExcelConvert;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 操作日志记录表 oper_log
- *
+ *
* @author ruoyi
*/
-public class SysOperLog extends BaseEntity
-{
+@ExcelIgnoreUnannotated
+@ColumnWidth(16)
+@HeadRowHeight(14)
+@HeadFontStyle(fontHeightInPoints = 11)
+public class SysOperLog extends BaseEntity {
private static final long serialVersionUID = 1L;
- /** 日志主键 */
- @Excel(name = "操作序号", cellType = ColumnType.NUMERIC)
+ /**
+ * 日志主键
+ */
+ @ExcelProperty(value = "操作序号")
private Long operId;
- /** 操作模块 */
- @Excel(name = "操作模块")
+ /**
+ * 操作模块
+ */
+ @ExcelProperty(value = "操作模块")
private String title;
- /** 业务类型(0其它 1新增 2修改 3删除) */
- @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据")
+ /**
+ * 业务类型(0其它 1新增 2修改 3删除)
+ */
+ @ExcelProperty(value = "业务类型", converter = EasyExcelConvert.class)
+ @EnumFiledConvert(enumMap = "0-其它,1-新增,2-修改,3-删除,4-授权,5-导出,6-导入,7-强退,8-生成代码,9-清空数据")
private Integer businessType;
- /** 业务类型数组 */
+ /**
+ * 业务类型数组
+ */
private Integer[] businessTypes;
- /** 请求方法 */
- @Excel(name = "请求方法")
+ /**
+ * 请求方法
+ */
+ @ExcelProperty(value = "请求方法")
private String method;
- /** 请求方式 */
- @Excel(name = "请求方式")
+ /**
+ * 请求方式
+ */
+ @ExcelProperty(value = "请求方式")
private String requestMethod;
- /** 操作类别(0其它 1后台用户 2手机端用户) */
- @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户")
+ /**
+ * 操作类别(0其它 1后台用户 2手机端用户)
+ */
+ @ExcelProperty(value = "操作类别", converter = EasyExcelConvert.class)
+ @EnumFiledConvert(enumMap = "0-其它,1-后台用户,2-手机端用户")
+
private Integer operatorType;
- /** 操作人员 */
- @Excel(name = "操作人员")
+ /**
+ * 操作人员
+ */
+ @ExcelProperty(value = "操作人员")
private String operName;
- /** 部门名称 */
- @Excel(name = "部门名称")
+ /**
+ * 部门名称
+ */
+ @ExcelProperty(value = "部门名称")
private String deptName;
- /** 请求url */
- @Excel(name = "请求地址")
+ /**
+ * 请求url
+ */
+ @ExcelProperty(value = "请求地址")
private String operUrl;
- /** 操作地址 */
- @Excel(name = "操作地址")
+ /**
+ * 操作地址
+ */
+ @ExcelProperty(value = "操作地址")
private String operIp;
- /** 操作地点 */
- @Excel(name = "操作地点")
+ /**
+ * 操作地点
+ */
+ @ExcelProperty(value = "操作地点")
private String operLocation;
- /** 请求参数 */
- @Excel(name = "请求参数")
+ /**
+ * 请求参数
+ */
+ @ExcelProperty(value = "请求参数")
private String operParam;
- /** 返回参数 */
- @Excel(name = "返回参数")
+ /**
+ * 返回参数
+ */
+ @ExcelProperty(value = "返回参数")
private String jsonResult;
- /** 操作状态(0正常 1异常) */
- @Excel(name = "状态", readConverterExp = "0=正常,1=异常")
+ /**
+ * 操作状态(0正常 1异常)
+ */
+ @ExcelProperty(value = "状态", converter = EasyExcelConvert.class)
+ @EnumFiledConvert(enumMap = "0-正常,1-异常")
private Integer status;
- /** 错误消息 */
- @Excel(name = "错误消息")
+ /**
+ * 错误消息
+ */
+ @ExcelProperty(value = "错误消息")
private String errorMsg;
- /** 操作时间 */
+ /**
+ * 操作时间
+ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @ExcelProperty(value = "操作时间")
private Date operTime;
/** 消耗时间 */
@Excel(name = "消耗时间", suffix = "毫秒")
private Long costTime;
- public Long getOperId()
- {
+ public Long getOperId() {
return operId;
}
- public void setOperId(Long operId)
- {
+ public void setOperId(Long operId) {
this.operId = operId;
}
- public String getTitle()
- {
+ public String getTitle() {
return title;
}
- public void setTitle(String title)
- {
+ public void setTitle(String title) {
this.title = title;
}
- public Integer getBusinessType()
- {
+ public Integer getBusinessType() {
return businessType;
}
- public void setBusinessType(Integer businessType)
- {
+ public void setBusinessType(Integer businessType) {
this.businessType = businessType;
}
- public Integer[] getBusinessTypes()
- {
+ public Integer[] getBusinessTypes() {
return businessTypes;
}
- public void setBusinessTypes(Integer[] businessTypes)
- {
+ public void setBusinessTypes(Integer[] businessTypes) {
this.businessTypes = businessTypes;
}
- public String getMethod()
- {
+ public String getMethod() {
return method;
}
- public void setMethod(String method)
- {
+ public void setMethod(String method) {
this.method = method;
}
- public String getRequestMethod()
- {
+ public String getRequestMethod() {
return requestMethod;
}
- public void setRequestMethod(String requestMethod)
- {
+ public void setRequestMethod(String requestMethod) {
this.requestMethod = requestMethod;
}
- public Integer getOperatorType()
- {
+ public Integer getOperatorType() {
return operatorType;
}
- public void setOperatorType(Integer operatorType)
- {
+ public void setOperatorType(Integer operatorType) {
this.operatorType = operatorType;
}
- public String getOperName()
- {
+ public String getOperName() {
return operName;
}
- public void setOperName(String operName)
- {
+ public void setOperName(String operName) {
this.operName = operName;
}
- public String getDeptName()
- {
+ public String getDeptName() {
return deptName;
}
- public void setDeptName(String deptName)
- {
+ public void setDeptName(String deptName) {
this.deptName = deptName;
}
- public String getOperUrl()
- {
+ public String getOperUrl() {
return operUrl;
}
- public void setOperUrl(String operUrl)
- {
+ public void setOperUrl(String operUrl) {
this.operUrl = operUrl;
}
- public String getOperIp()
- {
+ public String getOperIp() {
return operIp;
}
- public void setOperIp(String operIp)
- {
+ public void setOperIp(String operIp) {
this.operIp = operIp;
}
- public String getOperLocation()
- {
+ public String getOperLocation() {
return operLocation;
}
- public void setOperLocation(String operLocation)
- {
+ public void setOperLocation(String operLocation) {
this.operLocation = operLocation;
}
- public String getOperParam()
- {
+ public String getOperParam() {
return operParam;
}
- public void setOperParam(String operParam)
- {
+ public void setOperParam(String operParam) {
this.operParam = operParam;
}
- public String getJsonResult()
- {
+ public String getJsonResult() {
return jsonResult;
}
- public void setJsonResult(String jsonResult)
- {
+ public void setJsonResult(String jsonResult) {
this.jsonResult = jsonResult;
}
- public Integer getStatus()
- {
+ public Integer getStatus() {
return status;
}
- public void setStatus(Integer status)
- {
+ public void setStatus(Integer status) {
this.status = status;
}
- public String getErrorMsg()
- {
+ public String getErrorMsg() {
return errorMsg;
}
- public void setErrorMsg(String errorMsg)
- {
+ public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
- public Date getOperTime()
- {
+ public Date getOperTime() {
return operTime;
}
- public void setOperTime(Date operTime)
- {
+ public void setOperTime(Date operTime) {
this.operTime = operTime;
}
- public Long getCostTime()
- {
+ public Long getCostTime() {
return costTime;
}
- public void setCostTime(Long costTime)
- {
+ public void setCostTime(Long costTime) {
this.costTime = costTime;
}
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+ .append("operId", getOperId())
+ .append("title", getTitle())
+ .append("businessType", getBusinessType())
+ .append("businessTypes", getBusinessTypes())
+ .append("method", getMethod())
+ .append("requestMethod", getRequestMethod())
+ .append("operatorType", getOperatorType())
+ .append("operName", getOperName())
+ .append("deptName", getDeptName())
+ .append("operUrl", getOperUrl())
+ .append("operIp", getOperIp())
+ .append("operLocation", getOperLocation())
+ .append("operParam", getOperParam())
+ .append("status", getStatus())
+ .append("errorMsg", getErrorMsg())
+ .append("operTime", getOperTime())
+ .toString();
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/read/EasyExcelConvert.java b/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/read/EasyExcelConvert.java
new file mode 100644
index 0000000..8e9ac14
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/dhc/domain/read/EasyExcelConvert.java
@@ -0,0 +1,138 @@
+package com.ruoyi.dhc.domain.read;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.data.ReadCellData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.ruoyi.dhc.domain.EnumFiledConvert;
+import org.springframework.util.StringUtils;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * excel导入导出针对枚举类型的转换器
+ *
+ * @Author 996
+ * @Date 2024/3/13
+ */
+public class EasyExcelConvert implements Converter