package com.ruoyi.basic.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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;
/**
*
* 省表 服务实现类
*
*
* @author ruoyi
* @since 2025-05-31
*/
@Service
@RequiredArgsConstructor
public class ProvinceServiceImpl extends ServiceImpl implements ProvinceService {
@Autowired
private ProvinceMapper provinceMapper;
@Autowired
private CityMapper cityMapper;
@Autowired
private DistrictMapper districtMapper;
@Override
public List getAreaOptions() {
List res = new ArrayList<>();
List list = provinceMapper.selectList(null);
for (Province province : list) {
// 查询省下面的市
List cityList = cityMapper.selectList(new LambdaQueryWrapper().eq(City::getProvinceId, province.getId()));
List cities = new ArrayList<>();
for (City city : cityList) {
// 查询市下面的区
List districtList = districtMapper.selectList(new LambdaQueryWrapper().eq(District::getCityId, city.getId()));
List districts = new ArrayList<>();
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();
}
}