From 27db250c134c3d11bbf83c36ccccc00fad794a60 Mon Sep 17 00:00:00 2001
From: purple <purple_lihe@16>
Date: Tue, 4 Aug 2020 23:55:32 +0800
Subject: [PATCH] =?UTF-8?q?feature=EF=BC=88=E5=9C=B0=E5=9D=80=E6=B8=85?=
 =?UTF-8?q?=E6=B4=97=EF=BC=89=E9=87=8D=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../project/tool/address/AddressResult.java   |   8 ++
 .../tool/address/model/AddressType.java       |  21 ++++
 .../tool/address/model/BuildingAddress.java   |   6 +-
 .../tool/address/model/CleanAddress.java      |  28 -----
 .../address/model/CleanAddressBuilder.java    |   6 +-
 .../tool/address/model/CommunityAddress.java  |   6 +-
 .../tool/address/model/CondoAddress.java      |  24 +++-
 .../tool/address/model/PartialAddress.java    |  34 +++---
 .../tool/address/model/SegmentAddress.java    | 103 ++++++++++++++++++
 .../tool/address/service/AddressBuilder.java  |  18 +++
 .../tool/address/service/AddressModel.java    |  45 ++++++++
 .../address/service/BaseAddressBuilder.java   |  14 +++
 .../tool/address/service/CleanContext.java    |  31 ++++++
 .../java/com/ruoyi/GenerateTableTests.java    |   1 +
 .../test/java/com/ruoyi/routine/GeoTests.java |   5 -
 15 files changed, 294 insertions(+), 56 deletions(-)
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/address/AddressResult.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/address/model/AddressType.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/address/model/SegmentAddress.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressBuilder.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressModel.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/address/service/BaseAddressBuilder.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/address/service/CleanContext.java

diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/AddressResult.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/AddressResult.java
new file mode 100644
index 000000000..5ec23b62c
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/AddressResult.java
@@ -0,0 +1,8 @@
+package com.ruoyi.project.tool.address;
+
+public class AddressResult {
+    private String district;
+    private String region;
+    private Boolean multi;
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/AddressType.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/AddressType.java
new file mode 100644
index 000000000..2a71e069a
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/AddressType.java
@@ -0,0 +1,21 @@
+package com.ruoyi.project.tool.address.model;
+
+public enum AddressType {
+    CONDO(1, "单套"), BUILDING(2, "楼栋"), COMMUNITY(3, "小区");
+    private Integer code;
+    private String name;
+
+    private AddressType(int code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Integer getCode() {
+        return this.code;
+    }
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/BuildingAddress.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/BuildingAddress.java
index 56c7eb643..3a92740a5 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/BuildingAddress.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/BuildingAddress.java
@@ -14,8 +14,12 @@ public class BuildingAddress extends PartialAddress {
     }
 
     @Override
-    public List<PartialAddress> getPartialAddress() {
+    public AddressType getAddressType() {
+        return null;
+    }
 
+    @Override
+    public Boolean multiAddress() {
         return null;
     }
 }
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddress.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddress.java
index 2b1ad715c..75c950e04 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddress.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddress.java
@@ -1,7 +1,5 @@
 package com.ruoyi.project.tool.address.model;
 
-import com.ruoyi.project.tool.address.service.impl.SignalAddressHandler;
-
 import java.util.LinkedList;
 import java.util.List;
 
@@ -44,14 +42,6 @@ public class CleanAddress {
      * (和地下有关系)
      */
     private String floor;
-    /**
-     * 小区地址
-     */
-    private PartialAddress communityAddress;
-    /**
-     * 楼栋地址
-     */
-    private PartialAddress buildingAddress;
     /**
      * 单套地址
      */
@@ -154,22 +144,6 @@ public class CleanAddress {
         this.floor = floor;
     }
 
-    public PartialAddress getCommunityAddress() {
-        return communityAddress;
-    }
-
-    public void setCommunityAddress(PartialAddress communityAddress) {
-        this.communityAddress = communityAddress;
-    }
-
-    public PartialAddress getBuildingAddress() {
-        return buildingAddress;
-    }
-
-    public void setBuildingAddress(PartialAddress buildingAddress) {
-        this.buildingAddress = buildingAddress;
-    }
-
     public PartialAddress getCondoAddress() {
         return condoAddress;
     }
@@ -231,8 +205,6 @@ public class CleanAddress {
                 ", road='" + road + '\'' +
                 ", communityName='" + communityName + '\'' +
                 ", floor=" + floor +
-                ", communityAddress=" + communityAddress +
-                ", buildingAddress=" + buildingAddress +
                 ", condoAddress=" + condoAddress +
                 ", propertyType='" + propertyType + '\'' +
                 ", independent=" + independent +
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddressBuilder.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddressBuilder.java
index 70fe91752..ac66e00c2 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddressBuilder.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CleanAddressBuilder.java
@@ -206,12 +206,8 @@ public class CleanAddressBuilder {
             String buildingAddressText = condoAddressText.substring(0, haoIndex + 1);
             BuildingAddress buildingAddress = new BuildingAddress(buildingAddressText);
             // 楼栋
-            cleanAddress.setBuildingAddress(buildingAddress);
+            condoAddress.addPartialAddress(buildingAddress);
             cleanAddress.addAddress(condoAddress);
-            cleanAddress.addAddress(buildingAddress);
-
-            cleanAddress.addAddress(condoAddress);
-            cleanAddress.addAddress(buildingAddress);
             getCommunityAddress(buildingAddressText);
         } else if (!StringUtils.isEmpty(cleanAddress.getCommunityName())) {
 
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CommunityAddress.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CommunityAddress.java
index 2632e6fa2..67cad68a8 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CommunityAddress.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CommunityAddress.java
@@ -14,8 +14,12 @@ public class CommunityAddress extends PartialAddress {
     }
 
     @Override
-    public List<PartialAddress> getPartialAddress() {
+    public AddressType getAddressType() {
+        return null;
+    }
 
+    @Override
+    public Boolean multiAddress() {
         return null;
     }
 }
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CondoAddress.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CondoAddress.java
index 586e78c53..b5a62266c 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CondoAddress.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/CondoAddress.java
@@ -5,7 +5,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * 室地址
+ * 单套地址
  *
  * @author lihe
  */
@@ -19,7 +19,25 @@ public class CondoAddress extends PartialAddress {
     }
 
     @Override
-    public List<PartialAddress> getPartialAddress() {
-        return null;
+    public AddressType getAddressType() {
+        return AddressType.CONDO;
     }
+
+    @Override
+    public Boolean multiAddress() {
+        return childrenAddress.size() > 0;
+    }
+
+    public String getHao() {
+        return hao;
+    }
+
+    public String getShi() {
+        return shi;
+    }
+
+    public Integer getFloor() {
+        return floor;
+    }
+
 }
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/PartialAddress.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/PartialAddress.java
index 1e498ee7d..5d16641cb 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/PartialAddress.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/PartialAddress.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.exception.CustomException;
 import com.ruoyi.common.utils.StringUtils;
 import io.swagger.models.auth.In;
 
+import java.util.LinkedList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -18,34 +19,32 @@ public abstract class PartialAddress {
     protected String hao;
     protected String shi;
     protected Integer floor;
+
+    protected final int HUNDRED = 100;
+    protected final int TEN_THOUSAND = 10 * 1000;
     protected final static String SHI_PATTERN = "([\\dA-Za-z]+)室$";
     protected final static String HAO_PATTERN = "([\\dA-Za-z]+)(甲乙丙丁戊己庚辛仍亏)?号";
     protected final static String NUMBER_PATTERN = "\\d+";
-    protected final int HUNDRED = 100;
-    protected final int TEN_THOUSAND = 10 * 1000;
+
 
     public PartialAddress(String address) {
         this.address = address;
     }
 
-    public String getHao() {
-        return hao;
-    }
+    /**
+     * @return
+     */
+    public abstract AddressType getAddressType();
 
-    public String getShi() {
-        return shi;
-    }
-
-    public Integer getFloor() {
-        return floor;
-    }
 
     /**
      * 获取地址(单套、楼栋、小区)
      *
      * @return
      */
-    public abstract List<PartialAddress> getPartialAddress();
+    protected List<PartialAddress> childrenAddress = new LinkedList<>();
+
+    public abstract Boolean multiAddress();
 
     /**
      * 室解析
@@ -102,6 +101,15 @@ public abstract class PartialAddress {
         return null;
     }
 
+    /**
+     * 增加地址
+     *
+     * @param partialAddress
+     */
+    protected void addPartialAddress(PartialAddress partialAddress) {
+        this.childrenAddress.add(partialAddress);
+    }
+
     @Override
     public String toString() {
         return "PartialAddress{" +
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/SegmentAddress.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/SegmentAddress.java
new file mode 100644
index 000000000..dc5d8d788
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/model/SegmentAddress.java
@@ -0,0 +1,103 @@
+package com.ruoyi.project.tool.address.model;
+
+/**
+ * 地址分段
+ */
+public class SegmentAddress {
+    /**
+     * 弄、支弄
+     */
+    private String nong;
+    /**
+     * 号
+     */
+    private String hao;
+    /**
+     * 是否有多个号
+     */
+    private Boolean multiHao;
+    /**
+     * 楼层(包含复式)
+     */
+    private String floor;
+    /**
+     * 是否多楼层
+     */
+    private Boolean multiFloor;
+    /**
+     * 栋、幢、座
+     */
+    private String dong;
+    /**
+     * 室号
+     */
+    private String shi;
+    /**
+     * 多个室号
+     */
+    private Boolean multiShi;
+
+    public String getNong() {
+        return nong;
+    }
+
+    public void setNong(String nong) {
+        this.nong = nong;
+    }
+
+    public String getHao() {
+        return hao;
+    }
+
+    public void setHao(String hao) {
+        this.hao = hao;
+    }
+
+    public Boolean getMultiHao() {
+        return multiHao;
+    }
+
+    public void setMultiHao(Boolean multiHao) {
+        this.multiHao = multiHao;
+    }
+
+    public String getFloor() {
+        return floor;
+    }
+
+    public void setFloor(String floor) {
+        this.floor = floor;
+    }
+
+    public Boolean getMultiFloor() {
+        return multiFloor;
+    }
+
+    public void setMultiFloor(Boolean multiFloor) {
+        this.multiFloor = multiFloor;
+    }
+
+    public String getDong() {
+        return dong;
+    }
+
+    public void setDong(String dong) {
+        this.dong = dong;
+    }
+
+    public String getShi() {
+        return shi;
+    }
+
+    public void setShi(String shi) {
+        this.shi = shi;
+    }
+
+    public Boolean getMultiShi() {
+        return multiShi;
+    }
+
+    public void setMultiShi(Boolean multiShi) {
+        this.multiShi = multiShi;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressBuilder.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressBuilder.java
new file mode 100644
index 000000000..132084945
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressBuilder.java
@@ -0,0 +1,18 @@
+package com.ruoyi.project.tool.address.service;
+
+/**
+ * 地址构建者模式
+ */
+public interface AddressBuilder {
+
+    String parseDistrict();
+    String parseRegion();
+    String parseBlock();
+    String parseRoad();
+    String parseCommunityName();
+    String parseNONG();
+    String parseHao();
+    String parseShi();
+    String parseFloor();
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressModel.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressModel.java
new file mode 100644
index 000000000..f7b20e957
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/AddressModel.java
@@ -0,0 +1,45 @@
+package com.ruoyi.project.tool.address.service;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public abstract class AddressModel {
+    private String district;
+    private String region;
+    private String block;
+    private String road;
+    private String communityName;
+    private String nong;
+    private String complexHao;
+    /**
+     * 泛化的号(号、幢、座、连号)
+     */
+    private String hao;
+    /**
+     * 是否有多个号
+     * x号y号=x弄y号
+     * x号y幢=x号
+     * x幢y号=y号
+     * x幢y号=x幢
+     */
+    private Boolean multiHao;
+    /**
+     * 是否包含楼层
+     * 复式、多层
+     */
+    private String floor;
+    private String shi;
+    /**
+     * 是否独栋
+     */
+    private Boolean dependency;
+    /**
+     * 层级(每个层级只有一个,一对一)
+     */
+    private AddressModel hierarchy;
+//    /**
+//     * 兄弟节点
+//     */
+//    private List<AddressModel> sibling = new LinkedList<>();
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/BaseAddressBuilder.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/BaseAddressBuilder.java
new file mode 100644
index 000000000..bb61d4342
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/BaseAddressBuilder.java
@@ -0,0 +1,14 @@
+package com.ruoyi.project.tool.address.service;
+
+import com.ruoyi.project.tool.address.model.AddressType;
+
+public abstract class BaseAddressBuilder implements AddressBuilder {
+
+    protected StringBuilder stringBuilder;
+
+    public BaseAddressBuilder(String text) {
+        this.stringBuilder = new StringBuilder(text);
+    }
+
+    public abstract AddressType getAddressType();
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/CleanContext.java b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/CleanContext.java
new file mode 100644
index 000000000..c503c2f30
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/tool/address/service/CleanContext.java
@@ -0,0 +1,31 @@
+package com.ruoyi.project.tool.address.service;
+
+public class CleanContext {
+    private StringBuilder sb;
+    private Boolean multiHao;
+    private String address;
+
+    public StringBuilder getSb() {
+        return sb;
+    }
+
+    public void setSb(StringBuilder sb) {
+        this.sb = sb;
+    }
+
+    public Boolean getMultiHao() {
+        return multiHao;
+    }
+
+    public void setMultiHao(Boolean multiHao) {
+        this.multiHao = multiHao;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+}
diff --git a/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java b/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java
index 5488ce3c8..33c4a5ebf 100644
--- a/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java
+++ b/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java
@@ -2,6 +2,7 @@ package com.ruoyi;
 
 
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.LoadUtil;
 import com.ruoyi.project.data.cases.domain.*;
 import com.ruoyi.project.data.price.domain.ComputeResidenceSaleBasePrice;
 import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
diff --git a/ruoyi/src/test/java/com/ruoyi/routine/GeoTests.java b/ruoyi/src/test/java/com/ruoyi/routine/GeoTests.java
index 2bbc93f12..cd434bf3e 100644
--- a/ruoyi/src/test/java/com/ruoyi/routine/GeoTests.java
+++ b/ruoyi/src/test/java/com/ruoyi/routine/GeoTests.java
@@ -9,8 +9,6 @@ import com.microsoft.sqlserver.jdbc.spatialdatatypes.Point;
 import com.ruoyi.RuoYiApplication;
 import com.ruoyi.project.data.basis.domain.*;
 import com.ruoyi.project.data.basis.mapper.UvCommunityGeoMapper;
-import com.sun.org.apache.regexp.internal.RE;
-import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
 import okhttp3.Response;
@@ -18,9 +16,6 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.RowMapper;
-import org.springframework.security.web.PortResolverImpl;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;