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; import com.moral.entity.Town; import com.moral.entity.Village; import com.moral.mapper.AreaMapper; import com.moral.mapper.CityMapper; import com.moral.mapper.ProvinceMapper; import com.moral.mapper.TownMapper; import com.moral.mapper.VillageMapper; import com.moral.service.AreaService; import org.springframework.stereotype.Service; import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @Service public class AreaServiceImpl implements AreaService{ @Resource ProvinceMapper provinceMapper; @Resource CityMapper cityMapper; @Resource AreaMapper areaMapper; @Resource private TownMapper townMapper; @Resource private VillageMapper villageMapper; @Override public List getProvinces() { return provinceMapper.selectAll(); } @Override public List getCities(int provinceCode) { Example example = new Example(City.class); example.or().andEqualTo("provinceCode",provinceCode); return cityMapper.selectByExample(example); } @Override public List getAreas(int cityCode) { Example example = new Example(Area.class); example.or().andEqualTo("cityCode",cityCode); return areaMapper.selectByExample(example); } /** * 通过地区编码获取 中文全程,例如 江苏省 苏州市 昆山市 * @param code 可以是省 市 区 到地区编码 * @return */ @Override public String queryFullNameByCode(Long code){ StringBuilder fullName = new StringBuilder(); List codeList = regionCodeToList(code); for (int num = 0;num regionCodeToList(Long code) { List 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() getTowns(Integer areaCode) { Example example = new Example(Town.class); example.or().andEqualTo("areaCode",areaCode); return townMapper.selectByExample(example); } @Override public List getVillages(Long townCode) { Example example = new Example(Village.class); example.createCriteria().andEqualTo("townCode",townCode); return villageMapper.selectByExample(example); } }