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