Ver Fonte

fix: 修复判断不同地市错误和未添加user_function问题

weijianghai há 2 anos atrás
pai
commit
ce45851ce6

+ 14 - 0
src/main/java/com/nokia/dao/RoleDao.java

@@ -11,7 +11,9 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 
 @Mapper
 public interface RoleDao extends BaseMapper<Role> {
@@ -57,4 +59,16 @@ public interface RoleDao extends BaseMapper<Role> {
             + " </foreach>"
             + " </script>")
     int resetFunctionId(List<Integer> list);
+
+    /**
+     * 查询role_id的function_id
+     */
+    @Select("<script>"
+            + " select distinct function_id from sqmdb_rpt.acl_role"
+            + " where role_id in"
+            + " <foreach open=\"(\" close=\")\" collection=\"list\" item=\"item\" separator=\",\">"
+            + "   #{item}"
+            + " </foreach>"
+            + " </script>")
+    Set<Integer> getFunctionIdsByRoleIds(Collection<Integer> list);
 }

+ 1 - 31
src/main/java/com/nokia/dao/UserDao.java

@@ -10,7 +10,6 @@ import com.nokia.vo.flow.FlowUserVo;
 import org.apache.ibatis.annotations.*;
 
 import java.util.List;
-import java.util.Set;
 
 @Mapper
 public interface UserDao extends BaseMapper<User> {
@@ -277,7 +276,7 @@ public interface UserDao extends BaseMapper<User> {
      * @return {@link List}<{@link Integer}>
      */
     @Select("<script>"
-            + " select city_id from sqmdb_rpt.acl_user"
+            + " select distinct city_id from sqmdb_rpt.acl_user"
             + " where user_id in"
             + " <foreach open=\"(\" close=\")\" collection=\"list\" item=\"item\" separator=\",\">"
             + "   #{item}"
@@ -292,33 +291,4 @@ public interface UserDao extends BaseMapper<User> {
      */
     @Select("select * from sqmdb_rpt.acl_user where deleted = 0 and test_user = 0 order by user_id")
     List<UserVo> baseList();
-
-    /**
-     * 查找不在login_name列表里且非测试用户未删除的user_id
-     *
-     * @param list login_name列表
-     * @return {@link List}<{@link Integer}>
-     */
-    @Select("<script>"
-            + " select user_id from sqmdb_rpt.acl_user"
-            + " where deleted = 0 and test_user = 0 and login_name not in"
-            + " <foreach open=\"(\" close=\")\" collection=\"list\" item=\"item\" separator=\",\">"
-            + "   #{item}"
-            + " </foreach>"
-            + " order by user_id"
-            + " </script>")
-    List<Integer> loginNameNotIn(Set<String> list);
-
-    /**
-     * 查找权限地市不一致的user_id
-     *
-     * @return {@link List}<{@link Integer}>
-     */
-    @Select("select distinct au.user_id"
-            + " from sqmdb_rpt.acl_user au"
-            + " inner join sqmdb_rpt.acl_user_role_city aurc on au.user_id = aurc.user_id"
-            + " where au.city_id != aurc.city_id"
-            + " and aurc.role_id != 3"
-            + " order by au.user_id")
-    List<Integer> roleCityDiff();
 }

+ 25 - 25
src/main/java/com/nokia/service/UserService.java

@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nokia.common.R;
 import com.nokia.common.exception.BizException;
-import com.nokia.dao.AreaDao;
-import com.nokia.dao.UserDao;
-import com.nokia.dao.UserFunctionDao;
-import com.nokia.dao.UserRoleCityDao;
+import com.nokia.dao.*;
 import com.nokia.pojo.User;
 import com.nokia.pojo.UserFunction;
 import com.nokia.pojo.UserRoleCity;
@@ -29,14 +26,16 @@ public class UserService {
     private final UserRoleCityDao userRoleCityDao;
     private final UserFunctionDao userFunctionDao;
     private final AreaDao areaDao;
+    private final RoleDao roleDao;
     private final OperationLogService operationLogService;
 
     public UserService(UserDao userDao, UserRoleCityDao userRoleCityDao, UserFunctionDao userFunctionDao,
-                       AreaDao areaDao, OperationLogService operationLogService) {
+                       AreaDao areaDao, RoleDao roleDao, OperationLogService operationLogService) {
         this.userDao = userDao;
         this.userRoleCityDao = userRoleCityDao;
         this.userFunctionDao = userFunctionDao;
         this.areaDao = areaDao;
+        this.roleDao = roleDao;
         this.operationLogService = operationLogService;
     }
 
@@ -145,7 +144,7 @@ public class UserService {
         if (!CollectionUtils.isEmpty(dto.getRoles())) {
             int userId = user.getUserId();
             List<UserRoleCity> userRoleCities = new ArrayList<>();
-            Set<Integer> functionIds = new HashSet<>();
+            Set<Integer> roleIds = new HashSet<>();
             sb.append("角色:");
             for (AddUserRoleDto t : dto.getRoles()) {
                 sb.append(t.getRoleName()).append("-").append(t.getCityName()).append(",");
@@ -154,11 +153,10 @@ public class UserService {
                 userRoleCity.setRoleId(t.getRoleId());
                 userRoleCity.setCityId(t.getCityId());
                 userRoleCities.add(userRoleCity);
-                if (t.getFunctionId() != null) {
-                    functionIds.add(t.getFunctionId());
-                }
+                roleIds.add(t.getRoleId());
             }
             userRoleCityDao.insertBatch(userRoleCities);
+            Set<Integer> functionIds = roleDao.getFunctionIdsByRoleIds(roleIds);
             if (!CollectionUtils.isEmpty(functionIds)) {
                 List<UserFunction> userFunctions = functionIds.stream().map(t -> new UserFunction(userId, t))
                         .collect(Collectors.toList());
@@ -218,7 +216,7 @@ public class UserService {
                 sb.append(t.getRoleName()).append("-").append(t.getCityName()).append(",");
             }
             List<UserRoleCity> userRoleCities = new ArrayList<>();
-            Set<Integer> functionIds = new HashSet<>();
+            Set<Integer> roleIds = new HashSet<>();
             sb.append(";角色新值:");
             for (AddUserRoleDto t : dto.getRoles()) {
                 sb.append(t.getRoleName()).append("-").append(t.getCityName()).append(",");
@@ -227,14 +225,13 @@ public class UserService {
                 userRoleCity.setRoleId(t.getRoleId());
                 userRoleCity.setCityId(t.getCityId());
                 userRoleCities.add(userRoleCity);
-                if (t.getFunctionId() != null) {
-                    functionIds.add(t.getFunctionId());
-                }
+                roleIds.add(t.getRoleId());
             }
             UpdateWrapper<UserRoleCity> userRoleCityUpdateWrapper = new UpdateWrapper<>();
             userRoleCityUpdateWrapper.eq("user_id", dto.getUserId());
             userRoleCityDao.delete(userRoleCityUpdateWrapper);
             userRoleCityDao.insertBatch(userRoleCities);
+            Set<Integer> functionIds = roleDao.getFunctionIdsByRoleIds(roleIds);
             if (!CollectionUtils.isEmpty(functionIds)) {
                 UpdateWrapper<UserFunction> userFunctionUpdateWrapper = new UpdateWrapper<>();
                 userFunctionUpdateWrapper.eq("user_id", dto.getUserId());
@@ -294,14 +291,14 @@ public class UserService {
         if (role.getCityId() != -1 && !role.getCityId().equals(cityId)) {
             return R.error("无法修改非本地市用户");
         }
+        Set<Integer> roleIds = new HashSet<>();
         // 检查权限和地市
-        if (!CollectionUtils.isEmpty(dto.getRoles())) {
-            for (AddUserRoleDto t : dto.getRoles()) {
-                // 除工单查询外其他权限地市不匹配
-                if (!t.getRoleId().equals(3) && !t.getCityId().equals(cityId)) {
-                    throw new BizException("权限和地市不匹配");
-                }
+        for (AddUserRoleDto t : dto.getRoles()) {
+            // 除工单查询外其他权限地市不匹配
+            if (!t.getRoleId().equals(3) && !t.getCityId().equals(cityId)) {
+                throw new BizException("权限和地市不匹配");
             }
+            roleIds.add(t.getRoleId());
         }
         StringBuilder sb = new StringBuilder();
         List<User> users = userDao.selectBatchIds(dto.getUserIds());
@@ -317,12 +314,15 @@ public class UserService {
                 userRoleCity.setRoleId(t.getRoleId());
                 userRoleCity.setCityId(t.getCityId());
                 userRoleCities.add(userRoleCity);
-                if (t.getFunctionId() != null) {
-                    UserFunction userFunction = new UserFunction();
-                    userFunction.setUserId(userId);
-                    userFunction.setFunctionId(t.getFunctionId());
-                    userFunctions.add(userFunction);
-                }
+            }
+        }
+        Set<Integer> functionIds = roleDao.getFunctionIdsByRoleIds(roleIds);
+        for (Integer t : functionIds) {
+            for (Integer userId : dto.getUserIds()) {
+                UserFunction userFunction = new UserFunction();
+                userFunction.setUserId(userId);
+                userFunction.setFunctionId(t);
+                userFunctions.add(userFunction);
             }
         }
         deleteUserRoleCityByUserIds(dto.getUserIds());

+ 0 - 4
src/main/resources/logback-spring.xml

@@ -44,11 +44,7 @@
     </appender>
     <root level="INFO">
         <appender-ref ref="STDOUT"/>
-    </root>
-    <root level="TRACE">
         <appender-ref ref="TRACE_FILE"/>
-    </root>
-    <root level="ERROR">
         <appender-ref ref="ERROR_FILE"/>
     </root>
 </configuration>