mirror of
https://github.com/dyrkin/luxmed-bot.git
synced 2025-12-25 23:03:43 +01:00
fixed dateTime issue
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
|
||||
package com.lbs.api.json
|
||||
|
||||
import com.lbs.api.json.model.SerializableJsonObject
|
||||
import com.lbs.api.json.model.{LuxmedFunnyDateTime, SerializableJsonObject}
|
||||
import com.lbs.common.Logger
|
||||
import org.json4s._
|
||||
import org.json4s.jackson.JsonMethods._
|
||||
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.time.{LocalDateTime, LocalTime, ZonedDateTime}
|
||||
import scala.util.Try
|
||||
|
||||
|
||||
object JsonSerializer extends Logger {
|
||||
@@ -33,7 +34,19 @@ object JsonSerializer extends Logger {
|
||||
}
|
||||
))
|
||||
|
||||
private implicit val formats: Formats = DefaultFormats.withStrictArrayExtraction + zonedDateTimeSerializer + localTimeSerializer + localDateTimeSerializer
|
||||
private val luxmedFunnyDateTimeSerializer = new CustomSerializer[LuxmedFunnyDateTime](_ => ( {
|
||||
case JString(str) =>
|
||||
Try(LocalDateTime.parse(str))
|
||||
.map(v => LuxmedFunnyDateTime(dateTimeLocal = Some(v)))
|
||||
.recoverWith{case _ => Try(ZonedDateTime.parse(str)).map(v => LuxmedFunnyDateTime(dateTimeTz = Some(v)))}
|
||||
.getOrElse(sys.error(s"can't parse date $str"))
|
||||
}, {
|
||||
case time: LocalDateTime => JString(time.toString)
|
||||
case time: ZonedDateTime => JString(time.toString)
|
||||
}
|
||||
))
|
||||
|
||||
private implicit val formats: Formats = DefaultFormats.withStrictArrayExtraction + zonedDateTimeSerializer + localTimeSerializer + localDateTimeSerializer + luxmedFunnyDateTimeSerializer
|
||||
|
||||
def extract[T](jsonString: String)(implicit mf: scala.reflect.Manifest[T]): T = {
|
||||
parse(jsonString).camelizeKeys.extract[T]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
package com.lbs.api.json.model
|
||||
|
||||
import java.time.LocalDateTime
|
||||
import java.time.{LocalDateTime, ZonedDateTime}
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -28,7 +28,7 @@ import java.time.LocalDateTime
|
||||
*"clinicGroup": "ul. Fabryczna 6",
|
||||
*"clinicGroupId": 11,
|
||||
*"clinicId": 2222,
|
||||
*"dateTimeFrom": "2021-05-21T18:45:00",
|
||||
*"dateTimeFrom": "2021-05-21T18:45:00", or 2021-05-21T18:45:00+02:00 sometimes!!!!
|
||||
*"dateTimeTo": "2021-05-21T19:00:00",
|
||||
*"doctor": {
|
||||
*"academicTitle": "lek. med.",
|
||||
@@ -126,9 +126,13 @@ case class AdditionalData(isPreparationRequired: Boolean, preparationItems: List
|
||||
|
||||
case class TermsForDay(day: LocalDateTime, terms: List[Term]) extends SerializableJsonObject
|
||||
|
||||
case class Term(clinic: String, clinicId: Long, dateTimeFrom: LocalDateTime, dateTimeTo: LocalDateTime, doctor: Doctor,
|
||||
case class Term(clinic: String, clinicId: Long, dateTimeFrom: LuxmedFunnyDateTime, dateTimeTo: LuxmedFunnyDateTime, doctor: Doctor,
|
||||
impedimentText: String, isAdditional: Boolean, isImpediment: Boolean, isTelemedicine: Boolean, roomId: Long,
|
||||
scheduleId: Long, serviceId: Long) extends SerializableJsonObject
|
||||
|
||||
case class TermExt(additionalData: AdditionalData, term: Term) extends SerializableJsonObject
|
||||
|
||||
case class LuxmedFunnyDateTime(dateTimeTz: Option[ZonedDateTime] = None, dateTimeLocal: Option[LocalDateTime] = None) {
|
||||
def get: LocalDateTime = dateTimeLocal.getOrElse(dateTimeTz.map(_.toLocalDateTime).get)
|
||||
}
|
||||
|
||||
|
||||
@@ -262,7 +262,7 @@ object En extends Lang {
|
||||
|${capitalizeFirstLetter(service)}: ${monitoring.serviceName}
|
||||
|${capitalizeFirstLetter(clinic)}: ${term.term.clinic}
|
||||
|${capitalizeFirstLetter(city)}: ${monitoring.cityName}
|
||||
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom)}
|
||||
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom.get)}
|
||||
|
|
||||
|""".stripMargin
|
||||
|
||||
|
||||
@@ -262,7 +262,7 @@ object Pl extends Lang {
|
||||
|${capitalizeFirstLetter(service)}: ${monitoring.serviceName}
|
||||
|${capitalizeFirstLetter(clinic)}: ${term.term.clinic}
|
||||
|${capitalizeFirstLetter(city)}: ${monitoring.cityName}
|
||||
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom)}
|
||||
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom.get)}
|
||||
|
|
||||
|""".stripMargin
|
||||
|
||||
|
||||
@@ -261,7 +261,7 @@ object Ua extends Lang {
|
||||
|${capitalizeFirstLetter(service)}: ${monitoring.serviceName}
|
||||
|${capitalizeFirstLetter(clinic)}: ${term.term.clinic}
|
||||
|${capitalizeFirstLetter(city)}: ${monitoring.cityName}
|
||||
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom)}
|
||||
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom.get)}
|
||||
|
|
||||
|""".stripMargin
|
||||
|
||||
|
||||
@@ -56,8 +56,8 @@ class ApiService extends SessionSupport {
|
||||
)
|
||||
termsEither.map { terms =>
|
||||
terms.filter { term =>
|
||||
val time = term.term.dateTimeFrom.toLocalTime
|
||||
val date = term.term.dateTimeFrom
|
||||
val time = term.term.dateTimeFrom.get.toLocalTime
|
||||
val date = term.term.dateTimeFrom.get
|
||||
(doctorId.isEmpty || doctorId.contains(term.term.doctor.id)) &&
|
||||
(clinicId.isEmpty || clinicId.contains(term.term.clinicId)) &&
|
||||
(time == timeFrom || time == timeTo || (time.isAfter(timeFrom) && time.isBefore(timeTo))) &&
|
||||
|
||||
@@ -221,7 +221,7 @@ class MonitoringService extends Logger {
|
||||
monitoring.doctorId, monitoring.dateFrom.toLocalDateTime, monitoring.dateTo.toLocalDateTime, timeFrom = monitoring.timeFrom, timeTo = monitoring.timeTo)
|
||||
termsEither match {
|
||||
case Right(terms) =>
|
||||
val termMaybe = terms.find(term => term.term.scheduleId == scheduleId && minutesSinceBeginOf2018(term.term.dateTimeFrom) == time)
|
||||
val termMaybe = terms.find(term => term.term.scheduleId == scheduleId && minutesSinceBeginOf2018(term.term.dateTimeFrom.get) == time)
|
||||
termMaybe match {
|
||||
case Some(term) =>
|
||||
bookAppointment(term, monitoring, rebookIfExists = true)
|
||||
|
||||
@@ -53,14 +53,14 @@ package object util {
|
||||
val (reservationLocktermResponse, termExt) = data
|
||||
val term = termExt.term
|
||||
ReservationConfirmRequest(
|
||||
date = term.dateTimeFrom.minusHours(2).toString + ":00.000Z",
|
||||
date = term.dateTimeFrom.get.minusHours(2).toString + ":00.000Z",
|
||||
doctorId = term.doctor.id,
|
||||
facilityId = term.clinicId,
|
||||
roomId = term.roomId,
|
||||
scheduleId = term.scheduleId,
|
||||
serviceVariantId = term.serviceId,
|
||||
temporaryReservationId = reservationLocktermResponse.value.temporaryReservationId,
|
||||
timeFrom = term.dateTimeFrom.toLocalTime,
|
||||
timeFrom = term.dateTimeFrom.get.toLocalTime,
|
||||
valuation = reservationLocktermResponse.value.valuations.head
|
||||
)
|
||||
}
|
||||
@@ -74,7 +74,7 @@ package object util {
|
||||
ReservationChangetermRequest(
|
||||
existingReservationId = existingReservationId,
|
||||
term = NewTerm(
|
||||
date = term.dateTimeFrom.minusHours(2).toString + ":00.000Z",
|
||||
date = term.dateTimeFrom.get.minusHours(2).toString + ":00.000Z",
|
||||
doctorId = term.doctor.id,
|
||||
facilityId = term.clinicId,
|
||||
parentReservationId = existingReservationId,
|
||||
@@ -83,7 +83,7 @@ package object util {
|
||||
scheduleId = term.scheduleId,
|
||||
serviceVariantId = term.serviceId,
|
||||
temporaryReservationId = reservationLocktermResponse.value.temporaryReservationId,
|
||||
timeFrom = term.dateTimeFrom.toLocalTime,
|
||||
timeFrom = term.dateTimeFrom.get.toLocalTime,
|
||||
valuation = reservationLocktermResponse.value.valuations.head
|
||||
)
|
||||
)
|
||||
@@ -95,7 +95,7 @@ package object util {
|
||||
val term = termExt.term
|
||||
val additionalData = termExt.additionalData
|
||||
ReservationLocktermRequest(
|
||||
date = term.dateTimeFrom.minusHours(2).toString + ":00.000Z",
|
||||
date = term.dateTimeFrom.get.minusHours(2).toString + ":00.000Z",
|
||||
doctor = term.doctor,
|
||||
doctorId = term.doctor.id,
|
||||
facilityId = term.clinicId,
|
||||
@@ -108,8 +108,8 @@ package object util {
|
||||
roomId = term.roomId,
|
||||
scheduleId = term.scheduleId,
|
||||
serviceVariantId = term.serviceId,
|
||||
timeFrom = term.dateTimeFrom.toLocalTime.toString,
|
||||
timeTo = term.dateTimeTo.toLocalTime.toString
|
||||
timeFrom = term.dateTimeFrom.get.toLocalTime.toString,
|
||||
timeTo = term.dateTimeTo.get.toLocalTime.toString
|
||||
)
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ package object util {
|
||||
|
||||
def formatDateTime(date: ZonedDateTime, locale: Locale): String = date.format(DateTimeFormat(locale))
|
||||
|
||||
def formatDateTime(date: LocalDateTime, locale: Locale): String = date.format(DateTimeFormat(locale))
|
||||
def formatDateTime(date: LuxmedFunnyDateTime, locale: Locale): String = date.get.format(DateTimeFormat(locale))
|
||||
|
||||
private val EpochMinutesTillBeginOf2022: Long = epochMinutes(LocalDateTime.of(2022, 1, 1, 0, 0, 0, 0))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user