diff --git a/cutejava-springboot3/pom.xml b/cutejava-springboot3/pom.xml
index 58e5fe28..1ab0ebf8 100644
--- a/cutejava-springboot3/pom.xml
+++ b/cutejava-springboot3/pom.xml
@@ -55,7 +55,7 @@
3.11.1
2.12.7
2.0.3.RELEASE
- 1.2.0
+ 1.3.0
1.8.0
33.5.0-jre
diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/xlsx/KitXlsxExportDataTransferRowHandler.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/xlsx/KitXlsxExportDataTransferRowHandler.java
new file mode 100644
index 00000000..41c366d4
--- /dev/null
+++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/xlsx/KitXlsxExportDataTransferRowHandler.java
@@ -0,0 +1,8 @@
+package cn.odboy.util.xlsx;
+
+import java.util.List;
+
+public interface KitXlsxExportDataTransferRowHandler {
+
+ List doHandler(O o);
+}
diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/xlsx/KitXlsxExportUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/xlsx/KitXlsxExportUtil.java
new file mode 100644
index 00000000..5743ae3d
--- /dev/null
+++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/xlsx/KitXlsxExportUtil.java
@@ -0,0 +1,62 @@
+package cn.odboy.util.xlsx;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.idev.excel.FastExcel;
+import cn.odboy.framework.exception.BadRequestException;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import lombok.experimental.UtilityClass;
+
+/**
+ * xlsx文件导出工具
+ *
+ * @author odboy
+ * @date 2025-12-29
+ */
+@UtilityClass
+public class KitXlsxExportUtil {
+
+ /**
+ * @param response HttpServletResponse
+ * @param title 标题
+ * @param dataObjectList 数据源,一般为从数据库直接查询的数据
+ * @param targetClazz 目标对象Class
+ * @param rowHandler 数据对象 -> 目标对象 映射逻辑
+ * @param 数据源对象类型
+ * @param 目标对象类型
+ * @throws IOException
+ */
+ public static void exportFile(HttpServletResponse response, String title, List dataObjectList, Class targetClazz, KitXlsxExportDataTransferRowHandler rowHandler) throws IOException {
+ if (response == null) {
+ throw new BadRequestException("参数 HttpServletResponse(response) 必填");
+ }
+ if (CollUtil.isEmpty(dataObjectList)) {
+ throw new BadRequestException("参数 数据源(dataObjectList) 必填");
+ }
+ if (StrUtil.isBlank(title)) {
+ throw new BadRequestException("参数 标题(title) 必填");
+ }
+ String sheetName = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN);
+ List resultList = new ArrayList<>();
+ for (O o : dataObjectList) {
+ List rows = rowHandler.doHandler(o);
+ resultList.addAll(rows);
+ }
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+ String fileName = URLEncoder.encode(sheetName + "_" + title, StandardCharsets.UTF_8);
+ response.setHeader("Content-disposition",
+ "attachment;filename*=utf-8''" + fileName + ".xlsx");
+ FastExcel.write(response.getOutputStream(), targetClazz)
+ .sheet(sheetName)
+ .doWrite(resultList);
+ }
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemYesOrNoChConst.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemYesOrNoChConst.java
new file mode 100644
index 00000000..25ab481c
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemYesOrNoChConst.java
@@ -0,0 +1,6 @@
+package cn.odboy.system.constant;
+
+public interface SystemYesOrNoChConst {
+ String YES_STR = "是";
+ String NO_STR = "否";
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemZhConst.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemZhConst.java
new file mode 100644
index 00000000..b295a5d7
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemZhConst.java
@@ -0,0 +1,9 @@
+package cn.odboy.system.constant;
+
+public interface SystemZhConst {
+
+ String YES_STR = "是";
+ String NO_STR = "否";
+ String ENABLE_STR = "启用";
+ String DISABLE_STR = "停用";
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemDeptExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemDeptExportRowVo.java
new file mode 100644
index 00000000..c61b6a5e
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemDeptExportRowVo.java
@@ -0,0 +1,19 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemDeptExportRowVo extends KitObject {
+
+ @ExcelProperty("部门名称")
+ private String name;
+ @ExcelProperty("部门状态")
+ private String enabled;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemDictExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemDictExportRowVo.java
new file mode 100644
index 00000000..872990e6
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemDictExportRowVo.java
@@ -0,0 +1,22 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemDictExportRowVo extends KitObject {
+ @ExcelProperty("字典名称")
+ private String name;
+ @ExcelProperty("字典描述")
+ private String description;
+ @ExcelProperty("字典标签")
+ private String label;
+ @ExcelProperty("字典值")
+ private String value;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemJobExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemJobExportRowVo.java
new file mode 100644
index 00000000..64bce6e2
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemJobExportRowVo.java
@@ -0,0 +1,19 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemJobExportRowVo extends KitObject {
+
+ @ExcelProperty("岗位名称")
+ private String name;
+ @ExcelProperty("岗位状态")
+ private String enabled;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemLocalStorageExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemLocalStorageExportRowVo.java
new file mode 100644
index 00000000..9554c3b9
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemLocalStorageExportRowVo.java
@@ -0,0 +1,25 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemLocalStorageExportRowVo extends KitObject {
+
+ @ExcelProperty(value = "文件名")
+ private String realName;
+ @ExcelProperty(value = "备注名")
+ private String name;
+ @ExcelProperty(value = "文件类型")
+ private String type;
+ @ExcelProperty(value = "文件大小")
+ private String size;
+ @ExcelProperty(value = "创建者")
+ private String createBy;
+ @ExcelProperty(value = "创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemMenuExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemMenuExportRowVo.java
new file mode 100644
index 00000000..e23f61de
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemMenuExportRowVo.java
@@ -0,0 +1,27 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemMenuExportRowVo extends KitObject {
+
+ @ExcelProperty("菜单标题")
+ private String title;
+ @ExcelProperty("菜单类型")
+ private String type;
+ @ExcelProperty("权限标识")
+ private String permission;
+ @ExcelProperty("外链菜单")
+ private String iFrame;
+ @ExcelProperty("菜单可见")
+ private String hidden;
+ @ExcelProperty("是否缓存")
+ private String cache;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemOssStorageExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemOssStorageExportRowVo.java
new file mode 100644
index 00000000..a196dc95
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemOssStorageExportRowVo.java
@@ -0,0 +1,29 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemOssStorageExportRowVo extends KitObject {
+
+ @ExcelProperty("服务类型")
+ private String serviceType;
+ @ExcelProperty("服务地址")
+ private String endpoint;
+ @ExcelProperty("存储桶名称")
+ private String bucketName;
+ @ExcelProperty("文件名称")
+ private String fileName;
+ @ExcelProperty("文件大小")
+ private String fileSizeDesc;
+ @ExcelProperty("文件类型")
+ private String fileMime;
+ @ExcelProperty("创建人")
+ private String createBy;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQuartzJobExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQuartzJobExportRowVo.java
new file mode 100644
index 00000000..e7d622f1
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQuartzJobExportRowVo.java
@@ -0,0 +1,29 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemQuartzJobExportRowVo extends KitObject {
+
+ @ExcelProperty("任务名称")
+ private String jobName;
+ @ExcelProperty("Bean名称")
+ private String beanName;
+ @ExcelProperty("执行方法")
+ private String methodName;
+ @ExcelProperty("参数")
+ private String params;
+ @ExcelProperty("表达式")
+ private String cronExpression;
+ @ExcelProperty("状态")
+ private String isPause;
+ @ExcelProperty("描述")
+ private String description;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQuartzLogExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQuartzLogExportRowVo.java
new file mode 100644
index 00000000..4be2d0e4
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQuartzLogExportRowVo.java
@@ -0,0 +1,30 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemQuartzLogExportRowVo extends KitObject {
+ @ExcelProperty("任务名称")
+ private String jobName;
+ @ExcelProperty("Bean名称")
+ private String beanName;
+ @ExcelProperty("执行方法")
+ private String methodName;
+ @ExcelProperty("参数")
+ private String params;
+ @ExcelProperty("表达式")
+ private String cronExpression;
+ @ExcelProperty("异常详情")
+ private String exceptionDetail;
+ @ExcelProperty("耗时/毫秒")
+ private Long time;
+ @ExcelProperty("状态")
+ private String status;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleExportRowVo.java
new file mode 100644
index 00000000..5fde2e02
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleExportRowVo.java
@@ -0,0 +1,20 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemRoleExportRowVo extends KitObject {
+ @ExcelProperty("角色名称")
+ private String name;
+ @ExcelProperty("角色级别")
+ private Integer level;
+ @ExcelProperty("描述")
+ private String description;
+ @ExcelProperty("角色名称")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserExportRowVo.java
new file mode 100644
index 00000000..da974cd7
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserExportRowVo.java
@@ -0,0 +1,32 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import java.util.Date;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemUserExportRowVo extends KitObject {
+
+ @ExcelProperty("用户名")
+ private String username;
+ @ExcelProperty("角色")
+ private String roles;
+ @ExcelProperty("部门")
+ private String dept;
+ @ExcelProperty("岗位")
+ private String jobs;
+ @ExcelProperty("邮箱")
+ private String email;
+ @ExcelProperty("状态")
+ private String status;
+ @ExcelProperty("手机号码")
+ private String mobile;
+ @ExcelProperty("修改密码的时间")
+ private Date updatePwdTime;
+ @ExcelProperty("创建日期")
+ private Date createTime;
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserOnlineExportRowVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserOnlineExportRowVo.java
new file mode 100644
index 00000000..e85c86c4
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserOnlineExportRowVo.java
@@ -0,0 +1,24 @@
+package cn.odboy.system.dal.model;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.odboy.base.KitObject;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SystemUserOnlineExportRowVo extends KitObject {
+
+ @ExcelProperty("用户名")
+ private String userName;
+ @ExcelProperty("部门")
+ private String dept;
+ @ExcelProperty("登录IP")
+ private String ip;
+ @ExcelProperty("登录地点")
+ private String address;
+ @ExcelProperty("浏览器")
+ private String browser;
+ @ExcelProperty("登录日期")
+ private String loginTime;
+}
\ No newline at end of file
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemOssStorageServiceImpl.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemMinioStorageServiceImpl.java
similarity index 95%
rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemOssStorageServiceImpl.java
rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemMinioStorageServiceImpl.java
index 2a8fc92c..407481c4 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemOssStorageServiceImpl.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemMinioStorageServiceImpl.java
@@ -1,180 +1,180 @@
-/*
- * Copyright 2021-2025 Odboy
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package cn.odboy.system.service.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.odboy.base.KitPageResult;
-import cn.odboy.framework.exception.BadRequestException;
-import cn.odboy.framework.properties.AppProperties;
-import cn.odboy.framework.properties.model.StorageOSSModel;
-import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
-import cn.odboy.system.dal.dataobject.SystemOssStorageTb;
-import cn.odboy.system.dal.model.SystemOssStorageVo;
-import cn.odboy.system.dal.model.SystemQueryStorageArgs;
-import cn.odboy.system.dal.mysql.SystemOssStorageMapper;
-import cn.odboy.system.framework.storage.minio.MinioRepository;
-import cn.odboy.system.service.SystemOssStorageService;
-import cn.odboy.util.KitDateUtil;
-import cn.odboy.util.KitFileUtil;
-import cn.odboy.util.KitPageUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- *
- * OSS存储 服务实现类
- *
- *
- * @author codegen
- * @since 2025-07-15
- */
-@Service
-public class SystemOssStorageServiceImpl extends ServiceImpl
- implements SystemOssStorageService {
-
- @Autowired
- private MinioRepository minioRepository;
- @Autowired
- private AppProperties properties;
- @Autowired
- private KitFileLocalUploadHelper fileLocalUploadHelper;
- @Autowired
- private SystemOssStorageMapper systemOssStorageMapper;
-
- @Override
- public KitPageResult searchOssStorage(SystemQueryStorageArgs args,
- Page page) {
- IPage ossStorageTbs = this.selectOssStorageByArgs(args, page);
- IPage convert = ossStorageTbs.convert(c -> {
- SystemOssStorageVo storageVo = BeanUtil.copyProperties(c, SystemOssStorageVo.class);
- storageVo.setFileSizeDesc(KitFileUtil.getSize(storageVo.getFileSize()));
- return storageVo;
- });
- return KitPageUtil.toPage(convert);
- }
-
- private IPage selectOssStorageByArgs(SystemQueryStorageArgs args,
- Page page) {
- LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- if (args != null) {
- wrapper.and(StrUtil.isNotBlank(args.getBlurry()),
- c -> c.like(SystemOssStorageTb::getFileName, args.getBlurry()).or()
- .like(SystemOssStorageTb::getFilePrefix, args.getBlurry()).or()
- .like(SystemOssStorageTb::getFileMime, args.getBlurry()).or()
- .like(SystemOssStorageTb::getFileMd5, args.getBlurry()));
- if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
- wrapper.between(SystemOssStorageTb::getUpdateTime, args.getCreateTime().get(0),
- args.getCreateTime().get(1));
- }
- }
- wrapper.orderByAsc(SystemOssStorageTb::getId);
- return systemOssStorageMapper.selectPage(page, wrapper);
- }
-
- @Override
- public List queryOssStorage(SystemQueryStorageArgs args) {
- // 防止刷数据
- Page page = new Page<>(1, 500);
- return searchOssStorage(args, page).getContent();
- }
-
- @Override
- public void exportOssStorageExcel(List ossStorages, HttpServletResponse response)
- throws IOException {
- List