Sfoglia il codice sorgente

更改多地块选址

gushoubang 9 mesi fa
parent
commit
cfdc638e49
15 ha cambiato i file con 126 aggiunte e 34 eliminazioni
  1. 1 1
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/SelectionResDTO.java
  2. 2 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/AnalyseUtilsDBMapper.java
  3. 3 1
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/CreateUtilsDBMapper.java
  4. 14 3
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/MultipleMapper.java
  5. 2 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/TableDataMapper.java
  6. 2 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/CreateUtilsDBService.java
  7. 2 1
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/IFzssService.java
  8. 2 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/ITableDateService.java
  9. 1 0
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/AnalyseUtilsDBServiceImpl.java
  10. 47 11
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/FzssServiceImpl.java
  11. 14 4
      onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/TableDateServiceImpl.java
  12. 0 12
      onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/AlgorithmMapper.xml
  13. 22 0
      onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/MultipleMapper.xml
  14. 8 0
      onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/TableDateMapper.xml
  15. 6 1
      sql/pgsql/0_init.sql

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

@@ -22,7 +22,7 @@ public class SelectionResDTO {
     Date createAt;
     Double area;
     String geom;
-    Integer dkid;
+    String dkid;
     @TableField(value = "land_price")
     Double landPrice;
 }

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

@@ -82,4 +82,6 @@ public interface AnalyseUtilsDBMapper {
             @Param("tableIdsB") List<String> tableIdsB,
             @Param("distance") Integer distance,
             @Param("distanceType") Integer distanceType);
+
+
 }

+ 3 - 1
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.Master;
 import com.onemap.common.datasource.annotation.Slave;
 import org.apache.ibatis.annotations.Param;
 
@@ -29,12 +30,13 @@ public interface CreateUtilsDBMapper {
     void bufferColumnTable(@Param("tableName") String tableName,
                            @Param("column") String column,
                            @Param("newTableName") String newTableName);
+
     /**
      * 计算ewkt 空间数据的缓冲区,并返回新的ewkt
      */
     @Slave
     String bufferEwkt(@Param("ewkt") String ewkt,
-                    @Param("radius") float radius);
+                      @Param("radius") float radius);
 
     /**
      * 生成表tableNameB空间数据的差集,B-ST_Intersection(A,B)

+ 14 - 3
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/AlgorithmMapper.java → onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/MultipleMapper.java

@@ -4,13 +4,16 @@ import com.onemap.common.datasource.annotation.Slave;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+import java.util.Map;
+
 /**
- * 算法相关实现
+ * 多地块算法相关实现
  */
 @Mapper
