|
|
@@ -40,15 +40,34 @@ public class SysAreaServiceImpl extends ServiceImpl<SysAreaDao, SysArea> impleme
|
|
|
@Override
|
|
|
public List<SysArea> getByParentCode(String parentCode) {
|
|
|
if (!StringUtils.hasText(parentCode)) {
|
|
|
- parentCode = "0";
|
|
|
+ throw new IllegalArgumentException("地区编码不能为空");
|
|
|
}
|
|
|
- LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
|
|
|
- wrapper.eq(SysArea::getParentCode, parentCode)
|
|
|
- //.eq(SysArea::getStatus, 1)
|
|
|
- .orderByAsc(SysArea::getSort);
|
|
|
- return this.list(wrapper);
|
|
|
+
|
|
|
+ // 查询所有地区数据,一次性加载到内存
|
|
|
+ List<SysArea> allAreas = this.list();
|
|
|
+
|
|
|
+ // 递归查找所有子级
|
|
|
+ return findChildren(allAreas, parentCode);
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 递归查找所有子级地区
|
|
|
+ */
|
|
|
+ private List<SysArea> findChildren(List<SysArea> allAreas, String parentCode) {
|
|
|
+ List<SysArea> result = new ArrayList<>();
|
|
|
+
|
|
|
+ // 查找直接子级
|
|
|
+ List<SysArea> directChildren = allAreas.stream()
|
|
|
+ .filter(area -> parentCode.equals(area.getParentCode()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
+ for (SysArea child : directChildren) {
|
|
|
+ result.add(child);
|
|
|
+ // 递归查找子级的子级
|
|
|
+ result.addAll(findChildren(allAreas, child.getCode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
@Override
|
|
|
public List<SysArea> getByParentCodes(List<String> parentCodes) {
|
|
|
LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
|