From f28149d8183a62f87fa9c8df9ae589070d83f612 Mon Sep 17 00:00:00 2001
From: 于紫祥_1901 <email@yuzixiang_1910>
Date: Thu, 24 Dec 2020 13:47:50 +0800
Subject: [PATCH] 波动补偿
---
src/main/java/com/moral/service/impl/AreaServiceImpl.java | 158 ++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 132 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/moral/service/impl/AreaServiceImpl.java b/src/main/java/com/moral/service/impl/AreaServiceImpl.java
index 3f5b3db..3099420 100644
--- a/src/main/java/com/moral/service/impl/AreaServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/AreaServiceImpl.java
@@ -1,5 +1,6 @@
package com.moral.service.impl;
+import com.moral.common.exception.BusinessException;
import com.moral.entity.Area;
import com.moral.entity.City;
import com.moral.entity.Province;
@@ -15,6 +16,8 @@
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
import java.util.List;
@@ -58,34 +61,137 @@
* @return
*/
@Override
- public String queryFullNameByCode(Integer code){
- String codeStr = code.toString();
- String fullName = "";
- // ���������������code
- if(!codeStr.endsWith("00")){
- String provinceCode = codeStr.substring(0,2)+"0000";
- Province province = provinceMapper.selectByPrimaryKey(Integer.valueOf(provinceCode));
- String cityCode = codeStr.substring(0,4)+"00";
- City city = cityMapper.selectByPrimaryKey(Integer.valueOf(cityCode));
- Area area = areaMapper.selectByPrimaryKey(code);
- fullName = province.getProvinceName().replaceAll(" ", "")
- +" "+city.getCityName().replaceAll(" ", "")
- +" "+area.getAreaName().replaceAll(" ", "");
- } else if(!codeStr.endsWith("0000")){
- // ��������� ���������code
- String provinceCode = codeStr.substring(0,2)+"0000";
- Province province = provinceMapper.selectByPrimaryKey(Integer.valueOf(provinceCode));
- City city = cityMapper.selectByPrimaryKey(code);
- fullName = province.getProvinceName().replaceAll(" ", "")
- +" "+city.getCityName().replaceAll(" ", "");
- } else {
- // ��������� ���code
- Province province = provinceMapper.selectByPrimaryKey(code);
- fullName = province.getProvinceName().replaceAll(" ", "");
+ public String queryFullNameByCode(Long code){
+ StringBuilder fullName = new StringBuilder();
+ List<Number> codeList = regionCodeToList(code);
+ for (int num = 0;num<codeList.size();num++){
+ int codeLevel = num+1;
+ Number currentCode = codeList.get(num);
+ switch (codeLevel) {
+ case 1:
+ Province province = provinceMapper.selectByPrimaryKey(currentCode);
+ if (province !=null) {
+ String provinceName = province.getProvinceName();
+ provinceName = provinceName!=null ? provinceName.replace(" ","") : "";
+ fullName.append(provinceName);
+ }
+ break;
+ case 2:
+ City city = cityMapper.selectByPrimaryKey(currentCode);
+ if(city!=null) {
+ String cityName = city.getCityName();
+ cityName = cityName!=null ? cityName.replace(" ",""):"";
+ fullName.append(" ");
+ fullName.append(cityName);
+ }
+ break;
+ case 3:
+ Area area = areaMapper.selectByPrimaryKey(currentCode);
+ if(area!=null){
+ String areaName = area.getAreaName();
+ areaName = areaName!=null ? areaName.replace(" ",""):"";
+ fullName.append(" ");
+ fullName.append(areaName);
+ }
+ break;
+ case 4:
+ Town town = townMapper.selectByPrimaryKey(currentCode);
+ if(town!=null){
+ String townName = town.getTownName();
+ townName = townName!=null ? townName.replace(" ",""):"";
+ fullName.append(" ");
+ fullName.append(townName);
+ }
+ break;
+ default:
+ Village village = villageMapper.selectByPrimaryKey(currentCode);
+ if(village!=null) {
+ String villageName = village.getVillageName();
+ villageName = villageName!=null ? villageName.replace(" ",""):"";
+ fullName.append(" ");
+ fullName.append(villageName);
+ }
+ break;
+ }
}
- return fullName;
+ return fullName.toString();
}
-
+ private List<Number> regionCodeToList(Long code) {
+ List<Number> codeList = new ArrayList();
+ if(code != null){
+ String codeStr = code.toString();
+ int codeLevel = 0;
+ codeLevel =getCodeLevel(codeStr);
+ int codeLevelTemp = 1;
+ do {
+ String currentCodeStr = getCodeByLevel(codeStr,codeLevelTemp);
+ Number currentCode = 0;
+ if(codeLevelTemp < 4) {
+ currentCode = Integer.parseInt(currentCodeStr);
+ }else{
+ currentCode = Long.parseLong(currentCodeStr);
+ }
+ codeList.add(currentCode);
+ codeLevelTemp++;
+ }while (codeLevelTemp <= codeLevel);
+ }
+ return codeList;
+ }
+ private int getCodeLevel(String code){
+ return isProvinceCode(code) ? 1 :
+ isCityCode(code) ? 2 :
+ isAreaCode(code) ? 3 :
+ isTownCode(code) ? 4 : 5;
+ }
+ static private String[] SpecialTwonCodes = new String[]{"653130103001"};
+ static private boolean isSpecialTwonCode(String code){
+ for (String codeStr:SpecialTwonCodes){
+ if(codeStr.equals(code)){
+ return true;
+ }
+ }
+ return false;
+ }
+ private String getCodeByLevel(@NotNull String sourceCode,int codeLevel){
+ String zeroStr = "0000";
+ int totalCount = 0;
+ int effectiveCount = 0;
+ if(codeLevel <4){
+ totalCount = 6;
+ effectiveCount = codeLevel == 1 ? 2:
+ codeLevel == 2 ? 4:6;
+ } else{
+ totalCount = 12;
+ effectiveCount = codeLevel == 4 ? 9:12;
+ }
+ //������
+ if(codeLevel==4&&isSpecialTwonCode(sourceCode)){
+ return sourceCode;
+ }
+ if(totalCount == effectiveCount && sourceCode.length() == totalCount){
+ return sourceCode;
+ }else {
+ if (sourceCode.length()<totalCount){
+ throw new BusinessException("totalCount is more than the length of sourceCode");
+ }
+ return sourceCode.substring(0,effectiveCount)+zeroStr.substring(0,totalCount-effectiveCount);
+ }
+ }
+ private boolean isProvinceCode(String code){
+ return code.length() == 6 && code.endsWith("0000");
+ }
+ private boolean isCityCode(String code){
+ return code.length() == 6 && code.endsWith("00");
+ }
+ private boolean isAreaCode(String code){
+ return code.length() == 6 && !code.endsWith("00");
+ }
+ private boolean isTownCode(String code){
+ return code.length() == 12 && (code.endsWith("000")||isSpecialTwonCode(code));
+ }
+ private boolean isVillageCode(String code){
+ return code.length() == 12 && !code.endsWith("000");
+ }
@Override
public List<Town> getTowns(Integer areaCode) {
Example example = new Example(Town.class);
--
Gitblit v1.8.0