From 323b283208ff9ef9303dfe4c16d940efb55a2fc8 Mon Sep 17 00:00:00 2001 From: it232115 Date: Thu, 27 Jun 2024 17:49:55 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E8=A8=98=E9=8C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../java/com/example/oplogy/CreateRoot.java | 408 ++++++++++++++---- .../java/com/example/oplogy/MainActivity.java | 62 ++- .../java/com/example/oplogy/MyDataClass.java | 99 +++++ .../com/example/oplogy/SetUpTableDao.java | 2 +- 5 files changed, 476 insertions(+), 97 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 8978d23..773fe0f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/java/com/example/oplogy/CreateRoot.java b/app/src/main/java/com/example/oplogy/CreateRoot.java index f49a345..4a9def9 100644 --- a/app/src/main/java/com/example/oplogy/CreateRoot.java +++ b/app/src/main/java/com/example/oplogy/CreateRoot.java @@ -1,127 +1,381 @@ package com.example.oplogy; -import android.content.Context; import android.util.Log; +import androidx.appcompat.app.AppCompatActivity; import androidx.room.Room; import com.google.firebase.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.TimeZone; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CreateRoot { - private Context context; - private AppDatabase db; + MyDataClass data;//Firestoreから受け取ったdataを入れる変数 + String startTimeHomeVisit;//家庭訪問の開始時間 + String endTimeHomeVisit;//家庭訪問の終了時間 + String intervalTime;//家庭訪問の一家庭当たりの時間 + String startBreakTime;//家庭訪問の休憩の開始時間 + String endBreakTime;//家庭訪問の休憩の終了時間 + + + int interval;//家庭訪問の一家庭当たりの時間と移動時間の合計 + int startBreakTimeMinutes;//家庭訪問の開始時間から休憩時間までの時間 + int endBreakTimeMinutes;//家庭訪問の休憩終了時間から終了時間までの時間 + + private final AppDatabase db; private int arraySize; - public CreateRoot(MainActivity activity) { - this.context = activity; + String testdata[]={"20240604","20240605","20240606"}; + + + public CreateRoot(AppCompatActivity activity) { this.db = Room.databaseBuilder(activity.getApplicationContext(), AppDatabase.class, "SetUpTable").build(); } public void receiveData(List myDataList) { + + //myDataListの要素data第一希望日と第二希望日に以下を追加する + //・保護者の希望時間帯の長さ + //・家庭訪問の日付 + //・保護者の希望時間帯の開始と終了時間 + setData(myDataList); + //希望時間帯の長さ順に並び替える前のログ + outPutLogSort(myDataList); + //保護者の希望時間帯が短い順にmyDataListのDataを並び替える + timeZoneSort(myDataList); + //希望時間帯の長さ順に並び替えたあとのログ + outPutLogSort(myDataList); + + + ExecutorService executor = Executors.newSingleThreadExecutor(); + executor.execute(() -> { + //Roomから以下の情報を取得 + //・家庭訪問全体の開始時間 + //・家庭訪問全体の終了時間 + //・一家庭あたりの家庭訪問の時間 + //・家庭訪問の休憩開始時間 + //・家庭訪問の休憩終了時間 + getRoomData(); + + //Roomから取得した情報のログ + + outPutLogRoomData(); + + //以下の情報を計算 + //・家庭訪問の合計時間 + //・家庭訪問の開始時間から休憩時間までの分数 + //・家庭訪問の休憩終了時間から終了時間までの分数 + timeCalculation(endTimeHomeVisit, startBreakTime, endBreakTime); + + //家庭訪問全体のスケジュールの開始時間を要素とした配列の作成 + int[][][] intervalArray = homeVisitSchedule(); + + outPutLogIntervalArray(intervalArray); + //スケジュール作成 + boolean Duplicates = createSchedule(myDataList, intervalArray); + + //重複によるエラー確認 + if (!Duplicates) { + outPutLogSchedule(myDataList); + } else { + //第二希望日で同じ処理を行う + secondSetData(myDataList); + secondTimeZoneSort(myDataList); + boolean secondDuplicates = secondCreateSchedule(myDataList, intervalArray); + if(!secondDuplicates){ + outPutLogSchedule(myDataList); + } + Log.d("CreateRoot","重複によるエラー"); + } + }); + + + } + + + + + private void setData(List myDataList) { for (int i = 0; i < myDataList.size(); i++) { // 希望時間帯の終了時刻から開始時刻を引いて希望時間帯の長さ(timezone)に入れる - MyDataClass data = myDataList.get(i); + data = myDataList.get(i); + //保護者の第一希望日 List firstDay = data.getFirstDay(); - Timestamp startTime = firstDay.get(0); - Timestamp endTime = firstDay.get(1); - Long timezone = endTime.getSeconds() - startTime.getSeconds(); + + //保護者の第一希望日の開始時間 + Timestamp parentStartTime = firstDay.get(0); + //保護者の第一希望日の終了時間 + Timestamp parentEndTime = firstDay.get(1); + //保護者の第一希望日の希望時間帯の長さ + Long timezone = parentEndTime.getSeconds() - parentStartTime.getSeconds(); data.setTimezone(timezone); // TimeStampを日付に変換 - Date startDate = new Date(startTime.getSeconds() * 1000); - Date endDate = new Date(endTime.getSeconds() * 1000); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String startDateString = sdf.format(startDate); - String endDateString = sdf.format(endDate); + Date startDate = new Date(parentStartTime.getSeconds() * 1000); + Date endDate = new Date(parentEndTime.getSeconds() * 1000); + SimpleDateFormat sdfDateData = new SimpleDateFormat("yyyyMMdd"); + sdfDateData.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); + //第一希望日の日付 + String startDateString = sdfDateData.format(startDate); + String endDateString = sdfDateData.format(endDate); + + + SimpleDateFormat sdfMinutes = new SimpleDateFormat("HHmm"); + sdfMinutes.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); + //保護者の希望開始時間を時間表記にしたもの + String parentStartTimeString = sdfMinutes.format(parentStartTime.toDate()); + //保護者の希望終了時間を時間表記にしたもの + String parentEndTimeString = sdfMinutes.format(parentEndTime.toDate()); + // myDataList の中の data に追加する処理 myDataList.get(i).setTimezone(timezone); myDataList.get(i).setStartDateString(startDateString); myDataList.get(i).setEndDateString(endDateString); - - // ログ出力 - Log.d("CreateRoot", "(index: " + i + ") timezone: " + myDataList.get(i).getTimezone()); - Log.d("CreateRoot", "(index: " + i + ") startDate: " + myDataList.get(i).getStartDateString()); - Log.d("CreateRoot", "(index: " + i + ") data: " + myDataList.get(i)); + myDataList.get(i).setParentStartTimeString(parentStartTimeString); + myDataList.get(i).setParentEndTimeString(parentEndTimeString); } - // timezoneを比較するComparator→timezoneが短い順に並べる - Comparator comparator = new Comparator() { - @Override - public int compare(MyDataClass data1, MyDataClass data2) { - return data1.getTimezone().compareTo(data2.getTimezone()); - } - }; - // myDataListをtimezoneの値でソート - Collections.sort(myDataList, comparator); - // ソート後のmyDataListをログ出力 + } + + //setDataと処理は同じ(第二希望は任意なのでその点だけ確認) + private void secondSetData(List myDataList) { for (int i = 0; i < myDataList.size(); i++) { + // 希望時間帯の終了時刻から開始時刻を引いて希望時間帯の長さ(timezone)に入れる + data = myDataList.get(i); + if (myDataList.get(i).getSecondDay() != null) { + //保護者の第二希望日 + List secondDay = data.getSecondDay(); + //保護者の第二希望日の開始時間 + Timestamp parentStartTime = secondDay.get(0); + //保護者の第二希望日の終了時間 + Timestamp parentEndTime = secondDay.get(1); + //保護者の第二希望日の希望時間帯の長さ + Long secondDayTimezone = parentEndTime.getSeconds() - parentStartTime.getSeconds(); + data.setTimezone(secondDayTimezone); + + // TimeStampを日付に変換 + Date startDate = new Date(parentStartTime.getSeconds() * 1000); + Date endDate = new Date(parentEndTime.getSeconds() * 1000); + SimpleDateFormat sdfDateData = new SimpleDateFormat("yyyyMMdd"); + sdfDateData.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); + //第二希望日の日付 + String secondDayStartDateString = sdfDateData.format(startDate); + String secondDaySndDateString = sdfDateData.format(endDate); + + + SimpleDateFormat sdfMinutes = new SimpleDateFormat("HHmm"); + sdfMinutes.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); + //保護者の希望開始時間を時間表記にしたもの + String secondDayParentStartTimeString = sdfMinutes.format(parentStartTime.toDate()); + //保護者の希望終了時間を時間表記にしたもの + String secondDayParentEndTimeString = sdfMinutes.format(parentEndTime.toDate()); + + + // myDataList の中の data に追加する処理 + myDataList.get(i).setSecondDayTimezone(secondDayTimezone); + myDataList.get(i).setSecondDayStartDateString(secondDayStartDateString); + myDataList.get(i).setSecondDayEndDateString(secondDaySndDateString); + myDataList.get(i).setSecondDayParentStartTimeString(secondDayParentStartTimeString); + myDataList.get(i).setSecondDayParentEndTimeString(secondDayParentEndTimeString); + } + } + } + + private void timeZoneSort(List myDataList) { + // timezoneを比較するComparator→timezoneが短い順に並べる + Comparator comparator = Comparator.comparing(MyDataClass::getTimezone); + // myDataListをtimezoneの値でソート + myDataList.sort(comparator); + } + + private void secondTimeZoneSort(List myDataList) { + // timezoneを比較するComparator→timezoneが短い順に並べる + Comparator comparator = Comparator.comparing(MyDataClass::getSecondDayTimezone); + // myDataListをtimezoneの値でソート + myDataList.sort(comparator); + } + + private void outPutLogSort(List myDataList) { + for (int i = 0; i < myDataList.size(); i++) { + Log.d("CreateRoot", "(index: " + i + ") data: " + myDataList.get(i).getPatronName()); + Log.d("CreateRoot", "(index: " + i + ") data: " + myDataList.get(i).getClass()); Log.d("CreateRoot", "(index: " + i + ") timezone: " + myDataList.get(i).getTimezone()); Log.d("CreateRoot", "(index: " + i + ") startDate: " + myDataList.get(i).getStartDateString()); - Log.d("CreateRoot", "(index: " + i + ") data: " + myDataList.get(i)); + Log.d("CreateRoot:outPutLogBeforeSort", "parentStartTimeString: " + myDataList.get(i).getParentStartTimeString()); + Log.d("CreateRoot:outPutLogBeforeSort", "parentEndTimeString: " + myDataList.get(i).getParentEndTimeString()); + + } + } + + private void getRoomData() { + // setUpActivityによって入力され、Roomに保存された値を取り出す処理 + //Roomの操作の定義 + SetUpTableDao setUpTableDao = db.setUpTableDao(); + startTimeHomeVisit = setUpTableDao.getStartTime(); + endTimeHomeVisit = setUpTableDao.getEndTime(); + intervalTime = setUpTableDao.getIntervalTime(); + startBreakTime = setUpTableDao.getStartBreakTime(); + endBreakTime = setUpTableDao.getEndBreakTime(); + } + + //Roomからのデータ取得に関するログ + void outPutLogRoomData() { + Log.d("CreateRoot:outPutLogRoomData", "開始時間" + startTimeHomeVisit); + Log.d("CreateRoot:outPutLogRoomData", "終了時刻" + endTimeHomeVisit); + Log.d("CreateRoot:outPutLogRoomData", "一家庭当たりの所要時間" + intervalTime); + Log.d("CreateRoot:outPutLogRoomData", "休憩開始時刻" + startBreakTime); + Log.d("CreateRoot:outPutLogRoomData", "休憩終了時刻" + endBreakTime); + } + + private void timeCalculation(String endTimeHomeVisit, String startBreakTime, String endBreakTime) { + //家庭訪問の合計時間を計算するため、家庭訪問の終了時間から開始時間を引いた数を求めている。但し、(0,2)によって先に1時間単位の差を求めた後に、(2,4)によって分単位の差を求めている + int totalTime = ((Integer.parseInt(endTimeHomeVisit.substring(0, 2)) - (Integer.parseInt(startTimeHomeVisit.substring(0, 2)))) * 60 + ((Integer.parseInt(endTimeHomeVisit.substring(2, 4)))) - (Integer.parseInt(startTimeHomeVisit.substring(2, 4)))); + //家庭訪問の休憩開始時間から家庭訪問の開始時間を引くことで家庭訪問の開始から休憩時間までの分数を計算 + startBreakTimeMinutes = ((Integer.parseInt(startBreakTime.substring(0, 2))) - (Integer.parseInt(startTimeHomeVisit.substring(0, 2)))) * 60 + ((Integer.parseInt(startBreakTime.substring(2, 4))) - (Integer.parseInt(startTimeHomeVisit.substring(2, 4)))); + //家庭訪問の休憩終了時間から家庭訪問の終了時間を引くことで休憩の終わりから家庭訪問の終了時間までの分数を計算 + endBreakTimeMinutes = ((Integer.parseInt(endBreakTime.substring(0, 2))) - (Integer.parseInt(startTimeHomeVisit.substring(0, 2)))) * 60 + ((Integer.parseInt(endBreakTime.substring(2, 4))) - (Integer.parseInt(startTimeHomeVisit.substring(2, 4)))); + interval = Integer.parseInt(intervalTime) + 10;//移動時間込みの1家庭当たりの所要時間 + arraySize = totalTime / interval;//家庭訪問の合計時間から移動時間込みの1家庭当たりの所要時間を割ることで配列の数を求めている + } + + private int[][][] homeVisitSchedule() { + //家庭訪問の開始時間からの経過分数を入れる配列 + List intervalList = new ArrayList<>(); + startBreakTimeMinutes = (((Integer.parseInt(startTimeHomeVisit.substring(0, 2))) + (startBreakTimeMinutes + (Integer.parseInt(startTimeHomeVisit.substring(0, 2)))) / 60) % 24) * 100 + (startBreakTimeMinutes + (Integer.parseInt(startTimeHomeVisit.substring(2, 4)))) % 60; + endBreakTimeMinutes = (((Integer.parseInt(startTimeHomeVisit.substring(0, 2))) + (endBreakTimeMinutes + (Integer.parseInt(startTimeHomeVisit.substring(0, 2)))) / 60) % 24) * 100 + (endBreakTimeMinutes + (Integer.parseInt(startTimeHomeVisit.substring(2, 4)))) % 60; + + //休憩時間を除いた家庭訪問の開始時間からの経過分数+家庭訪問の開始時間=家庭訪問のスケジュール区切りをintervalArrayに入れる処理 + for (int i = 0; i < arraySize; i++) { + int intervalMinutes = (((Integer.parseInt(startTimeHomeVisit.substring(0, 2))) + (interval * i) / 60) % 24) * 100 + (interval * i) % 60; + if (intervalMinutes % 100 >= 60) { + intervalMinutes += 40; // 下2桁が60以上の場合は繰り上げる + } + if (intervalMinutes < startBreakTimeMinutes || intervalMinutes >= endBreakTimeMinutes) { + intervalList.add(intervalMinutes); + } + } + int[][][] intervalArray = new int[3][intervalList.size()][2]; + for (int i = 0; i < intervalList.size(); i++) { + for(int j=0;j<3;j++) { + intervalArray[j][i][0] = intervalList.get(i); + intervalArray[j][i][1] = 0;//割り当てされていないことを表す + } } - ExecutorService executor = Executors.newSingleThreadExecutor(); - executor.execute(() -> { - // setUpActivityによって入力され、Roomに保存された値を取り出す処理 - SetUpTableDao setUpTableDao = db.setUpTableDao(); - String startTime = setUpTableDao.getStartTime(); - String endTime = setUpTableDao.getEndTime(); - String intervalTime = setUpTableDao.getIntervalTime(); - String startBreakTime = setUpTableDao.getStartBreakTime(); - String endBreakTime = setUpTableDao.getEndBreakTime(); - // デバッグ用 - Log.d("CreateRoot", "開始時間" + startTime); - Log.d("CreateRoot", "終了時刻" + endTime); - Log.d("CreateRoot", "一家庭当たりの所要時間" + intervalTime); - Log.d("CreateRoot", "休憩開始時刻" + startBreakTime); - Log.d("CreateRoot", "休憩終了時刻" + endBreakTime); + return intervalArray; + } - // endTimeからstartTimeの値を引いた値をintervalTime+10で割って配列を作る - int startHour = Integer.parseInt(startTime.substring(0, 2)); - int endHour = Integer.parseInt(endTime.substring(0, 2)); - int startMinute = Integer.parseInt(startTime.substring(2, 4)); - int endMinute = Integer.parseInt(endTime.substring(2, 4)); + private void outPutLogIntervalArray(int[][][] intervalArray) { + for (int i = 0; i < intervalArray.length; i++) { + for (int j = 0; j < 3; j++) { + Log.d("CreateRoot:PutLogIntervalArray", "(index:" + i + ") intervalArray:" + intervalArray[j][ + i][0]); + } + } + } - int totalTime = (endHour - startHour) * 60 + (endMinute - startMinute); - int interval = Integer.parseInt(intervalTime) + 10; - arraySize = totalTime / interval; - int startBreakHour = Integer.parseInt(startBreakTime.substring(0, 2)); - int startBreakMinute = Integer.parseInt(startBreakTime.substring(2, 4)); - int endBreakHour = Integer.parseInt(endBreakTime.substring(0, 2)); - int endBreakMinute = Integer.parseInt(endBreakTime.substring(2, 4)); + private Boolean createSchedule(List myDataList, int[][][] intervalArray) { - int startBreakTimeMinutes = (startBreakHour - startHour) * 60 + (startBreakMinute - startMinute); - int endBreakTimeMinutes = (endBreakHour - startHour) * 60 + (endBreakMinute - startMinute); + for (int i = 0; i < myDataList.size(); i++) { + for (int j = 0; j < intervalArray.length - 1; j++) { + if (testdata[0].equals(myDataList.get(i).getStartDateString())) { + checkSchedule(myDataList,intervalArray,i,j); +// if (intervalArray[0][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[0][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[0][j][1] == 0) { +// intervalArray[0][j][1] += 1;//割り当て済みを表す +// myDataList.get(i).setSchedule(intervalArray[0][j][0]); +// Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); +// break; +// } + } else if (testdata[1].equals(myDataList.get(i).getStartDateString())) { + if (intervalArray[1][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[1][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[1][j][1] == 0) { + intervalArray[1][j][1] += 1;//割り当て済みを表す + myDataList.get(i).setSchedule(intervalArray[1][j][0]); + Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); + break; + } + } else if (testdata[2].equals(myDataList.get(i).getStartDateString())) { + if (intervalArray[2][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[2][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[2][j][1] == 0) { + intervalArray[2][j][1] += 1;//割り当て済みを表す + myDataList.get(i).setSchedule(intervalArray[2][j][0]); + Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); + break; + } + } else { + Log.d("CreateRoot", "第一希望日:日付との紐づけエラー"); + } + } + } + for (int i = 0; i < myDataList.size(); i++) { + if (myDataList.get(i).getSchedule() == 0) ; + return true; + } + return false; + } - List intervalList = new ArrayList<>(); - - for (int i = 0; i < arraySize; i++) { - int intervalMinutes = i * interval; - if (intervalMinutes < startBreakTimeMinutes || intervalMinutes >= endBreakTimeMinutes) { - intervalList.add(intervalMinutes); + private boolean secondCreateSchedule(List myDataList, int[][][] intervalArray) { + for (int i = 0; i < myDataList.size(); i++) { + for (int j = 0; j < intervalArray.length - 1; j++) { + if(testdata[0].equals(myDataList.get(i).getSecondDayStartDateString())) { + if (intervalArray[0][j][0] >= Integer.parseInt(myDataList.get(i).getSecondDayParentStartTimeString()) && intervalArray[0][j + 1][0] <= Integer.parseInt(myDataList.get(i).getSecondDayParentEndTimeString()) && intervalArray[0][j][1] == 0) { + intervalArray[0][j][1] += 1;//割り当て済みを表す + myDataList.get(i).setSchedule(intervalArray[0][j][0]); + Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); + break; + } + }else if(testdata[1].equals(myDataList.get(i).getSecondDayStartDateString())){ + if (intervalArray[1][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[1][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[1][j][1] == 0) { + intervalArray[1][j][1] += 1;//割り当て済みを表す + myDataList.get(i).setSchedule(intervalArray[1][j][0]); + Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); + break; + } + } else if (testdata[2].equals(myDataList.get(i).getSecondDayStartDateString())) { + if (intervalArray[2][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[2][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[2][j][1] == 0) { + intervalArray[2][j][1] += 1;//割り当て済みを表す + myDataList.get(i).setSchedule(intervalArray[2][j][0]); + Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); + break; + } + }else{ + Log.d("CreateRoot", "第二希望日:日付との紐づけエラー"); } } - int[] intervalArray = new int[intervalList.size()]; - for (int i = 0; i < intervalList.size(); i++) { - intervalArray[i] = intervalList.get(i); - } - - // デバッグ用ログ - for (int i = 0; i < intervalArray.length; i++) { - Log.d("CreateRoot", "家庭訪問時間" + intervalArray[i]); - } - }); + } + for (int i = 0; i < myDataList.size(); i++) { + if (myDataList.get(i).getSchedule() == 0) ; + return true; + } + return false; } -} \ No newline at end of file + + private void checkSchedule(List myDataList,int[][][] intervalArray,int i,int j) { + for (int x = 0; x < 3; x++) { + if(intervalArray[x][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[x][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[x][j][1] == 0) + { + intervalArray[x][j][1] += 1;//割り当て済みを表す + myDataList.get(i).setSchedule(intervalArray[x][j][0]); + Log.d("CreateRoot:CheckSchedule","(intex:"+i+") :"+myDataList.get(i).getStartDateString()); + Log.d("CreateRoot:CheckSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); + break; + } + } + } + private void outPutLogSchedule(List myDataList) { + for (int i = 0; i < myDataList.size(); i++) { + Log.d("CreateRoot:outPutLogSchedule", "(index: " + i + ") data: " + myDataList.get(i)); + Log.d("CreateRoot:outPutLogSchedule", "(index: " + i + ") Schedule: " + myDataList.get(i).getSchedule()); + Log.d("CreateRoot:outPutLogSchedule", "(index: " + i + ") date: " + myDataList.get(i).getStartDateString()); + } + } + +} diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java index 64dc27a..8b3d0f6 100644 --- a/app/src/main/java/com/example/oplogy/MainActivity.java +++ b/app/src/main/java/com/example/oplogy/MainActivity.java @@ -20,7 +20,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -public class MainActivity extends AppCompatActivity implements View.OnClickListener{ +public class MainActivity extends AppCompatActivity implements View.OnClickListener { // ID作成のTextViewとImageView private TextView creatUUID; @@ -81,36 +81,36 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } -// クリック処理 + // クリック処理 @Override public void onClick(View view) { // ID作成のクリック処理 - if(view == creatUUID){ + if (view == creatUUID) { imageUuid.setImageResource(R.drawable.ischecked_uuid); showUUIDYesNoDialog();//UUIDを表示するかのダイアログ finish(); // 画面遷移後元の状態に戻す } - if(view == imageUuid){ + if (view == imageUuid) { imageUuid.setImageResource(R.drawable.ischecked_uuid); showUUIDYesNoDialog();//UUIDを表示するかのダイアログ finish(); } // セットアップのクリック処理 - if(view == setUp){ + if (view == setUp) { imageSetup.setImageResource(R.drawable.ischecked_uuid); - Intent toSetup = new Intent(MainActivity.this,SetUpActivity.class); + Intent toSetup = new Intent(MainActivity.this, SetUpActivity.class); startActivity(toSetup); finish(); // 画面遷移後元の状態に戻す } - if (view == imageSetup){ + if (view == imageSetup) { imageSetup.setImageResource(R.drawable.ischecked_uuid); - Intent toSetup = new Intent(MainActivity.this,SetUpActivity.class); + Intent toSetup = new Intent(MainActivity.this, SetUpActivity.class); startActivity(toSetup); finish(); // 画面遷移後元の状態に戻す } // ルート作成のクリック処理 - if(view == root){ + if (view == root) { imageRoot.setImageResource(R.drawable.pin); ExecutorService executor = Executors.newSingleThreadExecutor(); @@ -135,7 +135,18 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe }); executor.execute(() -> { - List myDataList = firestoreReception.getMyDataList(); + + List myDataList = null; + while (myDataList == null) { + myDataList = firestoreReception.getMyDataList(); + try { + Thread.sleep(3000); + Log.d("MainActivity","myDataList"+ myDataList.size()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + Log.d("MainActivity","myDataList"+ myDataList.size()); CreateRoot createRoot = new CreateRoot(MainActivity.this); createRoot.receiveData(myDataList); latch.countDown(); @@ -155,21 +166,22 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe executor.shutdown(); } - if(view == imageRoot){ + if (view == imageRoot) { imageRoot.setImageResource(R.drawable.pin); - Intent toRoot = new Intent(MainActivity.this,Maps.class); + Intent toRoot = new Intent(MainActivity.this, Maps.class); startActivity(toRoot); } // 提出状況のクリック処理 - if(view == submission){ - Intent toSubmission = new Intent(MainActivity.this,SubmissionActivity.class); + if (view == submission) { + Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class); startActivity(toSubmission); } - if(view == imageSubmission){ - Intent toSubmission = new Intent(MainActivity.this,SubmissionActivity.class); + if (view == imageSubmission) { + Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class); startActivity(toSubmission); } } + private void showUUIDYesNoDialog() { //ダイアログの表示 AlertDialog.Builder builder = new AlertDialog.Builder(this); @@ -188,11 +200,12 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe builder.setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Log.d("DialogNO","DialogでNoが選ばれました"); + Log.d("DialogNO", "DialogでNoが選ばれました"); } }); builder.show(); } + //ルート作成のダイアログ private void showRouteCreationDialog(CountDownLatch latch) { new AlertDialog.Builder(MainActivity.this) @@ -212,4 +225,17 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe }) .show(); } -} \ No newline at end of file + + public void showErrorDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setTitle("警告"); + builder.setMessage("保護者の希望の重複が深刻で、ルート検索が行えません。調整してください。"); + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + } + }); + builder.show(); + } +} diff --git a/app/src/main/java/com/example/oplogy/MyDataClass.java b/app/src/main/java/com/example/oplogy/MyDataClass.java index 476c355..4ffe5c3 100644 --- a/app/src/main/java/com/example/oplogy/MyDataClass.java +++ b/app/src/main/java/com/example/oplogy/MyDataClass.java @@ -17,6 +17,18 @@ public class MyDataClass { private Long Timezone; private String startDateString; private String endDateString; + private String AssignedStartTime; + private int AssignedIndex; + private boolean linking; + private String parentStartTimeString; + private String parentEndTimeString; + private int schedule; + private String secondDayStartDateString; + private String secondDayEndDateString; + private Long secondDayTimezone; + private String secondDayParentStartTimeString; + private String secondDayParentEndTimeString; + public MyDataClass(String patronName, int classId, List address, List firstDay, int studentNumber, String childName, List thirdDay, List secondDay) { this.patronName = patronName; @@ -132,7 +144,94 @@ public class MyDataClass { public String getStartDateString() { return startDateString; } + public void setStartDateString(String startDateString) { this.startDateString = startDateString; } + + + public void setAssignedStartTime(String AssignedStartTime) { + this.AssignedStartTime = AssignedStartTime; + + } + + public String setAssignedEndTime(String s) { + return AssignedStartTime; + } + + public void setAssignedIndex(int AssignedIndex) { + this.AssignedIndex = AssignedIndex; + } + + public int getAssignedIndex() { + return AssignedIndex; + } + + public void setLinking(boolean linking) { + this.linking = linking; + } + + public boolean getLinking() { + return linking; + } + + public void setParentStartTimeString(String parentStartTimeString) { + this.parentStartTimeString = parentStartTimeString; + } + + public void setParentEndTimeString(String parentEndTimeString) { + this.parentEndTimeString = parentEndTimeString; + } + + public String getParentStartTimeString() { + return parentStartTimeString; + } + + public String getParentEndTimeString() { + return parentEndTimeString; + } + + public void setSchedule(int schedule) { + this.schedule = schedule; + } + + public int getSchedule() { + return schedule; + } + + public void setSecondDayStartDateString(String secondDayStartDateString) { + this.secondDayStartDateString=secondDayStartDateString; + } + + public void setSecondDayEndDateString(String secondDayEndDateString) { + this.secondDayEndDateString=secondDayEndDateString; + } + public void setSecondDayTimezone(Long secondDayTimezone) { + this.secondDayTimezone=secondDayTimezone; + } + + public Long getSecondDayTimezone(){ + return secondDayTimezone; + } + + + public void setSecondDayParentStartTimeString(String secondDayParentStartTimeString) { + this.secondDayParentStartTimeString=secondDayParentStartTimeString; + } + + public void setSecondDayParentEndTimeString(String secondDayParentEndTimeString) { + this.secondDayParentEndTimeString=secondDayParentEndTimeString; + } + + public String getSecondDayParentStartTimeString() { + return secondDayParentStartTimeString; + } + + public String getSecondDayParentEndTimeString() { + return secondDayParentEndTimeString; + } + + public String getSecondDayStartDateString() { + return secondDayStartDateString; + } } diff --git a/app/src/main/java/com/example/oplogy/SetUpTableDao.java b/app/src/main/java/com/example/oplogy/SetUpTableDao.java index c5269e0..ec59624 100644 --- a/app/src/main/java/com/example/oplogy/SetUpTableDao.java +++ b/app/src/main/java/com/example/oplogy/SetUpTableDao.java @@ -39,4 +39,4 @@ public interface SetUpTableDao { String getStartBreakTime(); @Query("SELECT EndBreakTime FROM SetUpTable") String getEndBreakTime(); -} \ No newline at end of file +} From d98293a80d4b641cb93ad9734eb953ef28be9eae Mon Sep 17 00:00:00 2001 From: it232115 Date: Thu, 27 Jun 2024 20:51:57 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E3=82=B9=E3=82=B1=E3=82=B8=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E4=BD=9C=E6=88=90=E3=81=AE=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit エラーのダイアログだけ修正必須 --- .../java/com/example/oplogy/CreateRoot.java | 122 +++++++----------- .../java/com/example/oplogy/MainActivity.java | 34 +++-- 2 files changed, 73 insertions(+), 83 deletions(-) diff --git a/app/src/main/java/com/example/oplogy/CreateRoot.java b/app/src/main/java/com/example/oplogy/CreateRoot.java index 4a9def9..99242a0 100644 --- a/app/src/main/java/com/example/oplogy/CreateRoot.java +++ b/app/src/main/java/com/example/oplogy/CreateRoot.java @@ -33,14 +33,16 @@ public class CreateRoot { private final AppDatabase db; private int arraySize; - String testdata[]={"20240604","20240605","20240606"}; + boolean secondDuplicates; + + String testdata[] = {"20240604", "20240605", "20240606"}; public CreateRoot(AppCompatActivity activity) { this.db = Room.databaseBuilder(activity.getApplicationContext(), AppDatabase.class, "SetUpTable").build(); } - public void receiveData(List myDataList) { + public Boolean receiveData(List myDataList) { //myDataListの要素data第一希望日と第二希望日に以下を追加する //・保護者の希望時間帯の長さ @@ -78,26 +80,34 @@ public class CreateRoot { //家庭訪問全体のスケジュールの開始時間を要素とした配列の作成 int[][][] intervalArray = homeVisitSchedule(); + outPutLogIntervalArray(intervalArray); //スケジュール作成 boolean Duplicates = createSchedule(myDataList, intervalArray); //重複によるエラー確認 if (!Duplicates) { + sortSchedule(myDataList); outPutLogSchedule(myDataList); } else { //第二希望日で同じ処理を行う + Log.d("CreateRoot", "第二希望"); secondSetData(myDataList); secondTimeZoneSort(myDataList); - boolean secondDuplicates = secondCreateSchedule(myDataList, intervalArray); - if(!secondDuplicates){ + secondDuplicates = secondCreateSchedule(myDataList, intervalArray); + if (!secondDuplicates) { + sortSchedule(myDataList); outPutLogSchedule(myDataList); + }else{ + Log.d("CreateRoot", "重複によるエラー"); } - Log.d("CreateRoot","重複によるエラー"); } }); - - + if(!secondDuplicates){ + return true; + }else{ + return false; + } } @@ -262,9 +272,11 @@ public class CreateRoot { intervalList.add(intervalMinutes); } } + + int[][][] intervalArray = new int[3][intervalList.size()][2]; for (int i = 0; i < intervalList.size(); i++) { - for(int j=0;j<3;j++) { + for (int j = 0; j < 3; j++) { intervalArray[j][i][0] = intervalList.get(i); intervalArray[j][i][1] = 0;//割り当てされていないことを表す } @@ -274,11 +286,8 @@ public class CreateRoot { } private void outPutLogIntervalArray(int[][][] intervalArray) { - for (int i = 0; i < intervalArray.length; i++) { - for (int j = 0; j < 3; j++) { - Log.d("CreateRoot:PutLogIntervalArray", "(index:" + i + ") intervalArray:" + intervalArray[j][ - i][0]); - } + for (int i = 0; i < intervalArray[0].length; i++) { + Log.d("CreateRoot","inteintervalArray:(intex:" + i + ") :"+intervalArray[0][i][0]); } } @@ -286,34 +295,18 @@ public class CreateRoot { private Boolean createSchedule(List myDataList, int[][][] intervalArray) { for (int i = 0; i < myDataList.size(); i++) { - for (int j = 0; j < intervalArray.length - 1; j++) { - if (testdata[0].equals(myDataList.get(i).getStartDateString())) { - checkSchedule(myDataList,intervalArray,i,j); -// if (intervalArray[0][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[0][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[0][j][1] == 0) { -// intervalArray[0][j][1] += 1;//割り当て済みを表す -// myDataList.get(i).setSchedule(intervalArray[0][j][0]); -// Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); -// break; -// } - } else if (testdata[1].equals(myDataList.get(i).getStartDateString())) { - if (intervalArray[1][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[1][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[1][j][1] == 0) { - intervalArray[1][j][1] += 1;//割り当て済みを表す - myDataList.get(i).setSchedule(intervalArray[1][j][0]); - Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); + for (int j = 0; j < intervalArray[0].length - 1; j++) { + for (int x = 0; x < 3; x++) { + if (testdata[x].equals(myDataList.get(i).getStartDateString())&&myDataList.get(i).getSchedule()==0) { + String desiredDate=myDataList.get(i).getStartDateString(); + checkSchedule(myDataList, intervalArray, i, j, x,desiredDate); break; } - } else if (testdata[2].equals(myDataList.get(i).getStartDateString())) { - if (intervalArray[2][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[2][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[2][j][1] == 0) { - intervalArray[2][j][1] += 1;//割り当て済みを表す - myDataList.get(i).setSchedule(intervalArray[2][j][0]); - Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); - break; - } - } else { - Log.d("CreateRoot", "第一希望日:日付との紐づけエラー"); } } + } + for (int i = 0; i < myDataList.size(); i++) { if (myDataList.get(i).getSchedule() == 0) ; return true; @@ -323,53 +316,38 @@ public class CreateRoot { private boolean secondCreateSchedule(List myDataList, int[][][] intervalArray) { for (int i = 0; i < myDataList.size(); i++) { - for (int j = 0; j < intervalArray.length - 1; j++) { - if(testdata[0].equals(myDataList.get(i).getSecondDayStartDateString())) { - if (intervalArray[0][j][0] >= Integer.parseInt(myDataList.get(i).getSecondDayParentStartTimeString()) && intervalArray[0][j + 1][0] <= Integer.parseInt(myDataList.get(i).getSecondDayParentEndTimeString()) && intervalArray[0][j][1] == 0) { - intervalArray[0][j][1] += 1;//割り当て済みを表す - myDataList.get(i).setSchedule(intervalArray[0][j][0]); - Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); - break; + for (int j = 0; j < intervalArray[0].length - 1; j++) { + for (int x = 0; x < 3; x++) { + if (testdata[x].equals(myDataList.get(i).getSecondDayStartDateString()) && myDataList.get(i).getSchedule() == 0) { + String desiredDate=myDataList.get(i).getSecondDayStartDateString(); + checkSchedule(myDataList, intervalArray, i, j, x,desiredDate); } - }else if(testdata[1].equals(myDataList.get(i).getSecondDayStartDateString())){ - if (intervalArray[1][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[1][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[1][j][1] == 0) { - intervalArray[1][j][1] += 1;//割り当て済みを表す - myDataList.get(i).setSchedule(intervalArray[1][j][0]); - Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); - break; - } - } else if (testdata[2].equals(myDataList.get(i).getSecondDayStartDateString())) { - if (intervalArray[2][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[2][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[2][j][1] == 0) { - intervalArray[2][j][1] += 1;//割り当て済みを表す - myDataList.get(i).setSchedule(intervalArray[2][j][0]); - Log.d("CreateRoot:createSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); - break; - } - }else{ - Log.d("CreateRoot", "第二希望日:日付との紐づけエラー"); } } - } + for (int i = 0; i < myDataList.size(); i++) { - if (myDataList.get(i).getSchedule() == 0) ; - return true; + if (myDataList.get(i).getSchedule() == 0) { + return true; + } } return false; } - private void checkSchedule(List myDataList,int[][][] intervalArray,int i,int j) { - for (int x = 0; x < 3; x++) { - if(intervalArray[x][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[x][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[x][j][1] == 0) - { - intervalArray[x][j][1] += 1;//割り当て済みを表す - myDataList.get(i).setSchedule(intervalArray[x][j][0]); - Log.d("CreateRoot:CheckSchedule","(intex:"+i+") :"+myDataList.get(i).getStartDateString()); - Log.d("CreateRoot:CheckSchedule", "(index:" + i + ") :" + myDataList.get(i).getSchedule()); - break; - } + private void checkSchedule(List myDataList, int[][][] intervalArray, int i, int j, int x,String desiredDate) { + + if (intervalArray[x][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[x][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[x][j][1] == 0) { + intervalArray[x][j][1] += 1;//割り当て済みを表す + myDataList.get(i).setSchedule(Integer.parseInt(desiredDate.substring(4,8)+String.valueOf(intervalArray[x][j][0]))); } } + + private void sortSchedule(List myDataList) { + + Comparator comparator = Comparator.comparing(MyDataClass::getSchedule); + myDataList.sort(comparator); + } + private void outPutLogSchedule(List myDataList) { for (int i = 0; i < myDataList.size(); i++) { Log.d("CreateRoot:outPutLogSchedule", "(index: " + i + ") data: " + myDataList.get(i)); diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java index 8b3d0f6..6c8f7e2 100644 --- a/app/src/main/java/com/example/oplogy/MainActivity.java +++ b/app/src/main/java/com/example/oplogy/MainActivity.java @@ -148,8 +148,13 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } Log.d("MainActivity","myDataList"+ myDataList.size()); CreateRoot createRoot = new CreateRoot(MainActivity.this); - createRoot.receiveData(myDataList); + Boolean notDuplicates=createRoot.receiveData(myDataList); latch.countDown(); + if(notDuplicates){ + Log.d("MainActivity","スケジュール作成成功"); + }else{ + showErrorDialog(latch); + } }); new Thread(() -> { @@ -226,16 +231,23 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe .show(); } - public void showErrorDialog() { - AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); - builder.setTitle("警告"); - builder.setMessage("保護者の希望の重複が深刻で、ルート検索が行えません。調整してください。"); - builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { + public void showErrorDialog(CountDownLatch latch) { - } - }); - builder.show(); + new AlertDialog.Builder(MainActivity.this) + .setTitle("警告") + .setMessage("保護者の重複が重大でルート作成ができません。調整してください") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + latch.countDown(); + } + }) + .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .show(); } } From 56d54192d2747f1fc6729461f5f2dea7b71c21d0 Mon Sep 17 00:00:00 2001 From: it232115 Date: Fri, 28 Jun 2024 10:08:29 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E6=95=B4?= =?UTF-8?q?=E5=BD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/oplogy/CreateRoot.java | 24 +++++++++---------- .../example/oplogy/FirestoreReception.java | 11 +++++---- .../java/com/example/oplogy/GeoCoder.java | 2 +- .../java/com/example/oplogy/MainActivity.java | 4 +++- .../java/com/example/oplogy/MyDataClass.java | 21 ++++++++-------- 5 files changed, 32 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/example/oplogy/CreateRoot.java b/app/src/main/java/com/example/oplogy/CreateRoot.java index 99242a0..8c1d4f6 100644 --- a/app/src/main/java/com/example/oplogy/CreateRoot.java +++ b/app/src/main/java/com/example/oplogy/CreateRoot.java @@ -98,21 +98,19 @@ public class CreateRoot { if (!secondDuplicates) { sortSchedule(myDataList); outPutLogSchedule(myDataList); - }else{ + } else { Log.d("CreateRoot", "重複によるエラー"); } } }); - if(!secondDuplicates){ + if (!secondDuplicates) { return true; - }else{ + } else { return false; } } - - private void setData(List myDataList) { for (int i = 0; i < myDataList.size(); i++) { // 希望時間帯の終了時刻から開始時刻を引いて希望時間帯の長さ(timezone)に入れる @@ -287,7 +285,7 @@ public class CreateRoot { private void outPutLogIntervalArray(int[][][] intervalArray) { for (int i = 0; i < intervalArray[0].length; i++) { - Log.d("CreateRoot","inteintervalArray:(intex:" + i + ") :"+intervalArray[0][i][0]); + Log.d("CreateRoot", "inteintervalArray:(intex:" + i + ") :" + intervalArray[0][i][0]); } } @@ -297,9 +295,9 @@ public class CreateRoot { for (int i = 0; i < myDataList.size(); i++) { for (int j = 0; j < intervalArray[0].length - 1; j++) { for (int x = 0; x < 3; x++) { - if (testdata[x].equals(myDataList.get(i).getStartDateString())&&myDataList.get(i).getSchedule()==0) { - String desiredDate=myDataList.get(i).getStartDateString(); - checkSchedule(myDataList, intervalArray, i, j, x,desiredDate); + if (testdata[x].equals(myDataList.get(i).getStartDateString()) && myDataList.get(i).getSchedule() == 0) { + String desiredDate = myDataList.get(i).getStartDateString(); + checkSchedule(myDataList, intervalArray, i, j, x, desiredDate); break; } } @@ -319,8 +317,8 @@ public class CreateRoot { for (int j = 0; j < intervalArray[0].length - 1; j++) { for (int x = 0; x < 3; x++) { if (testdata[x].equals(myDataList.get(i).getSecondDayStartDateString()) && myDataList.get(i).getSchedule() == 0) { - String desiredDate=myDataList.get(i).getSecondDayStartDateString(); - checkSchedule(myDataList, intervalArray, i, j, x,desiredDate); + String desiredDate = myDataList.get(i).getSecondDayStartDateString(); + checkSchedule(myDataList, intervalArray, i, j, x, desiredDate); } } } @@ -334,11 +332,11 @@ public class CreateRoot { return false; } - private void checkSchedule(List myDataList, int[][][] intervalArray, int i, int j, int x,String desiredDate) { + private void checkSchedule(List myDataList, int[][][] intervalArray, int i, int j, int x, String desiredDate) { if (intervalArray[x][j][0] >= Integer.parseInt(myDataList.get(i).getParentStartTimeString()) && intervalArray[x][j + 1][0] <= Integer.parseInt(myDataList.get(i).getParentEndTimeString()) && intervalArray[x][j][1] == 0) { intervalArray[x][j][1] += 1;//割り当て済みを表す - myDataList.get(i).setSchedule(Integer.parseInt(desiredDate.substring(4,8)+String.valueOf(intervalArray[x][j][0]))); + myDataList.get(i).setSchedule(Integer.parseInt(desiredDate.substring(4, 8) + String.valueOf(intervalArray[x][j][0]))); } } diff --git a/app/src/main/java/com/example/oplogy/FirestoreReception.java b/app/src/main/java/com/example/oplogy/FirestoreReception.java index b7d8581..1082f09 100644 --- a/app/src/main/java/com/example/oplogy/FirestoreReception.java +++ b/app/src/main/java/com/example/oplogy/FirestoreReception.java @@ -11,7 +11,6 @@ import com.google.firebase.firestore.QueryDocumentSnapshot; import com.google.firebase.firestore.QuerySnapshot; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -24,7 +23,7 @@ public class FirestoreReception { } //firestoreから受け取ったデータを束ねるためのマップ - public ListmyDataList = new ArrayList<>(); + public List myDataList = new ArrayList<>(); //ClassIdを引数にデータの作成を行う public void getDocumentsByClassId(int classId) { @@ -61,7 +60,7 @@ public class FirestoreReception { //取得したデータをログ表示 - for(MyDataClass data :myDataList){ + for (MyDataClass data : myDataList) { Log.i("FirestoreReceptiond", "data: " + data.toString()); } } else { @@ -72,12 +71,14 @@ public class FirestoreReception { }); } + //Dataのリストのサイズを返す - public int getMyDataListSize(){ + public int getMyDataListSize() { return myDataList.size(); } + //Dataのリストを返す - public List getMyDataList(){ + public List getMyDataList() { return myDataList; } } diff --git a/app/src/main/java/com/example/oplogy/GeoCoder.java b/app/src/main/java/com/example/oplogy/GeoCoder.java index c09996a..ceaaa81 100644 --- a/app/src/main/java/com/example/oplogy/GeoCoder.java +++ b/app/src/main/java/com/example/oplogy/GeoCoder.java @@ -34,7 +34,7 @@ public class GeoCoder { Log.d("FirestoreReception", "firstDay: " + firstDay.get(0)); Log.d("FirestoreReception", "firstDay: " + firstDay.get(1)); Log.d("FirestoreReception", "studentNumber: " + studentNumber); - Log.d("FirestoreReception", "latLng: "+latLng ); + Log.d("FirestoreReception", "latLng: " + latLng); } catch (NullPointerException e) { Log.e("NullPointerException", "getの中身がnull" + e); diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java index 6c8f7e2..fea01fa 100644 --- a/app/src/main/java/com/example/oplogy/MainActivity.java +++ b/app/src/main/java/com/example/oplogy/MainActivity.java @@ -131,11 +131,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } else { latch.countDown(); } + }); }); executor.execute(() -> { - List myDataList = null; while (myDataList == null) { myDataList = firestoreReception.getMyDataList(); @@ -150,6 +150,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe CreateRoot createRoot = new CreateRoot(MainActivity.this); Boolean notDuplicates=createRoot.receiveData(myDataList); latch.countDown(); + if(notDuplicates){ Log.d("MainActivity","スケジュール作成成功"); }else{ @@ -221,6 +222,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe public void onClick(DialogInterface dialog, int which) { latch.countDown(); } + }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override diff --git a/app/src/main/java/com/example/oplogy/MyDataClass.java b/app/src/main/java/com/example/oplogy/MyDataClass.java index 4ffe5c3..c3d4d11 100644 --- a/app/src/main/java/com/example/oplogy/MyDataClass.java +++ b/app/src/main/java/com/example/oplogy/MyDataClass.java @@ -200,27 +200,28 @@ public class MyDataClass { } public void setSecondDayStartDateString(String secondDayStartDateString) { - this.secondDayStartDateString=secondDayStartDateString; + this.secondDayStartDateString = secondDayStartDateString; } public void setSecondDayEndDateString(String secondDayEndDateString) { - this.secondDayEndDateString=secondDayEndDateString; - } - public void setSecondDayTimezone(Long secondDayTimezone) { - this.secondDayTimezone=secondDayTimezone; + this.secondDayEndDateString = secondDayEndDateString; } - public Long getSecondDayTimezone(){ + public void setSecondDayTimezone(Long secondDayTimezone) { + this.secondDayTimezone = secondDayTimezone; + } + + public Long getSecondDayTimezone() { return secondDayTimezone; } public void setSecondDayParentStartTimeString(String secondDayParentStartTimeString) { - this.secondDayParentStartTimeString=secondDayParentStartTimeString; + this.secondDayParentStartTimeString = secondDayParentStartTimeString; } public void setSecondDayParentEndTimeString(String secondDayParentEndTimeString) { - this.secondDayParentEndTimeString=secondDayParentEndTimeString; + this.secondDayParentEndTimeString = secondDayParentEndTimeString; } public String getSecondDayParentStartTimeString() { @@ -228,10 +229,10 @@ public class MyDataClass { } public String getSecondDayParentEndTimeString() { - return secondDayParentEndTimeString; + return secondDayParentEndTimeString; } public String getSecondDayStartDateString() { - return secondDayStartDateString; + return secondDayStartDateString; } } From 6bd8a4ab81d5f75acf208be24022af037f29f7d0 Mon Sep 17 00:00:00 2001 From: it232115 Date: Fri, 28 Jun 2024 10:21:32 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=95=E3=83=AA?= =?UTF-8?q?=E3=82=AF=E3=83=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/oplogy/MainActivity.java | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java index 26ed954..0b895e6 100644 --- a/app/src/main/java/com/example/oplogy/MainActivity.java +++ b/app/src/main/java/com/example/oplogy/MainActivity.java @@ -85,7 +85,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } -// クリック処理 + // クリック処理 @Override public void onClick(View view) { // ID作成のクリック処理 @@ -187,10 +187,26 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe // タスク2: Firestoreからデータを取得 executor.execute(() -> { - List myDataList = firestoreReception.getMyDataList(); + List myDataList = null; + while (myDataList == null) { + myDataList = firestoreReception.getMyDataList(); + try { + Thread.sleep(3000); + Log.d("MainActivity","myDataList"+ myDataList.size()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + Log.d("MainActivity","myDataList"+ myDataList.size()); CreateRoot createRoot = new CreateRoot(MainActivity.this); - createRoot.receiveData(myDataList); + Boolean notDuplicates=createRoot.receiveData(myDataList); latch.countDown(); + + if(notDuplicates){ + Log.d("MainActivity","スケジュール作成成功"); + }else{ + showErrorDialog(latch); + } }); new Thread(() -> { @@ -226,7 +242,25 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe }) .show(); } + public void showErrorDialog(CountDownLatch latch) { + new AlertDialog.Builder(MainActivity.this) + .setTitle("警告") + .setMessage("保護者の重複が重大でルート作成ができません。調整してください") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + latch.countDown(); + } + }) + .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .show(); + } //Main private ArrayList getSubmissionStudents() { @@ -279,4 +313,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } } -} \ No newline at end of file +} + + + +