package Ġbr . com . cart ola . metrics . service Ċ Ċ import Ġbr . com . cart ola . metrics . model . An al ise Part ida Ċ import Ġbr . com . cart ola . metrics . model . An al ise Rod ada Ċ import Ġbr . com . cart ola . metrics . model . Cl ube Ċ import Ġbr . com . cart ola . metrics . model . cart ola . Part idas Response Ċ import Ġbr . com . cart ola . metrics . repository . An al ise Rod ada Repository Ċ import Ġbr . com . cart ola . metrics . repository . Cl ube Repository Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠAn al ise Rod ada Service ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġanal ise Repository : ĠAn al ise Rod ada Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcl ube Repository : ĠCl ube Repository ) Ġ{ ĊĊĠĠĠ Ġfun Ġger ar An al ise ( part ida Response : ĠPart idas Response ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcl ubes Ġ= Ġcl ube Repository . findAll () ĊĊĠĠĠĠĠĠĠ Ġvar Ġanal ise Ġ= ĠAn al ise Rod ada () ĊĠĠĠĠĠĠĠ Ġanal ise . rod ada _ id Ġ= Ġpart ida Response . rod ada ĊĠĠĠĠĠĠĠ Ġpart ida Response . part idas . forEach Ġ{ Ġp Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcl ube C asa Ġ= Ġcl ubes . first Ġ{ Ġc Ġ-> Ġc . id Ġ== Ġp . cl ube _ cas a _ id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcl ube Vis i Ġ= Ġcl ubes . first Ġ{ Ġc Ġ-> Ġc . id Ġ== Ġp . cl ube _ visit ante _ id Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanal ise Part ida Ġ= ĠAn al ise Part ida () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise Part ida . cl ube C asa Ġ= Ġcl ube C asa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise Part ida . cl ube Visit ante Ġ= Ġcl ube Vis i ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise Part ida . valid a Ġ= Ġp . valid a ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise Part ida . local Ġ= Ġp . local ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise Part ida . data Ġ= Ġp . part ida _ data ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdif Ġ= Ġcalc ular D if eren ca P ont os ( cas a Ġ= Ġcl ube C asa , Ġvisit ante Ġ= Ġcl ube Vis i ) Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise Part ida . se lo C asa Ġ= Ġdif Ġ> Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise Part ida . dif eren ca P ont os Ġ= ĠMath . abs ( dif ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanal ise . part idas . add ( anal ise Part ida ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcalcul a V ant agem ( anal ise . part idas ) ĊĊĠĠĠĠĠĠĠ Ġanal ise Repository . save ( anal ise ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalc ular D if eren ca P ont os ( cas a : ĠCl ube , Ġvisit ante : ĠCl ube ): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġro d adas An alis ar Ġ= Ġ 6 ĊĊĠĠĠĠĠĠĠ Ġval Ġpont os C asa Ġ= Ġcas a . rod adas . filter Ġ{ it . valid a }. take Last ( rod adas An alis ar ). sum By Double Ġ{ Ġit . p ont os Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcas a . rod adas . filter Ġ{ Ġit . valid a Ġ&& Ġit . cas a Ġ}. take Last ( rod adas An alis ar ). sum By Double Ġ{ Ġit . p ont os Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpont os Vis i Ġ= Ġvisit ante . rod adas . filter Ġ{ it . valid a }. take Last ( rod adas An alis ar ). sum By Double Ġ{ Ġit . p ont os Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit ante . rod adas . filter Ġ{ Ġit . valid a Ġ&& Ġ! it . cas a Ġ}. take Last ( rod adas An alis ar ). sum By Double Ġ{ Ġit . p ont os Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpont os C asa Ġ- Ġpont os Vis i ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalcul a V ant agem ( part idas : ĠList < An al ise Part ida >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Diff Ġ= Ġpart idas . map Ġ{ ĠMath . abs ( it . dif eren ca P ont os ) Ġ}. sorted Descending (). first () ĊĊĠĠĠĠĠĠĠ Ġpart idas . filter { it . valid a }. forEach { Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( p . se lo C asa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . v ant agem C asa Ġ= Ġp . dif eren ca P ont os Ġ/ Ġmax Diff Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . v ant agem Visit ante Ġ= ĠMath . abs ( p . dif eren ca P ont os ) Ġ/ Ġmax Diff Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }