content: package org.jeecg.common.constant;
  
  import com.alibaba.fastjson.JSONObject;
  import org.jeecg.common.util.oConvertUtils;
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.core.io.Resource;
  import org.springframework.stereotype.Component;
  
  import java.io.File;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.Scanner;
  import java.util.Set;
  import java.util.List;
  
  @Component("pca")
  public class ProvinceCityArea {
      List<Area> areaList;
  
      public String getText(String code){
          this.initAreaList();
          if(this.areaList!=null || this.areaList.size()>0){
              List<String> ls = new ArrayList<String>();
              getAreaByCode(code,ls);
              return String.join("/",ls);
          }
          return "";
      }
  
      public String getCode(String text){
          this.initAreaList();
          if(areaList!=null || areaList.size()>0){
              for(int i=areaList.size()-1;i>=0;i--){
                  if(text.indexOf(areaList.get(i).getText())>=0){
                      return areaList.get(i).getId();
                  }
              }
          }
          return null;
      }
  
      public void getAreaByCode(String code,List<String> ls){
          for(Area area: areaList){
              if(area.getId().equals(code)){
                  String pid = area.getPid();
                  ls.add(0,area.getText());
                  getAreaByCode(pid,ls);
              }
          }
      }
  
      private void initAreaList(){
          //System.out.println("=====================");
          if(this.areaList==null || this.areaList.size()==0){
              this.areaList = new ArrayList<Area>();
              try {
                  String jsonData = oConvertUtils.readStatic("classpath:static/pca.json");
                  JSONObject baseJson = JSONObject.parseObject(jsonData);
                  //第一层 省
                  JSONObject provinceJson = baseJson.getJSONObject("86");
                  for(String provinceKey: provinceJson.keySet()){
                      //System.out.println("===="+provinceKey);
                      Area province = new Area(provinceKey,provinceJson.getString(provinceKey),"86");
                      this.areaList.add(province);
                      //第二层 市
                      JSONObject cityJson = baseJson.getJSONObject(provinceKey);
                      for(String cityKey:cityJson.keySet()){
                          //System.out.println("-----"+cityKey);
                          Area city = new Area(cityKey,cityJson.getString(cityKey),provinceKey);
                          this.areaList.add(city);
                          //第三层 区
                          JSONObject areaJson =  baseJson.getJSONObject(cityKey);
                          if(areaJson!=null){
                              for(String areaKey:areaJson.keySet()){
                                  //System.out.println("········"+areaKey);
                                  Area area = new Area(areaKey,areaJson.getString(areaKey),cityKey);
                                  this.areaList.add(area);
                              }
                          }
                      }
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
  
      }
  
  
      private String jsonRead(File file){
          Scanner scanner = null;
          StringBuilder buffer = new StringBuilder();
          try {
              scanner = new Scanner(file, "utf-8");
              while (scanner.hasNextLine()) {
                  buffer.append(scanner.nextLine());
              }
          } catch (Exception e) {
  
          } finally {
              if (scanner != null) {
                  scanner.close();
              }
          }
          return buffer.toString();
      }
  
      class Area{
          String id;
          String text;
          String pid;
  
          public Area(String id,String text,String pid){
              this.id = id;
              this.text = text;
              this.pid = pid;
          }
  
          public String getId() {
              return id;
          }
  
          public String getText() {
              return text;
          }
  
          public String getPid() {
              return pid;
          }
      }
  }
  