Browse Source

交集判断

gushoubang 11 months ago
parent
commit
92960e3afa
18 changed files with 257 additions and 113 deletions
  1. 3 2
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/FzssController.java
  2. 10 1
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/AnalyseUtilsDBController.java
  3. 1 1
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/FactorUseDTO.java
  4. 1 1
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/calculation/FzxzCalc.java
  5. 0 13
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/FzxzFactorDTO.java
  6. 10 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/IntersectsTablesVo.java
  7. 17 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/SelectPilotVo.java
  8. 5 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/AnalyseUtilsDBMapper.java
  9. 5 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/CreateUtilsDBMapper.java
  10. 7 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/GhdkaMapper.java
  11. 18 6
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/AnalyseUtilsDBService.java
  12. 2 1
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/IFzssService.java
  13. 6 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/AnalyseUtilsDBServiceImpl.java
  14. 8 6
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/CreateUtilsDBServiceImpl.java
  15. 133 80
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/FzssServiceImpl.java
  16. 15 0
      onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/AnalyseUtilsDBMapper.xml
  17. 2 2
      onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/CreateUtilsDBMapper.xml
  18. 14 0
      onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/GhdkaMapper.xml

+ 3 - 2
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/FzssController.java

@@ -1,6 +1,7 @@
 package com.onemap.analyse.controller;
 
 import com.onemap.analyse.domain.calculation.FzxzCalc;
+import com.onemap.analyse.domain.vo.SelectPilotVo;
 import com.onemap.analyse.service.IFzssService;
 import com.onemap.analyse.domain.HgxfxEntityDTO;
 import com.onemap.common.core.web.controller.BaseController;
