Migliorato recupero scontrini

This commit is contained in:
2024-05-15 16:39:14 +02:00
parent f75c2c7fc9
commit 31e1df6786
4 changed files with 153 additions and 71 deletions

View File

@@ -0,0 +1,17 @@
package it.integry.ems.migration.model;import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20240510172417 extends BaseMigration implements MigrationModelInterface{
@Override
public void up()throws Exception {
if(isHistoryDB())
return;
}
@Override
public void down()throws Exception{
}
}

View File

@@ -0,0 +1,17 @@
package it.integry.ems.migration.model;import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20240515124626 extends BaseMigration implements MigrationModelInterface{
@Override
public void up()throws Exception {
if(isHistoryDB())
return;
}
@Override
public void down()throws Exception{
}
}

View File

@@ -0,0 +1,56 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20240515144229 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("getListaScontriniMancanti", "-- =============================================\n" +
"-- Author: <Author,,Name>\n" +
"-- Create date: <Create Date,,>\n" +
"-- Description: <Description,,>\n" +
"-- =============================================\n" +
"CREATE FUNCTION getListaScontriniMancanti(@codMdep varchar(5), @codCassa varchar(5), @dataDoc datetime) \n" +
"\n" +
"RETURNS TABLE \n" +
"AS\n" +
"RETURN \n" +
"(\n" +
" SELECT T1.ID+1 AS Da,\n" +
" (SELECT TOP 1 ID\n" +
" FROM (select id_scontr as id from ntb_doct where ntb_doct.date_only_doc = @dataDoc and ntb_doct.causale = 'V' and ntb_doct.cod_mdep = @codMdep and ntb_doct.cod_cassa = @codCassa ) Tab1\n" +
" WHERE ID>T1.ID+1\n" +
" ORDER BY ID)-1 AS A\n" +
" FROM (SELECT ID\n" +
" FROM (select id_scontr as id from ntb_doct where ntb_doct.date_only_doc = @dataDoc and ntb_doct.causale = 'V' and ntb_doct.cod_mdep = @codMdep and ntb_doct.cod_cassa = @codCassa )Tab1\n" +
" UNION SELECT 0) AS T1 LEFT JOIN (select id_scontr as id from ntb_doct where ntb_doct.date_only_doc = @dataDoc and ntb_doct.causale = 'V' and ntb_doct.cod_mdep = @codMdep and ntb_doct.cod_cassa = @codCassa ) AS T2 ON T1.ID+1=T2.ID\n" +
" WHERE T2.ID IS NULL and (SELECT TOP 1 ID\n" +
" FROM (select id_scontr as id from ntb_doct where ntb_doct.date_only_doc = @dataDoc and ntb_doct.causale = 'V' and ntb_doct.cod_mdep = @codMdep and ntb_doct.cod_cassa = @codCassa )TAB1\n" +
" WHERE ID>T1.ID+1\n" +
" ORDER BY ID)-1 is not null\n" +
")");
createOrUpdateFunction("f_listaScontriniMancanti", "CREATE FUNCTION [dbo].[f_listaScontriniMancanti](@codMdep varchar(5), @codCassa varchar(5), @dataDoc datetime) \n" +
"RETURNS varchar(8000)\n" +
"AS\n" +
"BEGIN\n" +
" DECLARE @lista varchar(8000); \n" +
" SELECT @lista=COALESCE(@lista,'')+ (case when tmp.Da = tmp.a then cast(tmp.da as varchar) else cast(tmp.da as varchar) + '-' + cast (tmp.a as varchar) end) + ', '\n" +
" from ( \n" +
" SELECT * from dbo.getListaScontriniMancanti(@codMdep, @codCassa, @dataDoc)) tmp;\n" +
" \n" +
" RETURN left(@lista, len(@lista) - 1)\n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -11,6 +11,7 @@ import it.integry.ems_model.entity.NtbDoctChk;
import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType; import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB; import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityHashMap;
import it.integry.ems_model.utility.UtilityString; import it.integry.ems_model.utility.UtilityString;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
@@ -24,10 +25,7 @@ import java.io.FileOutputStream;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service @Service
@Scope("request") @Scope("request")
@@ -82,77 +80,75 @@ public class ScontriniImportService {
query = UtilityDB.addwhereCond(query, whereCond, false); query = UtilityDB.addwhereCond(query, whereCond, false);
PreparedStatement ps = multiDBTransactionManager.prepareStatement(query); List<HashMap<String, Object>> listDepo = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query);
ResultSet rs = ps.executeQuery();
while (rs.next()) { for (HashMap<String, Object> depo: listDepo){
String codMdep = rs.getString("cod_mdep"); String codMdep = UtilityHashMap.getValueIfExists(depo, "cod_mdep");
String codCassa = rs.getString("cod_cassa"); String codCassa = UtilityHashMap.getValueIfExists(depo, "cod_cassa");
Calendar currentDate = (Calendar) dataIniz.clone(); Calendar currentDate = (Calendar) dataIniz.clone();
while (currentDate.before(dataFine) || currentDate.equals(dataFine)) { while (currentDate.before(dataFine) || currentDate.equals(dataFine)) {
String dataString = new SimpleDateFormat("yyyy/MM/dd").format(currentDate.getTime()); String dataString = new SimpleDateFormat("yyyy/MM/dd").format(currentDate.getTime());
String queryPV = String queryPV =
"SELECT Cast('" + profileDb + "' as varchar) as profileDb, " + "SELECT CAST('[profileDb]' AS VARCHAR) AS profiledb,\n" +
"Cast('" + codMdep + "' as varchar) as codMdep, " + " CAST('[codMdep]' AS VARCHAR) AS codmdep,\n" +
"Cast('" + codCassa + "' as varchar) as codCassa, " + " CAST('[codCassa]' AS VARCHAR) AS codcassa,\n" +
"Cast('" + dataString + "' as varchar) as dataDoc, " + " CAST('[dataDoc]' AS VARCHAR) AS datadoc,\n" +
" Cast(rowId as varchar) as idScontr " + " CAST(rowid AS VARCHAR) AS idscontr\n" +
" from ( select case when charIndex('-', value_string) > 0 then left(value_string, charIndex('-', value_string) - 1) else rtrim(ltrim(value_string)) end valMin, " + "FROM stb_counter\n" +
"case when charIndex('-', value_string) > 0 then right(value_string, len(value_string) - charIndex('-', value_string)) else rtrim(ltrim(value_string)) end valMax " + "WHERE NOT EXISTS (SELECT id_scontr AS id\n" +
" from dbo.ParseStringIntoArray(dbo.f_listaScontriniMancanti('" + codMdep + "', '" + codCassa + "', '" + dataString + "'), ',') ) scontrini cross apply " + " FROM ntb_doct\n" +
"dbo.getTableRowByNumber(valMin, valMax) " + " WHERE ntb_doct.date_only_doc = '[dataDoc]'\n" +
" UNION ALL " + " AND ntb_doct.causale = 'V'\n" +
"SELECT '" + profileDb + "', " + " AND ntb_doct.cod_mdep = '[codMdep]'\n" +
"'" + codMdep + "', " + " AND ntb_doct.cod_cassa = '[codCassa]'\n" +
"'" + codCassa + "', " + " AND id_scontr = rowid)\n" +
"'" + dataString + "', " + " AND stb_counter.rowid < (SELECT MAX(id_scontr) AS id\n" +
"'>' + Cast(IsNull(max(id_scontr), 0) as varchar) " + " FROM ntb_doct\n" +
"FROM ntb_doct " + " WHERE ntb_doct.date_only_doc = '[dataDoc]'\n" +
"WHERE ntb_doct.cod_mdep = '" + codMdep + "' AND " + " AND ntb_doct.causale = 'V'\n" +
" ntb_doct.cod_cassa = '" + codCassa + "' AND " + " AND ntb_doct.cod_mdep = '[codMdep]'\n" +
" ntb_doct.date_only_doc = '" + dataString + "' AND " + " AND ntb_doct.cod_cassa = '[codCassa]') \n" +
" ntb_doct.causale = 'C' " + "UNION ALL\n" +
" GROUP BY ntb_doct.cod_mdep, ntb_doct.cod_cassa, ntb_doct.date_only_doc, ntb_doct.causale " + "SELECT '[profileDb]', '[codMdep]', '[codCassa]', '[dataDoc]', '>' + CAST(ISNULL(MAX(id_scontr), 0) AS VARCHAR)\n" +
" UNION ALL " + "FROM ntb_doct\n" +
"SELECT '" + profileDb + "', " + "WHERE ntb_doct.cod_mdep = '[codMdep]'\n" +
"'" + codMdep + "', " + " AND ntb_doct.cod_cassa = '[codCassa]'\n" +
"'" + codCassa + "', " + " AND ntb_doct.date_only_doc = '[dataDoc]'\n" +
"'" + dataString + "', " + " AND ntb_doct.causale = 'C'\n" +
"'>' + Cast(IsNull(s.max_id_scontr, 0) as varchar) " + "GROUP BY ntb_doct.cod_mdep, ntb_doct.cod_cassa, ntb_doct.date_only_doc, ntb_doct.causale\n" +
" FROM (SELECT cod_mdep, " + "UNION ALL\n" +
" cod_cassa," + "SELECT '[profileDb]', '[codMdep]', '[codCassa]', '[dataDoc]', '>' + CAST(ISNULL(s.max_id_scontr, 0) AS VARCHAR)\n" +
" data_rapp, " + "FROM (SELECT cod_mdep, cod_cassa, data_rapp, num_scontr_fiscali\n" +
" num_scontr_fiscali " + " FROM ntb_rapt\n" +
" FROM ntb_rapt " + " WHERE cod_mdep = '[codMdep]'\n" +
" WHERE cod_mdep = " + UtilityDB.valueToString(codMdep) + " AND " + " AND data_rapp = '[dataDoc]'\n" +
" data_rapp = " + UtilityDB.valueToString(dataString) + " AND " + " AND cod_cassa = '[codCassa]'\n" +
" cod_cassa = " + UtilityDB.valueToString(codCassa) + " AND " + " AND flag_chiusura_fiscale = 'S') r\n" +
" flag_chiusura_fiscale = 'S' ) r FULL OUTER JOIN " + " FULL OUTER JOIN (SELECT mtb_depo_casse.cod_mdep,\n" +
" ( SELECT mtb_depo_casse.cod_mdep, " + " mtb_depo_casse.cod_cassa,\n" +
" mtb_depo_casse.cod_cassa, " + " '[dataDoc]' AS date_only_doc,\n" +
UtilityDB.valueToString(dataString) + " as date_only_doc, " + " ISNULL(MAX(id_scontr), 0) AS max_id_scontr\n" +
" isNull(MAX(id_scontr),0) as max_id_scontr " + " FROM mtb_depo_casse\n" +
" FROM mtb_depo_casse left outer join ntb_doct on mtb_depo_casse.cod_mdep = ntb_doct.cod_mdep and " + " LEFT OUTER JOIN ntb_doct ON mtb_depo_casse.cod_mdep = ntb_doct.cod_mdep AND\n" +
" mtb_depo_casse.cod_cassa = ntb_doct.cod_cassa AND " + " mtb_depo_casse.cod_cassa = ntb_doct.cod_cassa AND\n" +
" ntb_doct.date_only_doc = " + UtilityDB.valueToString(dataString) + " AND " + " ntb_doct.date_only_doc = '[dataDoc]' AND\n" +
" ntb_doct.causale = 'V' " + " ntb_doct.causale = 'V'\n" +
" WHERE mtb_depo_casse.cod_mdep = " + UtilityDB.valueToString(codMdep) + " AND " + " WHERE mtb_depo_casse.cod_mdep = '[codMdep]'\n" +
" mtb_depo_casse.cod_cassa = " + UtilityDB.valueToString(codCassa) + " AND mtb_depo_casse.cod_cassa = '[codCassa]'\n" +
"GROUP BY mtb_depo_casse.cod_mdep, mtb_depo_casse.cod_cassa) s ON " + " GROUP BY mtb_depo_casse.cod_mdep, mtb_depo_casse.cod_cassa) s\n" +
" r.cod_mdep = s.cod_mdep AND " + " ON r.cod_mdep = s.cod_mdep AND r.data_rapp = s.date_only_doc AND r.cod_cassa = s.cod_cassa\n" +
" r.data_rapp = s.date_only_doc and" + "WHERE (ISNULL(num_scontr_fiscali, -1) > ISNULL(s.max_id_scontr, 0))\n" +
" r.cod_cassa = s.cod_cassa " + " OR num_scontr_fiscali IS NULL";
" WHERE (IsNull(num_scontr_fiscali, -1) > IsNull(s.max_id_scontr, 0) ) OR " +
" num_scontr_fiscali is null ";
PreparedStatement psPv = multiDBTransactionManager.prepareStatement(queryPV); queryPV =
ResultSet rsPv = psPv.executeQuery(); queryPV.replace("[profileDb]", profileDb)
ResultSetMapper rsIntegRetailDTO = new ResultSetMapper(); .replace("[codMdep]", codMdep)
String stringFile = rsIntegRetailDTO.mapResultSetToCSV(rsPv, IntegRetailDTO.class, '\t', false, true); .replace("[codCassa]", codCassa)
rsPv.close(); .replace("[dataDoc]", dataString);
psPv.close();
String stringFile = new ResultSetMapper().mapQueryToCSV(multiDBTransactionManager.getPrimaryConnection(), queryPV, IntegRetailDTO.class, '\t', false, true);
if (!UtilityString.isNullOrEmpty(stringFile)) { if (!UtilityString.isNullOrEmpty(stringFile)) {
//Salvare il file //Salvare il file
String fileName = profileDb + "_" + codMdep + "_" + codCassa + "_" + String fileName = profileDb + "_" + codMdep + "_" + codCassa + "_" +
@@ -164,15 +160,11 @@ public class ScontriniImportService {
IOUtils.write(stringFile.getBytes(), fos); IOUtils.write(stringFile.getBytes(), fos);
fos.flush(); fos.flush();
IOUtils.closeQuietly(fos); IOUtils.closeQuietly(fos);
rsPv.close();
psPv.close();
} }
currentDate.add(Calendar.DATE, 1); currentDate.add(Calendar.DATE, 1);
} }
} }
rs.close();
ps.close();
} }
public List<EntityBase> receiptChecked(Date dataScontrini, String whereCond) throws Exception { public List<EntityBase> receiptChecked(Date dataScontrini, String whereCond) throws Exception {