Преглед изворни кода

Update 优化代码,springboot 3.5.4 => 3.5.6,springboot-admin 3.5.3 -> 3.5.5, mybatis-plus 3.5.12 => 3.5.14,mapstruct-plus 1.4.8 => 1.5.0,sms4j 3.3.4 => 3.3.5

Yue пре 6 месеци
родитељ
комит
887b6b2546

+ 5 - 5
SERVER/VberAdminPlusV3/pom.xml

@@ -22,11 +22,11 @@
         <java.version>17</java.version>
         <java.version>17</java.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <spring-boot.version>3.5.4</spring-boot.version>
-        <spring-boot-admin.version>3.5.1</spring-boot-admin.version>
+        <spring-boot.version>3.5.6</spring-boot.version>
+        <spring-boot-admin.version>3.5.5</spring-boot-admin.version>
         <springdoc.version>2.8.13</springdoc.version>
         <springdoc.version>2.8.13</springdoc.version>
         <mybatis.version>3.5.16</mybatis.version>
         <mybatis.version>3.5.16</mybatis.version>
-        <mybatis-plus.version>3.5.12</mybatis-plus.version>
+        <mybatis-plus.version>3.5.14</mybatis-plus.version>
         <dynamic-ds.version>4.3.1</dynamic-ds.version>
         <dynamic-ds.version>4.3.1</dynamic-ds.version>
         <shardingsphere.version>5.5.0</shardingsphere.version>
         <shardingsphere.version>5.5.0</shardingsphere.version>
         <therapi-javadoc.version>0.15.0</therapi-javadoc.version>
         <therapi-javadoc.version>0.15.0</therapi-javadoc.version>
@@ -39,7 +39,7 @@
         <p6spy.version>3.9.1</p6spy.version>
         <p6spy.version>3.9.1</p6spy.version>
         <hutool.version>5.8.40</hutool.version>
         <hutool.version>5.8.40</hutool.version>
         <lock4j.version>2.2.7</lock4j.version>
         <lock4j.version>2.2.7</lock4j.version>
-        <mapstruct-plus.version>1.4.8</mapstruct-plus.version>
+        <mapstruct-plus.version>1.5.0</mapstruct-plus.version>
         <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
         <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
         <lombok.version>1.18.38</lombok.version>
         <lombok.version>1.18.38</lombok.version>
         <bouncycastle.version>1.80</bouncycastle.version>
         <bouncycastle.version>1.80</bouncycastle.version>
@@ -50,7 +50,7 @@
         <!-- OSS 配置 -->
         <!-- OSS 配置 -->
         <aws.sdk.version>2.28.22</aws.sdk.version>
         <aws.sdk.version>2.28.22</aws.sdk.version>
         <!-- SMS 配置 -->
         <!-- SMS 配置 -->
-        <sms4j.version>3.3.4</sms4j.version>
+        <sms4j.version>3.3.5</sms4j.version>
         <!-- 限制框架中的fastjson版本 -->
         <!-- 限制框架中的fastjson版本 -->
         <fastjson.version>1.2.83</fastjson.version>
         <fastjson.version>1.2.83</fastjson.version>
         <!-- 面向运行时的D-ORM依赖 -->
         <!-- 面向运行时的D-ORM依赖 -->

+ 11 - 34
SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/core/mapper/BaseMapperPlus.java

@@ -6,13 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.reflect.GenericTypeUtils;
 import com.baomidou.mybatisplus.core.toolkit.reflect.GenericTypeUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.toolkit.Db;
 import com.baomidou.mybatisplus.extension.toolkit.Db;
 import com.vber.common.core.utils.MapstructUtils;
 import com.vber.common.core.utils.MapstructUtils;
 import com.vber.common.core.utils.StreamUtils;
 import com.vber.common.core.utils.StreamUtils;
-import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
 import org.apache.ibatis.logging.LogFactory;
 
 
@@ -31,6 +29,7 @@ import java.util.function.Function;
  */
  */
 @SuppressWarnings("unchecked")
 @SuppressWarnings("unchecked")
 public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
 public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
