Проверьте, находится ли следующий вход для сохранения в этих диапазонах - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть эти временные диапазоны в моей базе данных.Теперь, что я хотел сделать, если мой следующий вход находится между этими токовыми входами, он не должен быть вставлен.

Диапазоны времени внутри базы данных:

Time ranges inside database
Моя проблемав том, что когда моя логика запускает даже логику, она все равно вставляет данные в мою базу данных.Что мне делать?

Входные данные между содержащимися временными диапазонами в базе данных:

Input data between contained time ranges in database
Это то, что происходит в операторе else, вставляющем конфликтующее время, он также вставляет дважды

This is what happens in else statement inserting conflicted time

Это код для оператора else

@Override
public void saveFinalSchedule(String day, String timeStart, String timeEnd,
                              String venue, String department,
                              String lastName, String firstName, String midName,
                              OnSavingScheduleListener listener) {
    Schedule schedule = new Schedule();
    schedule.setDay(day);
    schedule.setTimeStart(timeStart);
    schedule.setTimeEnd(timeEnd);
    schedule.setVenue(venue);
    schedule.setDepartment(department);
    schedule.setFacultyName(lastName + ", " + firstName + " " + midName);
    schedule.setTerm("2nd Semester");
    schedule.setAcademicYear("2018 - 2019");

    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = firebaseDatabase.getReference(FACULTY)
            .child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(CONSULTATION_SCHEDULES);
    databaseReference.keepSynced(true);

    databaseReference.child(day).push().setValue(schedule)
            .addOnCompleteListener(((FragmentActivity) context), new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        listener.onSavingSuccess(day + " Schedule created successfully.");
                    } else {
                        listener.onSavingFailure(task.getException().getMessage());
                    }
                }
            });
}

Код для условий

FirebaseDatabase database = FirebaseDatabase.getInstance();
                        DatabaseReference scheduleReference = database.getReference(FACULTY).child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(CONSULTATION_SCHEDULES);
                        scheduleReference.keepSynced(true);

 scheduleReference.child(day).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                if (dataSnapshot.exists()) {
                                    Iterable<DataSnapshot> snapshots = dataSnapshot.getChildren();
                                    for (DataSnapshot snapshot : snapshots) {
                                        timeSchedStart = snapshot.child("timeStart").getValue(String.class);
                                        timeSchedEnd = snapshot.child("timeEnd").getValue(String.class);
                                        Date schedStart = new Date(Long.parseLong(timeSchedStart));
                                        Date schedEnd = new Date(Long.parseLong(timeSchedEnd));

                                        DateTime containedStartTime = new DateTime(schedStart);
                                        DateTime containedEndTime = new DateTime(schedEnd);
                                        DateTime inputStartTime = new DateTime(startTime);
                                        DateTime inputEndTime = new DateTime(endTime);
                                        Interval interval = new Interval(containedStartTime, containedEndTime);
                                        boolean containsStartTime = interval.contains(inputStartTime);
                                        boolean containsEndTime = interval.contains(inputEndTime);

                                        Log.d("logContainedStartTime", String.valueOf(containedStartTime.toLocalTime()));
                                        Log.d("logInputStartTime", String.valueOf(inputStartTime.toLocalTime()));
                                        Log.d("logInputEndTime", String.valueOf(inputEndTime.toLocalTime()));
                                        Log.d("logContainedEndTime", String.valueOf(containedEndTime.toLocalTime()));
                                        //containsStartTime || containsEndTime

                                        if (startTime.before(schedEnd) && endTime.after(schedStart)) {
                                            listener.onSavingFailure(
                                                    "Conflict time between "
                                                            + timeFormat12hr.format(schedStart.getTime()) + " and "
                                                            + timeFormat12hr.format(schedEnd.getTime()));
                                            Log.d("isTimeBetweenTwoTime", "onDataChange: this logic fires");
                                            break;
                                        }
                                        else if (containsStartTime || containsEndTime) {//listener.onSavingFailure("Duplicate");
                                            listener.onSavingFailure(
                                                    "Conflict time between "
                                                            + timeFormat12hr.format(schedStart.getTime())
                                                            + " and " + timeFormat12hr.format(schedEnd.getTime()));
                                            Log.d("intervals", "onDataChange: this logic fires");
                                            break;
                                        }
                                        else if (isOverlapping(schedStart, schedEnd, startTime, endTime)){
                                            listener.onSavingFailure(
                                                    "Conflict time between "
                                                            + timeFormat12hr.format(schedStart.getTime())
                                                            + " and " + timeFormat12hr.format(schedEnd.getTime()));
                                            Log.d("overlapping", "onDataChange: this logic fires");
                                            break;
                                        }
                                        else {
                                            saveFinalSchedule(day,
                                                    String.valueOf(startTime.getTime()), String.valueOf(endTime.getTime()),
                                                    venue, department, lastName, firstName, midName, listener);
                                        }
                                    }

                                } else if (!dataSnapshot.exists()){
                                    saveFinalSchedule(day,
                                            String.valueOf(startTime.getTime()), String.valueOf(endTime.getTime()),
                                            venue, department, lastName, firstName, midName, listener);
                                }
                            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...