Skip to content

Commit

Permalink
Export mission - refactor use case
Browse files Browse the repository at this point in the history
  • Loading branch information
lwih committed Mar 5, 2024
1 parent b2b7415 commit 3f1e3c5
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,16 @@ interface IRpnExportRepository {
id: String,
startDateTime: ZonedDateTime?,
endDateTime: ZonedDateTime?,
presenceMer: Map<String, Long>,
presenceQuai: Map<String, Long>,
indisponibilite: Map<String, Long>,
nbJoursMer: Long,
dureeMission: Long,
presenceMer: Map<String, Int>,
presenceQuai: Map<String, Int>,
indisponibilite: Map<String, Int>,
nbJoursMer: Int,
dureeMission: Int,
patrouilleEnv: Int,
patrouilleMigrant: Int,
distanceMilles: Float?,
goMarine: Float?,
essence: Float?,
crew: List<MissionCrewEntity>

)
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ class ExportMission(
private val getStatusDurations: GetStatusDurations,
) {

private inline fun List<GetStatusDurations.ActionStatusWithDuration>.findDuration(predicate: (GetStatusDurations.ActionStatusWithDuration) -> Boolean): Int {
return find(predicate)?.value?.toInt() ?: 0
}

fun exportOdt(missionId: Int) {

val mission: MissionEntity? = getMissionById.execute(missionId = missionId)
Expand All @@ -34,46 +38,43 @@ class ExportMission(
val statuses = navActionStatus.findAllByMissionId(missionId = missionId).sortedBy { it.startDateTimeUtc }
.map { it.toActionStatusEntity() }


val durations = getStatusDurations.computeActionDurations(
missionStartDateTime = mission.startDateTimeUtc,
missionEndDateTime = mission.endDateTimeUtc,
actions = statuses,
)

val presenceMer = mutableMapOf(
"navigationEffective" to (durations.find { it.status == ActionStatusType.NAVIGATING }?.value ?: 0),
"mouillage" to (durations.find { it.status === ActionStatusType.ANCHORED }?.value ?: 0),
val atSeaDurations = mapOf(
"navigationEffective" to durations.findDuration { it.status == ActionStatusType.NAVIGATING },
"mouillage" to durations.findDuration { it.status == ActionStatusType.ANCHORED },
"total" to 0
)

val totalPresenceMer = presenceMer.values.sum()
presenceMer["total"] = totalPresenceMer
).toMutableMap()
atSeaDurations["total"] = atSeaDurations.values.sum()


val presenceQuai = mutableMapOf(
"maintenance" to (durations.find { it.reason === ActionStatusReason.MAINTENANCE }?.value ?: 0),
"meteo" to (durations.find { it.reason === ActionStatusReason.WEATHER }?.value ?: 0),
"representation" to (durations.find { it.reason === ActionStatusReason.REPRESENTATION }?.value ?: 0),
"adminFormation" to (durations.find { it.reason === ActionStatusReason.ADMINISTRATION }?.value ?: 0),
"autre" to (durations.find { it.reason === ActionStatusReason.OTHER }?.value ?: 0),
"contrPol" to (durations.find { it.reason === ActionStatusReason.HARBOUR_CONTROL }?.value ?: 0),
val dockingDurations = mapOf(
"maintenance" to durations.findDuration { it.reason == ActionStatusReason.MAINTENANCE },
"meteo" to durations.findDuration { it.reason == ActionStatusReason.WEATHER },
"representation" to durations.findDuration { it.reason == ActionStatusReason.REPRESENTATION },
"adminFormation" to durations.findDuration { it.reason == ActionStatusReason.ADMINISTRATION },
"autre" to durations.findDuration { it.reason == ActionStatusReason.OTHER },
"contrPol" to durations.findDuration { it.reason == ActionStatusReason.HARBOUR_CONTROL },
"total" to 0
)

val totalQuai = presenceQuai.values.sum()
presenceQuai["total"] = totalQuai
).toMutableMap()
dockingDurations["total"] = dockingDurations.values.sum()

val indisponibilite = mutableMapOf(
"technique" to (durations.find { it.reason === ActionStatusReason.TECHNICAL }?.value ?: 0),
"personnel" to (durations.find { it.reason === ActionStatusReason.PERSONNEL }?.value ?: 0),
"total" to 78
)

val totalIndisponibilite = indisponibilite.values.sum()
indisponibilite["total"] = totalIndisponibilite

val dureeMission = totalPresenceMer + totalQuai + totalIndisponibilite
val unavailabilityDurations = mapOf(
"technique" to durations.findDuration { it.reason == ActionStatusReason.TECHNICAL },
"personnel" to durations.findDuration { it.reason == ActionStatusReason.PERSONNEL },
"total" to 0
).toMutableMap()
unavailabilityDurations["total"] = unavailabilityDurations.values.sum()

val missionDuration =
(atSeaDurations["total"] ?: 0) + (dockingDurations["total"] ?: 0) + (unavailabilityDurations["total"]
?: 0)


if (generalInfo != null) {
Expand All @@ -82,11 +83,11 @@ class ExportMission(
id = "pam" + mission.id,
startDateTime = mission.startDateTimeUtc,
endDateTime = mission.endDateTimeUtc,
presenceMer = presenceMer,
presenceQuai = presenceQuai,
indisponibilite = indisponibilite,
presenceMer = atSeaDurations,
presenceQuai = dockingDurations,
indisponibilite = unavailabilityDurations,
nbJoursMer = 4,
dureeMission = dureeMission,
dureeMission = missionDuration,
patrouilleEnv = 2,
patrouilleMigrant = 4,
distanceMilles = generalInfo.distanceInNauticalMiles,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@ import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpRequest.BodyPublishers
import java.net.http.HttpResponse.BodyHandlers
import java.time.ZonedDateTime

@Repository
class APIRpnExportRepository(
private val mapper: ObjectMapper
): IRpnExportRepository {
) : IRpnExportRepository {
override fun exportOdt(
service: String?,
id: String,
startDateTime: String?,
endDateTime: String?,
startDateTime: ZonedDateTime?,
endDateTime: ZonedDateTime?,
presenceMer: Map<String, Int>,
presenceQuai: Map<String, Int>,
indisponibilite: Map<String, Int>,
Expand All @@ -37,21 +38,21 @@ class APIRpnExportRepository(
val client = HttpClient.newHttpClient()

val content = RpnExportOdtOutput(
service,
id,
startDateTime,
endDateTime,
presenceMer,
presenceQuai,
indisponibilite,
nbJoursMer,
dureeMission,
patrouilleEnv,
patrouilleMigrant,
distanceMilles,
goMarine,
essence,
crew
service = service,
id = id,
startDateTime = startDateTime?.toString(),
endDateTime = endDateTime?.toString(),
presenceMer = presenceMer,
presenceQuai = presenceQuai,
indisponibilite = indisponibilite,
nbJoursMer = nbJoursMer,
dureeMission = dureeMission,
patrouilleEnv = patrouilleEnv,
patrouilleMigrant = patrouilleMigrant,
distanceMilles = distanceMilles,
goMarine = goMarine,
essence = essence,
crew = crew
)

val gson = Gson();
Expand Down

0 comments on commit 3f1e3c5

Please sign in to comment.