Añadir los 16.000 kms de margen para el cambio de aceite
This commit is contained in:
@@ -307,58 +307,61 @@ class MainActivity : AppCompatActivity() {
|
||||
Class.forName("com.mysql.jdbc.Driver")
|
||||
val connection = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPass)
|
||||
|
||||
// 1. Buscamos el último cambio de aceite (lógica n8n)
|
||||
val rsOil = connection.createStatement().executeQuery(
|
||||
"SELECT kms FROM mantenimiento WHERE observaciones LIKE '%aceite%' ORDER BY fecha DESC LIMIT 1"
|
||||
)
|
||||
var ultimoCambio = 0
|
||||
if (rsOil.next()) ultimoCambio = rsOil.getInt("kms")
|
||||
|
||||
val rsStats = connection.createStatement().executeQuery(
|
||||
"SELECT MIN(fecha) as f_min, MIN(kms) as k_min, MAX(fecha) as f_max, MAX(kms) as k_max FROM mantenimiento"
|
||||
"SELECT kms, fecha FROM mantenimiento WHERE observaciones LIKE '%aceite%' ORDER BY fecha DESC LIMIT 1"
|
||||
)
|
||||
|
||||
var fechaEstimada: String? = null
|
||||
var restan = 0
|
||||
var ultimoCambioKms = 0
|
||||
var fechaUltimoCambio: Date? = null
|
||||
|
||||
if (rsStats.next() && ultimoCambio > 0) {
|
||||
val fMin = rsStats.getTimestamp("f_min")
|
||||
val kMin = rsStats.getInt("k_min")
|
||||
val fMax = rsStats.getTimestamp("f_max")
|
||||
val kMax = rsStats.getInt("k_max")
|
||||
if (rsOil.next()) {
|
||||
ultimoCambioKms = rsOil.getInt("kms")
|
||||
fechaUltimoCambio = rsOil.getTimestamp("fecha")
|
||||
}
|
||||
|
||||
if (fMin != null && fMax != null && kMax > kMin) {
|
||||
val diffMs = fMax.time - fMin.time
|
||||
val diffDays = diffMs / (1000 * 60 * 60 * 24)
|
||||
// 2. Kilometraje actual
|
||||
val rsActual = connection.createStatement().executeQuery(
|
||||
"SELECT kms, fecha FROM mantenimiento ORDER BY fecha DESC LIMIT 1"
|
||||
)
|
||||
|
||||
if (diffDays > 0) {
|
||||
val kmPorDia = (kMax - kMin).toDouble() / diffDays
|
||||
val distanciaPuertollano = 320
|
||||
restan = (ultimoCambio + 15000 - distanciaPuertollano) - kMax
|
||||
var kmActual = 0
|
||||
var fechaActual = Date()
|
||||
|
||||
if (restan > 0 && kmPorDia > 0) {
|
||||
val diasFaltan = (restan / kmPorDia).toLong()
|
||||
val calendar = Calendar.getInstance()
|
||||
calendar.add(Calendar.DAY_OF_YEAR, diasFaltan.toInt())
|
||||
fechaEstimada = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).format(calendar.time)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (restan <= 0) {
|
||||
val distanciaPuertollano = 320
|
||||
restan = (ultimoCambio + 15000 - distanciaPuertollano) - kMax
|
||||
}
|
||||
if (rsActual.next()) {
|
||||
kmActual = rsActual.getInt("kms")
|
||||
fechaActual = rsActual.getTimestamp("fecha")
|
||||
}
|
||||
|
||||
connection.close()
|
||||
|
||||
runOnUiThread {
|
||||
if (ultimoCambio > 0) {
|
||||
if (ultimoCambioKms > 0 && fechaUltimoCambio != null) {
|
||||
val INTERVALO_CAMBIO = 16000 // Tu configuración de n8n
|
||||
val distanciaPuertollano = 320
|
||||
|
||||
// Lógica de n8n: Calcular km diarios desde el último cambio hasta hoy
|
||||
val diffMs = fechaActual.time - fechaUltimoCambio.time
|
||||
val diasPasados = Math.max(1L, diffMs / (1000 * 60 * 60 * 24))
|
||||
val kmsDesdeCambio = kmActual - ultimoCambioKms
|
||||
val kmPorDia = Math.max(0.1, kmsDesdeCambio.toDouble() / diasPasados)
|
||||
|
||||
// Cálculo final restando el margen para el viaje a Puertollano
|
||||
val restan = (ultimoCambioKms + INTERVALO_CAMBIO - distanciaPuertollano) - kmActual
|
||||
|
||||
var fechaEstimadaStr = "---"
|
||||
if (restan > 0 && kmPorDia > 0) {
|
||||
val diasParaCambio = (restan / kmPorDia).toLong()
|
||||
val calendar = Calendar.getInstance()
|
||||
calendar.add(Calendar.DAY_OF_YEAR, diasParaCambio.toInt())
|
||||
fechaEstimadaStr = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).format(calendar.time)
|
||||
}
|
||||
|
||||
if (restan <= 0) {
|
||||
tvPrediction.text = getString(R.string.urgent_oil_change, Math.abs(restan))
|
||||
tvPrediction.setTextColor(android.graphics.Color.RED)
|
||||
} else {
|
||||
val fechaTexto = fechaEstimada ?: "---"
|
||||
tvPrediction.text = getString(R.string.next_oil_change, restan, fechaTexto)
|
||||
tvPrediction.text = getString(R.string.next_oil_change, restan, fechaEstimadaStr)
|
||||
tvPrediction.setTextColor(android.graphics.Color.parseColor("#4CAF50"))
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user