1 创建省市区的数据库
CREATE TABLE `m_area_code` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',`code` int(10) NOT NULL COMMENT '省份code',`parent_code` int(10) NOT NULL DEFAULT 0 COMMENT '父级code',`area_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `index_areacode_code`(`code`) USING BTREE,INDEX `index_areacode_pcode`(`parent_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4069 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '行政区划' ROW_FORMAT = Dynamic;
2 插入北京的数据
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (12, 110000, 0, '北京市', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (425, 110100, 110000, '北京市', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (814, 110101, 110100, '东城区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (815, 110102, 110100, '西城区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (816, 110105, 110100, '朝阳区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (817, 110106, 110100, '丰台区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (818, 110107, 110100, '石景山区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (819, 110108, 110100, '海淀区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (820, 110109, 110100, '门头沟区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (821, 110111, 110100, '房山区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (822, 110112, 110100, '通州区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (823, 110113, 110100, '顺义区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (824, 110114, 110100, '昌平区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (825, 110115, 110100, '大兴区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (826, 110116, 110100, '怀柔区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (827, 110117, 110100, '平谷区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (828, 110118, 110100, '密云区', NULL);
INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (829, 110119, 110100, '延庆区', NULL);
3 遍历数据
List<MAreaCodeVo> mAreaCodeList = mAreaCodeService.selectList();List<MAreaCodeVo> oneLevelRegion = mAreaCodeList.stream().filter(item -> item.getParentCode() == 0).collect(Collectors.toList());//遍历一级地区oneLevelRegion.stream().forEach( oneItem ->{//获得二级地区 地级市、地区、自治州、盟List<MAreaCodeVo> twoLevelRegion = mAreaCodeList.stream().filter(twoItem ->StringUtils.equals(String.valueOf(twoItem.getParentCode()),String.valueOf(oneItem.getCode()))).collect(Collectors.toList());//遍历二级地区twoLevelRegion.stream().forEach( twoItem ->{//获得三级地区 市辖区、县级市、县List<MAreaCodeVo> threeLevelRegion = mAreaCodeList.stream().filter(threeItem ->StringUtils.equals(String.valueOf(threeItem.getParentCode()) , String.valueOf(twoItem.getCode()))).collect(Collectors.toList());twoItem.setMAreaCodeList(threeLevelRegion);});oneItem.setMAreaCodeList(twoLevelRegion);});result.setData(oneLevelRegion);
4 返回的数据
{"id": 12,"code": 110000,"parentCode": 0,"areaName": "北京市","pinyin": null,"mareaCodeList": [{"id": 425,"code": 110100,"parentCode": 110000,"areaName": "北京市","pinyin": null,"mareaCodeList": [{"id": 814,"code": 110101,"parentCode": 110100,"areaName": "东城区","pinyin": null,"mareaCodeList": null},{"id": 815,"code": 110102,"parentCode": 110100,"areaName": "西城区","pinyin": null,"mareaCodeList": null},{"id": 816,"code": 110105,"parentCode": 110100,"areaName": "朝阳区","pinyin": null,"mareaCodeList": null},{"id": 817,"code": 110106,"parentCode": 110100,"areaName": "丰台区","pinyin": null,"mareaCodeList": null},{"id": 818,"code": 110107,"parentCode": 110100,"areaName": "石景山区","pinyin": null,"mareaCodeList": null},{"id": 819,"code": 110108,"parentCode": 110100,"areaName": "海淀区","pinyin": null,"mareaCodeList": null},{"id": 820,"code": 110109,"parentCode": 110100,"areaName": "门头沟区","pinyin": null,"mareaCodeList": null},{"id": 821,"code": 110111,"parentCode": 110100,"areaName": "房山区","pinyin": null,"mareaCodeList": null},{"id": 822,"code": 110112,"parentCode": 110100,"areaName": "通州区","pinyin": null,"mareaCodeList": null},{"id": 823,"code": 110113,"parentCode": 110100,"areaName": "顺义区","pinyin": null,"mareaCodeList": null},{"id": 824,"code": 110114,"parentCode": 110100,"areaName": "昌平区","pinyin": null,"mareaCodeList": null},{"id": 825,"code": 110115,"parentCode": 110100,"areaName": "大兴区","pinyin": null,"mareaCodeList": null},{"id": 826,"code": 110116,"parentCode": 110100,"areaName": "怀柔区","pinyin": null,"mareaCodeList": null},{"id": 827,"code": 110117,"parentCode": 110100,"areaName": "平谷区","pinyin": null,"mareaCodeList": null},{"id": 828,"code": 110118,"parentCode": 110100,"areaName": "密云区","pinyin": null,"mareaCodeList": null},{"id": 829,"code": 110119,"parentCode": 110100,"areaName": "延庆区","pinyin": null,"mareaCodeList": null}]}]}