diff --git a/pom.xml b/pom.xml
index 4426e86e9..a01488b81 100644
--- a/pom.xml
+++ b/pom.xml
@@ -375,6 +375,43 @@
ruoyi-workflow
${revision}
+
+ org.dromara
+ ruoyi-content
+ ${revision}
+
+
+
+ org.dromara
+ ruoyi-order
+ ${revision}
+
+
+
+ org.dromara
+ ruoyi-member
+ ${revision}
+
+
+
+ org.dromara
+ ruoyi-pay
+ ${revision}
+
+
+
+ org.dromara
+ ruoyi-aftersale
+ ${revision}
+
+
+
+
+
+ org.dromara
+ ruoyi-common-mongo
+ ${revision}
+
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 2930fd0b0..aff295cb0 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -34,6 +34,7 @@
ruoyi-common-tenant
ruoyi-common-websocket
ruoyi-common-sse
+ ruoyi-common-mongo
ruoyi-common
diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml
index 5050abc70..9842b26e8 100644
--- a/ruoyi-common/ruoyi-common-core/pom.xml
+++ b/ruoyi-common/ruoyi-common-core/pom.xml
@@ -106,10 +106,7 @@
com.fasterxml.jackson.core
jackson-annotations
-
- org.dromara
- ruoyi-common-excel
-
+
io.jsonwebtoken
@@ -128,15 +125,28 @@
0.11.2
runtime
-
- org.dromara
- ruoyi-system
-
+
com.github.wechatpay-apiv3
wechatpay-java
0.2.9
+
+ cn.hutool
+ hutool-crypto
+
+
+ org.apache.poi
+ poi
+ 5.4.0
+ compile
+
+
+ com.baomidou
+ mybatis-plus-core
+ 3.5.11
+ compile
+
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/BaseBO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/BaseBO.java
new file mode 100644
index 000000000..cc8a29877
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/BaseBO.java
@@ -0,0 +1,18 @@
+package org.dromara.common.core.domain;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.sql.Wrapper;
+
+public class BaseBO {
+
+ /**
+ * bo转换成queryWrapper
+ *
+ * @return
+ */
+ public QueryWrapper toWrapper() {
+ return null;
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginUser.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginUser.java
index 6d5776df3..75e2d6587 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginUser.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginUser.java
@@ -4,7 +4,6 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.dto.PostDTO;
import org.dromara.common.core.domain.dto.RoleDTO;
-import org.dromara.system.domain.SysUser;
import java.io.Serial;
import java.io.Serializable;
@@ -133,10 +132,6 @@ public class LoginUser implements Serializable {
*/
private String deviceType;
- /**
- * 用户信息
- */
- private SysUser user;
/**
* 获取登录id
@@ -151,9 +146,6 @@ public class LoginUser implements Serializable {
return userType + ":" + userId;
}
- public SysUser getUser()
- {
- return user;
- }
+
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/entity/SysDictData.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/entity/SysDictData.java
deleted file mode 100644
index 669b12d84..000000000
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/entity/SysDictData.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package org.dromara.common.core.entity;
-
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.dromara.common.core.domain.BaseEntity;
-import org.dromara.common.core.domain.event.UserConstants;
-import org.dromara.common.excel.annotation.Excel;
-
-/**
- * 字典数据表 sys_dict_data
- *
- * @author ruoyi
- */
-public class SysDictData extends BaseEntity
-{
- private static final long serialVersionUID = 1L;
-
- /** 字典编码 */
- @Excel(name = "字典编码", cellType = Excel.ColumnType.NUMERIC)
- private Long dictCode;
-
- /** 字典排序 */
- @Excel(name = "字典排序", cellType = Excel.ColumnType.NUMERIC)
- private Long dictSort;
-
- /** 字典标签 */
- @Excel(name = "字典标签")
- private String dictLabel;
-
- /** 字典键值 */
- @Excel(name = "字典键值")
- private String dictValue;
-
- /** 字典类型 */
- @Excel(name = "字典类型")
- private String dictType;
-
- /** 样式属性(其他样式扩展) */
- private String cssClass;
-
- /** 表格字典样式 */
- private String listClass;
-
- /** 是否默认(Y是 N否) */
- @Excel(name = "是否默认", readConverterExp = "Y=是,N=否")
- private String isDefault;
-
- /** 状态(0正常 1停用) */
- @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
- private String status;
-
- public Long getDictCode()
- {
- return dictCode;
- }
-
- public void setDictCode(Long dictCode)
- {
- this.dictCode = dictCode;
- }
-
- public Long getDictSort()
- {
- return dictSort;
- }
-
- public void setDictSort(Long dictSort)
- {
- this.dictSort = dictSort;
- }
-
- @NotBlank(message = "字典标签不能为空")
- @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
- public String getDictLabel()
- {
- return dictLabel;
- }
-
- public void setDictLabel(String dictLabel)
- {
- this.dictLabel = dictLabel;
- }
-
- @NotBlank(message = "字典键值不能为空")
- @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
- public String getDictValue()
- {
- return dictValue;
- }
-
- public void setDictValue(String dictValue)
- {
- this.dictValue = dictValue;
- }
-
- @NotBlank(message = "字典类型不能为空")
- @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
- public String getDictType()
- {
- return dictType;
- }
-
- public void setDictType(String dictType)
- {
- this.dictType = dictType;
- }
-
- @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
- public String getCssClass()
- {
- return cssClass;
- }
-
- public void setCssClass(String cssClass)
- {
- this.cssClass = cssClass;
- }
-
- public String getListClass()
- {
- return listClass;
- }
-
- public void setListClass(String listClass)
- {
- this.listClass = listClass;
- }
-
- public boolean getDefault()
- {
- return UserConstants.YES.equals(this.isDefault) ? true : false;
- }
-
- public String getIsDefault()
- {
- return isDefault;
- }
-
- public void setIsDefault(String isDefault)
- {
- this.isDefault = isDefault;
- }
-
- public String getStatus()
- {
- return status;
- }
-
- public void setStatus(String status)
- {
- this.status = status;
- }
-
- @Override
- public String toString() {
- return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
- .append("dictCode", getDictCode())
- .append("dictSort", getDictSort())
- .append("dictLabel", getDictLabel())
- .append("dictValue", getDictValue())
- .append("dictType", getDictType())
- .append("cssClass", getCssClass())
- .append("listClass", getListClass())
- .append("isDefault", getIsDefault())
- .append("status", getStatus())
- .append("createBy", getCreateBy())
- .append("createTime", getCreateTime())
- .append("updateBy", getUpdateBy())
- .append("updateTime", getUpdateTime())
- .append("remark", getRemark())
- .toString();
- }
-}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/entity/SysUser.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/entity/SysUser.java
deleted file mode 100644
index c1dc4d1ea..000000000
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/entity/SysUser.java
+++ /dev/null
@@ -1,343 +0,0 @@
-package org.dromara.common.core.entity;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import jakarta.validation.constraints.Email;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.dromara.common.core.domain.BaseEntity;
-import org.dromara.common.excel.annotation.Excel;
-import org.dromara.common.excel.annotation.Excels;
-import org.dromara.system.domain.SysDept;
-import org.dromara.system.domain.SysRole;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 用户对象 sys_user
- *
- * @author ruoyi
- */
-public class SysUser extends BaseEntity
-{
- private static final long serialVersionUID = 1L;
-
- /** 用户ID */
- @Excel(name = "用户序号", cellType = Excel.ColumnType.NUMERIC, prompt = "用户编号")
- private Long userId;
-
- /** 部门ID */
- @Excel(name = "部门编号", type = Excel.Type.IMPORT)
- private Long deptId;
-
- /** 用户账号 */
- @Excel(name = "登录名称")
- private String userName;
-
- /** 用户昵称 */
- @Excel(name = "用户名称")
- private String nickName;
-
- /** 用户邮箱 */
- @Excel(name = "用户邮箱")
- private String email;
-
- /** 手机号码 */
- @Excel(name = "手机号码")
- private String phonenumber;
-
- /** 用户性别 */
- @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
- private String sex;
-
- /** 用户头像 */
- private String avatar;
-
- /** 密码 */
- private String password;
-
- /** 盐加密 */
- private String salt;
-
- /** 帐号状态(0正常 1停用) */
- @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
- private String status;
-
- /** 删除标志(0代表存在 2代表删除) */
- private String delFlag;
-
- /** 最后登录IP */
- @Excel(name = "最后登录IP", type = Excel.Type.EXPORT)
- private String loginIp;
-
- /** 最后登录时间 */
- @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
- private Date loginDate;
-
- /** 部门对象 */
- @Excels({
- @Excel(name = "部门名称", targetAttr = "deptName", type = Excel.Type.EXPORT),
- @Excel(name = "部门负责人", targetAttr = "leader", type = Excel.Type.EXPORT)
- })
- private SysDept dept;
-
- /** 角色对象 */
- private List roles;
-
- /** 角色组 */
- private Long[] roleIds;
-
- /** 岗位组 */
- private Long[] postIds;
-
- /** 角色ID */
- private Long roleId;
-
- public SysUser()
- {
-
- }
-
- public SysUser(Long userId)
- {
- this.userId = userId;
- }
-
- public Long getUserId()
- {
- return userId;
- }
-
- public void setUserId(Long userId)
- {
- this.userId = userId;
- }
-
- public boolean isAdmin()
- {
- return isAdmin(this.userId);
- }
-
- public static boolean isAdmin(Long userId)
- {
- return userId != null && 1L == userId;
- }
-
- public Long getDeptId()
- {
- return deptId;
- }
-
- public void setDeptId(Long deptId)
- {
- this.deptId = deptId;
- }
-
- @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
- public String getNickName()
- {
- return nickName;
- }
-
- public void setNickName(String nickName)
- {
- this.nickName = nickName;
- }
-
- @NotBlank(message = "用户账号不能为空")
- @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
- public String getUserName()
- {
- return userName;
- }
-
- public void setUserName(String userName)
- {
- this.userName = userName;
- }
-
- @Email(message = "邮箱格式不正确")
- @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
- public String getEmail()
- {
- return email;
- }
-
- public void setEmail(String email)
- {
- this.email = email;
- }
-
- @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
- public String getPhonenumber()
- {
- return phonenumber;
- }
-
- public void setPhonenumber(String phonenumber)
- {
- this.phonenumber = phonenumber;
- }
-
- public String getSex()
- {
- return sex;
- }
-
- public void setSex(String sex)
- {
- this.sex = sex;
- }
-
- public String getAvatar()
- {
- return avatar;
- }
-
- public void setAvatar(String avatar)
- {
- this.avatar = avatar;
- }
-
- @JsonIgnore
- @JsonProperty
- public String getPassword()
- {
- return password;
- }
-
- public void setPassword(String password)
- {
- this.password = password;
- }
-
- public String getSalt()
- {
- return salt;
- }
-
- public void setSalt(String salt)
- {
- this.salt = salt;
- }
-
- public String getStatus()
- {
- return status;
- }
-
- public void setStatus(String status)
- {
- this.status = status;
- }
-
- public String getDelFlag()
- {
- return delFlag;
- }
-
- public void setDelFlag(String delFlag)
- {
- this.delFlag = delFlag;
- }
-
- public String getLoginIp()
- {
- return loginIp;
- }
-
- public void setLoginIp(String loginIp)
- {
- this.loginIp = loginIp;
- }
-
- public Date getLoginDate()
- {
- return loginDate;
- }
-
- public void setLoginDate(Date loginDate)
- {
- this.loginDate = loginDate;
- }
-
- public SysDept getDept()
- {
- return dept;
- }
-
- public void setDept(SysDept dept)
- {
- this.dept = dept;
- }
-
- public List getRoles()
- {
- return roles;
- }
-
- public void setRoles(List roles)
- {
- this.roles = roles;
- }
-
- public Long[] getRoleIds()
- {
- return roleIds;
- }
-
- public void setRoleIds(Long[] roleIds)
- {
- this.roleIds = roleIds;
- }
-
- public Long[] getPostIds()
- {
- return postIds;
- }
-
- public void setPostIds(Long[] postIds)
- {
- this.postIds = postIds;
- }
-
- public Long getRoleId()
- {
- return roleId;
- }
-
- public void setRoleId(Long roleId)
- {
- this.roleId = roleId;
- }
-
- @Override
- public String toString() {
- return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
- .append("userId", getUserId())
- .append("deptId", getDeptId())
- .append("userName", getUserName())
- .append("nickName", getNickName())
- .append("email", getEmail())
- .append("phonenumber", getPhonenumber())
- .append("sex", getSex())
- .append("avatar", getAvatar())
- .append("password", getPassword())
- .append("salt", getSalt())
- .append("status", getStatus())
- .append("delFlag", getDelFlag())
- .append("loginIp", getLoginIp())
- .append("loginDate", getLoginDate())
- .append("createBy", getCreateBy())
- .append("createTime", getCreateTime())
- .append("updateBy", getUpdateBy())
- .append("updateTime", getUpdateTime())
- .append("remark", getRemark())
- .append("dept", getDept())
- .toString();
- }
-}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/AesCryptoUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/AesCryptoUtils.java
index f5366a484..6f7b396a2 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/AesCryptoUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/AesCryptoUtils.java
@@ -4,6 +4,7 @@ import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
+
/**
* aes加密工具
*/
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java
index ec193b513..41d0f6c25 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java
@@ -1,184 +1,287 @@
package org.dromara.common.core.utils;
import org.apache.commons.lang3.time.DateFormatUtils;
+import org.dromara.common.core.enums.FormatsType;
+import org.dromara.common.core.exception.ServiceException;
import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.temporal.ChronoUnit;
-import java.util.Arrays;
+import java.time.*;
import java.util.Date;
-import java.util.List;
+import java.util.concurrent.TimeUnit;
/**
* 时间工具类
*
* @author ruoyi
*/
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils
-{
- public static String YYYY = "yyyy";
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
+ private static final String[] PARSE_PATTERNS = {
+ "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"};
- 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"};
+ @Deprecated
+ private DateUtils() {
+ }
/**
- * 获取当前Date型日期
+ * 获取当前日期和时间
*
- * @return Date() 当前日期
+ * @return 当前日期和时间的 Date 对象表示
*/
- public static Date getNowDate()
- {
+ public static Date getNowDate() {
return new Date();
}
/**
- * 获取当前日期, 默认格式为yyyy-MM-dd
+ * 获取当前日期的字符串表示,格式为YYYY-MM-DD
*
- * @return String
+ * @return 当前日期的字符串表示
*/
- public static String getDate()
- {
- return dateTimeNow(YYYY_MM_DD);
+ public static String getDate() {
+ return dateTimeNow(FormatsType.YYYY_MM_DD);
}
- public static final String getTime()
- {
- return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+ /**
+ * 获取当前日期的字符串表示,格式为yyyyMMdd
+ *
+ * @return 当前日期的字符串表示
+ */
+ public static String getCurrentDate() {
+ return DateFormatUtils.format(new Date(), FormatsType.YYYYMMDD.getTimeFormat());
}
- public static final String dateTimeNow()
- {
- return dateTimeNow(YYYYMMDDHHMMSS);
+ /**
+ * 获取当前日期的路径格式字符串,格式为"yyyy/MM/dd"
+ *
+ * @return 当前日期的路径格式字符串
+ */
+ public static String datePath() {
+ Date now = new Date();
+ return DateFormatUtils.format(now, FormatsType.YYYY_MM_DD_SLASH.getTimeFormat());
}
- public static final String dateTimeNow(final String format)
- {
+ /**
+ * 获取当前时间的字符串表示,格式为YYYY-MM-DD HH:MM:SS
+ *
+ * @return 当前时间的字符串表示
+ */
+ public static String getTime() {
+ return dateTimeNow(FormatsType.YYYY_MM_DD_HH_MM_SS);
+ }
+
+ /**
+ * 获取当前时间的字符串表示,格式为 "HH:MM:SS"
+ *
+ * @return 当前时间的字符串表示,格式为 "HH:MM:SS"
+ */
+ public static String getTimeWithHourMinuteSecond() {
+ return dateTimeNow(FormatsType.HH_MM_SS);
+ }
+
+ /**
+ * 获取当前日期和时间的字符串表示,格式为YYYYMMDDHHMMSS
+ *
+ * @return 当前日期和时间的字符串表示
+ */
+ public static String dateTimeNow() {
+ return dateTimeNow(FormatsType.YYYYMMDDHHMMSS);
+ }
+
+ /**
+ * 获取当前日期和时间的指定格式的字符串表示
+ *
+ * @param format 日期时间格式,例如"YYYY-MM-DD HH:MM:SS"
+ * @return 当前日期和时间的字符串表示
+ */
+ public static String dateTimeNow(final FormatsType format) {
return parseDateToStr(format, new Date());
}
- public static final String dateTime(final Date date)
- {
- return parseDateToStr(YYYY_MM_DD, date);
+ /**
+ * 将指定日期格式化为 YYYY-MM-DD 格式的字符串
+ *
+ * @param date 要格式化的日期对象
+ * @return 格式化后的日期字符串
+ */
+ public static String formatDate(final Date date) {
+ return parseDateToStr(FormatsType.YYYY_MM_DD, date);
}
- public static final String parseDateToStr(final String format, final Date date)
- {
- return new SimpleDateFormat(format).format(date);
+ /**
+ * 将指定日期格式化为 YYYY-MM-DD HH:MM:SS 格式的字符串
+ *
+ * @param date 要格式化的日期对象
+ * @return 格式化后的日期时间字符串
+ */
+ public static String formatDateTime(final Date date) {
+ return parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM_SS, date);
}
- public static final Date dateTime(final String format, final String ts)
- {
- try
- {
- return new SimpleDateFormat(format).parse(ts);
- }
- catch (ParseException e)
- {
+ /**
+ * 将指定日期按照指定格式进行格式化
+ *
+ * @param format 要使用的日期时间格式,例如"YYYY-MM-DD HH:MM:SS"
+ * @param date 要格式化的日期对象
+ * @return 格式化后的日期时间字符串
+ */
+ public static String parseDateToStr(final FormatsType format, final Date date) {
+ return new SimpleDateFormat(format.getTimeFormat()).format(date);
+ }
+
+ /**
+ * 将指定格式的日期时间字符串转换为 Date 对象
+ *
+ * @param format 要解析的日期时间格式,例如"YYYY-MM-DD HH:MM:SS"
+ * @param ts 要解析的日期时间字符串
+ * @return 解析后的 Date 对象
+ * @throws RuntimeException 如果解析过程中发生异常
+ */
+ public static Date parseDateTime(final FormatsType format, final String ts) {
+ try {
+ return new SimpleDateFormat(format.getTimeFormat()).parse(ts);
+ } catch (ParseException e) {
throw new RuntimeException(e);
}
}
/**
- * 日期路径 即年/月/日 如2018/08/08
+ * 将对象转换为日期对象
+ *
+ * @param str 要转换的对象,通常是字符串
+ * @return 转换后的日期对象,如果转换失败或输入为null,则返回null
*/
- 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 Date parseDate(Object str)
- {
- if (str == null)
- {
+ public static Date parseDate(Object str) {
+ if (str == null) {
return null;
}
- try
- {
- return parseDate(str.toString(), parsePatterns);
- }
- catch (ParseException e)
- {
+ try {
+ return parseDate(str.toString(), PARSE_PATTERNS);
+ } catch (ParseException e) {
return null;
}
}
/**
* 获取服务器启动时间
+ *
+ * @return 服务器启动时间的 Date 对象表示
*/
- public static Date getServerStartDate()
- {
+ public static Date getServerStartDate() {
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
return new Date(time);
}
/**
- * 计算两个时间差
+ * 计算两个日期之间的天数差(以毫秒为单位)
+ *
+ * @param date1 第一个日期
+ * @param date2 第二个日期
+ * @return 两个日期之间的天数差的绝对值
*/
- public static String getDatePoor(Date endDate, Date nowDate)
- {
- long nd = 1000 * 24 * 60 * 60;
- long nh = 1000 * 60 * 60;
- long nm = 1000 * 60;
- // long ns = 1000;
- // 获得两个时间的毫秒时间差异
- long diff = endDate.getTime() - nowDate.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 + "分钟";
+ public static int differentDaysByMillisecond(Date date1, Date date2) {
+ return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
}
/**
- * 获取2个时间间隔天数
- * @param beginTime
- * @param endTime
- * @return
+ * 计算两个日期之间的时间差,并以天、小时和分钟的格式返回
+ *
+ * @param endDate 结束日期
+ * @param nowDate 当前日期
+ * @return 表示时间差的字符串,格式为"天 小时 分钟"
*/
- public static Long betweenDay(LocalDateTime beginTime, LocalDateTime endTime){
- return ChronoUnit.DAYS.between(beginTime.toLocalDate().atStartOfDay(),endTime.toLocalDate().atStartOfDay());
+ public static String getDatePoor(Date endDate, Date nowDate) {
+ long diffInMillis = endDate.getTime() - nowDate.getTime();
+ long day = TimeUnit.MILLISECONDS.toDays(diffInMillis);
+ long hour = TimeUnit.MILLISECONDS.toHours(diffInMillis) % 24;
+ long min = TimeUnit.MILLISECONDS.toMinutes(diffInMillis) % 60;
+ return String.format("%d天 %d小时 %d分钟", day, hour, min);
}
- public static List getTimeDiff(int days){
- // 获取当前日期
- LocalDate current = LocalDate.now();
-
- // 获取第一天
- LocalDate firstDayOfLastMonth = current.minusMonths(days).withDayOfMonth(1);
- // 获取上个月最后一天
- LocalDate lastDayOfLastMonth = firstDayOfLastMonth.plusMonths(1).withDayOfMonth(1).minusDays(1);
-
- return Arrays.asList(LocalDateTime.of(firstDayOfLastMonth, LocalTime.MIN),LocalDateTime.of(lastDayOfLastMonth, LocalTime.MAX));
+ /**
+ * 计算两个时间点的差值(天、小时、分钟、秒),当值为0时不显示该单位
+ *
+ * @param endDate 结束时间
+ * @param nowDate 当前时间
+ * @return 时间差字符串,格式为 "x天 x小时 x分钟 x秒",若为 0 则不显示
+ */
+ public static String getTimeDifference(Date endDate, Date nowDate) {
+ long diffInMillis = endDate.getTime() - nowDate.getTime();
+ long day = TimeUnit.MILLISECONDS.toDays(diffInMillis);
+ long hour = TimeUnit.MILLISECONDS.toHours(diffInMillis) % 24;
+ long min = TimeUnit.MILLISECONDS.toMinutes(diffInMillis) % 60;
+ long sec = TimeUnit.MILLISECONDS.toSeconds(diffInMillis) % 60;
+ // 构建时间差字符串,条件是值不为0才显示
+ StringBuilder result = new StringBuilder();
+ if (day > 0) {
+ result.append(String.format("%d天 ", day));
+ }
+ if (hour > 0) {
+ result.append(String.format("%d小时 ", hour));
+ }
+ if (min > 0) {
+ result.append(String.format("%d分钟 ", min));
+ }
+ if (sec > 0) {
+ result.append(String.format("%d秒", sec));
+ }
+ return result.length() > 0 ? result.toString().trim() : "0秒";
}
+
+ /**
+ * 将 LocalDateTime 对象转换为 Date 对象
+ *
+ * @param temporalAccessor 要转换的 LocalDateTime 对象
+ * @return 转换后的 Date 对象
+ */
+ public static Date toDate(LocalDateTime temporalAccessor) {
+ ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
+ return Date.from(zdt.toInstant());
+ }
+
+ /**
+ * 将 LocalDate 对象转换为 Date 对象
+ *
+ * @param temporalAccessor 要转换的 LocalDate 对象
+ * @return 转换后的 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());
+ }
+
+ /**
+ * 校验日期范围
+ *
+ * @param startDate 开始日期
+ * @param endDate 结束日期
+ * @param maxValue 最大时间跨度的限制值
+ * @param unit 时间跨度的单位,可选择 "DAYS"、"HOURS" 或 "MINUTES"
+ */
+ public static void validateDateRange(Date startDate, Date endDate, int maxValue, TimeUnit unit) {
+ // 校验结束日期不能早于开始日期
+ if (endDate.before(startDate)) {
+ throw new ServiceException("结束日期不能早于开始日期");
+ }
+
+ // 计算时间跨度
+ long diffInMillis = endDate.getTime() - startDate.getTime();
+
+ // 根据单位转换时间跨度
+ long diff = switch (unit) {
+ case DAYS -> TimeUnit.MILLISECONDS.toDays(diffInMillis);
+ case HOURS -> TimeUnit.MILLISECONDS.toHours(diffInMillis);
+ case MINUTES -> TimeUnit.MILLISECONDS.toMinutes(diffInMillis);
+ default -> throw new IllegalArgumentException("不支持的时间单位");
+ };
+
+ // 校验时间跨度不超过最大限制
+ if (diff > maxValue) {
+ throw new ServiceException("最大时间跨度为 " + maxValue + " " + unit.toString().toLowerCase());
+ }
+ }
+
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DictUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DictUtils.java
deleted file mode 100644
index 76e443369..000000000
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DictUtils.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.dromara.common.core.utils;
-
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.core.domain.entity.SysDictData;
-import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.common.utils.spring.SpringUtils;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 字典工具类
- *
- * @author ruoyi
- */
-public class DictUtils
-{
- /**
- * 分隔符
- */
- public static final String SEPARATOR = ",";
-
- /**
- * 设置字典缓存
- *
- * @param key 参数键
- * @param dictDatas 字典数据列表
- */
- public static void setDictCache(String key, List dictDatas)
- {
- SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas);
- }
-
- /**
- * 获取字典缓存
- *
- * @param key 参数键
- * @return dictDatas 字典数据列表
- */
- public static List getDictCache(String key)
- {
- Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
- if (StringUtils.isNotNull(cacheObj))
- {
- List dictDatas = StringUtils.cast(cacheObj);
- return dictDatas;
- }
- return null;
- }
-
- /**
- * 根据字典类型和字典值获取字典标签
- *
- * @param dictType 字典类型
- * @param dictValue 字典值
- * @return 字典标签
- */
- public static String getDictLabel(String dictType, String dictValue)
- {
- return getDictLabel(dictType, dictValue, SEPARATOR);
- }
-
- /**
- * 根据字典类型和字典标签获取字典值
- *
- * @param dictType 字典类型
- * @param dictLabel 字典标签
- * @return 字典值
- */
- public static String getDictValue(String dictType, String dictLabel)
- {
- return getDictValue(dictType, dictLabel, SEPARATOR);
- }
-
- /**
- * 根据字典类型和字典值获取字典标签
- *
- * @param dictType 字典类型
- * @param dictValue 字典值
- * @param separator 分隔符
- * @return 字典标签
- */
- public static String getDictLabel(String dictType, String dictValue, String separator)
- {
- StringBuilder propertyString = new StringBuilder();
- List datas = getDictCache(dictType);
-
- if (StringUtils.containsAny(separator, dictValue) && StringUtils.isNotEmpty(datas))
- {
- for (SysDictData dict : datas)
- {
- for (String value : dictValue.split(separator))
- {
- if (value.equals(dict.getDictValue()))
- {
- propertyString.append(dict.getDictLabel() + separator);
- break;
- }
- }
- }
- }
- else
- {
- for (SysDictData dict : datas)
- {
- if (dictValue.equals(dict.getDictValue()))
- {
- return dict.getDictLabel();
- }
- }
- }
- return StringUtils.stripEnd(propertyString.toString(), separator);
- }
-
- /**
- * 根据字典类型和字典标签获取字典值
- *
- * @param dictType 字典类型
- * @param dictLabel 字典标签
- * @param separator 分隔符
- * @return 字典值
- */
- public static String getDictValue(String dictType, String dictLabel, String separator)
- {
- StringBuilder propertyString = new StringBuilder();
- List datas = getDictCache(dictType);
-
- if (StringUtils.containsAny(separator, dictLabel) && StringUtils.isNotEmpty(datas))
- {
- for (SysDictData dict : datas)
- {
- for (String label : dictLabel.split(separator))
- {
- if (label.equals(dict.getDictLabel()))
- {
- propertyString.append(dict.getDictValue() + separator);
- break;
- }
- }
- }
- }
- else
- {
- for (SysDictData dict : datas)
- {
- if (dictLabel.equals(dict.getDictLabel()))
- {
- return dict.getDictValue();
- }
- }
- }
- return StringUtils.stripEnd(propertyString.toString(), separator);
- }
-
- /**
- * 删除指定字典缓存
- *
- * @param key 字典键
- */
- public static void removeDictCache(String key)
- {
- SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key));
- }
-
- /**
- * 清空字典缓存
- */
- public static void clearDictCache()
- {
- Collection keys = SpringUtils.getBean(RedisCache.class).keys(Constants.SYS_DICT_KEY + "*");
- SpringUtils.getBean(RedisCache.class).deleteObject(keys);
- }
-
- /**
- * 设置cache key
- *
- * @param configKey 参数键
- * @return 缓存键key
- */
- public static String getCacheKey(String configKey)
- {
- return Constants.SYS_DICT_KEY + configKey;
- }
-}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ImageUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ImageUtils.java
index db9cb481c..1be913f15 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ImageUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ImageUtils.java
@@ -59,7 +59,6 @@ public class ImageUtils
/**
* 读取文件为字节数据
*
- * @param key 地址
* @return 字节数据
*/
public static byte[] readFile(String url)
diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java
index 42cc27055..9d8d33595 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java
@@ -26,8 +26,8 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDataValidation;
import org.dromara.common.core.config.RuoYiConfig;
+import org.dromara.common.core.enums.FormatsType;
import org.dromara.common.core.utils.DateUtils;
-import org.dromara.common.core.utils.DictUtils;
import org.dromara.common.core.utils.ImageUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.file.FileTypeUtils;
@@ -852,7 +852,7 @@ public class ExcelUtil {
String dictType = attr.dictType();
if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value))
{
- cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value));
+ cell.setCellValue(DateUtils.parseDateToStr(FormatsType.valueOf(dateFormat), (Date) value));
}
else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value))
{
@@ -1003,7 +1003,8 @@ public class ExcelUtil {
*/
public static String convertDictByExp(String dictValue, String dictType, String separator)
{
- return DictUtils.getDictLabel(dictType, dictValue, separator);
+// return DictUtils.getDictLabel(dictType, dictValue, separator);
+ return null;
}
/**
diff --git a/ruoyi-common/ruoyi-common-mongo/pom.xml b/ruoyi-common/ruoyi-common-mongo/pom.xml
new file mode 100644
index 000000000..53cf6907c
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-mongo/pom.xml
@@ -0,0 +1,34 @@
+
+
+ org.dromara
+ ruoyi-common
+ ${revision}
+
+ 4.0.0
+
+ ruoyi-common-mongo
+
+
+ ruoyi-common-mongo
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+ org.dromara
+ ruoyi-common-log
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
+
+
+
+
+
diff --git a/ruoyi-common/ruoyi-common-mongo/src/main/resources/META-INF/maven/archetype.xml b/ruoyi-common/ruoyi-common-mongo/src/main/resources/META-INF/maven/archetype.xml
new file mode 100644
index 000000000..223e1e18d
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-mongo/src/main/resources/META-INF/maven/archetype.xml
@@ -0,0 +1,9 @@
+
+ ruoyi-common-mongo
+
+ src/main/java/App.java
+
+
+ src/test/java/AppTest.java
+
+
diff --git a/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/pom.xml b/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/pom.xml
new file mode 100644
index 000000000..54309cd56
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/pom.xml
@@ -0,0 +1,15 @@
+
+ 4.0.0
+ $org.dromara
+ $ruoyi-common-mongo
+ $5.3.1
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
diff --git a/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/src/main/java/App.java b/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/src/main/java/App.java
new file mode 100644
index 000000000..ed7b66c32
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/src/main/java/App.java
@@ -0,0 +1,13 @@
+package $org.dromara;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/src/test/java/AppTest.java b/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/src/test/java/AppTest.java
new file mode 100644
index 000000000..75b67fcd1
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-mongo/src/main/resources/archetype-resources/src/test/java/AppTest.java
@@ -0,0 +1,38 @@
+package $org.dromara;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java
index 13a794162..969ae6b5e 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java
@@ -8,6 +8,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
+import java.time.LocalDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -46,7 +47,7 @@ public class BaseEntity implements Serializable {
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
- private Date createTime;
+ private LocalDateTime createTime;
/**
* 更新者
@@ -58,7 +59,7 @@ public class BaseEntity implements Serializable {
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
+ private LocalDateTime updateTime;
/**
* 请求参数
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java
index fec25792a..713d4ce0c 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java
@@ -11,6 +11,7 @@ import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.satoken.utils.LoginHelper;
+import java.time.LocalDateTime;
import java.util.Date;
/**
@@ -32,7 +33,7 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
try {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity baseEntity) {
// 获取当前时间作为创建时间和更新时间,如果创建时间不为空,则使用创建时间,否则使用当前时间
- Date current = ObjectUtils.notNull(baseEntity.getCreateTime(), new Date());
+ LocalDateTime current = ObjectUtils.notNull(baseEntity.getCreateTime(), LocalDateTime.now());
baseEntity.setCreateTime(current);
baseEntity.setUpdateTime(current);
@@ -67,8 +68,7 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
try {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity baseEntity) {
// 获取当前时间作为更新时间,无论原始对象中的更新时间是否为空都填充
- Date current = new Date();
- baseEntity.setUpdateTime(current);
+ baseEntity.setUpdateTime(LocalDateTime.now());
// 获取当前登录用户的ID,并填充更新人信息
Long userId = LoginHelper.getUserId();
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
index 4e1b3632a..de5119e91 100644
--- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
@@ -3,6 +3,7 @@ package org.dromara.common.oss.core;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import org.dromara.common.core.constant.Constants;
+import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.file.FileUtils;
import org.dromara.common.oss.constant.OssConstant;
diff --git a/ruoyi-common/ruoyi-common-web/pom.xml b/ruoyi-common/ruoyi-common-web/pom.xml
index b250fa9d0..128d54cc3 100644
--- a/ruoyi-common/ruoyi-common-web/pom.xml
+++ b/ruoyi-common/ruoyi-common-web/pom.xml
@@ -57,6 +57,16 @@
cn.hutool
hutool-crypto
+
+ com.baomidou
+ mybatis-plus-core
+ 3.5.11
+ compile
+
+
+ org.dromara
+ ruoyi-common-mybatis
+
diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/BaseConverter.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/BaseConverter.java
new file mode 100644
index 000000000..4649c91cc
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/BaseConverter.java
@@ -0,0 +1,43 @@
+package org.dromara.common.web.core;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+import java.util.List;
+
+public interface BaseConverter {
+ /**
+ * dto转vo
+ * @param t
+ * @return
+ */
+ V convertToVO(T t);
+
+ /**
+ * dto列表转vo
+ * @param tList
+ * @return
+ */
+ List convertToVO(List tList);
+ /**
+ * dto分页转vo
+ * @param tPage
+ * @return
+ */
+ TableDataInfo convertToVO(IPage tPage);
+
+
+
+
+ /**
+ * dto转po
+ * @param d
+ * @return
+ */
+ T convertToPo(B d);
+
+
+
+
+}
diff --git a/ruoyi-front/ruoyi-manager/pom.xml b/ruoyi-front/ruoyi-manager/pom.xml
index ba7e298ae..603402bc4 100644
--- a/ruoyi-front/ruoyi-manager/pom.xml
+++ b/ruoyi-front/ruoyi-manager/pom.xml
@@ -101,5 +101,19 @@
org.dromara
ruoyi-system
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+
+
+ com.github.xiaoymin
+ knife4j-springdoc-ui
+
+
+ org.dromara
+ ruoyi-member
+ 5.3.1
+ compile
+
diff --git a/ruoyi-front/ruoyi-manager/src/main/java/com/wzj/soopin/manager/member/controller/FeedbackController.java b/ruoyi-front/ruoyi-manager/src/main/java/com/wzj/soopin/manager/member/controller/FeedbackController.java
new file mode 100644
index 000000000..b3f80fa2a
--- /dev/null
+++ b/ruoyi-front/ruoyi-manager/src/main/java/com/wzj/soopin/manager/member/controller/FeedbackController.java
@@ -0,0 +1,66 @@
+package com.wzj.soopin.manager.member.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.wzj.soopin.member.convert.FeedbackConvert;
+import com.wzj.soopin.member.domain.po.Feedback;
+import com.wzj.soopin.member.domain.bo.FeedbackBO;
+import com.wzj.soopin.member.domain.vo.FeedbackVO;
+import com.wzj.soopin.member.service.IFeedbackService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.web.core.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 意见反馈Controller
+ *
+ * @author zcc
+ * @date 2024-02-26
+ */
+@Api(description ="意见反馈接口列表")
+@RestController
+@RequestMapping("/ums/feedback")
+public class FeedbackController extends BaseController {
+ @Autowired
+ private IFeedbackService service;
+ @Autowired
+ private FeedbackConvert convert;
+
+// @ApiOperation("查询意见反馈列表")
+// @PostMapping("/list")
+// public ResponseEntity> list(@RequestBody FeedbackBO query, IPage page) {
+// service.page(page,query.toWrapper());
+// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
+// }
+
+
+// @ApiOperation("修改意见反馈备注信息")
+// @Log(title = "意见反馈", businessType = BusinessType.UPDATE)
+// @PostMapping("/mark/update")
+// public ResponseEntity editMark(@RequestBody Feedback feedback) {
+// return ResponseEntity.ok(service.updateMark(feedback));
+// }
+
+// @ApiOperation(("修改状态"))
+// @Log(title = "意见反馈", businessType = BusinessType.UPDATE)
+// @PostMapping("/handle/status/change")
+// public ResponseEntity changeStatus(@RequestBody Feedback dto){
+// return ResponseEntity.ok(service.changeStatus(dto));
+// }
+
+
+ @ApiOperation("删除意见反馈")
+ @Log(title = "意见反馈", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{id}")
+ public ResponseEntity