+
     Log log = LogFactory.getLog(BaseMapperPlus.class);
     Log log = LogFactory.getLog(BaseMapperPlus.class);
 
 
     /**
     /**
@@ -130,7 +129,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
      * @return 查询到的单个VO对象
      * @return 查询到的单个VO对象
      */
      */
     default V selectVoById(Serializable id) {
     default V selectVoById(Serializable id) {
-        return this.selectVoById(id, this.currentVoClass());
+        return selectVoById(id, this.currentVoClass());
     }
     }
 
 
     /**
     /**
@@ -156,7 +155,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
      * @return 查询到的VO对象列表
      * @return 查询到的VO对象列表
      */
      */
     default List<V> selectVoByIds(Collection<? extends Serializable> idList) {
     default List<V> selectVoByIds(Collection<? extends Serializable> idList) {
-        return this.selectVoByIds(idList, this.currentVoClass());
+        return selectVoByIds(idList, this.currentVoClass());
     }
     }
 
 
     /**
     /**
@@ -182,7 +181,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
      * @return 查询到的VO对象列表
      * @return 查询到的VO对象列表
      */
      */
     default List<V> selectVoByMap(Map<String, Object> map) {
     default List<V> selectVoByMap(Map<String, Object> map) {
-        return this.selectVoByMap(map, this.currentVoClass());
+        return selectVoByMap(map, this.currentVoClass());
     }
     }
 
 
     /**
     /**
@@ -208,7 +207,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
      * @return 查询到的单个VO对象
      * @return 查询到的单个VO对象
      */
      */
     default V selectVoOne(Wrapper<T> wrapper) {
     default V selectVoOne(Wrapper<T> wrapper) {
-        return this.selectVoOne(wrapper, this.currentVoClass());
+        return selectVoOne(wrapper, this.currentVoClass());
     }
     }
 
 
     /**
     /**
@@ -219,12 +218,11 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
      * @return 查询到的单个VO对象
      * @return 查询到的单个VO对象
      */
      */
     default V selectVoOne(Wrapper<T> wrapper, boolean throwEx) {
     default V selectVoOne(Wrapper<T> wrapper, boolean throwEx) {
-        return this.selectVoOne(wrapper, this.currentVoClass(), throwEx);
+        return selectVoOne(wrapper, this.currentVoClass(), throwEx);
     }
     }
 
 
     /**
     /**
-     * 根据条件查询单个VO对象,并指定返回的VO对象的类型(自动拼接 limit 1)
-     * 注意不要再自己添加 limit 1 做限制了
+     * 根据条件查询单个VO对象,并指定返回的VO对象的类型
      *
      *
      * @param wrapper 查询条件Wrapper
      * @param wrapper 查询条件Wrapper
      * @param voClass 返回的VO对象的Class对象
      * @param voClass 返回的VO对象的Class对象
@@ -232,12 +230,11 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
      * @return 查询到的单个VO对象,经过类型转换为指定的VO类后返回
      * @return 查询到的单个VO对象,经过类型转换为指定的VO类后返回
      */
      */
     default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) {
     default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) {
-        return this.selectVoOne(wrapper, voClass, true);
+        return selectVoOne(wrapper, voClass, true);
     }
     }
 
 
     /**
     /**
-     * 根据条件查询单个实体对象,并将其转换为指定的VO对象(自动拼接 limit 1)
-     * 注意不要再自己添加 limit 1 做限制了
+     * 根据条件查询单个实体对象,并将其转换为指定的VO对象
      *
      *
      * @param wrapper 查询条件Wrapper
      * @param wrapper 查询条件Wrapper
      * @param voClass 要转换的VO类的Class对象
      * @param voClass 要转换的VO类的Class对象
@@ -253,33 +250,13 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
         return MapstructUtils.convert(obj, voClass);
         return MapstructUtils.convert(obj, voClass);
     }
     }
 
 
-    /**
-     * 根据条件查询单条记录(自动拼接 limit 1 限制返回 1 条数据,不依赖 {@code throwEx} 参数)
-     * 注意不要再自己添加 limit 1 做限制了
-     * <p>
-     * <strong>注意:</strong>
-     * 1. 使用 {@code Page<>(1, 1)} 强制分页查询,确保 SQL 自动添加 {@code LIMIT 1},因此 {@code throwEx} 参数不再生效
-     * 2. 原方法的 {@code throwEx} 逻辑(多条数据抛异常)已被优化掉,因为分页查询不会返回多条记录
-     * </p>
-     *
-     * @param queryWrapper 查询条件(可为 null)
-     * @param throwEx      <del>是否抛出异常(已弃用,此参数不再生效)</del>
-     * @return 单条记录或无数据时返回 null
-     */
-    @Override
-    default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, boolean throwEx) {
-        // 强制分页查询(LIMIT 1),确保最多返回 1 条记录
-        List<T> list = this.selectList(new Page<>(1, 1), queryWrapper);
-        return CollUtil.isEmpty(list) ? null : list.get(0);
-    }
-
     /**
     /**
      * 查询所有VO对象列表
      * 查询所有VO对象列表
      *
      *
      * @return 查询到的VO对象列表
      * @return 查询到的VO对象列表
      */
      */
     default List<V> selectVoList() {
     default List<V> selectVoList() {
-        return this.selectVoList(new QueryWrapper<>(), this.currentVoClass());
+        return selectVoList(new QueryWrapper<>(), this.currentVoClass());
     }
     }
 
 
     /**
     /**
@@ -316,7 +293,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
      * @return 查询到的VO对象分页列表
      * @return 查询到的VO对象分页列表
      */
      */
     default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) {
     default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) {
-        return this.selectVoPage(page, wrapper, this.currentVoClass());
+        return selectVoPage(page, wrapper, this.currentVoClass());
     }
     }
 
 
     /**
     /**

+ 5 - 3
SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/config/ResourcesConfig.java

@@ -1,7 +1,8 @@
 package com.vber.common.web.config;
 package com.vber.common.web.config;
 
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
-import com.vber.common.core.utils.StringUtils;
+import com.vber.common.core.utils.ObjectUtils;
 import com.vber.common.web.handler.GlobalExceptionHandler;
 import com.vber.common.web.handler.GlobalExceptionHandler;
 import com.vber.common.web.interceptor.PlusWebInvokeTimeInterceptor;
 import com.vber.common.web.interceptor.PlusWebInvokeTimeInterceptor;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -34,10 +35,11 @@ public class ResourcesConfig implements WebMvcConfigurer {
     public void addFormatters(FormatterRegistry registry) {
     public void addFormatters(FormatterRegistry registry) {
         // 全局日期格式转换配置
         // 全局日期格式转换配置
         registry.addConverter(String.class, Date.class, source -> {
         registry.addConverter(String.class, Date.class, source -> {
-            if (StringUtils.isBlank(source)) {
+            DateTime parse = DateUtil.parse(source);
+            if (ObjectUtils.isNull(parse)) {
                 return null;
                 return null;
             }
             }
-            return DateUtil.parse(source);
+            return parse.toJdkDate();
         });
         });
     }
     }
 
 

+ 14 - 0
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysPostController.java

@@ -1,6 +1,7 @@
 package com.vber.system.controller.system;
 package com.vber.system.controller.system;
 
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.vber.common.core.constant.SystemConstants;
 import com.vber.common.core.constant.SystemConstants;
 import com.vber.common.core.domain.R;
 import com.vber.common.core.domain.R;
@@ -11,8 +12,10 @@ import com.vber.common.log.enums.BusinessType;
 import com.vber.common.mybatis.core.page.PageQuery;
 import com.vber.common.mybatis.core.page.PageQuery;
 import com.vber.common.mybatis.core.page.TableDataInfo;
 import com.vber.common.mybatis.core.page.TableDataInfo;
 import com.vber.common.web.core.BaseController;
 import com.vber.common.web.core.BaseController;
+import com.vber.system.domain.bo.SysOrgBo;
 import com.vber.system.domain.bo.SysPostBo;
 import com.vber.system.domain.bo.SysPostBo;
 import com.vber.system.domain.vo.SysPostVo;
 import com.vber.system.domain.vo.SysPostVo;
+import com.vber.system.service.ISysOrgService;
 import com.vber.system.service.ISysPostService;
 import com.vber.system.service.ISysPostService;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -35,6 +38,7 @@ import java.util.List;
 public class SysPostController extends BaseController {
 public class SysPostController extends BaseController {
 
 
     private final ISysPostService postService;
     private final ISysPostService postService;
+    private final ISysOrgService orgService;
 
 
     /**
     /**
      * 获取岗位列表
      * 获取岗位列表
@@ -131,4 +135,14 @@ public class SysPostController extends BaseController {
         return R.ok(list);
         return R.ok(list);
     }
     }
 
 
+
+    /**
+     * 获取组织机构树列表
+     */
+    @SaCheckPermission("system:post:list")
+    @GetMapping("/orgTree")
+    public R<List<Tree<Long>>> deptTree(SysOrgBo org) {
+        return R.ok(orgService.selectOrgTreeList(org));
+    }
+
 }
 }

