SysRegionService.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.ozs.system.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.ozs.system.domain.SysRegion;
  4. import com.ozs.system.domain.vo.SysRegionVO;
  5. import org.springframework.beans.BeanUtils;
  6. import org.springframework.stereotype.Service;
  7. import org.springframework.util.ObjectUtils;
  8. import javax.annotation.Resource;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. /**
  12. *
  13. * @author makejava
  14. * @since 2021-05-21 00:08:38
  15. */
  16. @Service
  17. public class SysRegionService {
  18. @Resource
  19. private ISysRegionService gtAdministrativeDivisionService;
  20. /**
  21. * 获取行政区域列表
  22. * @return
  23. */
  24. public List<SysRegionVO> geAdministrativeDivisionList(Long parentId, int level) {
  25. List<SysRegionVO> result = new ArrayList<>();
  26. QueryWrapper<SysRegion> queryWrapper = new QueryWrapper<>();
  27. queryWrapper.lambda().eq(SysRegion::getLevel,level)
  28. .eq(parentId != null,SysRegion::getPid,parentId)
  29. .orderByAsc(SysRegion::getId);
  30. List<SysRegion> gtAdministrativeDivisionList = this.gtAdministrativeDivisionService.list(queryWrapper);
  31. if(!ObjectUtils.isEmpty(gtAdministrativeDivisionList)){
  32. gtAdministrativeDivisionList.forEach(item ->{
  33. SysRegionVO vo = new SysRegionVO();
  34. BeanUtils.copyProperties(item, vo);
  35. result.add(vo);
  36. });
  37. }
  38. return result;
  39. }
  40. /**
  41. * 递归获取administrativeDivisionCodes 上级编码列表 省,市,区(包含自身)
  42. * @return
  43. */
  44. public String getParentAdministrativeDivisionCodes(String administrativeDivisionCode) {
  45. List<String> list = getParentAdministrativeDivisionCodeList(administrativeDivisionCode,true);
  46. if(!ObjectUtils.isEmpty(list)){
  47. StringBuilder sb = new StringBuilder();
  48. list.forEach(item ->{
  49. sb.append(item).append(",");
  50. });
  51. String parentAdministrativeDivisionCodes = sb.toString();
  52. if (parentAdministrativeDivisionCodes.endsWith(",")) {
  53. parentAdministrativeDivisionCodes = parentAdministrativeDivisionCodes.substring(0, parentAdministrativeDivisionCodes.length() - 1);
  54. }
  55. return parentAdministrativeDivisionCodes;
  56. } else {
  57. return administrativeDivisionCode;
  58. }
  59. }
  60. /**
  61. * 递归获取administrativeDivisionCodes 上级编码列表 省,市,区(包含自身)
  62. * @return
  63. */
  64. public List<String> getParentAdministrativeDivisionCodeList(String administrativeDivisionCode) {
  65. return getParentAdministrativeDivisionCodeList(administrativeDivisionCode,false);
  66. }
  67. /**
  68. * 递归获取administrativeDivisionCodes 上级编码列表 省,市,区(包含自身)
  69. * @return
  70. */
  71. public List<String> getParentAdministrativeDivisionCodeList(String administrativeDivisionCode,boolean hasChina) {
  72. List<String> administrativeDivisionCodes = new ArrayList<>();
  73. QueryWrapper<SysRegion> queryWrapper = new QueryWrapper<>();
  74. queryWrapper.lambda().eq(SysRegion::getCode,administrativeDivisionCode);
  75. SysRegion gtAdministrativeDivision = this.gtAdministrativeDivisionService.getOne(queryWrapper);
  76. if(gtAdministrativeDivision == null){
  77. return null;
  78. } else {
  79. administrativeDivisionCodes.add(administrativeDivisionCode);
  80. }
  81. getParentAdministrativeDivisionCodeList(gtAdministrativeDivision.getPid(), administrativeDivisionCodes);
  82. List<String> administrativeDivisionCodes2 = new ArrayList<>();
  83. for(int i = administrativeDivisionCodes.size() - 1; i >= 0; i--){
  84. administrativeDivisionCodes2.add(administrativeDivisionCodes.get(i));
  85. }
  86. if(hasChina){
  87. administrativeDivisionCodes2.add(0,"000000");
  88. }
  89. return administrativeDivisionCodes2;
  90. }
  91. private void getParentAdministrativeDivisionCodeList(Long pid,List<String> administrativeDivisionCodes) {
  92. SysRegion parent = this.gtAdministrativeDivisionService.getById(pid);
  93. if (parent != null && 0 != parent.getLevel()) {
  94. administrativeDivisionCodes.add(parent.getCode());
  95. getParentAdministrativeDivisionCodeList(parent.getPid(),administrativeDivisionCodes);
  96. }
  97. }
  98. /**
  99. * 递归获取administrativeDivisionNames 父名称: 省/市/区,包含自身
  100. * @return
  101. */
  102. public String getParentAdministrativeDivisionNames(String administrativeDivisionCode) {
  103. QueryWrapper<SysRegion> queryWrapper = new QueryWrapper<>();
  104. queryWrapper.lambda().eq(SysRegion::getCode,administrativeDivisionCode);
  105. SysRegion gtAdministrativeDivision = this.gtAdministrativeDivisionService.getOne(queryWrapper);
  106. if(gtAdministrativeDivision == null){
  107. return null;
  108. }
  109. return getParentAdministrativeDivisionName(gtAdministrativeDivision.getPid(),gtAdministrativeDivision.getAdministrativeDivision());
  110. }
  111. private String getParentAdministrativeDivisionName(Long pid,String pAdministrativeDivisionName) {
  112. SysRegion parent = this.gtAdministrativeDivisionService.getById(pid);
  113. if(parent != null && 0 != parent.getLevel()){
  114. pAdministrativeDivisionName = parent.getAdministrativeDivision() + "/" + pAdministrativeDivisionName;
  115. pAdministrativeDivisionName = getParentAdministrativeDivisionName(parent.getPid(),pAdministrativeDivisionName);
  116. }
  117. return pAdministrativeDivisionName;
  118. }
  119. }