Selaa lähdekoodia

全局事务添加
多角色异常bug处理

785834757 5 kuukautta sitten
vanhempi
commit
48cd4d8436

+ 1 - 1
platform/src/main/java/com/jzg/mapper/SysMenuMapper.java

@@ -16,7 +16,7 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
 
     public List<SysMenu> getSystemMenusRecursion(String systemCode);
 
-    public List<SysMenu> getMenuByRoleId(String roleId);
+    public List<SysMenu> getMenuByRoleId(List<String> roleIds);
 
     /**
      * 获取常用菜单列表

+ 3 - 1
platform/src/main/java/com/jzg/mapper/SysUserRoleMapper.java

@@ -5,11 +5,13 @@ import com.jzg.commons.entity.po.SysUserRole;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 @Mapper
 public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
 
 
     void deleteByUserId(@Param("userId") String userId);
 
-    SysUserRole selectByUserIdAndSysCodeOne(@Param("userId") String userId,@Param("systemCode") String systemCode);
+    List<SysUserRole> selectByUserIdAndSysCodeOne(@Param("userId") String userId, @Param("systemCode") String systemCode);
 }

+ 1 - 1
platform/src/main/java/com/jzg/service/SysMenuService.java

@@ -26,7 +26,7 @@ public interface SysMenuService extends IService<SysMenu> {
      * @param roleId
      * @return
      */
-    public List<SysMenu> getMenuByRoleId(String roleId);
+    public List<SysMenu> getMenuByRoleId(List<String> roleId);
 
     /**
      * 获取常用

+ 17 - 7
platform/src/main/java/com/jzg/service/impl/SysMenuServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -63,13 +64,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
 
     @Override
     public List<SysMenu> getRoleMenuTree(String systemCode, String userId) {
-        SysUserRole sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
+        List<SysUserRole> sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
         // modify by lipf ,2026年4月3日08:52:05, 解决NPE 异常
         if(sysUserRole == null){
             log.info("租户[{}]下的用户[{}]角色为空",systemCode, userId);
             return Collections.emptyList();
         }
-        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.getRoleId());
+        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.stream().map(x->x.getRoleId()).toList());
         List<SysMenu> sysMenus = new ArrayList<>();
         for (SysMenu menu : menus) {
             if (menu.getParentId() == null || menu.getParentId().equalsIgnoreCase("0")) {
@@ -97,8 +98,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
         LambdaQueryWrapper<SysMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(SysMenu::getType,"2");
         List<SysMenu> sysMenus = baseMapper.selectList(lambdaQueryWrapper);
-        SysUserRole sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
-        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.getRoleId());
+        List<SysUserRole> sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
+        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.stream().map(x->x.getRoleId()).toList());
 
         List<String> perms = new ArrayList<>();
         sysMenus.forEach(item->{
@@ -154,9 +155,18 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
     }
 
     @Override
-    public List<SysMenu> getMenuByRoleId(String roleId) {
-        List<SysMenu> menuByRoleId = sysMenuMapper.getMenuByRoleId(roleId);
-        return menuByRoleId;
+    public List<SysMenu> getMenuByRoleId(List<String> roleIds) {
+        List<SysMenu> menuByRoleId = sysMenuMapper.getMenuByRoleId(roleIds);
+        List<SysMenu> distinctMenuList = menuByRoleId.stream()
+                .collect(Collectors.toMap(
+                        SysMenu::getId,
+                        Function.identity(),
+                        (existing, replacement) -> existing
+                ))
+                .values()
+                .stream()
+                .toList();
+        return distinctMenuList;
     }
 
     private void findChildren(List<SysMenu> SysMenus, List<SysMenu> menus, int menuType) {

+ 5 - 2
platform/src/main/resources/mapper/SysMenuMapper.xml

@@ -28,8 +28,11 @@
     <select id="getMenuByRoleId" resultType="com.jzg.commons.entity.po.SysMenu">
         SELECT sm.*
         FROM sys_role_perms srp
-                 LEFT JOIN sys_menu sm ON srp.perms_id = sm.id
-        WHERE srp.role_id = #{roleId}
+        LEFT JOIN sys_menu sm ON srp.perms_id = sm.id
+        WHERE srp.role_id IN
+        <foreach collection="roleIds" item="roleId" open="(" separator="," close=")">
+            #{roleId}
+        </foreach>
     </select>
 
     <select id="getCommonFunction" resultType="com.jzg.commons.entity.dto.SysCommonFunctionDto">

+ 7 - 3
pom.xml

@@ -40,7 +40,7 @@
     <guava.version>29.0-jre</guava.version>
     <rocketmq.version>2.2.1</rocketmq.version>
     <rocket.version>1.0-SNAPSHOT</rocket.version>
-    <seate.version>1.7.0</seate.version>
+    <seata.version>1.8.0</seata.version>
     <weixin-java.version>4.7.0</weixin-java.version>
     <spring-cloud.version>2022.0.0</spring-cloud.version>
     <opentelemetry.version>1.41.0</opentelemetry.version>
@@ -101,8 +101,6 @@
       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
 
-
-
     <!-- OpenTelemetry 核心 -->
     <dependency>
       <groupId>io.opentelemetry</groupId>
@@ -283,6 +281,12 @@
         <version>${weixin-java.version}</version>
       </dependency>
 
+      <!--seata-->
+      <dependency>
+        <groupId>io.seata</groupId>
+        <artifactId>seata-all</artifactId>
+        <version>${seata.version}</version>
+      </dependency>
 
 
     </dependencies>

+ 5 - 0
tenant/insurance/quotation-summary/pom.xml

@@ -164,6 +164,11 @@
             <version>1.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+
+        <dependency>
+            <groupId>io.seata</groupId>
+            <artifactId>seata-all</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 5 - 0
tenant/organization/pom.xml

@@ -53,6 +53,11 @@
             <artifactId>jackson-dataformat-xml</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>io.seata</groupId>
+            <artifactId>seata-all</artifactId>
+        </dependency>
+
     </dependencies>
     <build>
         <plugins>

+ 2 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementServiceImpl.java

@@ -20,6 +20,7 @@ import com.jzg.organization.mapper.PtlAgreementMapper;
 import com.jzg.organization.mapper.SysUploadFilesMapper;
 import com.jzg.organization.mapper.SysUserMapper;
 import com.jzg.organization.service.*;
+import io.seata.spring.annotation.GlobalTransactional;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -178,7 +179,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
+    @GlobalTransactional(rollbackFor = Exception.class)
     public void agreementAdd(AgreementAddParam param) {
         PtlAgreement ptlAgreement = new PtlAgreement();
         BeanUtils.copyProperties(param,ptlAgreement);