package Ġio . ple o . ant ae us . core . services Ċ Ċ import Ġio . ple o . ant ae us . core . tasks . Process In voices Task Ċ import Ġio . ple o . ant ae us . core . tasks . Retry Failed In voices Task Ċ import Ġio . ple o . ant ae us . core . tasks . Schedule Pending In voices Task Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Scheduled ExecutorService Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠTask Scheduler Service ( ĊĠĠĠ Ġprivate Ġval Ġinvoice Service : ĠInvoice Service , ĊĠĠĠ Ġprivate Ġval Ġbilling Service : ĠBilling Service , ĊĠĠĠ Ġprivate Ġval Ġkafka Service : ĠKafka Service Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġscheduler : ĠScheduled ExecutorService Ġ= ĠExec utors . new Scheduled ThreadPool ( 1 ) ĊĊĠĠĠ Ġfun Ġschedule Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġschedule Pending In voices () ĊĠĠĠĠĠĠĠ Ġprocess In voices () ĊĠĠĠĠĠĠĠ Ġretry Failed In voices () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThis Ġfunction Ġreturns Ġthe Ġnumber Ġof Ġmilliseconds Ġuntil Ġthe Ġnext Ġfirst Ġday Ġof Ġmonth ĊĠĠĠ Ġprivate Ġfun Ġget Delay Until First Day OfMonth (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Day OfMonth Ġ= ĠCalendar . getInstance () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( first Day OfMonth . get ( Calendar . DAY _ OF _ MONTH ) Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Day OfMonth . add ( Calendar . MONTH , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Day OfMonth . set ( Calendar . DAY _ OF _ MONTH , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( first Day OfMonth . time In Millis Ġ- ĠCalendar . getInstance (). time In Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġschedule Pending In voices () Ġ{ ĊĠĠĠĠĠĠĠ Ġscheduler . schedule At Fixed Rate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchedule Pending In voices Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Service Ġ= Ġinvoice Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkafka Service Ġ= Ġkafka Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Delay Until First Day OfMonth (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Delay Until First Day OfMonth (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess In voices () Ġ{ ĊĠĠĠĠĠĠĠ Ġscheduler . schedule With Fixed Delay ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProcess In voices Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Service Ġ= Ġinvoice Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Service Ġ= Ġbilling Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkafka Service Ġ= Ġkafka Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretry Failed In voices () Ġ{ ĊĠĠĠĠĠĠĠ Ġscheduler . schedule With Fixed Delay ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRetry Failed In voices Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Service Ġ= Ġinvoice Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Service Ġ= Ġbilling Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkafka Service Ġ= Ġkafka Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