package com.ozs.system.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ozs.system.domain.SysRegion; import com.ozs.system.domain.vo.SysRegionVO; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** * * @author makejava * @since 2021-05-21 00:08:38 */ @Service public class SysRegionService { @Resource private ISysRegionService gtAdministrativeDivisionService; /** * 获取行政区域列表 * @return */ public List geAdministrativeDivisionList(Long parentId, int level) { List result = new ArrayList<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(SysRegion::getLevel,level) .eq(parentId != null,SysRegion::getPid,parentId) .orderByAsc(SysRegion::getId); List gtAdministrativeDivisionList = this.gtAdministrativeDivisionService.list(queryWrapper); if(!ObjectUtils.isEmpty(gtAdministrativeDivisionList)){ gtAdministrativeDivisionList.forEach(item ->{ SysRegionVO vo = new SysRegionVO(); BeanUtils.copyProperties(item, vo); result.add(vo); }); } return result; } /** * 递归获取administrativeDivisionCodes 上级编码列表 省,市,区(包含自身) * @return */ public String getParentAdministrativeDivisionCodes(String administrativeDivisionCode) { List list = getParentAdministrativeDivisionCodeList(administrativeDivisionCode,true); if(!ObjectUtils.isEmpty(list)){ StringBuilder sb = new StringBuilder(); list.forEach(item ->{ sb.append(item).append(","); }); String parentAdministrativeDivisionCodes = sb.toString(); if (parentAdministrativeDivisionCodes.endsWith(",")) { parentAdministrativeDivisionCodes = parentAdministrativeDivisionCodes.substring(0, parentAdministrativeDivisionCodes.length() - 1); } return parentAdministrativeDivisionCodes; } else { return administrativeDivisionCode; } } /** * 递归获取administrativeDivisionCodes 上级编码列表 省,市,区(包含自身) * @return */ public List getParentAdministrativeDivisionCodeList(String administrativeDivisionCode) { return getParentAdministrativeDivisionCodeList(administrativeDivisionCode,false); } /** * 递归获取administrativeDivisionCodes 上级编码列表 省,市,区(包含自身) * @return */ public List getParentAdministrativeDivisionCodeList(String administrativeDivisionCode,boolean hasChina) { List administrativeDivisionCodes = new ArrayList<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(SysRegion::getCode,administrativeDivisionCode); SysRegion gtAdministrativeDivision = this.gtAdministrativeDivisionService.getOne(queryWrapper); if(gtAdministrativeDivision == null){ return null; } else { administrativeDivisionCodes.add(administrativeDivisionCode); } getParentAdministrativeDivisionCodeList(gtAdministrativeDivision.getPid(), administrativeDivisionCodes); List administrativeDivisionCodes2 = new ArrayList<>(); for(int i = administrativeDivisionCodes.size() - 1; i >= 0; i--){ administrativeDivisionCodes2.add(administrativeDivisionCodes.get(i)); } if(hasChina){ administrativeDivisionCodes2.add(0,"000000"); } return administrativeDivisionCodes2; } private void getParentAdministrativeDivisionCodeList(Long pid,List administrativeDivisionCodes) { SysRegion parent = this.gtAdministrativeDivisionService.getById(pid); if (parent != null && 0 != parent.getLevel()) { administrativeDivisionCodes.add(parent.getCode()); getParentAdministrativeDivisionCodeList(parent.getPid(),administrativeDivisionCodes); } } /** * 递归获取administrativeDivisionNames 父名称: 省/市/区,包含自身 * @return */ public String getParentAdministrativeDivisionNames(String administrativeDivisionCode) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(SysRegion::getCode,administrativeDivisionCode); SysRegion gtAdministrativeDivision = this.gtAdministrativeDivisionService.getOne(queryWrapper); if(gtAdministrativeDivision == null){ return null; } return getParentAdministrativeDivisionName(gtAdministrativeDivision.getPid(),gtAdministrativeDivision.getAdministrativeDivision()); } private String getParentAdministrativeDivisionName(Long pid,String pAdministrativeDivisionName) { SysRegion parent = this.gtAdministrativeDivisionService.getById(pid); if(parent != null && 0 != parent.getLevel()){ pAdministrativeDivisionName = parent.getAdministrativeDivision() + "/" + pAdministrativeDivisionName; pAdministrativeDivisionName = getParentAdministrativeDivisionName(parent.getPid(),pAdministrativeDivisionName); } return pAdministrativeDivisionName; } }