|
|
|
@ -15,7 +15,10 @@ import org.springframework.stereotype.Service; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.sql.*; |
|
|
|
import java.time.DayOfWeek; |
|
|
|
import java.time.LocalDate; |
|
|
|
import java.time.ZoneId; |
|
|
|
import java.time.ZonedDateTime; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.UUID; |
|
|
|
@ -319,7 +322,7 @@ public class DatabaseService { |
|
|
|
public List<MantenimientosSinEncuesta> getEncuestPendientes(String mes, int anio) { |
|
|
|
List<MantenimientosSinEncuesta> lista = new ArrayList<>(); |
|
|
|
String query = """ |
|
|
|
SELECT |
|
|
|
SELECT DISTINCT |
|
|
|
m.MANTENIMIENTOID MANTID, |
|
|
|
m.PLANANUALID PLANID, |
|
|
|
m.FECHA, |
|
|
|
@ -328,7 +331,8 @@ public class DatabaseService { |
|
|
|
d.DESCRIPCION DEPTO, |
|
|
|
u.NOMBRE NOMUSUARIO, |
|
|
|
u.EMAIL, |
|
|
|
m.ENCUESTA |
|
|
|
m.ENCUESTA, |
|
|
|
CASE WHEN e.TOKEN IS NOT NULL THEN 1 ELSE 0 END AS TIENE_TOKEN |
|
|
|
FROM MANTENIMIENTOS m |
|
|
|
JOIN TIPOMANT t |
|
|
|
ON t.TIPOMANTID = m.TIPOMANTID |
|
|
|
@ -340,8 +344,10 @@ public class DatabaseService { |
|
|
|
ON p.PLANANUALID = m.PLANANUALID |
|
|
|
JOIN MESES ms |
|
|
|
ON ms.MESID = p.MESID |
|
|
|
WHERE m.ENCUESTA = 'N' |
|
|
|
AND m.TIPOMANTID = 1 |
|
|
|
LEFT JOIN ENCUESTATOKENS e |
|
|
|
ON e.MANTENIMIENTOID = m.MANTENIMIENTOID |
|
|
|
WHERE |
|
|
|
m.TIPOMANTID = 1 |
|
|
|
AND m.PLANANUALID IS NOT NULL |
|
|
|
AND UPPER(ms.NOMBRE) = UPPER(?) |
|
|
|
AND EXTRACT(YEAR FROM m.FECHA) = ? |
|
|
|
@ -365,7 +371,8 @@ public class DatabaseService { |
|
|
|
rs.getString("DEPTO"), |
|
|
|
rs.getString("NOMUSUARIO"), |
|
|
|
rs.getString("EMAIL"), |
|
|
|
rs.getString("ENCUESTA") |
|
|
|
rs.getString("ENCUESTA"), |
|
|
|
rs.getBoolean("TIENE_TOKEN") |
|
|
|
)); |
|
|
|
} |
|
|
|
} catch (SQLException e) { |
|
|
|
@ -1037,21 +1044,39 @@ public class DatabaseService { |
|
|
|
|
|
|
|
public String crearTokenEncuesta(int mantenimientoid) { |
|
|
|
String token = UUID.randomUUID().toString(); |
|
|
|
Timestamp expira = new Timestamp(System.currentTimeMillis() + (24 * 60 * 60 * 1000)); |
|
|
|
ZoneId zonaMX = ZoneId.of("America/Mexico_City"); |
|
|
|
ZonedDateTime ahora = ZonedDateTime.now(zonaMX); |
|
|
|
|
|
|
|
ZonedDateTime fechaExp = ahora; |
|
|
|
int diasPorSumar = 3; |
|
|
|
while (diasPorSumar > 0) { |
|
|
|
fechaExp = fechaExp.plusDays(1); |
|
|
|
if (!(fechaExp.getDayOfWeek() == DayOfWeek.SATURDAY || |
|
|
|
fechaExp.getDayOfWeek() == DayOfWeek.SUNDAY)) { |
|
|
|
diasPorSumar--; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
String query = "INSERT INTO ENCUESTATOKENS (TOKEN, MANTENIMIENTOID, FECHAEXPIRACION) VALUES (?, ?, ?)"; |
|
|
|
Timestamp expira = Timestamp.from(fechaExp.toInstant()); |
|
|
|
LocalDate fechaEnvio = ahora.toLocalDate(); |
|
|
|
|
|
|
|
String query = "INSERT INTO ENCUESTATOKENS (TOKEN, MANTENIMIENTOID, FECHAENVIO, FECHAEXPIRACION) VALUES (?, ?, ?, ?)"; |
|
|
|
|
|
|
|
try (Connection conn = getMysqlConnection(); |
|
|
|
PreparedStatement stmt = conn.prepareStatement(query)) { |
|
|
|
|
|
|
|
stmt.setString(1, token); |
|
|
|
stmt.setInt(2, mantenimientoid); |
|
|
|
stmt.setTimestamp(3, expira); |
|
|
|
stmt.setDate(3, java.sql.Date.valueOf(fechaEnvio)); |
|
|
|
stmt.setTimestamp(4, expira); |
|
|
|
stmt.executeUpdate(); |
|
|
|
|
|
|
|
return token; |
|
|
|
|
|
|
|
} catch (SQLException e) { |
|
|
|
logger.error("Error al crear el token de encuesta: ", e); |
|
|
|
throw new RuntimeException("Ya existe una encuesta para este mantenimiento o error en DB", e); |
|
|
|
} |
|
|
|
return token; |
|
|
|
} |
|
|
|
|
|
|
|
public Integer validarTokenYObtenerId(String token) { |
|
|
|
@ -1071,21 +1096,34 @@ public class DatabaseService { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
public List<ConteoEncuestas> getTotalEncuestas() { |
|
|
|
public List<ConteoEncuestas> getTotalEncuestas(Integer mesId, Integer anio) { |
|
|
|
List<ConteoEncuestas> totalEncuestas = new ArrayList<>(); |
|
|
|
String query = "SELECT * FROM VW_CONTEO_ENCUESTAS"; |
|
|
|
String query = "{call sp_reporte_encuestas(?, ?)}"; |
|
|
|
|
|
|
|
try (Connection conn = getMysqlConnection(); |
|
|
|
Statement stmt = conn.createStatement(); |
|
|
|
ResultSet rs = stmt.executeQuery(query)) { |
|
|
|
CallableStatement cstmt = conn.prepareCall(query)) { |
|
|
|
|
|
|
|
while (rs.next()) { |
|
|
|
ConteoEncuestas conteo = new ConteoEncuestas( |
|
|
|
rs.getInt("TOTAL_ENVIADAS"), |
|
|
|
rs.getInt("TOTAL_RESPONDIDAS"), |
|
|
|
rs.getDouble("PORCENTAJE_TOTAL") |
|
|
|
); |
|
|
|
totalEncuestas.add(conteo); |
|
|
|
if (mesId != null) { |
|
|
|
cstmt.setInt(1, mesId); |
|
|
|
} else { |
|
|
|
cstmt.setNull(1, Types.INTEGER); |
|
|
|
} |
|
|
|
|
|
|
|
if (anio != null) { |
|
|
|
cstmt.setInt(2, anio); |
|
|
|
} else { |
|
|
|
cstmt.setNull(2, Types.INTEGER); |
|
|
|
} |
|
|
|
|
|
|
|
try (ResultSet rs = cstmt.executeQuery()) { |
|
|
|
while (rs.next()) { |
|
|
|
ConteoEncuestas conteo = new ConteoEncuestas( |
|
|
|
rs.getInt("TOTAL_ENVIADAS"), |
|
|
|
rs.getInt("TOTAL_RESPONDIDAS"), |
|
|
|
rs.getDouble("PORCENTAJE_TOTAL") |
|
|
|
); |
|
|
|
totalEncuestas.add(conteo); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (SQLException e) { |
|
|
|
logger.error("Error al obtener el total de encuestas: ", e); |
|
|
|
@ -1093,24 +1131,37 @@ public class DatabaseService { |
|
|
|
return totalEncuestas; |
|
|
|
} |
|
|
|
|
|
|
|
public List<ConteoRespuestas> getTotalRespuestas() { |
|
|
|
public List<ConteoRespuestas> getTotalRespuestas(Integer mesId, Integer anio) { |
|
|
|
List<ConteoRespuestas> totalRespuestas = new ArrayList<>(); |
|
|
|
String query = "SELECT * FROM VW_CONTEO_RESPUESTAS"; |
|
|
|
String query = "{call sp_reporte_respuestas(?, ?)}"; |
|
|
|
|
|
|
|
try (Connection conn = getMysqlConnection(); |
|
|
|
Statement stmt = conn.createStatement(); |
|
|
|
ResultSet rs = stmt.executeQuery(query)) { |
|
|
|
CallableStatement cstmt = conn.prepareCall(query)) { |
|
|
|
|
|
|
|
while (rs.next()) { |
|
|
|
ConteoRespuestas conteo = new ConteoRespuestas( |
|
|
|
rs.getInt("PREGUNTAID"), |
|
|
|
rs.getString("PREGUNTA"), |
|
|
|
rs.getInt("TOTALREGISTROS"), |
|
|
|
rs.getInt("TOTALSI"), |
|
|
|
rs.getInt("TOTALNO"), |
|
|
|
rs.getDouble("PORCENTAJE") |
|
|
|
); |
|
|
|
totalRespuestas.add(conteo); |
|
|
|
if (mesId != null) { |
|
|
|
cstmt.setInt(1, mesId); |
|
|
|
} else { |
|
|
|
cstmt.setNull(1, Types.INTEGER); |
|
|
|
} |
|
|
|
|
|
|
|
if (anio != null) { |
|
|
|
cstmt.setInt(2, anio); |
|
|
|
} else { |
|
|
|
cstmt.setNull(2, Types.INTEGER); |
|
|
|
} |
|
|
|
|
|
|
|
try (ResultSet rs = cstmt.executeQuery()) { |
|
|
|
while (rs.next()) { |
|
|
|
ConteoRespuestas conteo = new ConteoRespuestas( |
|
|
|
rs.getInt("PREGUNTAID"), |
|
|
|
rs.getString("PREGUNTA"), |
|
|
|
rs.getInt("TOTALREGISTROS"), |
|
|
|
rs.getInt("TOTALSI"), |
|
|
|
rs.getInt("TOTALNO"), |
|
|
|
rs.getDouble("PORCENTAJE") |
|
|
|
); |
|
|
|
totalRespuestas.add(conteo); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (SQLException e) { |
|
|
|
logger.error("Error al obtener el total de respuestas: ", e); |
|
|
|
|