migration piano logistico rrule

This commit is contained in:
2025-04-04 09:29:15 +02:00
committed by Valerio Castellana
parent 8f0f64da9e
commit ff8350470b
2 changed files with 114 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250403152113 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("getPianoLogistico", "CREATE FUNCTION [dbo].[getPianoLogistico] ( @codAlis varchar(5), @dataValidita datetime, @codMdep varchar(5), @ggOrd integer ) \n" +
"\n" +
"RETURNS TABLE \n" +
"AS\n" +
"RETURN \n" +
"( \n" +
"with last_piano as (\n" +
"select id_piano, \n" +
" cod_alis,\n" +
" data_validita, lead(data_validita, 1, null) over (partition by cod_alis order by cod_alis, data_validitA) as data_validita_next\n" +
"from atb_piano_logistico \n" +
"WHERE (@codAlis is null OR atb_piano_logistico.cod_alis = @codAlis) AND\n" +
"atb_piano_logistico.data_validita <= IsNull(@dataValidita, cAST(GETdATE() AS DATE)) )\n" +
"\n" +
"select last_piano.cod_alis, \n" +
" last_piano.data_validita,\n" +
" atb_piano_logistico_det.cod_mdep,\n" +
" atb_piano_logistico_det.gg_ord,\n" +
" atb_piano_logistico_det.gg_cons,\n" +
" atb_piano_logistico_det.ora_max_ord,\n" +
" atb_piano_logistico_det.ora_scarico\n" +
"from last_piano inner join atb_piano_logistico_det on last_piano.id_piano = atb_piano_logistico_det.id_piano \n" +
"where data_validita_next is null\n" +
"AND (@codMdep is null OR atb_piano_logistico_det.cod_mdep = @codMdep) \n" +
"AND (@ggOrd is null or atb_piano_logistico_det.gg_ord = @ggOrd ) \n" +
")");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,67 @@
package it.integry.ems.activity.service;
public class RRuleGenerator {
/**
* Genera una stringa RRule basata sui parametri specificati
*
* @param frequency La frequenza dell'evento (DAILY, WEEKLY, MONTHLY, YEARLY)
* @param interval Intervallo tra le occorrenze (es. ogni 2 settimane)
* @param count Il numero di occorrenze (opzionale, -1 per ignorare)
* @param until Data di termine della ricorrenza (opzionale, null per ignorare)
* @param byDay Giorni della settimana (es. "MO,WE,FR", opzionale)
* @param byMonthDay Giorni del mese (es. "1,15", opzionale)
* @param byMonth Mesi dell'anno (es. "1,6,12", opzionale)
* @return Una stringa nel formato RRule
*/
public static String generateRRule(
String frequency,
int interval,
int count,
String until,
String byDay,
String byMonthDay,
String byMonth) {
StringBuilder rrule = new StringBuilder("RRULE:");
// Aggiungi la frequenza (obbligatoria)
rrule.append("FREQ=").append(frequency);
// Aggiungi l'intervallo se maggiore di 1
if (interval > 1) {
rrule.append(";INTERVAL=").append(interval);
}
// Aggiungi il numero di occorrenze se specificato
if (count > 0) {
rrule.append(";COUNT=").append(count);
}
// Aggiungi la data di termine se specificata
if (until != null && !until.isEmpty()) {
rrule.append(";UNTIL=").append(until);
}
// Aggiungi i giorni della settimana se specificati
if (byDay != null && !byDay.isEmpty()) {
rrule.append(";BYDAY=").append(byDay);
}
// Aggiungi i giorni del mese se specificati
if (byMonthDay != null && !byMonthDay.isEmpty()) {
rrule.append(";BYMONTHDAY=").append(byMonthDay);
}
// Aggiungi i mesi se specificati
if (byMonth != null && !byMonth.isEmpty()) {
rrule.append(";BYMONTH=").append(byMonth);
}
return rrule.toString();
}
/**
* Esempio di utilizzo della funzione generateRRule
*/
// public static void main(String[] args) {
// // Esempio 1: Ogni lunedì e mercoledì per 10 volte
// String rrule1 = generateRRule("WEEKLY", 1, 10, null, "MO,WE", null, null);
// System.out.println(rrule1);
// // Esempio 2: Ogni due mesi, il giorno 15, fino al 31 dicembre 2025
// String rrule2 = generateRRule("MONTHLY", 2, -1, "20251231T235959Z", null, "15", null);
// System.out.println(rrule2);
// // Esempio 3: Annualmente il 1° gennaio e il 25 dicembre
// String rrule3 = generateRRule("YEARLY", 1, -1, null, null, "1,25", "1,12");
// System.out.println(rrule3);
// }
}