Explorar o código

添加行政区划统计

gushoubang hai 4 meses
pai
achega
ef9586393a

+ 23 - 0
onemap-modules/onemap-apply/src/main/java/com/onemap/apply/domain/res/TreeAnalyse.java

@@ -0,0 +1,23 @@
+package com.onemap.apply.domain.res;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class TreeAnalyse {
+    String id; //id
+    String xzqh; //行政区划
+    int xzczs; //行政村总数
+    int qxysbczs; //旗县已上报的村庄数
+    int sbdstczs; //上报到省厅村庄数
+    int wbscjd; //文本审查节点(补正)
+    int slsjbz; //矢量数据审查节点(机审)
+    int ybas; //已备案数(用地审查节点)
+    String bal; //备案率(%)(已备案数行政村总数)
+    int qxwsbczs;//旗县未上报的村庄数
+    List<String> wsbczs = new ArrayList<>(); //未上报村庄
+
+    List<TreeAnalyse> children;
+}

+ 3 - 3
onemap-modules/onemap-apply/src/main/java/com/onemap/apply/domain/sbjk/TusexzqhDTO.java

@@ -7,8 +7,8 @@ import lombok.Data;
 @TableName("t_use_xqzqh")
 @TableName("t_use_xqzqh")
 @Data
 @Data
 public class TusexzqhDTO {
 public class TusexzqhDTO {
-    @TableField(value = "xqzqh_code")
-    private String xzqhCode;
+    @TableField(value = "code")
+    private String code;
    @TableField(value = "province")
    @TableField(value = "province")
     private String province;
     private String province;
     @TableField(value = "city")
     @TableField(value = "city")
@@ -22,5 +22,5 @@ public class TusexzqhDTO {
     @TableField(value = "pid")
     @TableField(value = "pid")
     private String pid;// 上一级的行政区划编码
     private String pid;// 上一级的行政区划编码
     @TableField(value = "use_id")
     @TableField(value = "use_id")
-    private String useId; //省厅返回用的
+    private String use_id; //省厅返回用的
 }
 }

+ 19 - 0
onemap-modules/onemap-apply/src/main/java/com/onemap/apply/mapper/sbjk/TuseXzqhMapper.java

@@ -2,6 +2,25 @@ package com.onemap.apply.mapper.sbjk;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.onemap.apply.domain.sbjk.TusexzqhDTO;
 import com.onemap.apply.domain.sbjk.TusexzqhDTO;
+import io.swagger.models.auth.In;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 public interface TuseXzqhMapper extends BaseMapper<TusexzqhDTO> {
 public interface TuseXzqhMapper extends BaseMapper<TusexzqhDTO> {
+    List<TusexzqhDTO> getAllVillage();
+
+    List<TusexzqhDTO> getAllTownship();
+
+    List<TusexzqhDTO> getAllCounty();
+
+    List<TusexzqhDTO> getAllCity();
+
+    Integer getAllVillageNumByPid(String pid);
+
+    Integer getAllVillageNumByUseId(@Param("useIds") List<String> useIds);
+
+    Integer getTownReportNum(String pid);
+
+    List<String> getTownUnReportVillage(String pid);
 }
 }

+ 8 - 1
onemap-modules/onemap-apply/src/main/java/com/onemap/apply/service/impl/sbjk/SbSearchServiceImpl.java

@@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.onemap.apply.domain.cggl.TCgglRevise;
 import com.onemap.apply.domain.cggl.TCgglRevise;
+import com.onemap.apply.domain.sbjk.TusexzqhDTO;
 import com.onemap.apply.domain.sbjk.XzczghcgsbDTO;
 import com.onemap.apply.domain.sbjk.XzczghcgsbDTO;
 import com.onemap.apply.mapper.cggl.TCgglReviseMapper;
 import com.onemap.apply.mapper.cggl.TCgglReviseMapper;
+import com.onemap.apply.mapper.sbjk.TuseXzqhMapper;
 import com.onemap.apply.mapper.sbjk.XzczghcgsbMapper;
 import com.onemap.apply.mapper.sbjk.XzczghcgsbMapper;
 import com.onemap.apply.service.sbjk.SbSearchService;
 import com.onemap.apply.service.sbjk.SbSearchService;
 import com.onemap.apply.service.sbjk.XzczghcgsbService;
 import com.onemap.apply.service.sbjk.XzczghcgsbService;
@@ -56,6 +58,8 @@ public class SbSearchServiceImpl implements SbSearchService {
     private String reuploadThirdpartyReviseURI;
     private String reuploadThirdpartyReviseURI;
     @Autowired
     @Autowired
     private TCgglReviseMapper tCgglReviseMapper;
     private TCgglReviseMapper tCgglReviseMapper;
+    @Resource
+    private TuseXzqhMapper tuseXzqhMapper;
 
 
     @Override
     @Override
     public JSONObject reuploadThirdpartyReviseData(String id, MultipartFile file, String instid) {
     public JSONObject reuploadThirdpartyReviseData(String id, MultipartFile file, String instid) {
@@ -156,7 +160,9 @@ public class SbSearchServiceImpl implements SbSearchService {
 
 
     @Override
     @Override
     public JSONObject landMyAttendsData(Integer planType, Integer current, Integer size, String divisionCode) {
     public JSONObject landMyAttendsData(Integer planType, Integer current, Integer size, String divisionCode) {
-        int total = 999;
+        List<TusexzqhDTO> villageList = tuseXzqhMapper.getAllVillage();
+
+        int total = 400;
         int returnSize = 0;
         int returnSize = 0;
         if (current * size > total) {
         if (current * size > total) {
             returnSize = total - (current - 1) * size;
             returnSize = total - (current - 1) * size;
@@ -178,6 +184,7 @@ public class SbSearchServiceImpl implements SbSearchService {
             object.put("solId", "1108335276203401216");
             object.put("solId", "1108335276203401216");
             object.put("createTime", "2023-10-13 14:40:25");
             object.put("createTime", "2023-10-13 14:40:25");
             object.put("subject", "xxxxx国土空间总体规划");
             object.put("subject", "xxxxx国土空间总体规划");
+            object.put("divisionCode",villageList.get(id).getUse_id());
             object.put("id", id);
             object.put("id", id);
             object.put("status", "RUNNING");
             object.put("status", "RUNNING");
             object.put("instId", "1162399447005093888" + i);
             object.put("instId", "1162399447005093888" + i);

+ 200 - 26
onemap-modules/onemap-apply/src/main/java/com/onemap/apply/service/impl/sbjk/XzczghcgsbServiceImpl.java

@@ -9,6 +9,8 @@ import com.onemap.apply.domain.cggl.ScmxRecordDTO;
 import com.onemap.apply.domain.cggl.TCgglSjbzmlwjDto;
 import com.onemap.apply.domain.cggl.TCgglSjbzmlwjDto;
 import com.onemap.apply.domain.res.LandMyAttend;
 import com.onemap.apply.domain.res.LandMyAttend;
 import com.onemap.apply.domain.res.LandMyAttendRes;
 import com.onemap.apply.domain.res.LandMyAttendRes;
+import com.onemap.apply.domain.res.TreeAnalyse;
+import com.onemap.apply.domain.sbjk.TusexzqhDTO;
 import com.onemap.apply.domain.sbjk.XxghcgsbDTO;
 import com.onemap.apply.domain.sbjk.XxghcgsbDTO;
 import com.onemap.apply.domain.sbjk.XzczghcgsbDTO;
 import com.onemap.apply.domain.sbjk.XzczghcgsbDTO;
 import com.onemap.apply.mapper.cggl.EscalationMapper;
 import com.onemap.apply.mapper.cggl.EscalationMapper;
@@ -16,6 +18,7 @@ import com.onemap.apply.mapper.cggl.ScmxMapper;
 import com.onemap.apply.mapper.cggl.ScmxRecordMapper;
 import com.onemap.apply.mapper.cggl.ScmxRecordMapper;
 import com.onemap.apply.mapper.cggl.TCgglSjbzmlwjMapper;
 import com.onemap.apply.mapper.cggl.TCgglSjbzmlwjMapper;
 import com.onemap.apply.mapper.sbjk.TuseXzqhMapper;
 import com.onemap.apply.mapper.sbjk.TuseXzqhMapper;
+import com.onemap.apply.mapper.sbjk.XxghcgsbMapper;
 import com.onemap.apply.mapper.sbjk.XzczghcgsbMapper;
 import com.onemap.apply.mapper.sbjk.XzczghcgsbMapper;
 import com.onemap.apply.service.sbjk.SbSearchService;
 import com.onemap.apply.service.sbjk.SbSearchService;
 import com.onemap.apply.service.sbjk.XxghcgsbService;
 import com.onemap.apply.service.sbjk.XxghcgsbService;
@@ -39,6 +42,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
+import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -52,6 +56,8 @@ public class XzczghcgsbServiceImpl implements XzczghcgsbService {
     private XzczghcgsbMapper xzczghcgsbMapper;
     private XzczghcgsbMapper xzczghcgsbMapper;
     @Resource
     @Resource
     private TuseXzqhMapper tuseXzqhMapper;
     private TuseXzqhMapper tuseXzqhMapper;
+    @Resource
+    private XxghcgsbMapper xxghcgsbMapper;
 
 
     @Value("${Cggl.temp}")
     @Value("${Cggl.temp}")
     private String temp;
     private String temp;
@@ -179,39 +185,207 @@ public class XzczghcgsbServiceImpl implements XzczghcgsbService {
     }
     }
 
 
     @Override
     @Override
-    public int getStatistics() {
+    public List<TreeAnalyse> getStatistics() {
         // todo
         // todo
         // 鄂尔多斯 1506
         // 鄂尔多斯 1506
         // 通过分页获取全部的数据
         // 通过分页获取全部的数据
         // sbSearchService.getLandMyAttendsData(2, 1, 10, " 1506", "");
         // sbSearchService.getLandMyAttendsData(2, 1, 10, " 1506", "");
 
 
-//        int current = 1;
-//        List<LandMyAttend.RecordsDTO> list = getAllLandMyAttendsData(2, current, 200, "1506");
-//        // 根据nodeName组成map数组
-//        Map<String, List<LandMyAttend.RecordsDTO>> mapNodeName = new HashMap<>();
-//        for (LandMyAttend.RecordsDTO record : list) {
-//            if (mapNodeName.containsKey(record.getNodeName())) {
-//                mapNodeName.get(record.getNodeName()).add(record);
-//            } else {
-//                List<LandMyAttend.RecordsDTO> records = new ArrayList<>();
-//                records.add(record);
-//                mapNodeName.put(record.getNodeName(), records);
+        int current = 1;
+        List<LandMyAttend.RecordsDTO> list = getAllLandMyAttendsData(2, current, 200, "1506");
+        // 根据divisionCode的前9位进行divisionCode分组数量
+        Map<String, List<String>> townCountMap = new HashMap<>();
+        // 根据divisionCode的前9位进行divisionCode分组节点类别
+
+        Map<String, Map<String, List<String>>> townNodeMap = new HashMap<>();
+        for (LandMyAttend.RecordsDTO recordsDTO : list) {
+            String townCode = recordsDTO.getDivisionCode().substring(0, 9);
+
+            // 根据乡镇数量分组
+            if (townCountMap.containsKey(townCode)) {
+                townCountMap.get(townCode).add(recordsDTO.getDivisionCode());
+            } else {
+                List<String> townList = new ArrayList<>();
+                townList.add(recordsDTO.getDivisionCode());
+                townCountMap.put(townCode, townList);
+            }
+
+            // 根据乡镇节点类别分组
+            if (townNodeMap.containsKey(townCode)) {
+                Map<String, List<String>> nodeMap = townNodeMap.get(townCode);
+                if (nodeMap.containsKey(recordsDTO.getNodeName())) {
+                    nodeMap.get(recordsDTO.getNodeName()).add(recordsDTO.getDivisionCode());
+                } else {
+                    List<String> nodeList = new ArrayList<>();
+                    nodeList.add(recordsDTO.getDivisionCode());
+                    nodeMap.put(recordsDTO.getNodeName(), nodeList);
+                }
+            } else {
+                Map<String, List<String>> nodeMap = new HashMap<>();
+                List<String> nodeList = new ArrayList<>();
+                nodeList.add(recordsDTO.getDivisionCode());
+                nodeMap.put(recordsDTO.getNodeName(), nodeList);
+                townNodeMap.put(townCode, nodeMap);
+            }
+
+        }
+
+
+        // 查询t_use_xzqh表中的数据
+        List<TusexzqhDTO> townList = tuseXzqhMapper.getAllTownship();
+        List<TusexzqhDTO> countyList = tuseXzqhMapper.getAllCounty();
+        List<TusexzqhDTO> cityList = tuseXzqhMapper.getAllCity();
+
+        //组织乡镇数据
+        List<TreeAnalyse> townTreeList = new ArrayList<>();
+        for (TusexzqhDTO tusexzqhDTO : townList) {
+            Integer villageNum = tuseXzqhMapper.getAllVillageNumByPid(tusexzqhDTO.getCode());
+            Integer townReportNum = tuseXzqhMapper.getTownReportNum(tusexzqhDTO.getCode());
+
+
+            TreeAnalyse treeAnalyse = new TreeAnalyse();
+            treeAnalyse.setId(tusexzqhDTO.getCode());
+            treeAnalyse.setXzqh(tusexzqhDTO.getTownship());//行政区划
+            treeAnalyse.setXzczs(villageNum);//行政村总数
+            treeAnalyse.setQxysbczs(townReportNum);//旗县已上报的村庄数
+
+            //上报到省厅村庄数
+            if (townCountMap.containsKey(tusexzqhDTO.getCode())) {
+                Integer reportNum = tuseXzqhMapper.getAllVillageNumByUseId(townCountMap.get(tusexzqhDTO.getCode()));
+                treeAnalyse.setSbdstczs(reportNum);
+            }
+
+            //补正,机审,用地审查节点
+            if (townNodeMap.containsKey(tusexzqhDTO.getCode())) {
+                Map<String, List<String>> nodeMap = townNodeMap.get(tusexzqhDTO.getCode());
+                if (nodeMap.containsKey("补正")) {
+                    List<String> bzList = nodeMap.get("补正");
+                    Integer bzNum = tuseXzqhMapper.getAllVillageNumByUseId(bzList);
+                    treeAnalyse.setWbscjd(bzNum);
+                }
+                if (nodeMap.containsKey("机审")) {
+                    List<String> jsList = nodeMap.get("机审");
+                    Integer jsNum = tuseXzqhMapper.getAllVillageNumByUseId(jsList);
+                    treeAnalyse.setSlsjbz(jsNum);
+                }
+                if (nodeMap.containsKey("用地审查节点")) {
+                    List<String> ydscList = nodeMap.get("用地审查节点");
+                    Integer ydscNum = tuseXzqhMapper.getAllVillageNumByUseId(ydscList);
+                    treeAnalyse.setYbas(ydscNum);
+                }
+            }
+
+            // 备案率
+            float bal = (float) treeAnalyse.getYbas() / (float) treeAnalyse.getXzczs();
+            DecimalFormat df = new DecimalFormat("0.0%");
+            treeAnalyse.setBal(df.format(bal));
+
+            // 未上报村庄
+            List<String> unReportVillages = tuseXzqhMapper.getTownUnReportVillage(tusexzqhDTO.getCode());
+            treeAnalyse.setQxwsbczs(unReportVillages.size());
+            treeAnalyse.setWsbczs(unReportVillages);
+
+            townTreeList.add(treeAnalyse);
+        }
+        //按照区县编码组织成map结构
+        Map<String, List<TreeAnalyse>> townMap = new HashMap<>();
+        for (TreeAnalyse treeAnalyse : townTreeList) {
+            String id = treeAnalyse.getId();
+            // 截取前6位
+            String key = id.substring(0, 6);
+            if (townMap.containsKey(key)) {
+                townMap.get(key).add(treeAnalyse);
+            } else {
+                List<TreeAnalyse> treeAnalyses = new ArrayList<>();
+                treeAnalyses.add(treeAnalyse);
+                townMap.put(key, treeAnalyses);
+            }
+        }
+
+
+        //组织区县数据
+        List<TreeAnalyse> countyTreeList = new ArrayList<>();
+        for (TusexzqhDTO tusexzqhDTO : countyList) {
+            TreeAnalyse treeAnalyse = new TreeAnalyse();
+            treeAnalyse.setId(tusexzqhDTO.getCode());
+            treeAnalyse.setXzqh(tusexzqhDTO.getCounty());//行政区划
+            if (townMap.containsKey(tusexzqhDTO.getCode())) {
+                List<TreeAnalyse> listCounty = townMap.get(tusexzqhDTO.getCode());
+                treeAnalyse.setChildren(listCounty);
+                for (TreeAnalyse analyse : listCounty) {
+                    //行政村总数
+                    treeAnalyse.setXzczs(analyse.getXzczs()+treeAnalyse.getXzczs());
+                    //旗县已上报的村庄数
+                    treeAnalyse.setQxysbczs(analyse.getQxysbczs() + treeAnalyse.getQxysbczs());
+                    //上报到省厅村庄数
+                    treeAnalyse.setSbdstczs(analyse.getSbdstczs() + treeAnalyse.getSbdstczs());
+                    //补正,机审,用地审查节点
+                    treeAnalyse.setWbscjd(analyse.getWbscjd() + treeAnalyse.getWbscjd());
+                    treeAnalyse.setSlsjbz(analyse.getSlsjbz() + treeAnalyse.getSlsjbz());
+                    treeAnalyse.setYbas(analyse.getYbas() + treeAnalyse.getYbas());
+                    //未上报村庄
+                    treeAnalyse.setQxwsbczs(analyse.getQxwsbczs() + treeAnalyse.getQxwsbczs());
+                }
+                // 备案率
+                float bal = (float) treeAnalyse.getYbas() / (float) treeAnalyse.getXzczs();
+                DecimalFormat df = new DecimalFormat("0.0%");
+                treeAnalyse.setBal(df.format(bal));
+            }
+            countyTreeList.add(treeAnalyse);
+        }
+        //组织市数据
+        List<TreeAnalyse> cityTreeList = new ArrayList<>();
+        for (TusexzqhDTO tusexzqhDTO : cityList) {
+            TreeAnalyse treeAnalyse = new TreeAnalyse();
+            treeAnalyse.setId(tusexzqhDTO.getCode());
+            treeAnalyse.setXzqh(tusexzqhDTO.getCity());//行政区划
+            treeAnalyse.setChildren(countyTreeList);
+            for (TreeAnalyse analyse : countyTreeList) {
+                //行政村总数
+                treeAnalyse.setXzczs(analyse.getXzczs() + treeAnalyse.getXzczs());
+                //旗县已上报的村庄数
+                treeAnalyse.setQxysbczs(analyse.getQxysbczs() + treeAnalyse.getQxysbczs());
+                //上报到省厅村庄数
+                treeAnalyse.setSbdstczs(analyse.getSbdstczs() + treeAnalyse.getSbdstczs());
+                //补正,机审,用地审查节点
+                treeAnalyse.setWbscjd(analyse.getWbscjd() + treeAnalyse.getWbscjd());
+                treeAnalyse.setSlsjbz(analyse.getSlsjbz() + treeAnalyse.getSlsjbz());
+                treeAnalyse.setYbas(analyse.getYbas() + treeAnalyse.getYbas());
+                //未上报村庄
+                treeAnalyse.setQxwsbczs(analyse.getQxwsbczs() + treeAnalyse.getQxwsbczs());
+            }
+            // 备案率
+            float bal = (float) treeAnalyse.getYbas() / (float) treeAnalyse.getXzczs();
+            DecimalFormat df = new DecimalFormat("0.0%");
+            treeAnalyse.setBal(df.format(bal));
+
+            cityTreeList.add(treeAnalyse);
+        }
+
+//        插入测试数据
+//        for (int i = 0; i < 300; i++) {
+//            TusexzqhDTO village = villageList.get(i);
+//
+//            XxghcgsbDTO xxghcgsbDTO = new XxghcgsbDTO();
+//            xxghcgsbDTO.setUuid(IdUtils.simpleUUID());
+//            xxghcgsbDTO.setUploadStatus(2);
+//            xxghcgsbDTO.setUploadTime(new Date());
+//            if (i % 3 == 0) {//上报厅
+//                xxghcgsbDTO.setStatus("12");
+//            } else if (i % 3 == 1) {//上报厅
+//                xxghcgsbDTO.setStatus("22");
+//            } else {//为上报厅
+//                xxghcgsbDTO.setStatus("11");
 //            }
 //            }
+//            xxghcgsbDTO.setCounty(village.getCounty());
+//            xxghcgsbDTO.setTown(village.getTownship());
+//            xxghcgsbDTO.setVillage(village.getVillage());
+//            xxghcgsbDTO.setXzqCode(village.getUse_id());
+//            xxghcgsbDTO.setXzqName(village.getVillage());
+//            xxghcgsbDTO.setYear("2025-03-13");
+//            xxghcgsbMapper.insert(xxghcgsbDTO);
 //        }
 //        }
-
-        XxghcgsbDTO xxghcgsbDTO = new XxghcgsbDTO();
-        xxghcgsbDTO.setUploadStatus(2);
-        xxghcgsbDTO.setUploadTime(new Date());
-        xxghcgsbDTO.setStatus("22"); //TODO
-//        xxghcgsbDTO.setCounty();
-//        xxghcgsbDTO.setTown();
-//        xxghcgsbDTO.setXzqCode();
-//        xxghcgsbDTO.setXzqName();
-        xxghcgsbDTO.setYear("2025-03-12");
-
-        xzczghcgsbMapper.insert()
-                .insert(xxghcgsbDTO);
-        return 999;
+        return cityTreeList;
     }
     }
 
 
     private List<LandMyAttend.RecordsDTO> getAllLandMyAttendsData(int planType, int current, int size, String divisionCode) {
     private List<LandMyAttend.RecordsDTO> getAllLandMyAttendsData(int planType, int current, int size, String divisionCode) {

+ 2 - 1
onemap-modules/onemap-apply/src/main/java/com/onemap/apply/service/sbjk/XzczghcgsbService.java

@@ -1,6 +1,7 @@
 package com.onemap.apply.service.sbjk;
 package com.onemap.apply.service.sbjk;
 
 
 
 
+import com.onemap.apply.domain.res.TreeAnalyse;
 import com.onemap.apply.domain.sbjk.XzczghcgsbDTO;
 import com.onemap.apply.domain.sbjk.XzczghcgsbDTO;
 import com.onemap.common.core.web.domain.AjaxResult;
 import com.onemap.common.core.web.domain.AjaxResult;
 import com.onemap.common.core.web.domain.RequestResult;
 import com.onemap.common.core.web.domain.RequestResult;
@@ -28,7 +29,7 @@ public interface XzczghcgsbService {
     /**
     /**
      * 获取统计列表
      * 获取统计列表
      */
      */
-    public int getStatistics();
+    public List<TreeAnalyse> getStatistics();
 
 
     /**
     /**
      * 新增记录
      * 新增记录

+ 60 - 0
onemap-modules/onemap-apply/src/main/resources/mapper/oracle/sbjk/TuseXzqhMapper.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.onemap.apply.mapper.sbjk.TuseXzqhMapper">
+    <select id="getAllVillage" resultType="com.onemap.apply.domain.sbjk.TusexzqhDTO">
+        SELECT *
+        FROM "T_USE_XZQH"
+        WHERE LENGTH("code") = 12
+    </select>
+    <select id="getAllTownship" resultType="com.onemap.apply.domain.sbjk.TusexzqhDTO">
+        SELECT *
+        FROM "T_USE_XZQH"
+        WHERE LENGTH("code") = 9
+    </select>
+    <select id="getAllCounty" resultType="com.onemap.apply.domain.sbjk.TusexzqhDTO">
+        SELECT *
+        FROM "T_USE_XZQH"
+        WHERE LENGTH("code") = 6
+    </select>
+    <select id="getAllCity" resultType="com.onemap.apply.domain.sbjk.TusexzqhDTO">
+        SELECT *
+        FROM "T_USE_XZQH"
+        WHERE LENGTH("code") = 4
+    </select>
+
+    <select id="getAllVillageNumByPid" resultType="java.lang.Integer">
+        SELECT COALESCE(COUNT(*), 0)
+        FROM "T_USE_XZQH"
+        WHERE "pid" = #{pid}
+    </select>
+
+    <select id="getAllVillageNumByUseId" resultType="java.lang.Integer">
+        SELECT COALESCE(COUNT(*), 0)
+        FROM "T_USE_XZQH"
+        WHERE "use_id" IN
+        <foreach collection="useIds" item="useId" open="(" separator="," close=")">
+            #{useId}
+        </foreach>
+    </select>
+
+    <select id="getTownReportNum" resultType="java.lang.Integer">
+        SELECT COALESCE(COUNT(*), 0)
+        FROM "T_USE_XZQH"
+        WHERE "use_id" IN (SELECT DISTINCT "XZQ_CODE"
+                           FROM "T_XXGHCGSB"
+                           WHERE LENGTH("XZQ_CODE") = 12
+                             AND "XZQ_CODE" LIKE #{pid} || '%')
+    </select>
+
+    <select id="getTownUnReportVillage" resultType="String">
+        select "village"
+        FROM "T_USE_XZQH"
+        WHERE "pid" = #{pid}
+          and "use_id" not IN (SELECT DISTINCT "XZQ_CODE"
+                               FROM "T_XXGHCGSB"
+                               WHERE LENGTH("XZQ_CODE") = 12
+                                 AND "XZQ_CODE" LIKE #{pid} || '%')
+    </select>
+</mapper>