feature(地址清洗)重构

This commit is contained in:
purple 2020-08-04 23:55:32 +08:00
parent ee82313818
commit 27db250c13
15 changed files with 294 additions and 56 deletions

View File

@ -0,0 +1,8 @@
package com.ruoyi.project.tool.address;
public class AddressResult {
private String district;
private String region;
private Boolean multi;
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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 +

View File

@ -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())) {

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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{" +

View File

@ -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;
}
}

View File

@ -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();
}

View File

@ -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<>();
}

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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;