ref(sactorip): 重构地区查询接口并优化数据处理

- 修改地区查询接口返回类型为 List<CnAreaVo>
- 新增 CnAreaVo 类用于树形结构展示
- 优化地区数据处理逻辑,构建树形结构并排序
- 更新前端地区选择接口 URL
master
chenhao 2025-05-16 11:34:00 +08:00
parent e32f3663bf
commit d7cc90be9d
5 changed files with 87 additions and 5 deletions

View File

@ -88,11 +88,13 @@
focusCleanup: true
});
var urlChina = '/demo/form/cityData';
var urlChina = '/cnarea/select';
$.cxSelect.defaults.url = urlChina;
// $.cxSelect.defaults.jsonSpace = 'data';
$('#element1').cxSelect({
selects: ['province', 'city'],
nodata: 'none'
});
function submitHandler() {

View File

@ -5,11 +5,14 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.sip.domain.Cnarea;
import com.ruoyi.sip.service.ICnareaService;
import com.ruoyi.sip.vo.CnAreaVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author ch
@ -38,9 +41,9 @@ public class CnareaController extends BaseController {
* @return
*/
@GetMapping("/select")
public AjaxResult listSelect(Cnarea cnarea) {
List<Cnarea> list = cnareaService.queryAll(cnarea);
return AjaxResult.success(list);
public List<CnAreaVo> listSelect(Cnarea cnarea) {
List<CnAreaVo> list = cnareaService.listSelect(cnarea);
return list.stream().sorted(Comparator.comparing(CnAreaVo::getN)).collect(Collectors.toList());
}

View File

@ -1,6 +1,7 @@
package com.ruoyi.sip.service;
import com.ruoyi.sip.domain.Cnarea;
import com.ruoyi.sip.vo.CnAreaVo;
import java.util.List;
@ -42,6 +43,7 @@ public interface ICnareaService {
*/
int batchRemove(String[] ids);
List<CnAreaVo> listSelect(Cnarea cnarea);
}

View File

@ -4,10 +4,11 @@ import com.ruoyi.common.utils.CacheUtils;
import com.ruoyi.sip.domain.Cnarea;
import com.ruoyi.sip.mapper.CnareaMapper;
import com.ruoyi.sip.service.ICnareaService;
import com.ruoyi.sip.vo.CnAreaVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.*;
/**
* @Author ch
@ -69,6 +70,52 @@ public class CnareaServiceImpl implements ICnareaService {
return cnareaMapper.batchRemove(ids);
}
@Override
public List<CnAreaVo> listSelect(Cnarea cnarea) {
// 查询所有数据
List<Cnarea> list = cnareaMapper.queryAll(cnarea);
// 构建树形结构
List<CnAreaVo> result = new ArrayList<>();
Map<String, CnAreaVo> map = new HashMap<>();
// 第一步:将所有数据转换为 CnAreaVo 并存入 Map
for (Cnarea item : list) {
CnAreaVo vo = new CnAreaVo();
vo.setId(item.getId());
vo.setN(item.getName());
vo.setAreaCode(item.getAreaCode());
vo.setParentCode(item.getParentCode());
// vo.setShortName(item.getShortName());
// vo.setMergerName(item.getMergerName());
// vo.setPinyin(item.getPinyin());
// vo.setLng(item.getLng());
// vo.setLat(item.getLat());
map.put(item.getAreaCode(), vo);
}
// 第二步:构建树形结构
for (CnAreaVo vo : map.values()) {
if (vo.getParentCode() == null || !map.containsKey(vo.getParentCode())) {
// 如果没有父节点或父节点不存在,则作为根节点
result.add(vo);
} else {
// 找到父节点并添加到其子节点列表中
CnAreaVo parent = map.get(vo.getParentCode());
if (parent.getS() == null) {
parent.setS(new ArrayList<>());
}
if ("2598".equals(vo.getId())){
//重庆市数据单独处理 剔除
continue;
}
parent.getS().add(vo);
}
}
return result;
}
}

View File

@ -0,0 +1,28 @@
package com.ruoyi.sip.vo;
import lombok.Data;
import java.util.List;
/**
* @author : ch
* @version : 1.0
* @ClassName : CnAreaVo
* @Description :
* @DATE : Created in 11:10 2025/5/16
* <pre> Copyright: Copyright(c) 2025 </pre>
* <pre> Company : </pre>
* Modification History:
* Date Author Version Discription
* --------------------------------------------------------------------------
* 2025/05/16 ch 1.0 Why & What is modified: <> *
*/
@Data
public class CnAreaVo {
private String id;
private String n;
private String areaCode;
private String parentCode;
private List<CnAreaVo> s;
}