## 地区信息 #### 商城应用 在亚米商城系统里,用户在填写收货地址的时候都需要用到地区信息。那么为系统提供一套**公用的地区信息**就非常有必要。例如: ![](https://img.kancloud.cn/3f/b1/3fb18e9b9a1400a39edc54cfd3d6bacb_373x601.png) 在后台中,可以对地区进行管理。 ![1566357597422](https://img.kancloud.cn/24/4d/244dfdd1bc7736a927111d5d8176e5de_1324x946.png) ![1566357664626](https://img.kancloud.cn/d5/e5/d5e55d693834814041503def7f6696a8_748x471.png) 一般情况下,我们可以将地区进行分级: 1. 省份 2. 城市 3. 县区 4. 街道 对于大多数系统,一般整理到**区县级别**即可 #### 数据库设计 ##### 整体实体类关系如下图: ![1566288650463](https://img.kancloud.cn/2f/bb/2fbbdab4610724bed5f7b574270e48dc_263x137.png) ##### model实体类: ```java @Data @TableName("tz_area") public class Area implements Serializable { private static final long serialVersionUID = -6013320537436191451L; @TableId @ApiModelProperty(value = "地区id",required=true) private Long areaId; @ApiModelProperty(value = "地区名称",required=true) private String areaName; @ApiModelProperty(value = "地区上级id",required=true) private Long parentId; @ApiModelProperty(value = "地区层级",required=true) private Integer level; @TableField(exist=false) private List<Area> areas; } ``` - `areaId` ,地区id - `areaName`,地区名称 - `level`,级别,根据上面所说的地区枚举 - `parentId` ,地区上级id ##### 数据来源: 在添加数据时,我们可以根据 [worldArea](https://github.com/chency147/worldArea) 开源项目,导入对应的数据mysql 数据库脚本,包含世界各地区的地区编码以及中文名称。或者通过淘宝进行获取。地区库是十分重要的,且定义好后,不方便轻易调整。所以需要慎重添加地区库。 ##### 注意: 1. 国家地区不是一成不变的,不断的会有地区和地区之间的合并,又或者是地区的分拆。因此,建议可以以淘宝的地区库为准,及时对地区库经行更新。 2. 地区的分级只是大体的**分级**,实际上,会存在镇级市、县级市等等。 3. 如果**对接其他公司的服务**,地区编号可能存在不同,需要做好对应映射关系。 4. 如果有基于**微信公众号**的产品,一些用户设置所在地为国外,可以基于自己产品的情况,保存用户信息可以存储成中国。