diff --git a/app/src/main/java/com/example/cosmosclient/GPSresources/StoreLocationsMethods.java b/app/src/main/java/com/example/cosmosclient/GPSresources/StoreLocationsMethods.java index 51c215e..3539957 100644 --- a/app/src/main/java/com/example/cosmosclient/GPSresources/StoreLocationsMethods.java +++ b/app/src/main/java/com/example/cosmosclient/GPSresources/StoreLocationsMethods.java @@ -2,11 +2,17 @@ import android.location.Location; +import com.example.cosmosclient.app.Cosmos; import com.example.cosmosclient.entities.Feature; +import com.example.cosmosclient.entities.Request; +import com.example.cosmosclient.services.Notification; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; -import java.util.Map; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class StoreLocationsMethods { private double NowLat; @@ -15,9 +21,64 @@ /*戻り値となる通知が必要なお店情報を格納する連想配列を作成*/ private ArrayList nearShops=new ArrayList<>(); - public StoreLocationsMethods(double NowLat, double NowLon){ + private List requests=null; + //登場するcodeを格納したいからはじめから同じ要素を追加しないようにするためにset + private Set requestsStoreCodeList=new HashSet(); + private Set nearShopsStoreCodeList=new HashSet(); + //業番:request + private HashMap> codeToNotification = new HashMap<>(); + //業番:feature + private HashMap> codeToFeature = new HashMap<>(); + + + private Cosmos cosmos=null; + public StoreLocationsMethods(Cosmos cosmos,double NowLat, double NowLon){ + this.cosmos=cosmos; this.NowLat=NowLat; this.NowLon=NowLon; + //現在時刻取得 + Date nowDate = new Date(); + for(int i = 0 ; i < group.size(); i++) { + for (int j = 0; j < group.get(i).requests.size(); j++) { + //期限内かつ未達成のrequestのみ取得 + if (group.get(i).requests.get(j).getDeadline().after(nowDate) && group.get(i).requests.get(j).isDone() == false) { + //指定したkeyを持っているHashMapがなければ作成する。 + Notification notification=new Notification(group.get(i).requests.get(j).getLocation(),group.get(i),null); + if(codeToNotification.get(group.get(i).requests.get(j).getLocation())==null){ + codeToNotification.put(group.get(i).requests.get(j).getLocation(),notification); + }else{ + //keyをすでに持っている場合はArrayListに追加していく + codeToNotification.get(group.get(i).requests.get(j).getLocation()).put(notification); + } + } + } + } + //cosmosから区画情報から取得 + HashMap> feature =cosmos.; + //HashMapを順番に実行 + for(HashMap.Entry> e : feature.entrySet()) { + //ArrayList>を回していく + for(int i=0; i < e.getValue().size();i++) { + float[] distance = getDistance(this.NowLat, this.NowLon, e.getValue().get(i).getLocation().getLatitude(), e.getValue().get(i).getLocation().getLongitude()); + // distance[0] = [2点間の距離] + //m単位 + if (distance[0] <= 50) { + if(codeToFeature.get(e.getValue().get(i).getLocation()==null)){ + codeToFeature.put(feature.get(i).requests.get(j).getLocation(),notification); + }else{ + + } + //keyをすでに持っている場合はArrayListに追加していく + codeToFeature.get(feature.get(i).requests.get(j).getLocation()).put(notification); + //50m圏内に存在するショップコード格納 + nearShopsStoreCodeList.add(e.getValue().get(i).getCode()); + if(nearShops.indexOf(childFeature)==-1){ + /*通知に必要な近い店の情報を格納する処理を格納*/ + nearShops.add(childFeature); + } + } + } + } } public void updateLocations(double NowLat,double NowLon){ this.NowLat=NowLat; @@ -46,6 +107,8 @@ childFeature.setCode(e.getValue().get(i).getCode()); childFeature.setLocation(e.getValue().get(i).getLocation()); childFeature.setName(e.getValue().get(i).getName()); + //50m圏内に存在するショップコード格納 + nearShopsStoreCodeList.add(e.getValue().get(i).getCode()); if(nearShops.indexOf(childFeature)==-1){ /*通知に必要な近い店の情報を格納する処理を格納*/ nearShops.add(childFeature);