Bladeren bron

feat: 添加权限和用户归属地市检查,调整接口返回字段

weijianghai 2 jaren geleden
bovenliggende
commit
915e8a3e2c

+ 5 - 4
src/main/java/com/nokia/dao/RoleDao.java

@@ -3,6 +3,7 @@ package com.nokia.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nokia.pojo.Role;
+import com.nokia.vo.AllRoleBo;
 import com.nokia.vo.AllRoleVo;
 import com.nokia.vo.ListRoleDto;
 import com.nokia.vo.ListRoleVo;
@@ -32,16 +33,16 @@ public interface RoleDao extends BaseMapper<Role> {
     List<ListRoleVo> list(Page<ListRoleVo> page, ListRoleDto dto);
 
     /**
-     * 查询所有角色,除了权限
+     * 查询所有角色
      *
      * @return {@link List}<{@link AllRoleVo}>
      */
-    @Select("select ar.role_id, ar.role_name, ar.function_id, ar.\"system\", as2.system_name " +
+    @Select("select ar.role_id, ar.role_name, ar.function_id, ar.\"system\", as2.system_name, af.\"name\" as function_name " +
             "from sqmdb_rpt.acl_role ar " +
             "left join sqmdb_rpt.acl_system as2 on ar.\"system\" = as2.\"system\" " +
-            "where ar.role_id != -1 " +
+            "left join sqmdb_rpt.acl_function af on af.id = ar.function_id " +
             "order by ar.\"system\"")
-    List<AllRoleVo> all();
+    List<AllRoleBo> all();
 
     /**
      * 重置function_id

+ 25 - 8
src/main/java/com/nokia/dao/UserDao.java

@@ -167,13 +167,11 @@ public interface UserDao extends BaseMapper<User> {
          * @param loginName 登录名
          * @return {@link TopUserVo}
          */
-        @Select("select atu.login_name, atu.org_name, atu.user_name, atu.phone, ao.province_id, ao.city_id, ao.area_id, " +
-                "aa1.area_name as province_name, aa2.area_name as city_name, aa3.area_name as area_name " +
+        @Select("select atu.*, aa1.area_name as province_name, aa2.area_name as city_name, aa3.area_name as area_name " +
                 "from sqmdb_rpt.acl_top_user atu " +
-                "left join acl_org ao on atu.org_id = ao.org_id " +
-                "left join sqmdb_rpt.acl_area aa1 on ao.province_id = aa1.area_id " +
-                "left join sqmdb_rpt.acl_area aa2 on ao.city_id = aa2.area_id " +
-                "left join sqmdb_rpt.acl_area aa3 on ao.area_id = aa3.area_id " +
+                "left join sqmdb_rpt.acl_area aa1 on atu.province_id = aa1.area_id " +
+                "left join sqmdb_rpt.acl_area aa2 on atu.city_id = aa2.area_id " +
+                "left join sqmdb_rpt.acl_area aa3 on atu.area_id = aa3.area_id " +
                 "where login_name = #{loginName}")
         TopUserVo getTopUserByLoginName(String loginName);
 
@@ -206,11 +204,13 @@ public interface UserDao extends BaseMapper<User> {
          * @param userId 用户id
          * @return {@link List}<{@link GetUserDetailRoleVo}>
          */
-        @Select("select aurc.role_id, aurc.city_id, ar.role_name, ar.\"system\", as2.system_name, aa.area_name as city_name " +
+        @Select("select aurc.role_id, aurc.city_id, ar.role_name, ar.\"system\", ar.function_id, " +
+                "af.\"name\" as function_name, as2.system_name, aa.area_name as city_name " +
                 "from sqmdb_rpt.acl_user_role_city aurc " +
                 "inner join sqmdb_rpt.acl_role ar on aurc.role_id = ar.role_id " +
                 "inner join sqmdb_rpt.acl_area aa on aurc.city_id = aa.area_id " +
                 "inner join sqmdb_rpt.acl_system as2 on ar.\"system\" = as2.\"system\" " +
+                "inner join sqmdb_rpt.acl_function af on af.id = ar.function_id " +
                 "where aurc.user_id = #{userId}")
         List<GetUserDetailRoleVo> getUserDetailRole(Integer userId);
 
@@ -220,12 +220,14 @@ public interface UserDao extends BaseMapper<User> {
          * @param loginName 登录名
          * @return {@link List}<{@link GetRoleByLoginNameVo}>
          */
-        @Select("select aurc.role_id, aurc.city_id, ar.role_name, ar.\"system\", as2.system_name, aa.area_name as city_name " +
+        @Select("select aurc.role_id, aurc.city_id, ar.role_name, ar.\"system\", ar.function_id, " +
+                "af.\"name\" as function_name, as2.system_name, aa.area_name as city_name " +
                 "from sqmdb_rpt.acl_user_role_city aurc " +
                 "inner join sqmdb_rpt.acl_user au on aurc.user_id = au.user_id " +
                 "inner join sqmdb_rpt.acl_role ar on aurc.role_id = ar.role_id " +
                 "inner join sqmdb_rpt.acl_system as2 on ar.\"system\" = as2.\"system\" " +
                 "inner join sqmdb_rpt.acl_area aa on aurc.city_id = aa.area_id " +
+                "inner join sqmdb_rpt.acl_function af on af.id = ar.function_id " +
                 "where au.login_name = #{loginName}")
         List<GetRoleByLoginNameVo> getRoleByLoginName(String loginName);
 
@@ -255,6 +257,21 @@ public interface UserDao extends BaseMapper<User> {
                 "</script>")
         Object exceptCityUser(Integer cityId, List<Integer> list);
 
+        /**
+         * 通过用户id获取地市id
+         *
+         * @param list 列表
+         * @return {@link List}<{@link Integer}>
+         */
+        @Select("<script> " +
+                "select city_id from sqmdb_rpt.acl_user " +
+                "where user_id in " +
+                "<foreach open=\"(\" close=\")\" collection=\"list\" item=\"item\" separator=\",\"> " +
+                "  #{item} " +
+                "</foreach> " +
+                "</script>")
+        List<Integer> getCityIdsByUserIds(List<Integer> list);
+
         /**
          * 查询所有用户
          *

+ 35 - 6
src/main/java/com/nokia/service/RoleService.java

@@ -4,13 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nokia.common.R;
 import com.nokia.dao.RoleDao;
-import com.nokia.vo.AllRoleVo;
-import com.nokia.vo.ListRoleDto;
-import com.nokia.vo.ListRoleVo;
-import com.nokia.vo.PageVo;
+import com.nokia.vo.*;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class RoleService {
@@ -32,7 +32,36 @@ public class RoleService {
     }
 
     public R<List<AllRoleVo>> all() {
-        List<AllRoleVo> list = roleDao.all();
-        return R.ok(list);
+        List<AllRoleBo> list = roleDao.all();
+        Map<Object, Map<Object, List<AllRoleBo>>> map = new HashMap<>();
+        for (AllRoleBo t : list) {
+            map.putIfAbsent(t.getSystem(), new HashMap<>());
+            map.get(t.getSystem()).putIfAbsent(t.getFunctionId(), new ArrayList<>());
+            map.get(t.getSystem()).get(t.getFunctionId()).add(t);
+        }
+        List<AllRoleVo> vos = new ArrayList<>();
+        for (Map<Object, List<AllRoleBo>> t : map.values()) {
+            List<FunctionBo> functionBos = new ArrayList<>();
+            AllRoleVo vo = new AllRoleVo();
+            vo.setList(functionBos);
+            vos.add(vo);
+            for (List<AllRoleBo> tt : t.values()) {
+                FunctionBo functionBo = new FunctionBo();
+                functionBos.add(functionBo);
+                List<RoleBo> roleBos = new ArrayList<>();
+                functionBo.setList(roleBos);
+                for (AllRoleBo ttt : tt) {
+                    vo.setSystem(ttt.getSystem());
+                    vo.setSystemName(ttt.getSystemName());
+                    functionBo.setFunctionId(ttt.getFunctionId());
+                    functionBo.setFunctionName(ttt.getFunctionName());
+                    RoleBo roleBo = new RoleBo();
+                    roleBo.setRoleId(ttt.getRoleId());
+                    roleBo.setRoleName(ttt.getRoleName());
+                    roleBos.add(roleBo);
+                }
+            }
+        }
+        return R.ok(vos);
     }
 }

+ 90 - 35
src/main/java/com/nokia/service/UserService.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 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;
@@ -17,10 +19,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import javax.servlet.http.HttpSession;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -29,12 +28,15 @@ public class UserService {
     private final UserDao userDao;
     private final UserRoleCityDao userRoleCityDao;
     private final UserFunctionDao userFunctionDao;
+    private final AreaDao areaDao;
     private final OperationLogService operationLogService;
 
-    public UserService(UserDao userDao, UserRoleCityDao userRoleCityDao, UserFunctionDao userFunctionDao, OperationLogService operationLogService) {
+    public UserService(UserDao userDao, UserRoleCityDao userRoleCityDao, UserFunctionDao userFunctionDao,
+                       AreaDao areaDao, OperationLogService operationLogService) {
         this.userDao = userDao;
         this.userRoleCityDao = userRoleCityDao;
         this.userFunctionDao = userFunctionDao;
+        this.areaDao = areaDao;
         this.operationLogService = operationLogService;
     }
 
@@ -54,6 +56,11 @@ public class UserService {
         if (role.getCityId() != -1 && !role.getCityId().equals(vo.getCityId())) {
             return R.error("非本地市用户");
         }
+        if (vo.getCityId() != -1) {
+            // 查询归属地市区县列表
+            vo.setAreas(areaDao.getByParentId(vo.getCityId()).stream()
+                    .map(t -> new TreeAreaVo(t.getAreaName(), t.getAreaId())).collect(Collectors.toList()));
+        }
         return R.ok(vo);
     }
 
@@ -87,33 +94,36 @@ public class UserService {
 
     @Transactional(rollbackFor = Exception.class)
     public R<Object> add(AddUserDto dto, HttpSession session) {
+        // 查询用户
         User user = userDao.selectByLoginName(dto.getLoginName());
         if (user != null && user.getDeleted().equals(0)) {
             return R.error("用户已存在系统中");
         }
-        TopUserVo topUser = userDao.getTopUserByLoginName(dto.getLoginName());
-        if (topUser == null) {
-            return R.error("没有查询到top用户信息");
-        }
-        if (topUser.getCityId() == null) {
-            topUser.setCityId(topUser.getProvinceId());
-        }
         UserRoleCity role = getUserRoleCity(session);
-        if (role.getCityId() != -1 && !role.getCityId().equals(topUser.getCityId())) {
+        if (role.getCityId() != -1 && !role.getCityId().equals(dto.getCityId())) {
             return R.error("无法添加非本地市用户");
         }
+        // 检查权限和地市
+        if (!CollectionUtils.isEmpty(dto.getRoles())) {
+            for (AddUserRoleDto t : dto.getRoles()) {
+                // 除工单查询外其他权限地市不匹配
+                if (!t.getRoleId().equals(3) && !t.getCityId().equals(dto.getCityId())) {
+                    throw new BizException("权限和地市不匹配");
+                }
+            }
+        }
         if (user == null) {
             user = new User();
         }
-        user.setLoginName(topUser.getLoginName());
-        user.setUserName(topUser.getUserName());
-        user.setPhone(topUser.getPhone());
+        user.setLoginName(dto.getLoginName());
+        user.setUserName(dto.getUserName());
+        user.setPhone(dto.getPhone());
         user.setEmail(dto.getEmail());
-        user.setOrg(topUser.getOrgName());
+        user.setOrg(dto.getOrgName());
         user.setDeleted(0);
-        user.setProvinceId(topUser.getProvinceId());
-        user.setCityId(topUser.getCityId());
-        user.setAreaId(topUser.getAreaId());
+        user.setProvinceId(dto.getProvinceId());
+        user.setCityId(dto.getCityId());
+        user.setAreaId(dto.getAreaId());
         // 插入新用户
         if (user.getUserId() == null) {
             userDao.insert(user);
@@ -122,14 +132,15 @@ public class UserService {
             userDao.updateById(user);
         }
         StringBuilder sb = new StringBuilder();
-        sb.append("添加用户 ").append(topUser.getLoginName()).append(";")
-                .append("用户名:").append(topUser.getUserName()).append(",")
-                .append("手机号:").append(topUser.getPhone()).append(",")
+        sb.append("添加用户 ").append(dto.getLoginName()).append(";")
+                .append("用户名:").append(dto.getUserName()).append(",")
+                .append("手机号:").append(dto.getPhone()).append(",")
                 .append("邮箱:").append(dto.getEmail()).append(",")
-                .append("部门:").append(topUser.getOrgName()).append(",")
-                .append("省份:").append(topUser.getProvinceName()).append(",")
-                .append("地市:").append(topUser.getCityName()).append(",")
-                .append("区县:").append(topUser.getAreaName()).append(";");
+                .append("部门:").append(dto.getOrgName()).append(",")
+                .append("省份:").append(dto.getProvinceName()).append(",")
+                .append("地市:").append(dto.getCityName()).append(",")
+                .append("区县:").append(dto.getAreaName()).append(";");
+        // 添加权限
         if (!CollectionUtils.isEmpty(dto.getRoles())) {
             int userId = user.getUserId();
             List<UserRoleCity> userRoleCities = new ArrayList<>();
@@ -160,21 +171,46 @@ public class UserService {
 
     @Transactional(rollbackFor = Exception.class)
     public R<Object> update(UpdateUserDto dto, HttpSession session) {
-        User user = userDao.selectById(dto.getUserId());
+        GetUserDetailVo oldUser = userDao.getUserDetail(dto.getUserId());
         UserRoleCity role = getUserRoleCity(session);
-        if (role.getCityId() != -1 && !role.getCityId().equals(user.getCityId())) {
+        if (role.getCityId() != -1 && !role.getCityId().equals(oldUser.getCityId())) {
             return R.error("无法修改非本地市用户");
         }
+        // 检查权限和地市
+        if (!CollectionUtils.isEmpty(dto.getRoles())) {
+            for (AddUserRoleDto t : dto.getRoles()) {
+                // 除工单查询外其他权限地市不匹配
+                if (!t.getRoleId().equals(3) && !t.getCityId().equals(oldUser.getCityId())) {
+                    throw new BizException("权限和地市不匹配");
+                }
+            }
+        }
+        User user = new User();
+        user.setUserId(dto.getUserId());
         StringBuilder sb = new StringBuilder();
-        sb.append("修改用户 ").append(user.getLoginName()).append(";");
-        if (StringUtils.hasText(dto.getEmail()) && !dto.getEmail().equals(user.getEmail())) {
-            sb.append("邮箱旧值:").append(user.getEmail()).append(",")
+        sb.append("修改用户 ").append(oldUser.getLoginName()).append(";");
+        if (StringUtils.hasText(dto.getEmail()) && !dto.getEmail().equals(oldUser.getEmail())) {
+            sb.append("邮箱旧值:").append(oldUser.getEmail()).append(",")
                     .append("邮箱新值:").append(dto.getEmail()).append(";");
             user.setEmail(dto.getEmail());
+        }
+        if (StringUtils.hasText(dto.getPhone()) && !dto.getPhone().equals(oldUser.getPhone())) {
+            sb.append("手机号旧值:").append(oldUser.getPhone()).append(",")
+                    .append("手机号新值:").append(dto.getPhone()).append(";");
+            user.setPhone(dto.getPhone());
+        }
+        if (dto.getAreaId() != null && !dto.getAreaId().equals(oldUser.getAreaId())) {
+            sb.append("区县旧值:").append(oldUser.getAreaName()).append(",")
+                    .append("区县新值:").append(dto.getAreaName()).append(";");
+            user.setAreaId(dto.getAreaId());
+        }
+        // 修改用户信息
+        if (StringUtils.hasText(user.getEmail()) || StringUtils.hasText(user.getPhone()) || user.getAreaId() != null) {
             userDao.updateById(user);
         }
+        // 修改权限
         if (!CollectionUtils.isEmpty(dto.getRoles())) {
-            int userId = user.getUserId();
+            int userId = oldUser.getUserId();
             List<GetUserDetailRoleVo> oldRoles = userDao.getUserDetailRole(userId);
             sb.append("角色旧值:");
             for (GetUserDetailRoleVo t : oldRoles) {
@@ -186,7 +222,7 @@ public class UserService {
             for (AddUserRoleDto t : dto.getRoles()) {
                 sb.append(t.getRoleName()).append("-").append(t.getCityName()).append(",");
                 UserRoleCity userRoleCity = new UserRoleCity();
-                userRoleCity.setUserId(user.getUserId());
+                userRoleCity.setUserId(oldUser.getUserId());
                 userRoleCity.setRoleId(t.getRoleId());
                 userRoleCity.setCityId(t.getCityId());
                 userRoleCities.add(userRoleCity);
@@ -238,15 +274,34 @@ public class UserService {
         GetUserDetailVo vo = userDao.getUserDetail(dto.getUserId());
         List<GetUserDetailRoleVo> roles = userDao.getUserDetailRole(dto.getUserId());
         vo.setRoles(roles);
+        if (vo.getCityId() != -1) {
+            // 查询归属地市区县列表
+            vo.setAreas(areaDao.getByParentId(vo.getCityId()).stream()
+                    .map(t -> new TreeAreaVo(t.getAreaName(), t.getAreaId())).collect(Collectors.toList()));
+        }
         return R.ok(vo);
     }
 
     @Transactional(rollbackFor = Exception.class)
     public R<Object> copyRole(CopyRolesDto dto, HttpSession session) {
+        List<Integer> cityIds = userDao.getCityIdsByUserIds(dto.getUserIds());
+        if (cityIds.size() > 1) {
+            return R.error("不能选择不同地市用户");
+        }
+        int cityId = cityIds.get(0);
         UserRoleCity role = getUserRoleCity(session);
-        if (role.getCityId() != -1 && userDao.exceptCityUser(role.getCityId(), dto.getUserIds()) != null) {
+        if (role.getCityId() != -1 && !role.getCityId().equals(cityId)) {
             return R.error("无法修改非本地市用户");
         }
+        // 检查权限和地市
+        if (!CollectionUtils.isEmpty(dto.getRoles())) {
+            for (AddUserRoleDto t : dto.getRoles()) {
+                // 除工单查询外其他权限地市不匹配
+                if (!t.getRoleId().equals(3) && !t.getCityId().equals(cityId)) {
+                    throw new BizException("权限和地市不匹配");
+                }
+            }
+        }
         StringBuilder sb = new StringBuilder();
         List<User> users = userDao.selectBatchIds(dto.getUserIds());
         String loginNames = users.stream().map(User::getLoginName).collect(Collectors.joining("、"));

+ 24 - 0
src/main/java/com/nokia/vo/AddUserDto.java

@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
 import javax.validation.Valid;
 import javax.validation.constraints.Email;
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.util.List;
 
 @NoArgsConstructor
@@ -17,6 +18,29 @@ public class AddUserDto {
     @Schema(description = "账号", required = true, example = "zhangsan")
     @NotBlank(message = "loginName不能为空")
     private String loginName;
+    @Schema(description = "用户名", required = true, example = "张三")
+    @NotBlank(message = "userName不能为空")
+    private String userName;
+    @Schema(description = "手机号", required = true, example = "12345678901")
+    @NotBlank(message = "phone不能为空")
+    private String phone;
+    @Schema(description = "组织", required = true, example = "河北省分公司云网运营中心")
+    private String orgName;
+    @Schema(description = "省份id", required = true)
+    @NotNull(message = "provinceId不能为空")
+    private Integer provinceId;
+    @Schema(description = "地市id", required = true)
+    @NotNull(message = "cityId不能为空")
+    private Integer cityId;
+    @Schema(description = "区县id")
+    private Integer areaId;
+    @Schema(description = "省份名称", required = true, example = "河北省")
+    @NotBlank(message = "provinceName不能为空")
+    private String provinceName;
+    @Schema(description = "地市名称", required = true, example = "石家庄市")
+    private String cityName;
+    @Schema(description = "区县名称", example = "长安区")
+    private String areaName;
     @Schema(description = "邮箱")
     @Email(message = "邮箱格式错误")
     private String email;

+ 24 - 0
src/main/java/com/nokia/vo/AllRoleBo.java

@@ -0,0 +1,24 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class AllRoleBo {
+    @Schema(description = "角色id")
+    private Integer roleId;
+    @Schema(description = "角色名称", example = "工单查询")
+    private String roleName;
+    @Schema(description = "功能id")
+    private Integer functionId;
+    @Schema(description = "模块名称", example = "工单处理")
+    private String functionName;
+    @Schema(description = "系统id", example = "flow")
+    private String system;
+    @Schema(description = "系统名称", example = "流程")
+    private String systemName;
+}

+ 13 - 8
src/main/java/com/nokia/vo/AllRoleVo.java

@@ -5,18 +5,23 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
 @NoArgsConstructor
 @AllArgsConstructor
 @Data
 public class AllRoleVo {
-    @Schema(description = "角色id")
-    private Integer roleId;
-    @Schema(description = "功能id")
-    private Integer functionId;
-    @Schema(description = "角色名称", example = "工单查询")
-    private String roleName;
-    @Schema(description = "系统id", example = "flow")
+    @Schema(description = "系统id", required = true, example = "flow")
+    @NotBlank(message = "system不能为空")
     private String system;
-    @Schema(description = "系统名称", example = "流程")
+    @Schema(description = "系统名称", required = true, example = "流程")
+    @NotBlank(message = "systemName不能为空")
     private String systemName;
+    @Schema(description = "模块列表", required = true)
+    @NotEmpty(message = " 模块列表不能为空")
+    @Valid
+    private List<FunctionBo> list;
 }

+ 28 - 0
src/main/java/com/nokia/vo/FunctionBo.java

@@ -0,0 +1,28 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class FunctionBo {
+    @Schema(description = "模块id", required = true)
+    @NotNull(message = "functionId不能为空")
+    private Integer functionId;
+    @Schema(description = "模块名称", example = "工单处理", required = true)
+    @NotBlank(message = "functionName不能为空")
+    private String functionName;
+    @Schema(description = "角色列表", required = true)
+    @NotEmpty(message = "角色列表不能为空")
+    @Valid
+    private List<RoleBo> list;
+}

+ 4 - 0
src/main/java/com/nokia/vo/GetRoleByLoginNameVo.java

@@ -13,6 +13,10 @@ public class GetRoleByLoginNameVo {
     private Integer roleId;
     @Schema(description = "角色名称", example = "工单查询")
     private String roleName;
+    @Schema(description = "功能id")
+    private Integer functionId;
+    @Schema(description = "模块名称", example = "工单处理")
+    private String functionName;
     @Schema(description = "系统id", example = "flow")
     private String system;
     @Schema(description = "系统名称", example = "流程")

+ 4 - 0
src/main/java/com/nokia/vo/GetUserDetailRoleVo.java

@@ -21,4 +21,8 @@ public class GetUserDetailRoleVo {
     private String system;
     @Schema(description = "系统名称", example = "流程")
     private String systemName;
+    @Schema(description = "模块id")
+    private Integer functionId;
+    @Schema(description = "模块名称", example = "工单处理")
+    private String functionName;
 }

+ 8 - 0
src/main/java/com/nokia/vo/GetUserDetailVo.java

@@ -21,6 +21,12 @@ public class GetUserDetailVo {
     private String phone;
     @Schema(description = "组织", example = "河北省分公司云网运营中心")
     private String orgName;
+    @Schema(description = "省份id")
+    private Integer provinceId;
+    @Schema(description = "地市id")
+    private Integer cityId;
+    @Schema(description = "区县id")
+    private Integer areaId;
     @Schema(description = "省份名称", example = "河北省")
     private String provinceName;
     @Schema(description = "地市名称", example = "石家庄市")
@@ -31,4 +37,6 @@ public class GetUserDetailVo {
     private String email;
     @Schema(description = "角色列表")
     private List<GetUserDetailRoleVo> roles;
+    @Schema(description = "区县列表")
+    private List<TreeAreaVo> areas;
 }

+ 6 - 0
src/main/java/com/nokia/vo/ListUserVo.java

@@ -21,6 +21,12 @@ public class ListUserVo {
     private String email;
     @Schema(description = "河北省分公司云网运营中心")
     private String org;
+    @Schema(description = "省份id")
+    private Integer provinceId;
+    @Schema(description = "地市id")
+    private Integer cityId;
+    @Schema(description = "区县id")
+    private Integer areaId;
     @Schema(description = "省份名称", example = "河北省")
     private String provinceName;
     @Schema(description = "地市名称", example = "石家庄市")

+ 27 - 0
src/main/java/com/nokia/vo/RoleBo.java

@@ -0,0 +1,27 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class RoleBo {
+    @Schema(description = "角色id", required = true)
+    @NotNull(message = "roleId不能为空")
+    private Integer roleId;
+    @Schema(description = "角色名称", required = true, example = "工单查询")
+    @NotBlank(message = "roleName不能为空")
+    private String roleName;
+    @Schema(description = "地区id", required = true)
+    @NotNull(message = "cityId不能为空")
+    private Integer cityId;
+    @Schema(description = "地市名称", required = true, example = "石家庄市")
+    @NotBlank(message = "cityName不能为空")
+    private String cityName;
+}

+ 4 - 0
src/main/java/com/nokia/vo/TopUserVo.java

@@ -5,6 +5,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 @AllArgsConstructor
 @NoArgsConstructor
 @Data
@@ -29,4 +31,6 @@ public class TopUserVo {
     private String cityName;
     @Schema(description = "区县名称", example = "长安区")
     private String areaName;
+    @Schema(description = "区县列表")
+    private List<TreeAreaVo> areas;
 }

+ 5 - 0
src/main/java/com/nokia/vo/TreeAreaVo.java

@@ -17,4 +17,9 @@ public class TreeAreaVo {
     private Integer value;
     @Schema(description = "子地区列表")
     private List<TreeAreaVo> children;
+
+    public TreeAreaVo(String label, Integer value) {
+        this.label = label;
+        this.value = value;
+    }
 }

+ 9 - 3
src/main/java/com/nokia/vo/UpdateUserDto.java

@@ -14,12 +14,18 @@ import java.util.List;
 @AllArgsConstructor
 @Data
 public class UpdateUserDto {
-    @Schema(description = "邮箱")
-    @Email(message = "邮箱格式错误")
-    private String email;
     @Schema(description = "用户id", required = true)
     @NotNull(message = "userId不能为空")
     private Integer userId;
+    @Schema(description = "邮箱")
+    @Email(message = "邮箱格式错误")
+    private String email;
+    @Schema(description = "手机号", example = "12345678901")
+    private String phone;
+    @Schema(description = "区县id")
+    private Integer areaId;
+    @Schema(description = "区县名称", example = "长安区")
+    private String areaName;
     @Schema(description = "角色列表")
     @Valid
     private List<AddUserRoleDto> roles;