chenendian пре 19 часа
родитељ
комит
19e74a97ab

+ 28 - 2
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/cadastre/ReportBatchController.java

@@ -2,7 +2,7 @@ package com.siwei.apply.controller.cadastre;
 
 import com.siwei.apply.domain.YdbpData;
 import com.siwei.apply.domain.res.BatchRateRes;
-import com.siwei.apply.domain.vo.LandSupplyReportVO;
+import com.siwei.apply.domain.vo.BatchTrendReportVO;
 import com.siwei.apply.service.cadastre.ISupplyService;
 import com.siwei.apply.service.cadastre.impl.BatchServiceImpl;
 import com.siwei.common.core.domain.R;
@@ -62,6 +62,20 @@ public class ReportBatchController extends BaseController {
         }
     }
 
+    /**
+     * 已批未供数据
+     */
+    @GetMapping("/approval/notSupply")
+    public R<List<Map<String,Object>>> approvalAndNotSupply() {
+        try {
+            List<Map<String,Object>> res = batchServiceImpl.approvalAndNotSupply("");
+            return R.ok(res);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.fail(e.getMessage());
+        }
+    }
+
 
     /**
      *
@@ -93,7 +107,6 @@ public class ReportBatchController extends BaseController {
     }
 */
 
-
     @GetMapping("/getReportProject")
     public R<YdbpData> getReportProject(@RequestParam String propertyId) {
         try {
@@ -147,6 +160,19 @@ public class ReportBatchController extends BaseController {
         }
     }
 
+    /**
+     * 趋势分析报表
+     */
+    @GetMapping("/report/trendStatistics")
+    public R<BatchTrendReportVO> trendReport(@RequestParam String startYear, @RequestParam String endYear) {
+        try {
+            BatchTrendReportVO res =  batchServiceImpl.trendReport(startYear,endYear);
+            return R.ok(res);
+        } catch (Exception e) {
+            return R.fail(e.getMessage());
+        }
+    }
+
 
 
 }

+ 40 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/vo/BatchTrendReportVO.java

@@ -0,0 +1,40 @@
+package com.siwei.apply.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 房屋性质统计报表响应对象
+ * <p>
+ * </p>
+ */
+@Data
+public class BatchTrendReportVO {
+    /**
+     * 合计行
+     */
+    private RowData total;
+    /**
+     * 各数据行列表
+     */
+    private List<RowData> rows;
+    /**
+     * 报表数据行
+     */
+    @Data
+    public static class RowData {
+        private String year;
+        private TrendData totalData;
+        private TrendData signleData;
+        private TrendData reportData;
+    }
+
+    @Data
+    public static class TrendData {
+        /** 项目数 */
+        private Integer count;
+        /** 占用面积 */
+        private Double area;
+    }
+}

+ 1 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/YdbpDataMapper.java

@@ -56,6 +56,7 @@ public interface YdbpDataMapper {
     List<YdbpData> getStatisticsList(@Param("year") String year,
                                      @Param("keyWord") String keyWord,@Param("hasGeom")Boolean hasGeom);
 
+    List<Map<String,Object>> queryRemainGeomAreaByYear();
 
 
 }

+ 190 - 5
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/cadastre/impl/BatchServiceImpl.java

@@ -2,6 +2,7 @@ package com.siwei.apply.service.cadastre.impl;
 
 import com.siwei.apply.domain.YdbpData;
 import com.siwei.apply.domain.res.*;
+import com.siwei.apply.domain.vo.BatchTrendReportVO;
 import com.siwei.apply.domain.vo.LandSupplyProjectVO;
 import com.siwei.apply.mapper.*;
 import com.siwei.common.core.exception.ServiceException;
@@ -103,6 +104,124 @@ public class BatchServiceImpl{
     }
 
 
