From e4d5edc13431e3777d4463df4864c6116dc79744 Mon Sep 17 00:00:00 2001
From: zhouxiantao <1026371446@qq.com>
Date: Thu, 17 Oct 2024 19:51:01 +0800
Subject: [PATCH] fix:流转办理已经修改不生效问题,纠纷态势区域权限限制,纠纷态势纠纷类型二级接口

---
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java          |    2 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java            |    2 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/controller/web/SyRegionWebController.java      |   18 ++
 dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/domain/bo/AreaBO.java                          |   19 ++
 dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/service/SyRegionService.java                   |  175 ++++++++++++++++++++++++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java |   30 +++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml         |   31 +++
 dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java                 |   22 +++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java              |   59 +++++++
 dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/CustClient.java                          |    9 +
 10 files changed, 346 insertions(+), 21 deletions(-)

diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
index be07a0b..ae674e7 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
@@ -81,10 +81,11 @@
             terms.put("createStart", fileStart+ " 00:00:00");
             terms.put("createEnd", fileEnd+ " 23:59:59");
         }
-        String areaType = request.getParameter("areaType");
-        if (StringUtils.isNotBlank(areaType)){
-            terms.put("areaType", areaType);
+        String queRoad = request.getParameter("queRoad");
+        if (StringUtils.isNotBlank(queRoad)){
+            terms.put("areaType", "2");
         }
+
         // 实际调解组织编号
         String mediateUnitId = request.getParameter("mediateUnitId");
         if (StringUtils.isNotBlank(mediateUnitId)){
@@ -724,16 +725,33 @@
     }
 
     /**
-     * 综合查询
+     * 解纷态势
      * @url {ctx}/api/web/caseInfo/statistics
      * @return Object
      * @CurrentUser String userId
      */
     @GetMapping("/statistics")
-    public Object statistics() {
+    public Object statistics(@CurrentUser String userId) {
         try {
             Map<String, Object> terms = getParameterAll();
-            return ReturnSucUtils.getRepInfo( "处理成功", service.statistics(terms));
+            return ReturnSucUtils.getRepInfo( "处理成功", service.statistics(terms,userId));
+        } catch (Exception e) {
+            log.error("Controller接口[CaseInfoWebController.statistics]请求异常:"+e, e);
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 解纷态势-纠纷类型
+     * @url {ctx}/api/web/caseInfo/statisticsCaseType
+     * @return Object
+     * @CurrentUser String userId
+     */
+    @GetMapping("/statisticsCaseType")
+    public Object statisticsCaseType(@CurrentUser String userId) {
+        try {
+            Map<String, Object> terms = getParameterAll();
+            return ReturnSucUtils.getRepInfo( "处理成功", service.statisticsCaseType(terms,userId));
         } catch (Exception e) {
             log.error("Controller接口[CaseInfoWebController.statistics]请求异常:"+e, e);
             return ReturnFailUtils.getRepInfo();
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java
index 52013a5..8be84a5 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java
@@ -91,6 +91,8 @@
 
     CaseStatisticsBaseDTO statisticsBase(@Param("terms") Map<String, Object> terms);
 
+    List<CaseStatisticsTypeDTO> statisticsTypeFirst(@Param("terms") Map<String, Object> terms);
+
     List<CaseStatisticsTypeDTO> statisticsType(@Param("terms") Map<String, Object> terms);
 
     CaseStatisticsSourceDTO statisticsSource(@Param("terms") Map<String, Object> terms);
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
index ea18c9a..9e1ae38 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
@@ -324,6 +324,15 @@
                 <if test="terms.caseType != null and terms.caseType !=''">
                     and a.case_type = #{terms.caseType}
                 </if>
+                <if test="terms.caseTypeFirst != null and terms.caseTypeFirst !=''">
+                    and a.case_type_first = #{terms.caseTypeFirst}
+                </if>
+                <if test="terms.caseTypeFirstList != null and terms.caseTypeFirstList.size > 0">
+                    and a.case_type_first in
+                    <foreach collection="terms.caseTypeFirstList" item="caseTypeFirst" index="index" open="(" separator="," close=")">
+                        #{caseTypeFirst}
+                    </foreach>
+                </if>
                 <if test="terms.caseTypeName != null and terms.caseTypeName !=''">
                     and a.case_type_name = #{terms.caseTypeName}
                 </if>
@@ -349,17 +358,17 @@
                     and (DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.fileStart}
                     and DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.fileEnd})
                 </if>
-                <if test="terms.queProv != null and terms.queProv !=''">
-                    and a.que_prov = #{terms.queProv}
-                </if>
                 <if test="terms.queCity != null and terms.queCity !=''">
-                    and a.que_city = #{terms.queCity}
+                    and ((b.mediate_unit_id is not null and b.mediate_unit_id in (select id from "gzdyh_dev"."dyh_ct_unit" where que_city = #{terms.queCity}))
+                    or (b.mediate_unit_id is null and a.que_city = #{terms.queCity}))
                 </if>
                 <if test="terms.queArea != null and terms.queArea !=''">
-                    and a.que_area = #{terms.queArea}
+                    and ((b.mediate_unit_id is not null and b.mediate_unit_id in (select id from "gzdyh_dev"."dyh_ct_unit" where que_area = #{terms.queArea}))
+                    or (b.mediate_unit_id is null and a.que_area = #{terms.queArea}))
                 </if>
                 <if test="terms.queRoad != null and terms.queRoad !=''">
-                    and a.que_road = #{terms.queRoad}
+                    and ((b.mediate_unit_id is not null and b.mediate_unit_id in (select id from "gzdyh_dev"."dyh_ct_unit" where que_road = #{terms.queRoad}))
+                    or (b.mediate_unit_id is null and a.que_road = #{terms.queRoad}))
                 </if>
                 <if test="terms.isArea != null and terms.isArea !=''">
                     and a.que_city is not null and a.que_area is not null and a.que_road is not null
@@ -881,6 +890,16 @@
         <include refid="where-part-all"/>
     </select>
     <!--  统计分析(类型)  -->
+    <select id="statisticsTypeFirst" resultType="cn.huge.module.cases.domain.dto.CaseStatisticsTypeDTO">
+        SELECT
+        a.case_type_first as caseType,a.case_type_first_name as caseTypeName,count(1) as caseNum
+        FROM
+        dyh_case_info a LEFT JOIN dyh_case_info_unfold b on a.id = b.id
+        <include refid="where-part-all"/>
+        group by a.case_type_first
+    </select>
+
+    <!--  统计分析(类型)  -->
     <select id="statisticsType" resultType="cn.huge.module.cases.domain.dto.CaseStatisticsTypeDTO">
         SELECT
         a.case_type as caseType,a.case_type_name as caseTypeName,count(1) as caseNum
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java
index d4a7f02..6e19dc5 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java
@@ -282,7 +282,7 @@
             caseFeedback.setHandleUnitName(loginUser.getUnitName());
             caseFeedback.setHandleUserId(loginUser.getId());
             caseFeedback.setHandleUserName(loginUser.getTrueName());
-            caseFeedback.setId(utilsClient.getNewTimeId());
+//            caseFeedback.setId(utilsClient.getNewTimeId());
             caseFeedback.setHandleType(caseFeedback1.getHandleType());
             caseFeedback.setUpdateTime(nowDate);
             mapper.updateById(caseFeedback);
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
index 633f0e4..1537f16 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
@@ -14,6 +14,7 @@
 import cn.huge.module.client.api.impl.UtilsClientImpl;
 import cn.huge.module.cases.dao.mapper.CaseInfoMapper;
 import cn.huge.module.constant.BaseConsts;
+import cn.huge.module.cust.dto.CtUnitDTO;
 import cn.huge.module.cust.dto.PaUserDTO;
 import cn.huge.module.mediate.constant.*;
 import cn.huge.module.cust.dto.CtUserDTO;
@@ -990,11 +991,21 @@
         return new PageImpl<CasePageDTO>(content, page, total);
     }
 
-
-    public CaseStatisticsBaseDTO statistics(Map<String, Object> terms) throws IOException {
+    /**
+     * 纠纷态势
+     * 筛选范围:如果已经有承办部门,就按承办部门的区域筛选。如果没有承办部门按问题归属区域筛选
+     * */
+    public CaseStatisticsBaseDTO statistics(Map<String, Object> terms,String userId) throws IOException {
         Object canal = null;
         if(ObjectUtils.isNotEmpty(terms.get("canal"))){
             canal = terms.get("canal");
+        }
+        //根据用户筛选区域范围
+        CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId);
+        if(ctUnitDTO.getUnitGrade().equals(2)){
+            terms.put("queArea", ctUnitDTO.getArea());
+        }else if(ctUnitDTO.getUnitGrade().equals(3) || ctUnitDTO.getUnitGrade().equals(4)){
+            terms.put("queRoad", ctUnitDTO.getRoad());
         }
         //基础数据统计
         CaseStatisticsBaseDTO caseStatisticsBaseDTO = mapper.statisticsBase(terms);
@@ -1045,7 +1056,7 @@
         caseStatisticsBaseDTO.setAreaList(caseStatisticsAreaDTOS);
         terms.remove("isArea");
         //纠纷类型统计
-        List<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsType(terms);
+        List<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsTypeFirst(terms);
         if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) {
             sortType(caseStatisticsTypeDTOS);
         }
@@ -1124,7 +1135,7 @@
             terms.put("canal", canal);
         }
         Sort sort = Sort.by(Sort.Direction.DESC, "a.create_time");
-        PageRequest pageRequest = PageRequest.of(0, 5, sort);
+        PageRequest pageRequest = PageRequest.of(0, 30, sort);
         Page<CasePageDTO> casePageDTOS = pageQueryAll(pageRequest, terms);
         if (ObjectUtils.isNotEmpty(casePageDTOS.getContent())) {
             caseStatisticsBaseDTO.setCaseList(casePageDTOS.getContent());
@@ -1298,4 +1309,44 @@
         return casePersonCountBO;
     }
 
+    public List<CaseStatisticsTypeDTO> statisticsCaseType(Map<String, Object> terms,String userId){
+        //根据用户筛选区域范围
+        CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId);
+        if(ctUnitDTO.getUnitGrade().equals(2)){
+            terms.put("queArea", ctUnitDTO.getArea());
+        }else if(ctUnitDTO.getUnitGrade().equals(3) || ctUnitDTO.getUnitGrade().equals(4)){
+            terms.put("queRoad", ctUnitDTO.getRoad());
+        }
+        if(ObjectUtils.isEmpty(terms.get("caseTypeFirst"))){
+            //筛选一级为其他的纠纷类型
+            List<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsTypeFirst(terms);
+            if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) {
+                sortType(caseStatisticsTypeDTOS);
+            }
+            int i = 1;
+            List<String> caseTypeList = new ArrayList<>();
+            for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : caseStatisticsTypeDTOS) {
+                if (i > 5) {
+                    caseTypeList.add(caseStatisticsTypeDTO.getCaseType());
+                }
+                i++;
+            }
+            if(ObjectUtils.isEmpty(caseTypeList)){
+                return new ArrayList<>();
+            }
+            terms.put("caseTypeFirstList", caseTypeList);
+        }
+        List<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsType(terms);
+        if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) {
+            sortType(caseStatisticsTypeDTOS);
+        }
+        Integer typeTotalNum = 0;
+        for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : caseStatisticsTypeDTOS) {
+            typeTotalNum = typeTotalNum + dellNull(caseStatisticsTypeDTO.getCaseNum());
+        }
+        for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : caseStatisticsTypeDTOS) {
+            caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1));
+        }
+        return caseStatisticsTypeDTOS;
+    }
 }
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/CustClient.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/CustClient.java
index ce78221..b75fae2 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/CustClient.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/CustClient.java
@@ -42,4 +42,13 @@
      */
     @GetMapping("/api/client/paUser/clientGetUserAll")
     ReturnBO paClientGetUserAll(@RequestParam("userId") String userId);
+
+    /**
+     * 查询用户所在的单位信息
+     * @url {ctx}/api/client/ctUnit/getUnitByUserId?userId=
+     * @param userId 登录用户编号
+     * @return ReturnBO
+     */
+    @GetMapping("/api/client/ctUnit/getUnitByUserId")
+    ReturnBO getUnitByUserId(@RequestParam("userId") String userId);
 }
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
index ef6dff2..9451d26 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
@@ -6,6 +6,7 @@
 import cn.huge.base.common.exception.ClientException;
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.module.client.api.CustClient;
+import cn.huge.module.cust.dto.CtUnitDTO;
 import cn.huge.module.cust.dto.CtUserDTO;
 import cn.huge.module.cust.dto.PaUserDTO;
 import com.alibaba.fastjson.JSON;
@@ -105,4 +106,25 @@
             throw new ServiceException("CustClientImpl.paClientGetUserAll", e);
         }
     }
+
+    /**
+     * 当事人-获取登录用户
+     * @param userId 用户编号
+     * @return
+     */
+    public CtUnitDTO getUnitByUserId(String userId){
+        try{
+            ReturnBO returnBo = custClient.getUnitByUserId(userId);
+            if (ReturnConsts.OK == returnBo.getCode()){
+                CtUnitDTO loginUser = objectMapper.convertValue(returnBo.getData(), CtUnitDTO.class);
+                return loginUser;
+            }else{
+                log.error("Client外服务接口[CustClientImpl.getUnitByUserId]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+                throw new ClientException("CustClientImpl.getUnitByUserId", returnBo.getMsg());
+            }
+        }catch (Exception e){
+            log.error("service方法[CustClientImpl.getUnitByUserId]调用异常:"+e, e);
+            throw new ServiceException("CustClientImpl.getUnitByUserId", e);
+        }
+    }
 }
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/controller/web/SyRegionWebController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/controller/web/SyRegionWebController.java
index 197924d..c1cf796 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/controller/web/SyRegionWebController.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/controller/web/SyRegionWebController.java
@@ -3,6 +3,7 @@
 import cn.huge.base.common.utils.ObjectUtils;
 import cn.huge.base.common.utils.ReturnFailUtils;
 import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.base.config.CurrentUser;
 import cn.huge.module.kind.domain.dto.RegionSelectJSDTO;
 import cn.huge.module.kind.domain.dto.RegionSelectSaveDTO;
 import cn.huge.module.kind.domain.po.SyRegion;
@@ -225,4 +226,21 @@
         }
     }
 