-public interface AlgorithmMapper {
+public interface MultipleMapper {
     /**
-     * 算法执行
+     * 合并多地块
      *
      * @param jsonArg
      * @param systemArg block_merge('{"类型": "智能选址","版本": 1.0,"小地块最多合并块数": 4, "面积下限": 100.0,"面积上限": 200.0,"距离内合并": 200.0 }',
@@ -20,4 +23,12 @@ public interface AlgorithmMapper {
     void blockMerge(@Param("tableName") String tableName,
                     @Param("jsonArg") String jsonArg,
                     @Param("systemArg") String systemArg);
+
+    /**
+     * 获取合并结果
+     * @param tableName
+     * @return
+     */
+    @Slave
+    List<Map<String,Object>> getBlockMergeResult(@Param("tableName") String tableName);
 }

+ 2 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/TableDataMapper.java

@@ -31,4 +31,6 @@ public interface TableDataMapper {
     void delOutIds(@Param("tableName") String tableName, @Param("ids") List<String> ids);
 
     void clearTable(@Param("tableName") String tableName);
+
+    void delByColumns(@Param("tableName") String tableName, @Param("column") String column, @Param("values") List<String> values);
 }

+ 2 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/CreateUtilsDBService.java

@@ -1,5 +1,7 @@
 package com.onemap.analyse.service;
 
+import com.onemap.common.datasource.annotation.Slave;
+
 import java.util.List;
 
 /**

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

@@ -5,6 +5,7 @@ import com.onemap.analyse.domain.calculation.FzxzCalc;
 import com.onemap.analyse.domain.vo.SelectPilotVo;
 import com.onemap.common.core.web.domain.RequestResult;
 
+import java.util.List;
 import java.util.Map;
 
 public interface IFzssService {
@@ -12,7 +13,7 @@ public interface IFzssService {
 
     RequestResult startSchedule(FzxzCalc fzxzCalc) throws JsonProcessingException;
 
-    void saveScheduleRes(Map<String, Object> resMap);
+    void saveScheduleRes(Map<String, Object> resMap, List<Map<String, Object>> multLandList);
 
     RequestResult GetXzjg(String bsm);
 

+ 2 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/ITableDateService.java

@@ -29,4 +29,6 @@ public interface ITableDateService {
     void delInIds(String tableName, List<String> ids);
 
     void delOutIds(String tableName, List<String> ids);
+
+    void delByColumns(String tableName, String column, List<String> values);
 }

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

@@ -43,4 +43,5 @@ public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
     public List<String> distanceTables(String tableNameA, String tableNameB, List<String> tableIdsB, Integer distance, Integer distanceType) {
         return analyseUtilsDBMapper.distanceTables(tableNameA, tableNameB, tableIdsB, distance, distanceType);
     }
+
 }

+ 47 - 11
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/FzssServiceImpl.java

@@ -11,7 +11,7 @@ import com.onemap.analyse.domain.vo.*;
 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.AlgorithmMapper;
+import com.onemap.analyse.mapper.vector.MultipleMapper;
 import com.onemap.analyse.mapper.vector.GhdkaMapper;
 import com.onemap.analyse.service.*;
 import com.onemap.analyse.utils.DozerUtils;
@@ -22,6 +22,7 @@ import com.onemap.common.core.utils.StringUtils;
 import com.onemap.common.core.web.domain.RequestResult;
 import com.onemap.common.datasource.annotation.Master;
 import com.onemap.common.security.utils.SecurityUtils;
+import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -75,8 +76,9 @@ public class FzssServiceImpl implements IFzssService {
     private ITableDateService tableDateService;
     @Resource
     private AnalyseUtilsDBService analyseUtilsDBService;
+
     @Resource
-    private AlgorithmMapper algorithmMapper;
+    private MultipleMapper multipleMapper;
     //**需要拿出来的逻辑**//
 
     /**
@@ -209,6 +211,7 @@ public class FzssServiceImpl implements IFzssService {
         if (rawTable.equals("")) return RequestResult.error("区域筛选条件筛选未找到符合条件数据!", null);
 
         // 5.切割地块,面积筛选
+        List<Map<String, Object>> multLandList = new ArrayList<>();
         if (fzxzDTO.getUseMultiple()) {
             // 允许多地块
             int multDistanc = fzxzDTO.getMultipleDistance();
@@ -216,8 +219,8 @@ public class FzssServiceImpl implements IFzssService {
             paramArg.put("类型", "智能选址");
             paramArg.put("版本", 1.0);
             paramArg.put("小地块最多合并块数", 3);
-            paramArg.put("面积下限", fzxzDTO.getYdmjbegin());
-            paramArg.put("面积上限", fzxzDTO.getYdmjend());
+            paramArg.put("面积下限", UnitsUtil.m2ToMu(fzxzDTO.getYdmjbegin()));
+            paramArg.put("面积上限", UnitsUtil.m2ToMu(fzxzDTO.getYdmjend()));
             paramArg.put("距离内合并", multDistanc);
 
             Map<String, Object> systemArg = new HashMap<>();
@@ -229,8 +232,19 @@ public class FzssServiceImpl implements IFzssService {
             String paramJson = JsonUtils.toJson(paramArg);
             String systemJson = JsonUtils.toJson(systemArg);
 
-            algorithmMapper.blockMerge(resTableName, paramJson, systemJson);
-            // TODO 添加面积筛选
+            multipleMapper.blockMerge(resTableName, paramJson, systemJson);
+            multLandList = multipleMapper.getBlockMergeResult(resTableName);
+            if (multLandList != null && multLandList.size() > 0) {
+                for (Map<String, Object> map : multLandList) {
+                    Integer[] dkIds = (Integer[]) map.get("idarray");
+                    List<String> dkIdsStr = new ArrayList<>();
+                    for (Integer dkId : dkIds) {
+                        dkIdsStr.add(dkId.toString());
+                    }
+                    tableDateService.delInIds(rawTable, dkIdsStr);
+                }
+            }
+            System.out.println("多地块合并完成");
         } else {
             // 不允许多地块,删除面积不符合要求的地块
             tableDateService.delByArea(rawTable, fzxzDTO.getYdmjbegin(), fzxzDTO.getYdmjend());
@@ -249,7 +263,7 @@ public class FzssServiceImpl implements IFzssService {
         scheduleResMap.put("rwbsm", fzxzDTO.getBsm());
         scheduleResMap.put("sjyb", fzxzDTO.getSjy());
         scheduleResMap.put("ydxz", fzxzDTO.getYdxz_bsm());
-        saveScheduleRes(scheduleResMap);
+        saveScheduleRes(scheduleResMap, multLandList);
 
         // 保存成功日志
         iLogService.saveLog(fzxzDTO.getBsm(), "辅助选址", "计算完成", "info");
@@ -421,7 +435,7 @@ public class FzssServiceImpl implements IFzssService {
      * @param resMap
      */
     @Override
-    public void saveScheduleRes(Map<String, Object> resMap) {
+    public void saveScheduleRes(Map<String, Object> resMap, List<Map<String, Object>> multLandList) {
         String rwbsm = (String) resMap.get("rwbsm");
         String sjyb = (String) resMap.get("sjyb");
         String ydxz = (String) resMap.get("ydxz");
@@ -449,7 +463,26 @@ public class FzssServiceImpl implements IFzssService {
             fzxzResDTO.setSjyb(sjyb);
             fzxzResDTO.setYdxz(ydxz);
             fzxzResDTO.setCreateAt(new Date());
-            fzxzResDTO.setDkid(dkId);
+            fzxzResDTO.setDkid(dkId.toString());
+            fzxzResDTO.setArea(area);
+            fzxzResDTO.setGeom(geom);
+
+            // TODO 设置土地价格
+            fzxzResDTO.setLandPrice(100.0);
+            fzxzResMapper.saveOne(fzxzResDTO);
+        }
+        for (Map<String, Object> stringObjectMap : multLandList) {
+            List<Integer> dkIds = (List<Integer>) stringObjectMap.get("idarray");
+            String geom = (String) stringObjectMap.get("geom");
+            Double area = (Double) stringObjectMap.get("area");
+
+            SelectionResDTO fzxzResDTO = DozerUtils.map(resMap, SelectionResDTO.class);
+            fzxzResDTO.setBsm(StringUtils.getUUID());
+            fzxzResDTO.setRwbsm(rwbsm);
+            fzxzResDTO.setSjyb(sjyb);
+            fzxzResDTO.setYdxz(ydxz);
+            fzxzResDTO.setCreateAt(new Date());
+            fzxzResDTO.setDkid(Strings.join(dkIds, ','));
             fzxzResDTO.setArea(area);
             fzxzResDTO.setGeom(geom);
 
@@ -492,11 +525,14 @@ public class FzssServiceImpl implements IFzssService {
         for (SelectionResDTO selectionRes : selectionResList) {
             // 查询地块信息
             String rawTableName = selectionInfo.getSjy();
-            Integer rawItemId = selectionRes.getDkid();
+            String rawItemIds = selectionRes.getDkid();
             List<String> columns = new ArrayList<>();
             columns.add("dkbm");
             columns.add("kzxxgydmc");
-            Map<String, Object> rawTable = ghdkaMapper.getInfoByColumn(rawTableName, rawItemId.toString(), columns);
+
+            List<String> rawItemIdList = Arrays.asList(rawItemIds.split(","));
+            // TODO 查询多地块信息
+            Map<String, Object> rawTable = ghdkaMapper.getInfoByColumn(rawTableName, rawItemIdList.get(0), columns);
 
             // 构建地块返回结果
             Map<String, Object> dkMap = new HashMap<>();

+ 14 - 4
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/TableDateServiceImpl.java

@@ -47,10 +47,6 @@ public class TableDateServiceImpl implements ITableDateService {
         return integer;
     }
 
-    @Override
-    public void delByLandType(String temporaryTable, String rawTable, String landTypeCode) {
-        tableDataMapper.delByLandType(temporaryTable, rawTable, landTypeCode);
-    }
 
     @Override
     public void delByArea(String tableName, float minArea, float maxArea) {
@@ -71,4 +67,18 @@ public class TableDateServiceImpl implements ITableDateService {
             tableDataMapper.clearTable(tableName);
         }
     }
+
+    @Override
+    public void delByColumns(String tableName, String column, List<String> values) {
+        if (values.size() != 0) {
+            tableDataMapper.delByColumns(tableName, column, values);
+        } else {
+            tableDataMapper.clearTable(tableName);
+        }
+    }
+
+    @Override
+    public void delByLandType(String temporaryTable, String rawTable, String landTypeCode) {
+        tableDataMapper.delByLandType(temporaryTable, rawTable, landTypeCode);
+    }
 }

+ 0 - 12
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/AlgorithmMapper.xml

@@ -1,12 +0,0 @@
-<?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.analyse.mapper.vector.AlgorithmMapper">
-    <select id="blockMerge">
-        CREATE TABLE if not exists ${tableName} (
-                                                       idarray int4[] not null, area float8, feature VARCHAR ,weight float, geom public.geometry null
-        );
-        select vector.big_area_block(#{jsonArg}, #{systemArg})
-    </select>
-</mapper>

+ 22 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/MultipleMapper.xml

@@ -0,0 +1,22 @@
+<?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.analyse.mapper.vector.MultipleMapper">
+    <update id="blockMerge">
+        CREATE TABLE if not exists ${tableName}
+        (
+            idarray int4 [] not null,
+            area float8,
+            feature VARCHAR,
+            weight float,
+            geom public.geometry null
+        );
+        select block_merge(#{jsonArg}::json, #{systemArg}::json)
+    </update>
+
+    <select id="getBlockMergeResult" resultType="Map">
+        select idarray, area / 0.0015 as area, public.st_asewkt(geom) as geom
+        from ${tableName}
+    </select>
+</mapper>

+ 8 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/TableDateMapper.xml

@@ -169,4 +169,12 @@
         DELETE
         FROM "${tableName}"
     </delete>
+    <delete id="delByColumns">
+        DELETE
+        FROM "${tableName}" tableIn
+        WHERE
+        <foreach item="column" collection="columns" separator="AND">
+            tableIn.${column} = #{columnValue}
+        </foreach>
+    </delete>
 </mapper>

+ 6 - 1
sql/pgsql/0_init.sql

@@ -133,4 +133,9 @@ where  feature like ''%s'' and f.idarray = t.idarray  and t.geom is not null
 ', systemarg->>'选址结果',systemarg->>'选址方式', systemarg->>'初步结果', jsonarg->>'面积上限',jsonarg, systemarg->>'选址方式', systemarg->>'选址结果', systemarg->>'选址方式' );
 return 'OK';
 END;
-$$ LANGUAGE plpgsql;
+$$ LANGUAGE plpgsql;
+
+-- 修改选址结果表
+ALTER TABLE "base"."t_fzss_fzxz_res" ALTER COLUMN "dkid" TYPE varchar USING "dkid"::varchar;
+ALTER TABLE "base"."t_fzss_fzxz_res" ALTER COLUMN "dkid" SET DEFAULT NULL;
+COMMENT ON COLUMN "base"."t_fzss_fzxz_res"."dkid" IS '土地';