@@ -38,10 +39,10 @@ public class FzssController extends BaseController {
      * @return
      */
     @PostMapping("/AddFzxz")
-    public RequestResult AddFzxz(@RequestBody Map params) {
+    public RequestResult AddFzxz(@RequestBody SelectPilotVo selectPilotVo) {
         // TODO xmlx:项目类型
         // 存储规划参数
-        FzxzCalc fzxzCalc = fzssService.saveScheduleParam(params);
+        FzxzCalc fzxzCalc = fzssService.saveScheduleParam(selectPilotVo);
         // 开始规划任务
         RequestResult res = fzssService.startSchedule(fzxzCalc);
         return res;

+ 10 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/AnalyseUtilsDBController.java

@@ -35,6 +35,15 @@ public class AnalyseUtilsDBController extends BaseController {
         return RequestResult.success(analyseUtilsDBService.intersectsTableWkt(analyseUtilsVo.getTableName(), analyseUtilsVo.getTableIds(), analyseUtilsVo.getEwkt()));
     }
 
+    @PostMapping("/intersects/tables")
+    @Slave
+    public RequestResult intersectsTables(@RequestBody IntersectsTablesVo intersectsTablesVo) {
+        if (intersectsTablesVo == null) {
+            RequestResult.error("analyseUtilsVo is null");
+        }
+        return RequestResult.success(analyseUtilsDBService.intersectsTables(intersectsTablesVo.getTableNameA(), intersectsTablesVo.getTableNameB(), intersectsTablesVo.getTableIdsB()));
+    }
+
     /**
      * 计算wkt包含table中的数据,返回table id
      *
@@ -69,7 +78,7 @@ public class AnalyseUtilsDBController extends BaseController {
     @PostMapping("/distance/table_wkt")
     @Slave
     public RequestResult distanceTableWkt(@RequestBody DistanceTableWktVo distanceTableWktVo) {
-        return RequestResult.success(analyseUtilsDBService.distanceTableWkt(distanceTableWktVo.getTableName(), distanceTableWktVo.getTableIds(), distanceTableWktVo.getEwkt(), distanceTableWktVo.getDistance(),distanceTableWktVo.getDistanceType()));
+        return RequestResult.success(analyseUtilsDBService.distanceTableWkt(distanceTableWktVo.getTableName(), distanceTableWktVo.getTableIds(), distanceTableWktVo.getEwkt(), distanceTableWktVo.getDistance(), distanceTableWktVo.getDistanceType()));
     }
 
     /**

+ 1 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/FactorUseDTO.java

@@ -36,7 +36,7 @@ public class FactorUseDTO {
 
     @JsonProperty("default")
     @TableField("default_type")
-    private String default_type;
+    private String defaultType;
 
     @TableField("default_value")
     private Float defaultValue;

+ 1 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/calculation/FzxzCalc.java

@@ -10,5 +10,5 @@ import java.util.List;
 @Data
 public class FzxzCalc {
     FzxzDTO fzxzDTO;
-    List<FactorUseDTO> xzyxList=new ArrayList<>();
+    List<FactorUseDTO> FactorUseList=new ArrayList<>();
 }

+ 0 - 13
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/FzxzFactorDTO.java

@@ -1,13 +0,0 @@
-package com.onemap.analyse.domain.vo;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.Data;
-
-/**
- * 辅助选址计算解析中用到的因子
- */
-@Data
-public class FzxzFactorDTO {
-
-}

+ 10 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/IntersectsTablesVo.java

@@ -0,0 +1,10 @@
+package com.onemap.analyse.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class IntersectsTablesVo extends TableABBean {
+    List<String> tableIdsB;
+}

+ 17 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/SelectPilotVo.java

@@ -0,0 +1,17 @@
+package com.onemap.analyse.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.onemap.analyse.domain.FactorUseDTO;
+import com.onemap.analyse.domain.FzxzDTO;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 选址请求参数
+ */
+@Data
+public class SelectPilotVo extends FzxzDTO {
+    @JsonProperty("yxyz")
+    private List<FactorUseDTO> factorList;
+}

+ 5 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/AnalyseUtilsDBMapper.java

@@ -21,6 +21,11 @@ public interface AnalyseUtilsDBMapper {
             @Param("tableIds") List<String> tableIds,
             @Param("ewkt") String ewkt);
 
+    List<String> intersectsTables(
+            @Param("tableNameA") String tableNameA,
+            @Param("tableNameB") String tableNameB,
+            @Param("tableIdsB") List<String> tableIdsB);
+
     /**
      * 计算wkt包含table中的数据,返回table id
      *

+ 5 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/CreateUtilsDBMapper.java

@@ -1,5 +1,6 @@
 package com.onemap.analyse.mapper.vector;
 
+import com.onemap.common.datasource.annotation.Slave;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -12,6 +13,7 @@ public interface CreateUtilsDBMapper {
      * @param radius
      * @return
      */
+    @Slave
     void bufferTable(@Param("tableName") String tableName,
                      @Param("radius") float radius,
                      @Param("newTableName") String newTableName);
@@ -23,6 +25,7 @@ public interface CreateUtilsDBMapper {
      * @param column
      * @return
      */
+    @Slave
     void bufferColumnTable(@Param("tableName") String tableName,
                            @Param("column") String column,
                            @Param("newTableName") String newTableName);
@@ -36,6 +39,7 @@ public interface CreateUtilsDBMapper {
      * @param temporaryTable
      * @return
      */
+    @Slave
     void differenceTables(@Param("tableNameA") String tableNameA,
                           @Param("tableIdsA") List<String> tableIdsA,
                           @Param("tableNameB") String tableNameB,
@@ -49,6 +53,7 @@ public interface CreateUtilsDBMapper {
      * @param tableIds
      * @return
      */
+    @Slave
     void intersectionTableWkt(@Param("tableName") String tableName,
                               @Param("tableIds") List<String> tableIds,
                               @Param("ewkt") String ewkt,

+ 7 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/GhdkaMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.onemap.analyse.domain.query.GhdkaFilter;
 import com.onemap.analyse.domain.vector.GhdkaDTO;
 import com.onemap.common.datasource.annotation.Slave;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -33,4 +34,10 @@ public interface GhdkaMapper extends BaseMapper<GhdkaDTO> {
      * @return 数据源中全部的字段信息
      */
     List<Map<String, Object>> getInfo(Map<String, Object> params);
+
+    Integer delByLandType(@Param("temporaryTable") String temporaryTable,
+                          @Param("rawTable") String rawTable,
+                          @Param("landTypeCode") String landTypeCode);
+
+    Integer getTableCount(String tableName);
 }

+ 18 - 6
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/AnalyseUtilsDBService.java

@@ -10,9 +10,9 @@ public interface AnalyseUtilsDBService {
     /**
      * table中与wkt数据是否有交集
      *
-     * @param tableName        TABLE名称(vater空间中表)
-     * @param tableIds          查询数据集ID
-     * @param ewkt     wkt
+     * @param tableName TABLE名称(vater空间中表)
+     * @param tableIds  查询数据集ID
+     * @param ewkt      wkt
      * @return
      */
     List<String> intersectsTableWkt(
@@ -20,6 +20,18 @@ public interface AnalyseUtilsDBService {
             List<String> tableIds,
             String ewkt);
 
+    /**
+     * TableA与TableB是否有交集
+     *
+     * @param tableNameA
+     * @param tableNameB
+     * @param tableIdsB
+     * @return
+     */
+    List<String> intersectsTables(
+            String tableNameA,
+            String tableNameB,
+            List<String> tableIdsB);
 
 
     /**
@@ -56,9 +68,9 @@ public interface AnalyseUtilsDBService {
      * @return
      */
     List<String> distanceTableWkt(String inputTable,
-                                   List<String> inputIds,
-                                   String ewkt,
-                                   Integer distance,
+                                  List<String> inputIds,
+                                  String ewkt,
+                                  Integer distance,
                                   Integer distanceType);
 
     /**

+ 2 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/IFzssService.java

@@ -2,6 +2,7 @@ package com.onemap.analyse.service;
 
 import com.onemap.analyse.domain.HgxfxEntityDTO;
 import com.onemap.analyse.domain.calculation.FzxzCalc;
+import com.onemap.analyse.domain.vo.SelectPilotVo;
 import com.onemap.common.core.web.domain.RequestResult;
 
 import java.io.IOException;
@@ -10,7 +11,7 @@ import java.util.Map;
 public interface IFzssService {
     RequestResult AddHgxfx(HgxfxEntityDTO hgxfxEntityDTO) throws IOException;
 
-    FzxzCalc saveScheduleParam(Map params);
+    FzxzCalc saveScheduleParam(SelectPilotVo selectPilotVo);
 
     RequestResult startSchedule(FzxzCalc fzxzCalc);
 

+ 6 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/AnalyseUtilsDBServiceImpl.java

@@ -5,6 +5,7 @@ import com.onemap.analyse.service.AnalyseUtilsDBService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
 import java.util.List;
 
 @Service
@@ -18,6 +19,11 @@ public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
         return analyseUtilsDBMapper.intersectsTableWkt(tableName, tableIds, ewkt);
     }
 
+    @Override
+    public List<String> intersectsTables(String tableNameA, String tableNameB, List<String> tableIdsB) {
+        return analyseUtilsDBMapper.intersectsTables(tableNameA, tableNameB, tableIdsB);
+    }
+
     @Override
     public List<String> containsTableWkt(String tableName, List<String> tableIds, String ewkt) {
         return analyseUtilsDBMapper.containsTableWkt(tableName, tableIds, ewkt);

+ 8 - 6
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/CreateUtilsDBServiceImpl.java

@@ -12,18 +12,20 @@ public class CreateUtilsDBServiceImpl implements CreateUtilsDBService {
     @Resource
     private CreateUtilsDBMapper createUtilsDBMapper;
 
+    private static final String TEMPORARY = "temporary";
+
     @Override
     public String bufferTable(String tableName, float radius) {
         long timestamp = System.currentTimeMillis();
-        String newTableName = tableName + "_buffer_"  + timestamp;
+        String newTableName = TEMPORARY + "_" + timestamp + "_buffer_" + tableName;
         createUtilsDBMapper.bufferTable(tableName, radius, newTableName);
         return newTableName;
     }
 
     @Override
-    public String bufferTable(String tableName,  String column) {
+    public String bufferTable(String tableName, String column) {
         long timestamp = System.currentTimeMillis();
-        String newTableName = tableName + "_buffer_"  + timestamp;
+        String newTableName = TEMPORARY + "_" + timestamp + "_buffer_" + tableName;
         createUtilsDBMapper.bufferColumnTable(tableName, column, newTableName);
         return newTableName;
     }
@@ -31,7 +33,7 @@ public class CreateUtilsDBServiceImpl implements CreateUtilsDBService {
     @Override
     public String differenceTables(String tableNameA, List<String> tableIdsA, String tableNameB) {
         long timestamp = System.currentTimeMillis();
-        String newTableName = tableNameA + "_diff_" + tableNameB+"_" + timestamp;
+        String newTableName = TEMPORARY + "_" + timestamp + "_" + tableNameA + "_diff_" + tableNameB;
         String temporaryTable = "temporaryTable_" + timestamp;
         createUtilsDBMapper.differenceTables(tableNameA, tableIdsA, tableNameB, newTableName, temporaryTable);
         return newTableName;
@@ -40,8 +42,8 @@ public class CreateUtilsDBServiceImpl implements CreateUtilsDBService {
     @Override
     public String intersectionTableWkt(String tableName, List<String> tableIds, String ewkt) {
         long timestamp = System.currentTimeMillis();
-        String newTableName = tableName + "_inter_" +  timestamp;
-        createUtilsDBMapper.intersectionTableWkt(tableName, tableIds, ewkt,newTableName);
+        String newTableName = TEMPORARY + "_" + timestamp + "_inter_" + tableName;
+        createUtilsDBMapper.intersectionTableWkt(tableName, tableIds, ewkt, newTableName);
         return newTableName;
     }
 }

+ 133 - 80
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/FzssServiceImpl.java

@@ -2,16 +2,20 @@ package com.onemap.analyse.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.onemap.analyse.controller.analyse.AnalyseUtilsDBController;
+import com.onemap.analyse.controller.analyse.CreateUtilsDBController;
 import com.onemap.analyse.domain.*;
 import com.onemap.analyse.domain.calculation.FzxzCalc;
 import com.onemap.analyse.domain.query.GhdkaFilter;
 import com.onemap.analyse.domain.res.FzxzResultDTO;
 import com.onemap.analyse.domain.res.GeomRes;
-import com.onemap.analyse.domain.vo.FzxzFactorDTO;
+import com.onemap.analyse.domain.vo.IntersectionTableWktVo;
+import com.onemap.analyse.domain.vo.SelectPilotVo;
 import com.onemap.analyse.mapper.*;
 import com.onemap.analyse.mapper.base.FzxzResMapper;
 import com.onemap.analyse.mapper.base.ShpFileMapper;
 import com.onemap.analyse.mapper.vector.GhdkaMapper;
+import com.onemap.analyse.service.CreateUtilsDBService;
 import com.onemap.analyse.service.IFzssService;
 import com.onemap.analyse.service.ILogService;
 import com.onemap.analyse.service.IReportService;
@@ -32,7 +36,6 @@ import static com.onemap.analyse.utils.Fxfw2SdeUtils.vector2Sde;
 
 @Service
 public class FzssServiceImpl implements IFzssService {
-    private FxfwDictDTO fxfwDictDTO = new FxfwDictDTO();
     @Value("${Hgxfx.temp}")
     private String temp;
     // 任务状态标识码
@@ -68,10 +71,6 @@ public class FzssServiceImpl implements IFzssService {
     @Resource
     private ILogService iLogService;
 
-    // 选址结果汇总
-    @Resource
-    private FzxzTbMapper fzxzTbMapper;
-
     @Transactional(rollbackFor = Exception.class)
     @Override
     public RequestResult AddHgxfx(HgxfxEntityDTO hgxfxEntityDTO) throws IOException {
@@ -107,30 +106,36 @@ public class FzssServiceImpl implements IFzssService {
         return RequestResult.success("保存成功!", requestHgxfxDTO.getBsm());
     }
 
+
+    // **需要拿出来的逻辑**//
+    // @Resource
+    // AnalyseUtilsDBController analyseUtilsDBController;
+    @Resource
+    private CreateUtilsDBService createUtilsDBService;
+    //**需要拿出来的逻辑**//
+
     /**
      * 保存选址参数
      *
-     * @param params
+     * @param selectPilotVo
      * @return
      */
     @Override
     @Master
-    public FzxzCalc saveScheduleParam(Map params) {
+    public FzxzCalc saveScheduleParam(SelectPilotVo selectPilotVo) {
         FzxzCalc fzxzCalc = new FzxzCalc();
         // 辅助选址
-        FzxzDTO fzxzDTO = DozerUtils.map(params, FzxzDTO.class);
+        FzxzDTO fzxzDTO = selectPilotVo;
         fzxzDTO.setBsm(StringUtils.getUUID());
         fzxzDTO.setCjsj(new Date());
         fzxzDTO.setYdxz_bsm(fzxzDTO.getYdxz_bsm().replaceAll("\\[", "").replaceAll("\\]", ""));
 
         // 选址因子
-        ArrayList xzyx = (ArrayList) params.get("yxyz");
-        List<FactorUseDTO> xzyxList = new ArrayList<>();
-        for (int i = 0; i < xzyx.size(); i++) {
-            FactorUseDTO factorUseDTO = DozerUtils.map(xzyx.get(i), FactorUseDTO.class);
+        List<FactorUseDTO> factorUseDTOS = selectPilotVo.getFactorList();
+        for (int i = 0; i < factorUseDTOS.size(); i++) {
+            FactorUseDTO factorUseDTO = factorUseDTOS.get(i);
             factorUseDTO.setId(StringUtils.getUUID());
             factorUseDTO.setTaskId(fzxzDTO.getBsm());
-            xzyxList.add(factorUseDTO);
         }
 
         // 存储规划任务
@@ -138,9 +143,9 @@ public class FzssServiceImpl implements IFzssService {
         fzxzDTO.setUserId(SecurityUtils.getUserId());
 
         fzxzCalc.setFzxzDTO(fzxzDTO);
-        fzxzCalc.setXzyxList(xzyxList);
+        fzxzCalc.setFactorUseList(factorUseDTOS);
 
-        for (FactorUseDTO dto : fzxzCalc.getXzyxList()) {
+        for (FactorUseDTO dto : fzxzCalc.getFactorUseList()) {
             fzxzXzyzMapper.insert(dto);
         }
         fzxzMapper.insert(fzxzCalc.getFzxzDTO());
@@ -180,8 +185,10 @@ public class FzssServiceImpl implements IFzssService {
     @Override
     public RequestResult startSchedule(FzxzCalc fzxzCalc) {
         FzxzDTO fzxzDTO = fzxzCalc.getFzxzDTO();
+        String taskId = fzxzDTO.getBsm();
+
         // 0.开始规划,更新任务状态
-        updateFzxzStatus(fzxzDTO.getBsm(), Rwzt.getRun());
+        updateFzxzStatus(taskId, Rwzt.getRun());
 
         // TODO 数据源
         String sjyName = "";
@@ -190,83 +197,62 @@ public class FzssServiceImpl implements IFzssService {
         }
 
         // 开始分析
-        iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "开始分析", "info");
+        iLogService.saveLog(taskId, "辅助选址", "开始分析", "info");
         List<String> factorBsmList = new ArrayList<>();
-        for (FactorUseDTO fzxzXzyzDTO : fzxzCalc.getXzyxList()) {
+        for (FactorUseDTO fzxzXzyzDTO : fzxzCalc.getFactorUseList()) {
             factorBsmList.add(fzxzXzyzDTO.getFactorBsm());
         }
-        iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "选址参数", "info");
+        iLogService.saveLog(taskId, "辅助选址", "选址参数", "info");
 
         // 1.区域筛选
-        // TODO:每一步都要判断ids是否为空
         GeomRes geomRes = shpFileMapper.getOne(fzxzDTO.getGeomId());
-
-        iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "载入选址范围完成", "info");
-
-        Map<String, String> paramMap = new HashMap<>();
-        paramMap.put("geom", geomRes.getGeom());
-        paramMap.put("sjy", fzxzDTO.getSjy());
-        List<Integer> ids = ghdkaMapper.getIdByGeom(paramMap);
-        if (ids.size() == 0) {
-            iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "计算完成,未找到符合条件数据", "info");
-            updateFzxzStatus(fzxzDTO.getBsm(), Rwzt.getNoJX());
+        iLogService.saveLog(taskId, "辅助选址", "载入选址范围完成", "info");
+
+        // 地块切割
+        String ewkt = geomRes.getGeom();
+        IntersectionTableWktVo intersectionTableWktVo = new IntersectionTableWktVo();
+        intersectionTableWktVo.setTableName(fzxzDTO.getSjy());
+        intersectionTableWktVo.setEwkt(ewkt);
+        String temporaryTable = createUtilsDBService.intersectionTableWkt(intersectionTableWktVo.getTableName(), null, intersectionTableWktVo.getEwkt());
+
+        Integer integer = ghdkaMapper.getTableCount(temporaryTable);
+        if (integer == 0) {
+            iLogService.saveLog(taskId, "辅助选址", "计算完成,未找到区域内数据", "info");
+            updateFzxzStatus(taskId, Rwzt.getNoJX());
             return RequestResult.error("区域筛选条件筛选未找到符合条件数据!", null);
         }
 
-        iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "相交裁剪" + sjyName, "info");
-        // 2.面积筛选
-        Map<String, Object> areaMap = new HashMap<>();
-        areaMap.put("sjy", fzxzDTO.getSjy());
-        areaMap.put("beginArea", fzxzDTO.getYdmjbegin());
-        areaMap.put("endArea", fzxzDTO.getYdmjend());
-        areaMap.put("idList", ids);
-        ids = ghdkaMapper.getIdByArea(areaMap);
-        if (ids.size() == 0) {
-            iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "计算完成,未找到符合条件数据", "info");
-            updateFzxzStatus(fzxzDTO.getBsm(), Rwzt.getNoJX());
-            return RequestResult.error("面积筛选条件筛选未找到符合条件数据!", null);
-        }
-
-        iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "地块面积分析完成", "info");
-
-        // 3.用地类型(性质)筛选
-        Map<String, Object> landTypeMap = new HashMap<>();
-        landTypeMap.put("sjy", fzxzDTO.getSjy());
-        landTypeMap.put("landTypeCode", fzxzDTO.getYdxz_bsm());
-        landTypeMap.put("idList", ids);
-        ids = ghdkaMapper.getIdLandType(landTypeMap);
-        if (ids.size() == 0) {
-            iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "计算完成,未找到符合条件数据", "info");
-            updateFzxzStatus(fzxzDTO.getBsm(), Rwzt.getNoJX());
-            return RequestResult.error("用地性质条件筛选未找到符合条件数据!", null);
+        iLogService.saveLog(taskId, "辅助选址", "相交裁剪" + sjyName, "info");
+        // TODO 2.面积筛选
+        // Map<String, Object> areaMap = new HashMap<>();
+        // areaMap.put("sjy", fzxzDTO.getSjy());
+        // areaMap.put("beginArea", fzxzDTO.getYdmjbegin());
+        // areaMap.put("endArea", fzxzDTO.getYdmjend());
+        // areaMap.put("idList", ids);
+        // ids = ghdkaMapper.getIdByArea(areaMap);
+        // if (ids.size() == 0) {
+        //     iLogService.saveLog(taskId, "辅助选址", "计算完成,未找到符合条件数据", "info");
+        //     updateFzxzStatus(taskId, Rwzt.getNoJX());
+        //     return RequestResult.error("面积筛选条件筛选未找到符合条件数据!", null);
+        // }
+        //
+        // iLogService.saveLog(taskId, "辅助选址", "地块面积分析完成", "info");
+
+        //  3.用地类型(性质)筛选
+        ghdkaMapper.delByLandType(temporaryTable, fzxzDTO.getSjy(), fzxzDTO.getYdxz_bsm());
+        integer = ghdkaMapper.getTableCount(temporaryTable);
+        if (integer == 0) {
+            iLogService.saveLog(taskId, "辅助选址", "计算完成,未找到符合用地性质条件数据", "info");
+            updateFzxzStatus(taskId, Rwzt.getNoJX());
+            return RequestResult.error("区域筛选条件筛选未找到符合条件数据!", null);
         }
 
         // 4.规划因子筛选
-        GhdkaFilter ghdkaFilter = new GhdkaFilter();
-        ghdkaFilter.setSjy(fzxzDTO.getSjy());
-        ghdkaFilter.setIdList(ids);
-        for (FactorUseDTO fzxzXzyzDTO : fzxzCalc.getXzyxList()) {
-            ghdkaFilter.setFactorUseDTO(fzxzXzyzDTO);
-            ids = ghdkaMapper.getIdByFilter(ghdkaFilter);
-            if (ids.size() == 0) {
-                iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "计算完成,未找到符合条件数据", "info");
-                updateFzxzStatus(fzxzDTO.getBsm(), Rwzt.getNoJX());
-                return RequestResult.error(fzxzXzyzDTO.getFactorName() + "条件筛选未找到符合条件数据!", null);
-            }
-            iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", fzxzXzyzDTO.getFactorName() + "因子影响分析完成", "info");
-            ghdkaFilter.setIdList(ids);
-        }
-
-        if (ids.size() == 0) {
-            iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "计算完成,未找到符合条件数据", "info");
-            updateFzxzStatus(fzxzDTO.getBsm(), Rwzt.getNoJX());
-            String yxyzmc = fzxzCalc.getXzyxList().size() != 0 ? fzxzCalc.getXzyxList().get(0).getFactorName() : "";
-            return RequestResult.error(yxyzmc + "条件筛选未找到符合条件数据!", null);
-        }
+        factorFilter(taskId, temporaryTable, fzxzCalc.getFactorUseList(), ewkt);
 
         // 5.保存规划结果
         Map<String, Object> scheduleResMap = new HashMap<>();
-        scheduleResMap.put("dkIds", ids);
+        // TODO scheduleResMap.put("dkIds", ids);
         scheduleResMap.put("rwbsm", fzxzDTO.getBsm());
         scheduleResMap.put("sjyb", fzxzDTO.getSjy());
         // TODO 用地性质待定
@@ -284,10 +270,77 @@ public class FzssServiceImpl implements IFzssService {
         updateFzxzStatus(fzxzDTO.getBsm(), Rwzt.getComplete());
         Map<String, Object> resMap = new HashMap<>();
         resMap.put("rwbsm", fzxzDTO.getBsm());
-        resMap.put("dkIds", ids);
+        // resMap.put("dkIds", ids);
         return RequestResult.success(resMap);
     }
 
+    /**
+     * 根据因子筛选地块
+     *
+     * @param taskId
+     * @param rawTable
+     * @param factorUseDTOS
+     * @param ewkt
+     */
+    private void factorFilter(String taskId, String rawTable, List<FactorUseDTO> factorUseDTOS, String ewkt) {
+        for (FactorUseDTO factorUseDTO : factorUseDTOS) {
+            if (factorUseDTO.getSpatialType().equals("intersect")) {
+                // 相交判断
+                // 1.先切割因子地块
+                String temporaryTable = createUtilsDBService.intersectionTableWkt(factorUseDTO.getFactorBsm(), null, ewkt);
+                Integer integer = ghdkaMapper.getTableCount(temporaryTable);
+                if (integer == 0) {
+                    // TODO 再定
+                    iLogService.saveLog(taskId, "辅助选址", factorUseDTO.getFactorName() + "因子影响分析完成", "info");
+                    continue;
+                }
+                // 2.生成因子地块缓冲区
+                if (factorUseDTO.getDefaultValue() == 0) {
+                    // 没有值直接计算
+                    temporaryTable = createUtilsDBService.bufferTable(temporaryTable, factorUseDTO.getDefaultValue());
+
+                    integer = ghdkaMapper.getTableCount(temporaryTable);
+                    if (integer == 0) {
+                        // TODO 再定
+                        iLogService.saveLog(taskId, "辅助选址", factorUseDTO.getFactorName() + "因子影响分析完成", "info");
+                        continue;
+                    }
+                }
+
+                // 3.地块切割
+                if (factorUseDTO.getDefaultType().equals("intersect")) {
+                    // 相交判断
+                    temporaryTable = createUtilsDBService.differenceTables(rawTable, null, temporaryTable);
+                } else {
+                    // 不相交判断
+                    temporaryTable = createUtilsDBService.differenceTables(rawTable, null, temporaryTable);
+                }
+                System.out.println(temporaryTable);
+            } else if (factorUseDTO.getSpatialType().equals("contain")) {
+                // 包含判断
+                if (factorUseDTO.getDefaultValue() == 0) {
+
+                } else {
+
+                }
+            } else if (factorUseDTO.getSpatialType().equals("distance")) {
+                // 距离判断
+                if (factorUseDTO.getDefaultValue() == 0) {
+
+                } else {
+
+                }
+            }
+            if (0 == 0) {
+                iLogService.saveLog(taskId, "辅助选址", "计算完成,未找到符合条件数据", "info");
+                updateFzxzStatus(taskId, Rwzt.getNoJX());
+                // TODO
+                // return RequestResult.error(fzxzXzyzDTO.getFactorName() + "条件筛选未找到符合条件数据!", null);
+            }
+            iLogService.saveLog(taskId, "辅助选址", factorUseDTO.getFactorName() + "因子影响分析完成", "info");
+        }
+    }
+
     /**
      * 保存选址结果
      *

+ 15 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/AnalyseUtilsDBMapper.xml

@@ -17,6 +17,21 @@
         </if>
     </select>
 
+    <select id="intersectsTables" resultType="String">
+        SELECT id
+        FROM "${tableNameB}" tableB
+        WHERE 1=1
+        <if test="tableIdsB != null and tableIdsB.size()>0 ">
+            and (tableB.id::VARCHAR) in
+            <foreach collection="tableIdsB" item="tableId" open="(" close=")" separator=",">#{tableId}</foreach>
+        </if>
+        AND EXISTS (
+        SELECT 1
+        FROM "${tableNameA}" as tableA
+        WHERE PUBLIC.st_intersects(tableA.geom, tableB.geom)
+        )
+    </select>
+
     <select id="containsTableWkt" resultType="String">
         SELECT id
         FROM "${tableName}" inTbale

+ 2 - 2
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/CreateUtilsDBMapper.xml

@@ -51,9 +51,9 @@
 
     <insert id="intersectionTableWkt">
         CREATE TABLE "${newTableName}" AS
-        SELECT id,public.ST_Intersection(inTbale.geom, public.st_geomfromewkt(#{ewkt})) AS geom
+        SELECT id, public.ST_Intersection(inTbale.geom, public.st_geomfromewkt(#{ewkt})) AS geom
         FROM "${tableName}" inTbale
-        WHERE 1=1
+        WHERE public.ST_Intersects(inTbale.geom, public.st_geomfromewkt(#{ewkt}))
         <if test="tableIds != null and tableIds.size() > 0">
             AND inTbale.id::VARCHAR IN
             <foreach collection="tableIds" item="tableId" open="(" close=")" separator=",">

+ 14 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/GhdkaMapper.xml

@@ -93,4 +93,18 @@
             #{id}
         </foreach>
     </select>
+
+    <delete id="delByLandType">
+        DELETE
+        FROM "${temporaryTable}" temp
+        WHERE NOT EXISTS (SELECT 1
+                          FROM "${rawTable}" raw
+                          WHERE raw.id = temp.id
+                            AND raw.kzxxgyddm like '%${landTypeCode}%')
+    </delete>
+
+    <select id="getTableCount" resultType="Integer">
+        SELECT count(1)
+        FROM "${sjy}"
+    </select>
 </mapper>