| | |
| | | package com.ruoyi.basic.service.impl; |
| | | |
| | | import com.ruoyi.basic.entity.Province; |
| | | import com.ruoyi.basic.mapper.ProvinceMapper; |
| | | import com.ruoyi.basic.service.ProvinceService; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | import com.ruoyi.basic.entity.City; |
| | | import com.ruoyi.basic.entity.District; |
| | | import com.ruoyi.basic.entity.Province; |
| | | import com.ruoyi.basic.entity.dto.TreeSelectOption; |
| | | import com.ruoyi.basic.mapper.CityMapper; |
| | | import com.ruoyi.basic.mapper.DistrictMapper; |
| | | import com.ruoyi.basic.mapper.ProvinceMapper; |
| | | import com.ruoyi.basic.service.ProvinceService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | | * 省表 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author ruoyi |
| | | * @since 2025-05-31 |
| | | */ |
| | | * <p> |
| | | * 省表 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author ruoyi |
| | | * @since 2025-05-31 |
| | | */ |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class ProvinceServiceImpl extends ServiceImpl<ProvinceMapper, Province> implements ProvinceService { |
| | | public class ProvinceServiceImpl extends ServiceImpl<ProvinceMapper, Province> implements ProvinceService { |
| | | |
| | | @Autowired |
| | | private ProvinceMapper provinceMapper; |
| | | |
| | | @Autowired |
| | | private CityMapper cityMapper; |
| | | |
| | | @Autowired |
| | | private DistrictMapper districtMapper; |
| | | |
| | | @Override |
| | | public List<TreeSelectOption> getAreaOptions() { |
| | | List<TreeSelectOption> res = new ArrayList<>(); |
| | | |
| | | // 批量查询所有省份 |
| | | List<Province> provinces = provinceMapper.selectList(null); |
| | | if (provinces.isEmpty()) { |
| | | return res; |
| | | } |
| | | |
| | | // 获取所有省份ID用于批量查询城市 |
| | | List<Long> provinceIds = provinces.stream() |
| | | .map(Province::getId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 批量查询所有城市 |
| | | List<City> allCities = cityMapper.selectList( |
| | | new LambdaQueryWrapper<City>().in(City::getProvinceId, provinceIds)); |
| | | |
| | | // 将城市按省份ID分组 |
| | | Map<Long, List<City>> cityMap = allCities.stream() |
| | | .collect(Collectors.groupingBy(City::getProvinceId)); |
| | | |
| | | // 获取所有城市ID用于批量查询区域 |
| | | List<Long> cityIds = allCities.stream() |
| | | .map(City::getId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 批量查询所有区域 |
| | | List<District> allDistricts = districtMapper.selectList( |
| | | new LambdaQueryWrapper<District>().in(District::getCityId, cityIds)); |
| | | |
| | | // 将区域按城市ID分组 |
| | | Map<Long, List<District>> districtMap = allDistricts.stream() |
| | | .collect(Collectors.groupingBy(District::getCityId)); |
| | | |
| | | // 构建树形结构 |
| | | for (Province province : provinces) { |
| | | List<TreeSelectOption> cities = new ArrayList<>(); |
| | | |
| | | List<City> cityList = cityMap.get(province.getId()); |
| | | if (cityList != null && !cityList.isEmpty()) { |
| | | for (City city : cityList) { |
| | | List<TreeSelectOption> districts = new ArrayList<>(); |
| | | |
| | | List<District> districtList = districtMap.get(city.getId()); |
| | | if (districtList != null && !districtList.isEmpty()) { |
| | | for (District district : districtList) { |
| | | districts.add(new TreeSelectOption(district.getId().toString(), |
| | | district.getName(), district.getId(), null)); |
| | | } |
| | | } |
| | | |
| | | TreeSelectOption cityTreeSelectOption = new TreeSelectOption(); |
| | | cityTreeSelectOption.setValue(city.getId().toString()); |
| | | cityTreeSelectOption.setLabel(city.getName()); |
| | | cityTreeSelectOption.setId(city.getId()); |
| | | cityTreeSelectOption.setChildren(districts); |
| | | |
| | | cities.add(cityTreeSelectOption); |
| | | } |
| | | } |
| | | |
| | | TreeSelectOption treeSelectOption = new TreeSelectOption(); |
| | | treeSelectOption.setValue(province.getId().toString()); |
| | | treeSelectOption.setLabel(province.getName()); |
| | | treeSelectOption.setId(province.getId()); |
| | | treeSelectOption.setChildren(cities); |
| | | res.add(treeSelectOption); |
| | | } |
| | | |
| | | return res; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public String getAreaDisplay(Long provinceId, Long cityId, Long districtId) { |
| | | Province province = provinceMapper.selectById(provinceId); |
| | | if (province == null) { |
| | | throw new RuntimeException("省不存在"); |
| | | } |
| | | City city = cityMapper.selectById(cityId); |
| | | if (city == null) { |
| | | throw new RuntimeException("市不存在"); |
| | | } |
| | | District district = districtMapper.selectById(districtId); |
| | | if (district == null) { |
| | | throw new RuntimeException("区不存在"); |
| | | } |
| | | |
| | | // 如果省和市同名 |
| | | if (province.getName().equals(city.getName())) { |
| | | return province.getName() + " " + district.getName(); |
| | | } |
| | | return province.getName() + city.getName() + district.getName(); |
| | | } |
| | | } |