package com.xiaopeng.map.service.serviceimpl;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.xiaopeng.api.model.operation.XpOpenCity;
|
import com.xiaopeng.common.core.exception.ServiceException;
|
import com.xiaopeng.common.core.web.page.PageInfo;
|
import com.xiaopeng.common.security.utils.SecurityUtils;
|
import com.xiaopeng.map.constant.I18nKeyConstant;
|
import com.xiaopeng.map.dto.OpenCityAddDTO;
|
import com.xiaopeng.map.dto.OpenCityEditDTO;
|
import com.xiaopeng.map.mapper.XpOpenCityMapper;
|
import com.xiaopeng.map.query.OpenCityPageQuery;
|
import com.xiaopeng.map.service.XpOpenCityService;
|
import com.xiaopeng.map.vo.OpenCityListVO;
|
import com.xiaopeng.map.vo.XpOpenCityNextVo;
|
import com.xiaopeng.map.vo.XpOpenCityVo;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 开通城市 服务实现类
|
* </p>
|
*
|
* @author liu
|
* @since 2026-02-03
|
*/
|
@Service
|
public class XpOpenCityServiceImpl extends ServiceImpl<XpOpenCityMapper, XpOpenCity> implements XpOpenCityService {
|
|
|
|
@Override
|
public XpOpenCityVo citiesList() {
|
XpOpenCityVo xpOpenCityVo = new XpOpenCityVo();
|
List<XpOpenCity> xpOpenCities = this.baseMapper.selectList(new LambdaQueryWrapper<XpOpenCity>().eq(XpOpenCity::getStatus, 1));
|
if(!xpOpenCities.isEmpty()){
|
List<XpOpenCityNextVo> xpOpenCityNextVos = new ArrayList<>();
|
for (XpOpenCity xpOpenCity : xpOpenCities) {
|
XpOpenCityNextVo xpOpenCityNextVo = new XpOpenCityNextVo();
|
xpOpenCityNextVo.setName(xpOpenCity.getCityName());
|
xpOpenCityNextVo.setAdcode(xpOpenCity.getCityCode());
|
xpOpenCityNextVo.setId(xpOpenCity.getId());
|
xpOpenCityNextVos.add(xpOpenCityNextVo);
|
}
|
xpOpenCityVo.setCities(xpOpenCityNextVos);
|
xpOpenCityVo.setTotal(xpOpenCities.size());
|
}
|
return xpOpenCityVo;
|
}
|
|
@Override
|
public List<OpenCityListVO> getOpenCityListForAdmin() {
|
// 1. 查询所有启用状态的开通城市
|
List<XpOpenCity> xpOpenCities = this.baseMapper.selectList(
|
new LambdaQueryWrapper<XpOpenCity>()
|
.eq(XpOpenCity::getStatus, 1)
|
.orderByAsc(XpOpenCity::getId)
|
);
|
|
// 2. 转换为VO,处理区/县级拼接逻辑
|
return xpOpenCities.stream()
|
.map(city -> {
|
OpenCityListVO vo = new OpenCityListVO();
|
vo.setId(city.getId());
|
|
// 关键逻辑:判断是否为区/县级配置
|
if (StringUtils.isNotBlank(city.getDistrictName())) {
|
// 区/县级:拼接市名 + 区/县名
|
vo.setName(city.getCityName() + city.getDistrictName());
|
vo.setCode(city.getDistrictCode());
|
} else {
|
// 城市级:只返回市名
|
vo.setName(city.getCityName());
|
vo.setCode(city.getCityCode());
|
}
|
|
return vo;
|
})
|
.collect(Collectors.toList());
|
}
|
|
@Override
|
public PageInfo<XpOpenCity> getPageList(OpenCityPageQuery query) {
|
Page<XpOpenCity> page = lambdaQuery().like(StringUtils.isNotBlank(query.getCityName()), XpOpenCity::getCityName, query.getCityName())
|
.eq(Objects.nonNull(query.getStatus()), XpOpenCity::getStatus, query.getStatus())
|
.orderByDesc(XpOpenCity::getCreateTime)
|
.page(new Page<>(query.getPageNum(), query.getPageSize()));
|
PageInfo<XpOpenCity> pageInfo = new PageInfo<>();
|
pageInfo.setRecords(page.getRecords());
|
page.setTotal(page.getTotal());
|
return pageInfo;
|
}
|
|
@Override
|
public void add(OpenCityAddDTO dto) {
|
checkIfExist(dto, null);
|
XpOpenCity xpOpenCity = BeanUtil.copyProperties(dto, XpOpenCity.class);
|
save(xpOpenCity);
|
}
|
|
/**
|
* 校验开通城市是否已添加
|
* @param dto
|
* @param excludeOpenCityId
|
*/
|
private void checkIfExist(OpenCityAddDTO dto, Long excludeOpenCityId) {
|
Long count = lambdaQuery().eq(XpOpenCity::getProvinceCode, dto.getProvinceCode())
|
.eq(XpOpenCity::getCityCode, dto.getCityCode())
|
.eq(StringUtils.isNotBlank(dto.getDistrictCode()), XpOpenCity::getDistrictCode, dto.getDistrictCode())
|
.ne(Objects.nonNull(excludeOpenCityId), XpOpenCity::getId, excludeOpenCityId)
|
.count();
|
if (count > 0) {
|
throw new ServiceException("该城市已存在", I18nKeyConstant.OPEN_CITY_EXISTS);
|
}
|
}
|
|
@Override
|
public void edit(OpenCityEditDTO dto) {
|
checkIfExist(dto, dto.getId());
|
XpOpenCity xpOpenCity = BeanUtil.copyProperties(dto, XpOpenCity.class);
|
updateById(xpOpenCity);
|
}
|
|
@Override
|
public void deleteById(Long id) {
|
removeById(id);
|
}
|
|
@Override
|
public void upDown(Long id, Integer status) {
|
lambdaUpdate().eq(XpOpenCity::getId, id).set(XpOpenCity::getStatus, status).update();
|
}
|
|
@Override
|
public String getNameWithCityName(Long cityId) {
|
String cityName = "";
|
XpOpenCity openCity = getById(cityId);
|
if (Objects.nonNull(openCity)) {
|
if (StringUtils.isNotBlank(openCity.getDistrictCode())) {
|
cityName = openCity.getCityName() + ">" + openCity.getDistrictName();
|
} else {
|
cityName = openCity.getCityName();
|
}
|
}
|
return cityName;
|
}
|
}
|