|
|
|
@ -5,94 +5,231 @@
|
|
|
|
|
*/ |
|
|
|
|
package it.mwg.sismica.bo.util; |
|
|
|
|
|
|
|
|
|
import flexjson.JSONSerializer; |
|
|
|
|
import it.tref.liferay.portos.bo.model.Avviso; |
|
|
|
|
import it.tref.liferay.portos.bo.model.Collaudo; |
|
|
|
|
import it.tref.liferay.portos.bo.model.ControlloPratica; |
|
|
|
|
import it.tref.liferay.portos.bo.model.Delega; |
|
|
|
|
import it.tref.liferay.portos.bo.model.DettPratica; |
|
|
|
|
import it.tref.liferay.portos.bo.model.DocAggiuntiva; |
|
|
|
|
import it.tref.liferay.portos.bo.model.DocPratica; |
|
|
|
|
import it.tref.liferay.portos.bo.model.FineLavori; |
|
|
|
|
import it.tref.liferay.portos.bo.model.IntPratica; |
|
|
|
|
import it.tref.liferay.portos.bo.model.Soggetto; |
|
|
|
|
import it.tref.liferay.portos.bo.model.Sorteggio; |
|
|
|
|
import it.tref.liferay.portos.bo.service.AvvisoLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.CollaudoLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.DelegaLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.ConfigurazioneLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.ControlloPraticaLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.DettPraticaLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.DocAggiuntivaLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.DocPraticaLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.FineLavoriLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.SoggettoLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.service.SorteggioLocalServiceUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.shared.util.ConfigurazioneConstants; |
|
|
|
|
import it.tref.liferay.portos.bo.shared.util.StatoPraticaConstants; |
|
|
|
|
import it.tref.liferay.portos.bo.util.AvvisoUtil; |
|
|
|
|
import it.tref.liferay.portos.bo.util.WorkflowConstants; |
|
|
|
|
|
|
|
|
|
import java.sql.Connection; |
|
|
|
|
import java.sql.SQLException; |
|
|
|
|
import java.sql.Statement; |
|
|
|
|
import java.text.ParseException; |
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
import com.liferay.portal.kernel.cache.CacheRegistryUtil; |
|
|
|
|
import com.liferay.portal.kernel.cache.MultiVMPoolUtil; |
|
|
|
|
import com.liferay.portal.kernel.cache.SingleVMPoolUtil; |
|
|
|
|
import com.liferay.portal.kernel.dao.jdbc.DataAccess; |
|
|
|
|
import com.liferay.portal.kernel.dao.orm.QueryUtil; |
|
|
|
|
import com.liferay.portal.kernel.exception.PortalException; |
|
|
|
|
import com.liferay.portal.kernel.exception.SystemException; |
|
|
|
|
import com.liferay.portal.kernel.log.Log; |
|
|
|
|
import com.liferay.portal.kernel.log.LogFactoryUtil; |
|
|
|
|
import com.liferay.portal.kernel.repository.model.FileEntry; |
|
|
|
|
import com.liferay.portal.kernel.repository.model.Folder; |
|
|
|
|
import com.liferay.portal.kernel.servlet.DirectServletRegistryUtil; |
|
|
|
|
import com.liferay.portal.kernel.util.StringUtil; |
|
|
|
|
import com.liferay.portal.kernel.util.StringPool; |
|
|
|
|
import com.liferay.portal.kernel.util.UniqueList; |
|
|
|
|
import com.liferay.portal.kernel.util.Validator; |
|
|
|
|
import com.liferay.portal.model.Group; |
|
|
|
|
import com.liferay.portal.model.Organization; |
|
|
|
|
import com.liferay.portal.model.User; |
|
|
|
|
import com.liferay.portal.service.ClassNameLocalServiceUtil; |
|
|
|
|
import com.liferay.portal.security.permission.ActionKeys; |
|
|
|
|
import com.liferay.portal.service.ServiceContext; |
|
|
|
|
import com.liferay.portlet.documentlibrary.model.DLFileEntry; |
|
|
|
|
import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata; |
|
|
|
|
import com.liferay.portlet.documentlibrary.model.DLFolder; |
|
|
|
|
import com.liferay.portlet.documentlibrary.model.DLSyncConstants; |
|
|
|
|
import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil; |
|
|
|
|
import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil; |
|
|
|
|
import com.liferay.portlet.dynamicdatamapping.model.DDMContent; |
|
|
|
|
import com.liferay.portlet.dynamicdatamapping.model.DDMStorageLink; |
|
|
|
|
import com.liferay.portlet.messageboards.model.MBDiscussion; |
|
|
|
|
|
|
|
|
|
public class PuliziaDatabase { |
|
|
|
|
private static final Log _log = LogFactoryUtil.getLog(PuliziaDatabase.class); |
|
|
|
|
private static final int SLICE = 1000; |
|
|
|
|
|
|
|
|
|
public static List<String> pulisci(ServiceContext serviceContext) { |
|
|
|
|
public static List<String> pulisci(ServiceContext serviceContext) throws SystemException { |
|
|
|
|
List<String> esito = new ArrayList<>(); |
|
|
|
|
int numeroPratiche = 0; |
|
|
|
|
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); |
|
|
|
|
Date min = null; |
|
|
|
|
Date max = null; |
|
|
|
|
try { |
|
|
|
|
List<IntPratica> pratiche = null; |
|
|
|
|
min = sdf.parse("2020-09-25 18:43:49"); |
|
|
|
|
max = sdf.parse("2020-09-25 18:44:15"); |
|
|
|
|
} catch (ParseException e) { |
|
|
|
|
esitoLog(esito, "Errore date: " + e.getMessage()); |
|
|
|
|
return esito; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
long companyId = serviceContext.getCompanyId(); |
|
|
|
|
long folderId = ConfigurazioneLocalServiceUtil.findByC_ChiaveLong(companyId, |
|
|
|
|
ConfigurazioneConstants.TEMPLATE_FOLDER_ID); |
|
|
|
|
|
|
|
|
|
long templateAnnullamentoId = 0; |
|
|
|
|
try { |
|
|
|
|
Folder folder = DLAppLocalServiceUtil.getFolder(folderId); |
|
|
|
|
FileEntry template = DLAppLocalServiceUtil.getFileEntry(folder.getGroupId(), folderId, "ATAP"); |
|
|
|
|
templateAnnullamentoId = template.getFileEntryId(); |
|
|
|
|
} catch (PortalException e1) { |
|
|
|
|
} |
|
|
|
|
if (Validator.isNull(templateAnnullamentoId)) { |
|
|
|
|
esitoLog(esito, "Template ATAP non trovato"); |
|
|
|
|
return esito; |
|
|
|
|
} |
|
|
|
|
String descLongAnnullamento = "Annullamento d'ufficio"; |
|
|
|
|
|
|
|
|
|
long templateConformitaId = ConfigurazioneLocalServiceUtil.findByC_ChiaveLong(companyId, |
|
|
|
|
"conf.geniocivile.avviso.template.id.deposito.B2"); |
|
|
|
|
String descLongConformita = "Avviso di conformità"; |
|
|
|
|
|
|
|
|
|
List<Avviso> sbagliati = new ArrayList<>(); |
|
|
|
|
List<Long> inviate = new UniqueList<>(); |
|
|
|
|
List<Long> conformi = new UniqueList<>(); |
|
|
|
|
int start = 0; |
|
|
|
|
List<Avviso> avvisi = new ArrayList<>(); |
|
|
|
|
do { |
|
|
|
|
pratiche = IntPraticaLocalServiceUtil.getIntPraticas(start, start + SLICE); |
|
|
|
|
for (IntPratica pratica : pratiche) { |
|
|
|
|
List<Avviso> avvisi = AvvisoLocalServiceUtil.findByIntPratica(pratica.getIntPraticaId(), |
|
|
|
|
QueryUtil.ALL_POS, QueryUtil.ALL_POS, null); |
|
|
|
|
int noFile = 0; |
|
|
|
|
avvisi = AvvisoLocalServiceUtil.getAvvisos(start, start + SLICE); |
|
|
|
|
for (Avviso avviso : avvisi) { |
|
|
|
|
if (0 == avviso.getFileEntryIdBase()) { |
|
|
|
|
AvvisoLocalServiceUtil.deleteAvviso(avviso); |
|
|
|
|
noFile++; |
|
|
|
|
if (avviso.getDtAvviso().after(min) && avviso.getDtAvviso().before(max) |
|
|
|
|
&& avviso.getTipoDocumento().equalsIgnoreCase(StatoPraticaConstants.CONFORME)) { |
|
|
|
|
sbagliati.add(avviso); |
|
|
|
|
} else if (avviso.getFileEntryIdTemplate() == templateAnnullamentoId) { |
|
|
|
|
inviate.add(avviso.getIntPraticaId()); |
|
|
|
|
} else if (avviso.getFileEntryIdTemplate() == templateConformitaId) { |
|
|
|
|
conformi.add(avviso.getIntPraticaId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (noFile > 0) { |
|
|
|
|
start += SLICE; |
|
|
|
|
} while (avvisi.size() > 0); |
|
|
|
|
|
|
|
|
|
SimpleDateFormat dfmt = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); |
|
|
|
|
JSONSerializer jsonSerializer = new JSONSerializer(); |
|
|
|
|
|
|
|
|
|
int noIntPratica = 0; |
|
|
|
|
int annullatiA = 0; |
|
|
|
|
int annullatiB = 0; |
|
|
|
|
int annullatiC = 0; |
|
|
|
|
for (Avviso avviso : sbagliati) { |
|
|
|
|
long intPraticaId = avviso.getIntPraticaId(); |
|
|
|
|
if (!inviate.contains(intPraticaId)) { |
|
|
|
|
IntPratica intPratica = null; |
|
|
|
|
try { |
|
|
|
|
intPratica = IntPraticaLocalServiceUtil.getIntPratica(intPraticaId); |
|
|
|
|
} catch (PortalException e) { |
|
|
|
|
} |
|
|
|
|
if (Validator.isNull(intPratica)) { |
|
|
|
|
noIntPratica++; |
|
|
|
|
} else { |
|
|
|
|
Map<String, String> parameters = new HashMap<>(); |
|
|
|
|
parameters.put("dataProtocolloAnnullato", dfmt.format(avviso.getDtProtocollo())); |
|
|
|
|
parameters.put("numeroProtocolloAnnullato", avviso.getProtocollo()); |
|
|
|
|
|
|
|
|
|
DettPratica dettPratica = DettPraticaLocalServiceUtil |
|
|
|
|
.getLastCompletedByIntPratica(intPraticaId); |
|
|
|
|
List<ControlloPratica> controlli = ControlloPraticaLocalServiceUtil |
|
|
|
|
.findByIntPraticaId_Status(intPraticaId, WorkflowConstants.STATUS_PENDING); |
|
|
|
|
long controlloPraticaId = 0; |
|
|
|
|
if (controlli.size() > 0) { |
|
|
|
|
controlloPraticaId = controlli.get(controlli.size() - 1).getPrimaryKey(); |
|
|
|
|
} |
|
|
|
|
ServiceContext ctx = new ServiceContext(); |
|
|
|
|
ctx.setCompanyId(intPratica.getCompanyId()); |
|
|
|
|
ctx.setScopeGroupId(intPratica.getGroupId()); |
|
|
|
|
ctx.setUserId(intPratica.getUserId()); |
|
|
|
|
ctx.setGroupPermissions(new String[] { ActionKeys.VIEW }); |
|
|
|
|
|
|
|
|
|
String jsonParameters = StringPool.BLANK; |
|
|
|
|
|
|
|
|
|
switch (intPratica.getTipoProcedura().toUpperCase()) { |
|
|
|
|
case "A": |
|
|
|
|
annullatiA++; |
|
|
|
|
break; |
|
|
|
|
case "B": |
|
|
|
|
case "B1": |
|
|
|
|
Sorteggio sorteggio = SorteggioLocalServiceUtil.findByIntPratica(intPratica |
|
|
|
|
.getIntPraticaId()); |
|
|
|
|
if (Validator.isNull(sorteggio)) { |
|
|
|
|
jsonParameters = jsonSerializer.serialize(parameters); |
|
|
|
|
try { |
|
|
|
|
AvvisoLocalServiceUtil.addAvviso(intPraticaId, descLongAnnullamento, |
|
|
|
|
new Date(), AvvisoUtil.TIPO_AVVISO_DIRETTO, "MA", |
|
|
|
|
templateAnnullamentoId, dettPratica.getPrimaryKey(), |
|
|
|
|
DettPratica.class.getName(), StringPool.BLANK, jsonParameters, |
|
|
|
|
controlloPraticaId, serviceContext); |
|
|
|
|
if (!conformi.contains(intPraticaId)) { |
|
|
|
|
AvvisoLocalServiceUtil.addAvviso(intPratica.getIntPraticaId(), |
|
|
|
|
descLongConformita, new Date(), AvvisoUtil.TIPO_AVVISO_DIRETTO, |
|
|
|
|
StatoPraticaConstants.CONFORME, templateConformitaId, |
|
|
|
|
dettPratica.getDettPraticaId(), DettPratica.class.getName(), |
|
|
|
|
controlloPraticaId, serviceContext); |
|
|
|
|
} |
|
|
|
|
} catch (PortalException e) { |
|
|
|
|
esitoLog(esito, |
|
|
|
|
"Pratica " + pratica.getNumeroProgetto() + "(" + pratica.getIntPraticaId() |
|
|
|
|
+ ") - " + avvisi.size() + " avvisi, eliminati: " + noFile); |
|
|
|
|
"Errore nell'invio per pratica " + intPratica.getNumeroProgetto() |
|
|
|
|
+ ", " + e.getMessage()); |
|
|
|
|
} |
|
|
|
|
esitoLog(esito, "Pratica " |
|
|
|
|
+ intPratica.getNumeroProgetto() |
|
|
|
|
+ " (" |
|
|
|
|
+ intPraticaId |
|
|
|
|
+ "), procedura " |
|
|
|
|
+ intPratica.getTipoProcedura() |
|
|
|
|
+ ", invio annullamento" |
|
|
|
|
+ (conformi.contains(intPraticaId) ? ", conformità già inviata" |
|
|
|
|
: " e conformità")); |
|
|
|
|
annullatiB++; |
|
|
|
|
} else { |
|
|
|
|
esitoLog(esito, "Pratica " + intPratica.getNumeroProgetto() + " (" + intPraticaId |
|
|
|
|
+ "), procedura " + intPratica.getTipoProcedura() |
|
|
|
|
+ ", non invio perché sorteggiata"); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case "C": |
|
|
|
|
Avviso valido = null; |
|
|
|
|
avvisi = AvvisoLocalServiceUtil.findByIntPraticaId_tipoDocumento(intPraticaId, |
|
|
|
|
StatoPraticaConstants.VIDIMATA); |
|
|
|
|
for (Avviso presente : avvisi) { |
|
|
|
|
if (presente.getPrimaryKey() != avviso.getPrimaryKey()) { |
|
|
|
|
if ((presente.getPrimaryKey() <= avviso.getPrimaryKey()) |
|
|
|
|
&& (Validator.isNull(valido) || (valido.getPrimaryKey() > presente |
|
|
|
|
.getPrimaryKey()))) { |
|
|
|
|
valido = presente; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (Validator.isNotNull(valido)) { |
|
|
|
|
parameters.put("dataProtocolloValido", dfmt.format(valido.getDtProtocollo())); |
|
|
|
|
parameters.put("numeroProtocolloValido", valido.getProtocollo()); |
|
|
|
|
jsonParameters = jsonSerializer.serialize(parameters); |
|
|
|
|
try { |
|
|
|
|
AvvisoLocalServiceUtil.addAvviso(intPraticaId, descLongAnnullamento, |
|
|
|
|
new Date(), AvvisoUtil.TIPO_AVVISO_DIRETTO, "MA", |
|
|
|
|
templateAnnullamentoId, dettPratica.getPrimaryKey(), |
|
|
|
|
DettPratica.class.getName(), StringPool.BLANK, jsonParameters, |
|
|
|
|
controlloPraticaId, serviceContext); |
|
|
|
|
} catch (PortalException e) { |
|
|
|
|
esitoLog(esito, |
|
|
|
|
"Errore nell'invio per pratica " + intPratica.getNumeroProgetto() |
|
|
|
|
+ ", " + e.getMessage()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
esitoLog(esito, "Pratica " + intPratica.getNumeroProgetto() + " (" + intPraticaId |
|
|
|
|
+ "), procedura " + intPratica.getTipoProcedura() + ", " + jsonParameters); |
|
|
|
|
annullatiC++; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
start += SLICE; |
|
|
|
|
numeroPratiche += pratiche.size(); |
|
|
|
|
} while (pratiche.size() > 0); |
|
|
|
|
esitoLog(esito, numeroPratiche + " pratiche"); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
esitoLog(esito, "Interrotto per errore: " + e.getMessage()); |
|
|
|
|
} |
|
|
|
|
_log.info(sbagliati.size() + " avvisi"); |
|
|
|
|
_log.info("Procedura A = " + annullatiA); |
|
|
|
|
_log.info("Procedura B = " + annullatiB); |
|
|
|
|
_log.info("Procedura C = " + annullatiC); |
|
|
|
|
_log.info("IntPratica non esistente = " + noIntPratica); |
|
|
|
|
return esito; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|