數(shù)據(jù)量太大了 , 就不給大家了!
四、具體實(shí)現(xiàn)省市區(qū)的實(shí)體類就不展示了 , 大家根據(jù)自己公司的設(shè)計(jì)稍微改動(dòng)即可使用!
1. 樹形VO/** * 地址業(yè)務(wù)父子 * * @author wangzhenjun * @date 2022/9/2 16:26 */@Datapublic class AddressVO implements Serializable {/*** ID*/@ApiModelProperty(valuehttps://www.huyubaike.com/biancheng/= "https://www.huyubaike.com/biancheng/ID")private Integer id;/*** 編碼*/@ApiModelProperty(valuehttps://www.huyubaike.com/biancheng/= "")private String code;/*** 名稱*/@ApiModelProperty(valuehttps://www.huyubaike.com/biancheng/= "")private String name; /*** 父編碼*/private String parentCode;/*** 市區(qū)*/private List<AddressVO> children;}2. 具體實(shí)現(xiàn)@Overridepublic Result address() {long l = System.currentTimeMillis();// 獲取省市區(qū)List<AddressProvince> provinceList = addressProvinceMapper.selectList(Wrappers.<AddressProvince>lambdaQuery().eq(AddressProvince::getIsDeleted, 0).eq(AddressProvince::getIsLatest, 1));List<AddressCity> cityList = addressCityMapper.selectList(Wrappers.<AddressCity>lambdaQuery().eq(AddressCity::getIsDeleted, 0).eq(AddressCity::getIsLatest, 1));List<AddressDistrict> districtList = addressDistrictMapper.selectList(Wrappers.<AddressDistrict>lambdaQuery().eq(AddressDistrict::getIsDeleted, 0).eq(AddressDistrict::getIsLatest, 1));// 按照省code進(jìn)行分組Map<String, List<AddressCity>> cityMap = cityList.stream().collect(Collectors.groupingBy(AddressCity::getProvinceCode));// 按照市code進(jìn)行分組Map<String, List<AddressDistrict>> districtMap = districtList.stream().collect(Collectors.groupingBy(AddressDistrict::getCityCode));List<AddressVO> result = new ArrayList<>();for (AddressProvince province : provinceList) {// 獲取某個(gè)省下的所有市List<AddressCity> addressCityList = cityMap.get(province.getCode());// 給樹形對(duì)象賦省的數(shù)據(jù)AddressVO addressProvinceVO = new AddressVO();addressProvinceVO.setId(province.getId());addressProvinceVO.setCode(province.getCode());addressProvinceVO.setName(province.getName());List<AddressVO> cityResult = new ArrayList<>();for (AddressCity addressCity : addressCityList) {// 獲取某個(gè)市下的所有區(qū)List<AddressDistrict> addressDistrictList = districtMap.get(addressCity.getCode());// 給樹形對(duì)象賦市的數(shù)據(jù)AddressVO addressCityVO = new AddressVO();addressCityVO.setId(addressCity.getId());addressCityVO.setCode(addressCity.getCode());addressCityVO.setName(addressCity.getName());addressCityVO.setParentCode(province.getCode());List<AddressVO> districtResult = new ArrayList<>();// 便利每個(gè)市下面的所有區(qū)for (AddressDistrict addressDistrict : addressDistrictList) {// 給樹形對(duì)象賦區(qū)的數(shù)據(jù)AddressVO addressDistrictVO = new AddressVO();addressDistrictVO.setId(addressDistrict.getId());addressDistrictVO.setCode(addressDistrict.getCode());addressDistrictVO.setName(addressDistrict.getName());addressDistrictVO.setParentCode(addressCity.getCode());districtResult.add(addressDistrictVO);}addressCityVO.setChildren(districtResult);cityResult.add(addressCityVO);}addressProvinceVO.setChildren(cityResult);result.add(addressProvinceVO);}System.out.println(System.currentTimeMillis() - l);return Result.success(result);}4. 計(jì)算時(shí)長我們可以看到 , 一共297毫秒 , 小編的機(jī)器比較卡 , 支持cpu在60%情況下 , 200ms應(yīng)該問題不大 , 可以放到redis緩存起來 , 這樣減少IO交互 , 減少數(shù)據(jù)庫的壓力!!

文章插圖
五、前端vue此時(shí)address為數(shù)組 , 按序放了選擇的value , props:可以指定顯示和選擇的名稱 , 默認(rèn)是
value和label<el-cascaderv-model="addReceiverForm.address"placeholder="請(qǐng)選擇收貨人地址":options="options":props="{checkStrictly: true,value:'code',label:'name'}"></el-cascader>========data:============addReceiverForm:{ address:[]}options: [],========method:============// 獲取省市區(qū)initAddress() {listAddressAndChild().then(data =https://www.huyubaike.com/biancheng/> {this.options = data.data}).catch(() => {});},
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 談一次戀愛就心滿意足的星座
- 樊文花水療多久做一次合適?
- Java代碼審計(jì)之實(shí)戰(zhàn)某博客
- 洗碗機(jī)洗一次碗大概花多少錢 洗碗機(jī)不能洗什么
- 一次性儲(chǔ)奶袋怎么加熱
- 新筷子第一次用要開水煮嗎
- java常用注解校驗(yàn)參數(shù)
- 記一次 .NET 某電子病歷 CPU 爆高分析
- 【Java8新特性】- Optional應(yīng)用
- Java 最長公共前綴
