项目中新增了行政区划表(sys_region_code),需要在组织管理和人员管理中支持行政区划绑定功能,同时在登录Session中提供用户的行政区划信息。
需要完整的行政区划管理模块,包括:
采用完整缓存方案:
forge-plugin-system下新增:
├── entity/SysRegion.java - 行政区划实体
├── mapper/SysRegionMapper.java - Mapper接口
├── service/ISysRegionService.java - Service接口
├── service/impl/SysRegionServiceImpl.java - Service实现
├── controller/SysRegionController.java - Controller
├── dto/SysRegionDTO.java - DTO传输对象
├── vo/SysRegionTreeVO.java - 树形VO对象
├── entity/SysUser.java - 新增regionCode字段
├── session/LoginUser.java - 新增5个行政区划字段
├── service/impl/UserLoadServiceImpl.java - 加载行政区划信息
├── service/impl/SysUserOrgServiceImpl.java - 组织变更时同步regionCode
├── views/system/region.vue - 行政区划管理页面
├── api/system/region.js - 行政区划API
├── components/RegionSelector.vue - 行政区划选择器组件
├── views/system/org.vue - 组织管理页面新增行政区划选择器
├── views/system/user.vue - 用户管理页面新增行政区划选择器
ALTER TABLE sys_user ADD COLUMN region_code VARCHAR(10) DEFAULT NULL COMMENT '行政区划编码' AFTER avatar;
ALTER TABLE sys_user ADD INDEX idx_region_code (region_code);
字段:code(主键)、name、level、parent_code、full_name、city_code
@TableName("sys_region_code")
public class SysRegion {
private String code; // 行政区划代码(主键)
private String name; // 行政区划名称
private Integer level; // 行政级别(1-省,2-市,3-区/县,4-街道)
private String parentCode; // 父级代码
private String fullName; // 全名
private String cityCode; // 地市编码
}
private String regionCode; // 行政区划编码
private String regionName; // 行政区划名称
private Integer regionLevel; // 行政级别(1-省,2-市,3-区/县,4-街道)
private String regionFullName; // 行政区划全名
private String regionAncestors; // 行政区划祖级编码(如:110000,110100,110101)
在buildLoginUser方法中新增loadUserRegion方法:
优先级规则:
实现逻辑:
当用户绑定/更换主组织时:
| 接口 | 方法 | 说明 |
|---|---|---|
/system/region/tree |
GET | 获取行政区划树形结构 |
/system/region/{code} |
GET | 根据code获取详情 |
/system/region/ |
POST | 新增行政区划 |
/system/region/ |
PUT | 更新行政区划 |
/system/region/{code} |
DELETE | 删除行政区划 |
/system/region/children/{parentCode} |
GET | 获取子级列表 |
/system/region/search?name={name} |
GET | 搜索行政区划 |
用户登录后通过/auth/userInfo接口获取LoginUser,包含完整行政区划信息。
行政区划数据量大(全国约4级、数万条),建议提供Excel导入功能。
行政区划数据变化频率低,可考虑Redis缓存树形结构数据。