+ 18 - 0
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/vo/MetaVo.java

@@ -32,6 +32,12 @@ public class MetaVo {
      */
      */
     private String link;
     private String link;
 
 
+
+    /**
+     * 激活菜单
+     */
+    private String activeMenu;
+
     public MetaVo(String title, String icon) {
     public MetaVo(String title, String icon) {
         this.title = title;
         this.title = title;
         this.icon = icon;
         this.icon = icon;
@@ -58,4 +64,16 @@ public class MetaVo {
         }
         }
     }
     }
 
 
+    public MetaVo(String title, String icon, Boolean noCache, String link, String activeMenu) {
+        this.title = title;
+        this.icon = icon;
+        this.noCache = noCache;
+        if (StringUtils.ishttp(link)) {
+            this.link = link;
+        }
+        if (StringUtils.startWithAnyIgnoreCase(activeMenu, "/")) {
+            this.activeMenu = activeMenu;
+        }
+    }
+
 }
 }

+ 1 - 0
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysMenuServiceImpl.java

@@ -178,6 +178,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
             });
             });
         }
         }
         return baseMapper.selectObjs(new LambdaQueryWrapper<SysMenu>()
         return baseMapper.selectObjs(new LambdaQueryWrapper<SysMenu>()
+                .select(SysMenu::getMenuId)
                 .in(SysMenu::getMenuId, menuIds)
                 .in(SysMenu::getMenuId, menuIds)
                 .notIn(CollUtil.isNotEmpty(parentIds), SysMenu::getMenuId, parentIds), x -> {
                 .notIn(CollUtil.isNotEmpty(parentIds), SysMenu::getMenuId, parentIds), x -> {
             return Convert.toLong(x);
             return Convert.toLong(x);

+ 8 - 7
SERVER/VberAdminPlusV3/vber-modules/vber-workflow/src/main/java/com/vber/workflow/service/impl/FlwTaskServiceImpl.java

@@ -585,13 +585,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             //办理人变量替换
             //办理人变量替换
             ExpressionUtil.evalVariable(buildNextTaskList, FlowParams.build().variable(mergeVariable));
             ExpressionUtil.evalVariable(buildNextTaskList, FlowParams.build().variable(mergeVariable));
             for (FlowNode flowNode : nextFlowNodes) {
             for (FlowNode flowNode : nextFlowNodes) {
-                Task first = StreamUtils.findFirst(buildNextTaskList, t -> t.getNodeCode().equals(flowNode.getNodeCode()));
-                if (ObjectUtil.isNotNull(first) && CollUtil.isNotEmpty(first.getPermissionList())) {
-                    List<UserDTO> users = flwTaskAssigneeService.fetchUsersByStorageIds(StringUtils.joinComma(first.getPermissionList()));
-                    if (CollUtil.isNotEmpty(users)) {
-                        flowNode.setPermissionFlag(StreamUtils.join(users, e -> Convert.toStr(e.getUserId())));
-                    }
-                }
+                StreamUtils.findFirst(buildNextTaskList, t -> t.getNodeCode().equals(flowNode.getNodeCode()))
+                        .ifPresent(first -> {
+                            List<UserDTO> users;
+                            if (CollUtil.isNotEmpty(first.getPermissionList())
+                                    && CollUtil.isNotEmpty(users = flwTaskAssigneeService.fetchUsersByStorageIds(StringUtils.joinComma(first.getPermissionList())))) {
+                                flowNode.setPermissionFlag(StreamUtils.join(users, e -> Convert.toStr(e.getUserId())));
+                            }
+                        });
 
 
             }
             }
         }
         }