菊池 #38

Merged
Utahshi merged 5 commits from AlsoMaps into master 2024-07-08 07:58:12 +00:00
2 changed files with 64 additions and 29 deletions
Showing only changes of commit 54da345315 - Show all commits

View File

@ -1,6 +1,7 @@
package com.example.oplogy; package com.example.oplogy;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.location.Address; import android.location.Address;
import android.location.Geocoder; import android.location.Geocoder;
import android.util.Log; import android.util.Log;
@ -23,8 +24,10 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
//保護者の希望とSetUpActivityによって設定された情報をもとにスケジュールとルートを作成する //保護者の希望とSetUpActivityによって設定された情報をもとにスケジュールとルートを作成する
public class CreateRoot { public class CreateSchedule {
MyDataClass data;//Firestoreから受け取ったdataを入れる変数 MyDataClass data;//Firestoreから受け取ったdataを入れる変数
String startPointString;//家庭訪問の開始地点
String startTimeHomeVisitString;//家庭訪問の開始時間 String startTimeHomeVisitString;//家庭訪問の開始時間
String endTimeHomeVisitString;//家庭訪問の終了時間 String endTimeHomeVisitString;//家庭訪問の終了時間
String intervalTimeString;//家庭訪問の一家庭当たりの時間 String intervalTimeString;//家庭訪問の一家庭当たりの時間
@ -41,14 +44,23 @@ public class CreateRoot {
boolean notSecondDuplicatesBoolean = true;//スケジュールの重複の有無(第一希望日のみで通った場合も考えて初期はtrue) boolean notSecondDuplicatesBoolean = true;//スケジュールの重複の有無(第一希望日のみで通った場合も考えて初期はtrue)
String[] testdata = {"20240604", "20240605", "20240606"}; String[] date;
public CreateRoot(AppCompatActivity activity) {
public CreateSchedule(AppCompatActivity activity) {
this.db = Room.databaseBuilder(activity.getApplicationContext(), AppDatabase.class, "SetUpTable").build(); this.db = Room.databaseBuilder(activity.getApplicationContext(), AppDatabase.class, "SetUpTable").build();
SharedPreferences sharedPreferences = activity.getSharedPreferences("visitingDate", Context.MODE_PRIVATE);
String firstDay = sharedPreferences.getString("day1", null);
String secondDay = sharedPreferences.getString("day2", null);
String thirdDay = sharedPreferences.getString("day3", null);
date = new String[]{firstDay, secondDay, thirdDay};
} }
//MainActivityからデータを受け取る //MainActivityからデータを受け取る
public Boolean receiveData(List<MyDataClass> myDataList, Context context) { public String receiveData(List<MyDataClass> myDataList, Context context) {
//myDataListの要素data第一希望日と第二希望日に以下を追加する //myDataListの要素data第一希望日と第二希望日に以下を追加する
//保護者の希望時間帯の長さ //保護者の希望時間帯の長さ
@ -92,20 +104,24 @@ public class CreateRoot {
//スケジュールの重複の確認 //スケジュールの重複の確認
if (!notDuplicatesBoolean) { if (!notDuplicatesBoolean) {
//第二希望日で同じ処理を行う //第二希望日で同じ処理を行う
Log.d("CreateRoot", "第二希望"); Log.d("CreateSchedule", "第二希望");
secondSetData(myDataList); secondSetData(myDataList);
secondTimeZoneSort(myDataList); secondTimeZoneSort(myDataList);
notSecondDuplicatesBoolean = secondCreateSchedule(myDataList, intervalArrayInt); notSecondDuplicatesBoolean = secondCreateSchedule(myDataList, intervalArrayInt);
} }
}); });
//重複がなければ開始地点の緯度経度を返す
if (notSecondDuplicatesBoolean) { if (notSecondDuplicatesBoolean) {
//スケジュールを基準にソートする
sortSchedule(myDataList); sortSchedule(myDataList);
geocodeAddress(myDataList, context); String startPointLatLngString = geocodeAddress(myDataList, context);
Log.d("CreateSchedule", "startPointLatLngString" + startPointLatLngString);
outPutLogSchedule(myDataList); outPutLogSchedule(myDataList);
return notSecondDuplicatesBoolean; return startPointLatLngString;
} }
Log.d("CreateRoot", "重複によるエラー"); //重複があるときは""を返す
return !notSecondDuplicatesBoolean; Log.d("CreateSchedule", "重複によるエラー");
return "";
} }
@ -211,12 +227,12 @@ public class CreateRoot {
private void outPutLogSort(List<MyDataClass> myDataList) { private void outPutLogSort(List<MyDataClass> myDataList) {
for (int i = 0; i < myDataList.size(); i++) { for (int i = 0; i < myDataList.size(); i++) {
Log.d("CreateRoot", "(index: " + i + ") data: " + myDataList.get(i).getPatronName()); Log.d("CreateSchedule", "(index: " + i + ") data: " + myDataList.get(i).getPatronName());
Log.d("CreateRoot", "(index: " + i + ") data: " + myDataList.get(i).getClass()); Log.d("CreateSchedule", "(index: " + i + ") data: " + myDataList.get(i).getClass());
Log.d("CreateRoot", "(index: " + i + ") timezone: " + myDataList.get(i).getTimezone()); Log.d("CreateSchedule", "(index: " + i + ") timezone: " + myDataList.get(i).getTimezone());
Log.d("CreateRoot", "(index: " + i + ") startDate: " + myDataList.get(i).getStartDateString()); Log.d("CreateSchedule", "(index: " + i + ") startDate: " + myDataList.get(i).getStartDateString());
Log.d("CreateRoot:outPutLogBeforeSort", "parentStartTimeString: " + myDataList.get(i).getParentStartTimeString()); Log.d("CreateSchedule:outPutLogBeforeSort", "parentStartTimeString: " + myDataList.get(i).getParentStartTimeString());
Log.d("CreateRoot:outPutLogBeforeSort", "parentEndTimeString: " + myDataList.get(i).getParentEndTimeString()); Log.d("CreateSchedule:outPutLogBeforeSort", "parentEndTimeString: " + myDataList.get(i).getParentEndTimeString());
} }
} }
@ -225,6 +241,7 @@ public class CreateRoot {
// setUpActivityによって入力されRoomに保存された値を取り出す処理 // setUpActivityによって入力されRoomに保存された値を取り出す処理
//Roomの操作の定義 //Roomの操作の定義
SetUpTableDao setUpTableDao = db.setUpTableDao(); SetUpTableDao setUpTableDao = db.setUpTableDao();
startPointString = setUpTableDao.getStartPoint();
startTimeHomeVisitString = setUpTableDao.getStartTime(); startTimeHomeVisitString = setUpTableDao.getStartTime();
endTimeHomeVisitString = setUpTableDao.getEndTime(); endTimeHomeVisitString = setUpTableDao.getEndTime();
intervalTimeString = setUpTableDao.getIntervalTime(); intervalTimeString = setUpTableDao.getIntervalTime();
@ -234,11 +251,11 @@ public class CreateRoot {
//Roomからのデータ取得に関するログ //Roomからのデータ取得に関するログ
void outPutLogRoomData() { void outPutLogRoomData() {
Log.d("CreateRoot:outPutLogRoomData", "開始時間" + startTimeHomeVisitString); Log.d("CreateSchedule:outPutLogRoomData", "開始時間" + startTimeHomeVisitString);
Log.d("CreateRoot:outPutLogRoomData", "終了時刻" + endTimeHomeVisitString); Log.d("CreateSchedule:outPutLogRoomData", "終了時刻" + endTimeHomeVisitString);
Log.d("CreateRoot:outPutLogRoomData", "一家庭当たりの所要時間" + intervalTimeString); Log.d("CreateSchedule:outPutLogRoomData", "一家庭当たりの所要時間" + intervalTimeString);
Log.d("CreateRoot:outPutLogRoomData", "休憩開始時刻" + startBreakTimeString); Log.d("CreateSchedule:outPutLogRoomData", "休憩開始時刻" + startBreakTimeString);
Log.d("CreateRoot:outPutLogRoomData", "休憩終了時刻" + endBreakTimeString); Log.d("CreateSchedule:outPutLogRoomData", "休憩終了時刻" + endBreakTimeString);
} }
private void timeCalculation(String endTimeHomeVisitString, String startBreakTime, String endBreakTime) { private void timeCalculation(String endTimeHomeVisitString, String startBreakTime, String endBreakTime) {
@ -284,7 +301,7 @@ public class CreateRoot {
private void outPutLogIntervalArray(int[][][] intervalArrayInt) { private void outPutLogIntervalArray(int[][][] intervalArrayInt) {
for (int i = 0; i < intervalArrayInt[0].length; i++) { for (int i = 0; i < intervalArrayInt[0].length; i++) {
Log.d("CreateRoot", "inteintervalArray:(intex:" + i + ") :" + intervalArrayInt[0][i][0]); Log.d("CreateSchedule", "inteintervalArray:(intex:" + i + ") :" + intervalArrayInt[0][i][0]);
} }
} }
@ -296,7 +313,7 @@ public class CreateRoot {
for (int x = 0; x < 3; x++) { for (int x = 0; x < 3; x++) {
//家庭訪問の日目が保護者の第一希望日かを判定する //家庭訪問の日目が保護者の第一希望日かを判定する
//まだスケジュールを割り当てていない保護者かを判定する //まだスケジュールを割り当てていない保護者かを判定する
if (testdata[x].equals(myDataList.get(i).getStartDateString()) && myDataList.get(i).getSchedule() == 0) { if (date[x].equals(myDataList.get(i).getStartDateString()) && myDataList.get(i).getSchedule() == 0) {
checkSchedule(myDataList, intervalArrayInt, i, j, x, myDataList.get(i).getStartDateString()); checkSchedule(myDataList, intervalArrayInt, i, j, x, myDataList.get(i).getStartDateString());
break; break;
} }
@ -319,7 +336,7 @@ public class CreateRoot {
for (int x = 0; x < 3; x++) { for (int x = 0; x < 3; x++) {
//家庭訪問の日目が保護者の第一希望日かを判定する //家庭訪問の日目が保護者の第一希望日かを判定する
//まだスケジュールを割り当てていない保護者かを判定する //まだスケジュールを割り当てていない保護者かを判定する
if (testdata[x].equals(myDataList.get(i).getSecondDayStartDateString()) && myDataList.get(i).getSchedule() == 0) { if (date[x].equals(myDataList.get(i).getSecondDayStartDateString()) && myDataList.get(i).getSchedule() == 0) {
checkSchedule(myDataList, intervalArrayInt, i, j, x, myDataList.get(i).getSecondDayStartDateString()); checkSchedule(myDataList, intervalArrayInt, i, j, x, myDataList.get(i).getSecondDayStartDateString());
} }
} }
@ -349,7 +366,7 @@ public class CreateRoot {
} }
private void geocodeAddress(List<MyDataClass> myDataList, Context context) { private String geocodeAddress(List<MyDataClass> myDataList, Context context) {
try { try {
Geocoder geocoder = new Geocoder(context, Locale.getDefault()); Geocoder geocoder = new Geocoder(context, Locale.getDefault());
for (int i = 0; i < myDataList.size(); i++) { for (int i = 0; i < myDataList.size(); i++) {
@ -360,19 +377,35 @@ public class CreateRoot {
double latitudeDouble = addressResult.getLatitude(); double latitudeDouble = addressResult.getLatitude();
double longitudeDouble = addressResult.getLongitude(); double longitudeDouble = addressResult.getLongitude();
//保護者の住所の緯度経度をmyDataListに追加する //保護者の住所の緯度経度をmyDataListに追加する
myDataList.get(i).setLatLng(new LatLng(latitudeDouble, longitudeDouble)); myDataList.get(i).setLatLngString(String.valueOf(new LatLng(latitudeDouble, longitudeDouble)));
} }
} }
//SetUpで設定した家庭訪問の開始地点を緯度経度に変換
String startPointLatLngString = String.valueOf(geocoder.getFromLocationName(startPointString, 1));
String[] startPointLatLngArray = startPointLatLngString.split(",");
if (startPointLatLngArray.length >= 3) {
//[Address[addressLines=[0:"日本、〒510-8102 三重県三重郡朝日町小向852−1"],feature=,admin=三重県,sub-admin=三重郡,locality=朝日町,thoroughfare=null,postalCode=510-8102,countryCode=JP,countryName=日本,hasLatitude=true,latitude=35.0351632,hasLongitude=true,longitude=136.66538770000003,phone=null,url=null,extras=null]]
//というようになっているので配列の後ろから6番目が緯度4番目が経度
//不要なlatitude=とlongitude=を取り除く
String latitude = startPointLatLngArray[startPointLatLngArray.length - 6].trim().replace("latitude=", "");
String longitude = startPointLatLngArray[startPointLatLngArray.length - 4].trim().replace("longitude=", "");
Log.d("CreateSchedule", "Latitude: " + latitude + ", Longitude: " + longitude);
// 文字列を結合して形式を整える
startPointLatLngString = latitude + "," + longitude;
Log.d("CreateSchedule", "startPointLatLngString: " + startPointLatLngString);
return startPointLatLngString;
}
} catch (IOException e) { } catch (IOException e) {
Log.e("CreateRoot", "緯度経度の取得に失敗: " + e); Log.e("CreateSchedule", "緯度経度の取得に失敗: " + e);
} }
return null;
} }
private void outPutLogSchedule(List<MyDataClass> myDataList) { private void outPutLogSchedule(List<MyDataClass> myDataList) {
for (int i = 0; i < myDataList.size(); i++) { for (int i = 0; i < myDataList.size(); i++) {
Log.d("CreateRoot:outPutLogSchedule", "(index: " + i + ") data: " + myDataList.get(i)); Log.d("CreateSchedule:outPutLogSchedule", "(index: " + i + ") data: " + myDataList.get(i));
Log.d("CreateRoot:outPutLogSchedule", "(index: " + i + ") Schedule: " + myDataList.get(i).getSchedule()); Log.d("CreateSchedule:outPutLogSchedule", "(index: " + i + ") Schedule: " + myDataList.get(i).getSchedule());
Log.d("CreateRoot", "(index: " + i + ") LatLng" + myDataList.get(i).getLatLng()); Log.d("CreateSchedule", "(index: " + i + ") LatLng" + myDataList.get(i).getLatLngString());
} }
} }
} }

View File

@ -33,6 +33,8 @@ public interface SetUpTableDao {
@Query("SELECT endTime FROM SetUpTable") @Query("SELECT endTime FROM SetUpTable")
String getEndTime(); String getEndTime();
//教師名の取得 //教師名の取得
@Query("SELECT teacherName FROM SetUpTable")
String getTeacherName();
@Query("SELECT intervalTime FROM SetUpTable") @Query("SELECT intervalTime FROM SetUpTable")
String getIntervalTime(); String getIntervalTime();
@Query("SELECT StartBreakTime FROM SetUpTable") @Query("SELECT StartBreakTime FROM SetUpTable")