+    /**
+     * 根据用户ID获取对应权限区域树
+     * @url {ctx}/api/web/syRegion/treeByUserId
+     * @return
+     *
+     */
+    @GetMapping("/treeByUserId")
+    public Object treeByUserId(@CurrentUser String userId) {
+        try {
+//            String userId = "2105120906491001";
+            return ReturnSucUtils.getRepInfo(service.treeByUserId(userId));
+        } catch (Exception e) {
+            log.error("Controller接口[SyRegionWebController.treeByUserId]请求异常:"+e, e);
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
 }
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/domain/bo/AreaBO.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/domain/bo/AreaBO.java
new file mode 100644
index 0000000..c467132
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/domain/bo/AreaBO.java
@@ -0,0 +1,19 @@
+package cn.huge.module.kind.domain.bo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhouxiantao
+ * @create 2024-10-16 11:03
+ */
+@Data
+public class AreaBO {
+    private String label;// 名称
+    private String value;// 编码
+    private String level;//1-市,2-区,3-街道,4-村居
+    private String parentId;//父类编码
+    private String sort;//排序
+    private List<AreaBO> children;//子类集合
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/service/SyRegionService.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/service/SyRegionService.java
index fefe1c0..55f6c97 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/service/SyRegionService.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/kind/service/SyRegionService.java
@@ -4,17 +4,23 @@
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
 import cn.huge.base.common.utils.ObjectUtils;
+import cn.huge.module.client.api.impl.CustClientImpl;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.constant.BaseConsts;
+import cn.huge.module.cust.dto.CtUnitDTO;
 import cn.huge.module.kind.dao.mapper.SyRegionMapper;
+import cn.huge.module.kind.domain.bo.AreaBO;
 import cn.huge.module.kind.domain.dto.RegionSelectJSDTO;
 import cn.huge.module.kind.domain.po.SyRegion;
 import cn.huge.module.sys.dto.QueAddrBaseDTO;
 import cn.huge.module.sys.dto.QueAreaDTO;
 import cn.huge.module.utils.BaiduMapAddrDTO;
 import cn.huge.module.utils.BaiduMapUtils;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import lombok.extern.slf4j.Slf4j;
@@ -26,10 +32,7 @@
 
 import javax.annotation.PostConstruct;
 import javax.swing.plaf.synth.Region;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @title: 地域字典表业务逻辑处理
@@ -49,6 +52,9 @@
 
     @Autowired
     private UtilsClientImpl utilsClient;
+    
+    @Autowired
+    private CustClientImpl custClient;
 
     /**
     * 更新对象
@@ -226,6 +232,167 @@
             }
         }
         return list;
+    } 
+    
+    public List<AreaBO> treeByUserId(String userId){
+        CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId);
+        Integer unitGrade = ctUnitDTO.getUnitGrade();
+        Set<AreaBO> areaSet = new HashSet<>();
+        if(unitGrade.equals(1)){
+            QueryWrapper<SyRegion> queryWrapper = new QueryWrapper();
+            queryWrapper.gt("level", 0);
+            List<SyRegion> syRegions = mapper.selectList(queryWrapper);
+            for (SyRegion syRegion : syRegions) {
+                AreaBO areaBO = new AreaBO();
+                areaBO.setParentId(syRegion.getParentId());
+                if(syRegion.getLevel().equals(1)){
+                    areaBO.setParentId("root");
+                }
+                areaBO.setLevel(String.valueOf(syRegion.getLevel()));
+                areaBO.setLabel(syRegion.getName());
+                areaBO.setValue(syRegion.getId());
+                areaBO.setSort(syRegion.getId());
+                areaSet.add(areaBO);
+            }
+
+        }else if(unitGrade.equals(2)){
+            SyRegion areaSyRegion = mapper.selectById(ctUnitDTO.getArea());
+            if(ObjectUtils.isNotEmpty(areaSyRegion)){
+                AreaBO areaBO = new AreaBO();
+                areaBO.setParentId("root");
+                areaBO.setLabel(areaSyRegion.getName());
+                areaBO.setValue(areaSyRegion.getId());
+                areaBO.setLevel(String.valueOf(areaSyRegion.getLevel()));
+                areaBO.setSort(areaSyRegion.getId());
+                areaSet.add(areaBO);
+
+                QueryWrapper<SyRegion> queryWrapper = new QueryWrapper();
+                queryWrapper.eq("parent_id", areaSyRegion.getId());
+                List<SyRegion> syRegions = mapper.selectList(queryWrapper);
+                for (SyRegion syRegion : syRegions) {
+                    AreaBO roadaBO = new AreaBO();
+                    roadaBO.setParentId(syRegion.getParentId());
+                    roadaBO.setLabel(syRegion.getName());
+                    roadaBO.setValue(syRegion.getId());
+                    roadaBO.setLevel(String.valueOf(syRegion.getLevel()));
+                    roadaBO.setSort(syRegion.getId());
+                    areaSet.add(roadaBO);
+                }
+            }
+        }else {
+            SyRegion roadSyRegion = mapper.selectById(ctUnitDTO.getRoad());
+            AreaBO roadaBO = new AreaBO();
+            roadaBO.setParentId("root");
+            roadaBO.setLabel(roadSyRegion.getName());
+            roadaBO.setValue(roadSyRegion.getId());
+            roadaBO.setLevel(String.valueOf(roadSyRegion.getLevel()));
+            roadaBO.setSort(roadSyRegion.getId());
+            areaSet.add(roadaBO);
+        }
+        if(ObjectUtils.isEmpty(areaSet)){
+            return new ArrayList<>();
+        }
+        List<AreaBO> areaBOList = sort(areaSet);
+        List<AreaBO> areaBOS = sortArea(areaBOList);
+        return createTree(areaBOS, null);
+    }
+
+    public List<AreaBO> sortArea(List<AreaBO> list) {
+        Map<String, String> map = new HashMap<>();
+        map.put("越秀区","2");
+        map.put("海珠区","3");
+        map.put("荔湾区","4");
+        map.put("天河区","5");
+        map.put("白云区","6");
+        map.put("黄埔区","7");
+        map.put("花都区","8");
+        map.put("番禺区","9");
+        map.put("南沙区","10");
+        map.put("从化区","11");
+        map.put("增城区","12");
+        for (AreaBO areaBO : list) {
+            if(map.containsKey(areaBO.getLabel())){
+                areaBO.setSort(map.get(areaBO.getLabel()));
+            }
+        }
+        list.sort((o1, o2) -> {
+            Integer totalScore1 = Integer.valueOf(o1.getSort());
+            Integer totalScore2 = Integer.valueOf(o2.getSort());
+            if (totalScore1 > totalScore2) {
+                return 1;
+            } else if (totalScore1.equals(totalScore2)) {
+                return 0;
+            } else {
+                return -1;
+            }
+        });
+        return list;
+    }
+
+
+    public List<AreaBO> sort(Set<AreaBO> termsSet){
+        List<AreaBO> termsList = new ArrayList<>();
+        if(ObjectUtils.isNotEmpty(termsSet)){
+            for (AreaBO selectTermDTO : termsSet) {
+                termsList.add(selectTermDTO);
+            }
+            termsList.sort((o1, o2)->{
+                Double totalScore1 = Double.valueOf(o1.getValue());
+                Double totalScore2 = Double.valueOf(o2.getValue());
+                if(totalScore1 > totalScore2) {
+                    return 1;
+                }else if (totalScore1.equals(totalScore2)) {
+                    return 0;
+                }else {
+                    return -1;
+                }
+            });
+        }
+        return termsList;
+    }
+
+    /**
+     * 创建树形结构
+     *
+     * @param selectTermDTOList 所有集合
+     * @param firstId    某一级编号
+     * @return List
+     */
+    public List<AreaBO> createTree(List<AreaBO> selectTermDTOList, String firstId) {
+        List<AreaBO> firstMapList = new ArrayList<>();
+        for (AreaBO selectTermDTO : selectTermDTOList) {
+            for (AreaBO currentParam : selectTermDTOList) {
+                if (currentParam.getValue().equals(selectTermDTO.getParentId())) {
+                    addToMBean(currentParam, selectTermDTO);
+                    break;
+                }
+            }
+        }
+        //取第一级节点
+        for (AreaBO selectTermDTO : selectTermDTOList) {
+            if (StringUtils.isNotEmpty(firstId)) {
+                if (firstId.equals(selectTermDTO.getValue())) {
+                    firstMapList.add(selectTermDTO);
+                }
+            } else {
+                if (BaseConsts.ROOT.equals(selectTermDTO.getParentId()) || StringUtils.isEmpty(selectTermDTO.getParentId())) {
+                    firstMapList.add(selectTermDTO);
+                }
+            }
+        }
+        return firstMapList;
+    }
+
+    public void addToMBean(AreaBO targetUnit, AreaBO currentUnit) {
+        List<AreaBO> childListObj = targetUnit.getChildren();
+        List<AreaBO> childList = null;
+        if (CollectionUtils.isEmpty(childListObj)) {
+            childList = new ArrayList();
+            targetUnit.setChildren(childList);
+        } else {
+            childList = childListObj;
+        }
+        childList.add(currentUnit);
     }
 
 }

--
Gitblit v1.8.0