package lastkilometer.BerkeleyDB;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import com.sleepycat.je.DatabaseException;
import lastkilometer.readCSV.ReadCSV;
import java.util.Map.Entry;
public class FindNearstSite {
public Map<String, List<String>> find() throws DatabaseException, IOException{
ReadCSV readCSV=new ReadCSV();
Map<String,Map<String,Map<String,Integer>>> eso=readCSV.readElectricitySuppliersOrder();
Map<String,Map<String, Map<String, List<Object>>>> OO=readCSV.readO2OOrder();
BerkeleyDB read_Site_Site = new BerkeleyDB("distance/site_site_distance");//格式:Map<Site_id,Map<Site_id,distance>>
Map<String, List<String>> nearestSite=new TreeMap<>();
Set<Entry<String, Object>> set=read_Site_Site.iteration();
for(Entry<String, Object> entry:set){
String Site_id_key=entry.getKey();
@SuppressWarnings("unchecked")
Map<String, Double> value=(Map<String, Double>) entry.getValue();
int num=0;
List<String> Site_id_value=new ArrayList<>();
for(Entry<String, Double> e:value.entrySet()){
//根据网点id计算订单数量
Map<String, Map<String, Integer>> eso_two=eso.get(e.getKey());
for(Entry<String, Map<String, Integer>> eso_two_entry:eso_two.entrySet()){
num+=eso_two_entry.getValue().size();
}
Map<String, Map<String, List<Object>>> OO_two=OO.get(e.getKey());
if(OO_two!=null){
for(Entry<String, Map<String, List<Object>>> OO_two_entry:OO_two.entrySet()){
num+=OO_two_entry.getValue().size();
}
}
if(num<4500){//4500个订单,按最近网点取
Site_id_value.add(e.getKey());
}else{
break;
}
}
nearestSite.put(Site_id_key, Site_id_value);
}
return nearestSite;
}
// public Map<String, List<String>> find() throws DatabaseException, FileNotFoundException{
// BerkeleyDB read_Site_Site = new BerkeleyDB("distance/site_site_distance");//格式:Map<Site_id,Map<Site_id,distance>>
// Map<String, List<String>> nearestSite=new TreeMap<>();
// Set<Entry<String, Object>> set=read_Site_Site.iteration();
// for(Entry<String, Object> entry:set){
// String Site_id_key=entry.getKey();
// @SuppressWarnings("unchecked")
// Map<String, Double> value=(Map<String, Double>) entry.getValue();
// int n=0;
// List<String> Site_id_value=new ArrayList<>();
// for(Entry<String, Double> e:value.entrySet()){
// if(n<50){//十个最近网点
// Site_id_value.add(e.getKey());
// }else{
// break;
// }
// n++;
// }
// nearestSite.put(Site_id_key, Site_id_value);
// }
// return nearestSite;
// }
}