diff --git a/pom.xml b/pom.xml
index 21f8ea0f..c2d12d28 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
2.3
0.9.1
- 9.0.96
+ 9.0.98
1.2.13
5.7.12
5.3.39
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
index a3487b8e..f0befe7c 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
@@ -37,7 +37,7 @@ public class TableDataInfo implements Serializable
* @param list 列表数据
* @param total 总记录数
*/
- public TableDataInfo(List> list, int total)
+ public TableDataInfo(List> list, long total)
{
this.rows = list;
this.total = total;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
index 938d0c9f..3a25fcd8 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
@@ -541,7 +541,7 @@ public class Convert
/**
* 转换为boolean
- * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * String支持的值为:true、false、yes、ok、no、1、0、是、否, 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
@@ -570,10 +570,12 @@ public class Convert
case "yes":
case "ok":
case "1":
+ case "是":
return true;
case "false":
case "no":
case "0":
+ case "否":
return false;
default:
return defaultValue;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
index b6326c2b..9f95c0f3 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
@@ -108,7 +108,6 @@ public class Arith
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
- BigDecimal one = BigDecimal.ONE;
- return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();
+ return b.divide(BigDecimal.ONE, scale, RoundingMode.HALF_UP).doubleValue();
}
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
index fc6c6b5e..920968fa 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
@@ -286,6 +286,32 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
return str.substring(start, end);
}
+ /**
+ * 在字符串中查找第一个出现的 `open` 和最后一个出现的 `close` 之间的子字符串
+ *
+ * @param str 要截取的字符串
+ * @param open 起始字符串
+ * @param close 结束字符串
+ * @return 截取结果
+ */
+ public static String substringBetweenLast(final String str, final String open, final String close)
+ {
+ if (isEmpty(str) || isEmpty(open) || isEmpty(close))
+ {
+ return NULLSTR;
+ }
+ final int start = str.indexOf(open);
+ if (start != INDEX_NOT_FOUND)
+ {
+ final int end = str.lastIndexOf(close);
+ if (end != INDEX_NOT_FOUND)
+ {
+ return str.substring(start + open.length(), end);
+ }
+ }
+ return NULLSTR;
+ }
+
/**
* 判断是否为空,并且不是空白字符
*
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
index d3b61cad..d5057891 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -21,6 +21,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.StringUtils;
+import org.springframework.http.MediaType;
/**
* 通用http发送方法
@@ -125,6 +126,19 @@ public class HttpUtils
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param)
+ {
+ return sendPost(url, param, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+ }
+
+ /**
+ * 向指定 URL 发送POST方法的请求
+ *
+ * @param url 发送请求的 URL
+ * @param param 请求参数
+ * @param contentType 内容类型
+ * @return 所代表远程资源的响应结果
+ */
+ public static String sendPost(String url, String param, String contentType)
{
PrintWriter out = null;
BufferedReader in = null;
@@ -138,7 +152,7 @@ public class HttpUtils
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
conn.setRequestProperty("Accept-Charset", "utf-8");
- conn.setRequestProperty("contentType", "utf-8");
+ conn.setRequestProperty("Content-Type", contentType);
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
@@ -190,6 +204,11 @@ public class HttpUtils
}
public static String sendSSLPost(String url, String param)
+ {
+ return sendSSLPost(url, param, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+ }
+
+ public static String sendSSLPost(String url, String param, String contentType)
{
StringBuilder result = new StringBuilder();
String urlNameString = url + "?" + param;
@@ -204,7 +223,7 @@ public class HttpUtils
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
conn.setRequestProperty("Accept-Charset", "utf-8");
- conn.setRequestProperty("contentType", "utf-8");
+ conn.setRequestProperty("Content-Type", contentType);
conn.setDoOutput(true);
conn.setDoInput(true);
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 7390b518..9191c7a1 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
@@ -1148,6 +1148,7 @@ public class ExcelUtil
String dictType = attr.dictType();
if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value))
{
+ cell.getCellStyle().setDataFormat(this.wb.getCreationHelper().createDataFormat().getFormat(dateFormat));
cell.setCellValue(parseDateToStr(dateFormat, value));
}
else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value))
@@ -1448,8 +1449,7 @@ public class ExcelUtil
*/
public String encodingFilename(String filename)
{
- filename = UUID.randomUUID() + "_" + filename + ".xlsx";
- return filename;
+ return UUID.randomUUID() + "_" + filename + ".xlsx";
}
/**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java
index 2c251a91..64a0249b 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java
@@ -1,5 +1,6 @@
package com.ruoyi.common.utils.spring;
+import org.springframework.aop.framework.Advised;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@@ -120,7 +121,12 @@ public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationC
@SuppressWarnings("unchecked")
public static T getAopProxy(T invoker)
{
- return (T) AopContext.currentProxy();
+ Object proxy = AopContext.currentProxy();
+ if (((Advised) proxy).getTargetSource().getTargetClass() == invoker.getClass())
+ {
+ return (T) proxy;
+ }
+ return invoker;
}
/**
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
index ca9a10f7..2da41fec 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
@@ -20,9 +20,11 @@ import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.BusinessStatus;
import com.ruoyi.common.enums.HttpMethod;
import com.ruoyi.common.filter.PropertyPreExcludeFilter;
+import com.ruoyi.common.utils.ExceptionUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -52,7 +54,7 @@ public class LogAspect
* 处理请求前执行
*/
@Before(value = "@annotation(controllerLog)")
- public void boBefore(JoinPoint joinPoint, Log controllerLog)
+ public void doBefore(JoinPoint joinPoint, Log controllerLog)
{
TIME_THREADLOCAL.set(System.currentTimeMillis());
}
@@ -107,7 +109,7 @@ public class LogAspect
if (e != null)
{
operLog.setStatus(BusinessStatus.FAIL.ordinal());
- operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
+ operLog.setErrorMsg(StringUtils.substring(Convert.toStr(e.getMessage(), ExceptionUtil.getExceptionMessage(e)), 0, 2000));
}
// 设置方法名称
String className = joinPoint.getTarget().getClass().getName();
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
index b6afb5db..12d35494 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
@@ -55,7 +55,6 @@ public class ResourcesConfig implements WebMvcConfigurer
public CorsFilter corsFilter()
{
CorsConfiguration config = new CorsConfiguration();
- config.setAllowCredentials(true);
// 设置访问源地址
config.addAllowedOriginPattern("*");
// 设置访问源请求头
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java
index dbfccde2..8fa7e485 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java
@@ -70,7 +70,7 @@ public class SysPermissionService
// 多角色设置permissions属性,以便数据权限匹配权限
for (SysRole role : roles)
{
- if (StringUtils.equals(role.getStatus(), UserConstants.ROLE_NORMAL))
+ if (StringUtils.equals(role.getStatus(), UserConstants.ROLE_NORMAL) && !role.isAdmin())
{
Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
role.setPermissions(rolePerms);
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
index e062fafb..e5179a3f 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
@@ -25,7 +25,7 @@ import io.jsonwebtoken.SignatureAlgorithm;
/**
* token验证处理
- *
+ *
* @author ruoyi
*/
@Component
@@ -49,14 +49,14 @@ public class TokenService
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
- private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L;
+ private static final Long MILLIS_MINUTE_TWENTY = 20 * 60 * 1000L;
@Autowired
private RedisCache redisCache;
/**
* 获取用户身份信息
- *
+ *
* @return 用户信息
*/
public LoginUser getLoginUser(HttpServletRequest request)
@@ -107,7 +107,7 @@ public class TokenService
/**
* 创建令牌
- *
+ *
* @param loginUser 用户信息
* @return 令牌
*/
@@ -120,20 +120,21 @@ public class TokenService
Map claims = new HashMap<>();
claims.put(Constants.LOGIN_USER_KEY, token);
+ claims.put(Constants.JWT_USERNAME, loginUser.getUsername());
return createToken(claims);
}
/**
* 验证令牌有效期,相差不足20分钟,自动刷新缓存
- *
- * @param loginUser
+ *
+ * @param loginUser 登录信息
* @return 令牌
*/
public void verifyToken(LoginUser loginUser)
{
long expireTime = loginUser.getExpireTime();
long currentTime = System.currentTimeMillis();
- if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
+ if (expireTime - currentTime <= MILLIS_MINUTE_TWENTY)
{
refreshToken(loginUser);
}
@@ -141,7 +142,7 @@ public class TokenService
/**
* 刷新令牌有效期
- *
+ *
* @param loginUser 登录信息
*/
public void refreshToken(LoginUser loginUser)
@@ -155,7 +156,7 @@ public class TokenService
/**
* 设置用户代理信息
- *
+ *
* @param loginUser 登录信息
*/
public void setUserAgent(LoginUser loginUser)
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
index 99a837aa..5f570d5b 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
@@ -128,9 +128,9 @@ public class GenTableServiceImpl implements IGenTableService
int row = genTableMapper.updateGenTable(genTable);
if (row > 0)
{
- for (GenTableColumn cenTableColumn : genTable.getColumns())
+ for (GenTableColumn genTableColumn : genTable.getColumns())
{
- genTableColumnMapper.updateGenTableColumn(cenTableColumn);
+ genTableColumnMapper.updateGenTableColumn(genTableColumn);
}
}
}
@@ -424,16 +424,16 @@ public class GenTableServiceImpl implements IGenTableService
{
throw new ServiceException("树名称字段不能为空");
}
- else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory()))
+ }
+ else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory()))
+ {
+ if (StringUtils.isEmpty(genTable.getSubTableName()))
{
- if (StringUtils.isEmpty(genTable.getSubTableName()))
- {
- throw new ServiceException("关联子表的表名不能为空");
- }
- else if (StringUtils.isEmpty(genTable.getSubTableFkName()))
- {
- throw new ServiceException("子表关联的外键名不能为空");
- }
+ throw new ServiceException("关联子表的表名不能为空");
+ }
+ else if (StringUtils.isEmpty(genTable.getSubTableFkName()))
+ {
+ throw new ServiceException("子表关联的外键名不能为空");
}
}
}
diff --git a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
index 94a40a96..4535e84c 100644
--- a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
+++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
@@ -71,9 +71,9 @@ public class ${ClassName} extends ${Entity}
{
return $column.javaField;
}
-#end
-#end
+#end
+#end
#if($table.sub)
public List<${subClassName}> get${subClassName}List()
{
diff --git a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
index cbfb7cd7..b0233bc9 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
@@ -75,7 +75,7 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
- v-hasPermi="['${moduleName}:${businessName}:add']"
+ v-hasPermi="['${permissionPrefix}:add']"
>新增
@@ -144,21 +144,21 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
- v-hasPermi="['${moduleName}:${businessName}:edit']"
+ v-hasPermi="['${permissionPrefix}:edit']"
>修改
新增
删除
diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
index 70ff30dd..ce2b47a9 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -75,7 +75,7 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
- v-hasPermi="['${moduleName}:${businessName}:add']"
+ v-hasPermi="['${permissionPrefix}:add']"
>新增
@@ -86,7 +86,7 @@
size="mini"
:disabled="single"
@click="handleUpdate"
- v-hasPermi="['${moduleName}:${businessName}:edit']"
+ v-hasPermi="['${permissionPrefix}:edit']"
>修改
@@ -97,7 +97,7 @@
size="mini"
:disabled="multiple"
@click="handleDelete"
- v-hasPermi="['${moduleName}:${businessName}:remove']"
+ v-hasPermi="['${permissionPrefix}:remove']"
>删除
@@ -107,7 +107,7 @@
icon="el-icon-download"
size="mini"
@click="handleExport"
- v-hasPermi="['${moduleName}:${businessName}:export']"
+ v-hasPermi="['${permissionPrefix}:export']"
>导出
@@ -158,14 +158,14 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
- v-hasPermi="['${moduleName}:${businessName}:edit']"
+ v-hasPermi="['${permissionPrefix}:edit']"
>修改
删除
diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
index c54d62bf..cd7c5b51 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
@@ -73,7 +73,7 @@
plain
icon="Plus"
@click="handleAdd"
- v-hasPermi="['${moduleName}:${businessName}:add']"
+ v-hasPermi="['${permissionPrefix}:add']"
>新增
@@ -136,9 +136,9 @@
#end
- 修改
- 新增
- 删除
+ 修改
+ 新增
+ 删除
diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
index 8b25665a..ca79b356 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
@@ -73,7 +73,7 @@
plain
icon="Plus"
@click="handleAdd"
- v-hasPermi="['${moduleName}:${businessName}:add']"
+ v-hasPermi="['${permissionPrefix}:add']"
>新增
@@ -83,7 +83,7 @@
icon="Edit"
:disabled="single"
@click="handleUpdate"
- v-hasPermi="['${moduleName}:${businessName}:edit']"
+ v-hasPermi="['${permissionPrefix}:edit']"
>修改
@@ -93,7 +93,7 @@
icon="Delete"
:disabled="multiple"
@click="handleDelete"
- v-hasPermi="['${moduleName}:${businessName}:remove']"
+ v-hasPermi="['${permissionPrefix}:remove']"
>删除
@@ -102,7 +102,7 @@
plain
icon="Download"
@click="handleExport"
- v-hasPermi="['${moduleName}:${businessName}:export']"
+ v-hasPermi="['${permissionPrefix}:export']"
>导出
@@ -148,8 +148,8 @@
#end
- 修改
- 删除
+ 修改
+ 删除
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
index 9a90d7b1..86fdb927 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
@@ -105,7 +105,7 @@ public class JobInvokeUtil
*/
public static List