+    public BatchTrendReportVO trendReport(String startYear, String endYear) {
+        if(StringUtils.isBlank(startYear)||StringUtils.isBlank(endYear)){
+            throw new  ServiceException("年份不能为空");
+        }
+
+        BatchTrendReportVO batchTrendReportVO = new BatchTrendReportVO();
+        List<BatchTrendReportVO.RowData> rows = new ArrayList<>();
+
+        List<Map<String,Object>> singleBatchList =  ydbpMapper.getStatisticsList(startYear,"",false);
+        List<YdbpData> reportBatchList =  ydbpDataMapper.getStatisticsList(startYear,"",false);
+
+        Map<String,List<Map<String,Object>>> groupedSingleBatch = new HashMap<>();
+        Map<String, List<YdbpData>> groupedReportBatch = new HashMap<>();
+
+        if(CollectionUtils.isNotEmpty(singleBatchList)) {
+            groupedSingleBatch = singleBatchList.stream()
+                    .collect(Collectors.groupingBy(s->{
+                        Object nfStr = s.get("nf");
+                        if(nfStr==null || String.valueOf(nfStr).isEmpty()||"1000".equals(String.valueOf(nfStr))){
+                            return "其它";
+                        }
+                        return String.valueOf(nfStr);
+                    }));
+        }
+
+        if(CollectionUtils.isNotEmpty(reportBatchList)) {
+            groupedReportBatch = reportBatchList.stream()
+                    .collect(Collectors.groupingBy(s->{
+                        String pfDate = s.getPfDate();
+                        if(StringUtils.isBlank(pfDate)){
+                            return "其它";
+                        }
+                        pfDate = StringUtils.substring(pfDate,0,4);
+                        return pfDate;
+                    }));
+        }
+
+        Set<String> yearSet = new LinkedHashSet<>();
+        if(MapUtils.isNotEmpty(groupedSingleBatch)) {
+            yearSet.addAll(groupedSingleBatch.keySet());
+        }
+        if(MapUtils.isNotEmpty(groupedReportBatch)) {
+            yearSet.addAll(groupedReportBatch.keySet());
+        }
+
+        for(String yearKey : yearSet){
+            List<Map<String,Object>> singleList = groupedSingleBatch.get(yearKey);
+            List<YdbpData> reportList = groupedReportBatch.get(yearKey);
+
+            //计算单独选址的value
+            Double singleArea = sumAreaForSingle(singleList);
+            Integer singleCount = singleList==null?0:singleList.size();
+            BatchTrendReportVO.TrendData singleTrendData = new BatchTrendReportVO.TrendData();
+            singleTrendData.setArea(singleArea);
+            singleTrendData.setCount(singleCount);
+
+            //计算报批项目的value
+            Double reportArea = sumArea(reportList);
+            Integer reportCount = reportList==null?0:reportList.size();
+            BatchTrendReportVO.TrendData reportTrendData = new BatchTrendReportVO.TrendData();
+            reportTrendData.setArea(reportArea);
+            reportTrendData.setCount(reportCount);
+
+            //计算总量
+            BatchTrendReportVO.TrendData totalTrendData = new BatchTrendReportVO.TrendData();
+            totalTrendData.setCount(singleCount+reportCount);
+            totalTrendData.setArea(singleArea+reportArea);
+
+            //这里组装row
+            BatchTrendReportVO.RowData rowData = new BatchTrendReportVO.RowData();
+            rowData.setYear(yearKey);//设置名称
+            rowData.setSignleData(singleTrendData);
+            rowData.setReportData(reportTrendData);
+            rowData.setTotalData(totalTrendData);
+
+            rows.add(rowData);
+        }
+        batchTrendReportVO.setRows(rows);
+
+        //这里计算合计行
+        BatchTrendReportVO.RowData total = new BatchTrendReportVO.RowData();
+        {
+            String year = "合计";
+
+            //计算单独选址的value
+            Double singleArea = sumAreaForSingle(singleBatchList);
+            Integer singleCount = singleBatchList==null?0:singleBatchList.size();
+            BatchTrendReportVO.TrendData singleTrendData = new BatchTrendReportVO.TrendData();
+            singleTrendData.setArea(singleArea);
+            singleTrendData.setCount(singleCount);
+
+            //计算报批项目的value
+            Double reportArea = sumArea(reportBatchList);
+            Integer reportCount = reportBatchList==null?0:reportBatchList.size();
+            BatchTrendReportVO.TrendData reportTrendData = new BatchTrendReportVO.TrendData();
+            reportTrendData.setArea(reportArea);
+            reportTrendData.setCount(reportCount);
+
+            //计算总量
+            BatchTrendReportVO.TrendData totalTrendData = new BatchTrendReportVO.TrendData();
+            totalTrendData.setCount(singleCount+reportCount);
+            totalTrendData.setArea(singleArea+reportArea);
+
+            //这里组装row
+            total.setYear(year);//设置名称
+            total.setSignleData(singleTrendData);
+            total.setReportData(reportTrendData);
+            total.setTotalData(totalTrendData);
+        }
+
+        batchTrendReportVO.setTotal(total);
+        return batchTrendReportVO;
+    }
+
+
+
+
+
     public List<YdbpData> billProjectList(String year) {
         if(StringUtils.isBlank(year)){
             throw new  ServiceException("年份不能为空");
@@ -134,13 +253,78 @@ public class BatchServiceImpl{
     }
 
 
+    public List<Map<String,Object>> approvalAndNotSupply(String year) {
+        if (StringUtils.isBlank(year) || "0".equals(year)) {
+            year = "";
+        }
 
+        List<Map<String,Object>> resList = new ArrayList<>();
+        List<Map<String,Object>> singleBatchList =  new ArrayList<>();
+        List<Map<String,Object>> reportBatchList =  ydbpDataMapper.queryRemainGeomAreaByYear();
 
-    /**
-     * 年度统计
-     * @param year
-     * @return
-     */
+        Map<String,List<Map<String,Object>>> groupedSingleBatch = new HashMap<>();
+        Map<String, List<YdbpData>> groupedReportBatch = new HashMap<>();
+
+        if(CollectionUtils.isNotEmpty(singleBatchList)) {
+            groupedSingleBatch = singleBatchList.stream()
+                    .collect(Collectors.groupingBy(s->{
+                        Object nfStr = s.get("stat_year");
+                        if(nfStr==null || String.valueOf(nfStr).isEmpty()||"1000".equals(String.valueOf(nfStr))){
+                            return "其它";
+                        }
+                        return String.valueOf(nfStr);
+                    }));
+        }
+
+        if(CollectionUtils.isNotEmpty(reportBatchList)) {
+//            groupedReportBatch = reportBatchList.stream()
+//                    .collect(Collectors.groupingBy(s->{
+//                        String pfDate = "";
+//                        if(StringUtils.isBlank(pfDate)){
+//                            return "其它";
+//                        }
+//                        pfDate = StringUtils.substring(pfDate,0,4);
+//                        return pfDate;
+//                    }));
+        }
+
+        Set<String> yearSet = new LinkedHashSet<>();
+        if(MapUtils.isNotEmpty(groupedSingleBatch)) {
+            yearSet.addAll(groupedSingleBatch.keySet());
+        }
+        if(MapUtils.isNotEmpty(groupedReportBatch)) {
+            yearSet.addAll(groupedReportBatch.keySet());
+        }
+
+        for(String yearKey : yearSet){
+            Double areaArea = 0d;
+            if(groupedSingleBatch.containsKey(yearKey)){
+                //Map<Object>ddd =  groupedSingleBatch.get(yearKey);
+//              areaArea += groupedSingleBatch.get("ddd");
+            }
+            Map<String,Object> itemMap = new HashMap<>();
+            itemMap.put("year",yearKey);
+            itemMap.put("singleArea",null);
+            itemMap.put("reportArea",null);
+            resList.add(itemMap);
+        }
+        return null;
+    }
+
+
+
+
+
+
+
+
+
+
+        /**
+         * 年度统计
+         * @param year
+         * @return
+         */
     public List<Map<String,Object>> trendStatistics(String year) {
         if (StringUtils.isBlank(year) || "0".equals(year)) {
             year = "";
@@ -206,6 +390,7 @@ public class BatchServiceImpl{
 
 
 
+
     /**
      * 年度统计
      * @param year

+ 51 - 0
siwei-modules/siwei-apply/src/main/resources/mapper/YdbpDataMapper.xml

@@ -162,4 +162,55 @@
         </if>
     </select>
 
+    <!--
+    方案:已批未供的图层相关:
+    1.把土地供应的所有的地块。并且已经上链的的查找出来。
+    2.把这些地块与报批中所有地块等值判断进行筛选。
+    3.再查找所有的报批的地块,减去上面找出的地块。然后按照年份统计其面积。
+    -->
+    <select id="queryRemainGeomAreaByYear" resultType="java.util.Map">
+        WITH
+            supply_geom AS (
+                SELECT DISTINCT
+                    ST_Normalize(gd.geom) AS norm_geom
+                FROM t_geom_db_details gd
+                         INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
+                         INNER JOIN t_tdgy gy ON nl.node_id = gy.id
+                         INNER JOIN t_project pro ON gy.project_id = pro.id
+                WHERE gy.has_onchain = 't'
+                  AND pro.project_type = 2
+            ),
+            hit_geom_id AS (
+                SELECT DISTINCT gd.id as details_id
+                FROM t_geom_db_details gd
+                         INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
+                         INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
+                WHERE bp.has_onchain = 't'
+                  AND EXISTS (
+                    SELECT 1 FROM supply_geom
+                    WHERE ST_Equals(ST_Normalize(gd.geom), supply_geom.norm_geom)
+                )
+            )
+        SELECT
+            LEFT(bp.pf_date, '4') AS stat_year,
+            COUNT(DISTINCT gd.id) AS patch_count,
+            '亩' as  area_unit,
+            SUM( COALESCE(ST_Area(gd.geom::public.geography), 0) / 666.6666667 ) AS total_area_mu
+        FROM t_geom_db_details gd
+            INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
+            INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
+        WHERE bp.has_onchain = 't'
+          AND NOT EXISTS (
+            SELECT 1 FROM hit_geom_id h WHERE h.details_id = gd.id
+            )
+        GROUP BY stat_year
+        ORDER BY stat_year
+    </select>
+
+
+
+
+
+
+
 </mapper>

+ 5 - 0
siwei-modules/siwei-apply/src/main/resources/mapper/YdbpMapper.xml

@@ -139,4 +139,9 @@
         SET has_onchain = #{hasOnchain}, updated_at = now()
         WHERE id = #{id}
     </update>
+
+
+
+
+
 </mapper>