Commit 04e6c7d0 by Billy Larru

[EDIT leyendo horario de salida diferente de 00:00 y 24:00]

parent 5a1dc576
...@@ -24,222 +24,226 @@ import salidasautomaticas.util.EstandarDAO; ...@@ -24,222 +24,226 @@ import salidasautomaticas.util.EstandarDAO;
*/ */
public class SalidasMysqlDAO implements SalidasDAO { public class SalidasMysqlDAO implements SalidasDAO {
private static final Logger log = LogManager.getLogger(SalidasMysqlDAO.class); private static final Logger log = LogManager.getLogger(SalidasMysqlDAO.class);
@Override @Override
public JSONArray obtenerHorariosSalida() throws Exception { public JSONArray obtenerHorariosSalida() throws Exception {
JSONArray jsonArray = new JSONArray(); JSONArray jsonArray = new JSONArray();
int diaSemana = obtenerDiaSemana(); int diaSemana = obtenerDiaSemana();
if (diaSemana == 7) { if (diaSemana == 7) {
return jsonArray; return jsonArray;
} }
Connection cn = MysqlDAOFactory.obtenerConexion("nuevo"); Connection cn = MysqlDAOFactory.obtenerConexion("nuevo");
String query = "SELECT {campo_salida} as salida FROM (" String query = "SELECT {campo_salida} as salida FROM ("
+ "SELECT" + "SELECT"
+ " p.salidaLV, " + " p.salidaLV, "
+ " p.salidaS " + " p.salidaS "
+ "FROM " + "FROM "
+ "personal p " + "personal p "
+ "WHERE " + "WHERE "
+ "p.codtipo!=3 "//Que registren asistencia + "p.codtipo!=3 "//Que registren asistencia
+ "AND p.retirado = 0 " + "AND p.retirado = 0 "
+ "AND NOT p.codlocal IN ('L035', 'L053', 'L038') "//Que no sea profesores por horas, pronoe belisario y grupo MH + "AND NOT p.codlocal IN ('L035', 'L053', 'L038') "//Que no sea profesores por horas, pronoe belisario y grupo MH
+ "AND NOT p.pronoe = 1 "//Que no sea pronoe + "AND NOT p.pronoe = 1 "//Que no sea pronoe
+ "AND NOT p.codcargo IN (71, 13, 96, 41) "//Que no sea policia ni de cafeteria ni vigilante ni interna psicologa + "AND NOT p.codcargo IN (71, 13, 96, 41) "//Que no sea policia ni de cafeteria ni vigilante ni interna psicologa
+ "AND p.tmp_id not in (99998, 9998, 99999, 9888) "//Que esten en planilla + "AND p.tmp_id not in (99998, 9998, 99999, 9888) "//Que esten en planilla
+ "AND NOT p.horaing > 19 " + "AND NOT p.horaing > 19 "
+ "AND NOT p.salidaS = '') as tabla WHERE NULLIF( {campo_salida} , '') is NOT null GROUP BY {campo_salida} "; + "AND NOT p.salidaS = '') as tabla "
+ "WHERE NULLIF( {campo_salida} , '') is NOT null "
if (diaSemana >= 1 && diaSemana <= 5) { + "AND ({campo_salida}!='24:00' AND {campo_salida}!='00:00')"
query = query.replaceAll("\\{campo_salida\\}", "tabla.salidaLV"); + "GROUP BY {campo_salida} ";
} else if (diaSemana == 6) {
query = query.replaceAll("\\{campo_salida\\}", "tabla.salidaS"); if (diaSemana >= 1 && diaSemana <= 5) {
} query = query.replaceAll("\\{campo_salida\\}", "tabla.salidaLV");
jsonArray = EstandarDAO.getInstance().consultar(cn, query); } else if (diaSemana == 6) {
query = query.replaceAll("\\{campo_salida\\}", "tabla.salidaS");
return jsonArray; }
} jsonArray = EstandarDAO.getInstance().consultar(cn, query);
private int obtenerDiaSemana() { return jsonArray;
int diaSemana; }
LocalDate date = LocalDate.now();
diaSemana = date.getDayOfWeek().getValue(); private int obtenerDiaSemana() {
int diaSemana;
return diaSemana; LocalDate date = LocalDate.now();
} diaSemana = date.getDayOfWeek().getValue();
private String getFechaHoy() { return diaSemana;
String fechaHoy; }
LocalDate date = LocalDate.now();
int anio = date.getYear(); private String getFechaHoy() {
int mes = date.getMonthValue(); String fechaHoy;
int dia = date.getDayOfMonth(); LocalDate date = LocalDate.now();
int anio = date.getYear();
fechaHoy = String.format("%s-%02d-%02d", anio, mes, dia); int mes = date.getMonthValue();
int dia = date.getDayOfMonth();
return fechaHoy;
} fechaHoy = String.format("%s-%02d-%02d", anio, mes, dia);
private String getFechaAyer() { return fechaHoy;
String fechaAyer; }
LocalDate date = LocalDate.now();
date = date.minusDays(1); private String getFechaAyer() {
String fechaAyer;
int anio = date.getYear(); LocalDate date = LocalDate.now();
int mes = date.getMonthValue(); date = date.minusDays(1);
int dia = date.getDayOfMonth();
int anio = date.getYear();
fechaAyer = String.format("%s-%02d-%02d", anio, mes, dia); int mes = date.getMonthValue();
int dia = date.getDayOfMonth();
return fechaAyer;
} fechaAyer = String.format("%s-%02d-%02d", anio, mes, dia);
@Override return fechaAyer;
public JSONArray obtenerAsistencias(String horaProgramada) throws Exception { }
Connection cn = MysqlDAOFactory.obtenerConexion("nuevo");
@Override
String fechaPartida = "2018-01-01"; public JSONArray obtenerAsistencias(String horaProgramada) throws Exception {
Connection cn = MysqlDAOFactory.obtenerConexion("nuevo");
String query = "SELECT * from "
+ "(select " String fechaPartida = "2018-01-01";
+ " asistencia.codasis, "
+ "asistencia.fecha_asis, " String query = "SELECT * from "
+ "{campo_salida} as salida " + "(select "
+ "FROM " + " asistencia.codasis, "
+ " asistencia " + "asistencia.fecha_asis, "
+ "INNER JOIN personal ON asistencia.codper = personal.codper " + "{campo_salida} as salida "
+ "WHERE " + "FROM "
+ " asistencia.horasal = '' " + " asistencia "
+ "AND asistencia.minsal = '' " + "INNER JOIN personal ON asistencia.codper = personal.codper "
+ "AND ( {campo_salida} <= ? AND asistencia.fecha_asis='{fecha_hoy}' "//Se setea la horaProgramada como parametro en "?" + "WHERE "
+ "OR asistencia.fecha_asis BETWEEN '{fecha_partida}' AND '{fecha_ayer}') " + " asistencia.horasal = '' "
+ "AND {campo_salida} is not NULL " + "AND asistencia.minsal = '' "
+ "AND NOT personal.codlocal IN ('L035', 'L053', 'L038') "//Que no sea profesores por horas, pronoe belisario y grupo MH + "AND ( {campo_salida} <= ? AND asistencia.fecha_asis='{fecha_hoy}' "//Se setea la horaProgramada como parametro en "?"
+ "AND NOT personal.codcargo IN (71, 13, 96, 41) "//Que no sea policia ni de cafeteria ni vigilante ni interna psicologa + "OR asistencia.fecha_asis BETWEEN '{fecha_partida}' AND '{fecha_ayer}') "
+ "AND NOT personal.pronoe = 1 " //Que no sea pronoe + "AND {campo_salida} is not NULL "
+ "AND (WEEKDAY(asistencia.fecha_asis) + 1) !=7 " //Que no sea domingo + "AND NOT personal.codlocal IN ('L035', 'L053', 'L038') "//Que no sea profesores por horas, pronoe belisario y grupo MH
+ "AND NOT ( (WEEKDAY(asistencia.fecha_asis) + 1)=6 and personal.codcargo in ({cod_cargo_primaria}) ) " //Que no sean de primaria los sabados + "AND NOT personal.codcargo IN (71, 13, 96, 41) "//Que no sea policia ni de cafeteria ni vigilante ni interna psicologa
+ "AND asistencia.estado in (1, 2, 5) "//Que sean asistio, tardanza y no marco + "AND NOT personal.pronoe = 1 " //Que no sea pronoe
+ "AND personal.tmp_id not in (99998, 9998, 99999, 9888) "//Que esten en planilla + "AND (WEEKDAY(asistencia.fecha_asis) + 1) !=7 " //Que no sea domingo
+ "AND personal.codtipo!=3 "//Que si registren asistencia + "AND NOT ( (WEEKDAY(asistencia.fecha_asis) + 1)=6 and personal.codcargo in ({cod_cargo_primaria}) ) " //Que no sean de primaria los sabados
+ "AND personal.retirado=0) as tabla " //Que no esten retirados + "AND asistencia.estado in (1, 2, 5) "//Que sean asistio, tardanza y no marco
+ "where tabla.salida!=''"; + "AND personal.tmp_id not in (99998, 9998, 99999, 9888) "//Que esten en planilla
+ "AND personal.codtipo!=3 "//Que si registren asistencia
String campoSalida = "(" + "AND personal.retirado=0) as tabla " //Que no esten retirados
+ "case " + "where tabla.salida!=''";
+ "when (WEEKDAY(asistencia.fecha_asis) + 1)<6 then salidaLV "
+ "when (WEEKDAY(asistencia.fecha_asis) + 1)=6 then salidaS end " String campoSalida = "("
+ ") "; + "case "
+ "when (WEEKDAY(asistencia.fecha_asis) + 1)<6 then salidaLV "
String codCargoPrimaria = "1, 2, 4, 9, 11, 12, 20, 25, 33, 39, 40, 45, 51"; + "when (WEEKDAY(asistencia.fecha_asis) + 1)=6 then salidaS end "
+ ") ";
query = query.replaceAll("\\{campo_salida\\}", campoSalida);
query = query.replaceAll("\\{fecha_hoy\\}", getFechaHoy()); String codCargoPrimaria = "1, 2, 4, 9, 11, 12, 20, 25, 33, 39, 40, 45, 51";
query = query.replaceAll("\\{fecha_partida\\}", fechaPartida);
query = query.replaceAll("\\{fecha_ayer\\}", getFechaAyer()); query = query.replaceAll("\\{campo_salida\\}", campoSalida);
query = query.replaceAll("\\{cod_cargo_primaria\\}", codCargoPrimaria); query = query.replaceAll("\\{fecha_hoy\\}", getFechaHoy());
query = query.replaceAll("\\{fecha_partida\\}", fechaPartida);
JSONArray parametros = new JSONArray(); query = query.replaceAll("\\{fecha_ayer\\}", getFechaAyer());
parametros.put(horaProgramada); query = query.replaceAll("\\{cod_cargo_primaria\\}", codCargoPrimaria);
JSONArray jsonArray = EstandarDAO.getInstance().consultar(cn, query, parametros); JSONArray parametros = new JSONArray();
parametros.put(horaProgramada);
return jsonArray;
} JSONArray jsonArray = EstandarDAO.getInstance().consultar(cn, query, parametros);
@Override return jsonArray;
public JSONObject actualizarSalida(String horaSalida) throws Exception { }
JSONObject resultado = new JSONObject();
Connection cn = MysqlDAOFactory.obtenerConexion("nuevo"); @Override
public JSONObject actualizarSalida(String horaSalida) throws Exception {
int aleatorioHora = 0, aleatorioMin = 0; JSONObject resultado = new JSONObject();
Connection cn = MysqlDAOFactory.obtenerConexion("nuevo");
JSONArray listaAsistencias = obtenerAsistencias(horaSalida);
log.info("hora de salida=" +horaSalida+ ", asistencias para actualizar=" + listaAsistencias.length()); int aleatorioHora = 0, aleatorioMin = 0;
Instant inicioEjecucion = Instant.now();
JSONArray listaAsistencias = obtenerAsistencias(horaSalida);
int[] updateCounts = new int[listaAsistencias.length()]; log.info("hora de salida=" + horaSalida + ", asistencias para actualizar=" + listaAsistencias.length());
boolean updateAll = false; Instant inicioEjecucion = Instant.now();
int i = 0; int[] updateCounts = new int[listaAsistencias.length()];
for (Iterator it = listaAsistencias.iterator(); it.hasNext();) { boolean updateAll = false;
JSONObject asistencia = (JSONObject) it.next();
int i = 0;
String salidaPersonal = asistencia.getString("salida"); for (Iterator it = listaAsistencias.iterator(); it.hasNext();) {
JSONObject asistencia = (JSONObject) it.next();
if (salidaPersonal == null || salidaPersonal.isEmpty()) {
updateCounts[i] = -1; String salidaPersonal = asistencia.getString("salida");
continue;
} if (salidaPersonal == null || salidaPersonal.isEmpty()) {
updateCounts[i] = -1;
int[] aleatorio = generarHoraMinutoAleatorio(salidaPersonal); continue;
aleatorioHora = aleatorio[0]; }
aleatorioMin = aleatorio[1];
int[] aleatorio = generarHoraMinutoAleatorio(salidaPersonal);
String queryPersonal = "update asistencia set horasal= ?,minsal=? where codasis=? "; aleatorioHora = aleatorio[0];
JSONArray parametros = new JSONArray(); aleatorioMin = aleatorio[1];
parametros
.put(aleatorioHora) String queryPersonal = "update asistencia set horasal= ?,minsal=? where codasis=? ";
.put(aleatorioMin) JSONArray parametros = new JSONArray();
.put(asistencia.getString("codasis")); parametros
.put(aleatorioHora)
resultado = EstandarDAO.getInstance().ejecutar(cn, queryPersonal, parametros); .put(aleatorioMin)
.put(asistencia.getString("codasis"));
updateCounts[i] = resultado.getInt("msg");
i++; resultado = EstandarDAO.getInstance().ejecutar(cn, queryPersonal, parametros);
}
updateCounts[i] = resultado.getInt("msg");
Instant finEjecucion = Instant.now(); i++;
Duration duracionProceso = Duration.between(inicioEjecucion, finEjecucion); }
log.info("El proceso ha durado " + duracionProceso);
int cont0=0; Instant finEjecucion = Instant.now();
int cont1 =0; Duration duracionProceso = Duration.between(inicioEjecucion, finEjecucion);
log.info("El proceso ha durado " + duracionProceso);
for(int update : updateCounts){ int cont0 = 0;
if(update==1)cont1++; int cont1 = 0;
else if(update==0) cont0++;
} for (int update : updateCounts) {
if (update == 1) {
if(cont1==updateCounts.length && cont1!=0){ cont1++;
resultado.put("msg", 1); } else if (update == 0) {
log.info("Se actualizaron todas las filas, ["+horaSalida+"]"); cont0++;
} }
else if(cont1>0){ }
resultado.put("msg", 2);
log.info("Se actualizaron algunas filas y otras no, ["+horaSalida+"]"); if (cont1 == updateCounts.length && cont1 != 0) {
} resultado.put("msg", 1);
else if(cont0==updateCounts.length){ log.info("Se actualizaron todas las filas, [" + horaSalida + "]");
resultado.put("msg", 0); } else if (cont1 > 0) {
log.info("No se ha actualizado ninguna fila, ["+horaSalida+"]"); resultado.put("msg", 2);
} log.info("Se actualizaron algunas filas y otras no, [" + horaSalida + "]");
} else if (cont0 == updateCounts.length) {
return resultado; resultado.put("msg", 0);
} log.info("No se ha actualizado ninguna fila, [" + horaSalida + "]");
}
private int[] generarHoraMinutoAleatorio(String horaMinuto) {
int[] aleatorio = new int[2];//horaAleatoria index=0, minAleatorio index=1 return resultado;
String[] splitHoraConsulta = horaMinuto.split(":"); }
int min = Integer.parseInt(splitHoraConsulta[1]);
int hora = Integer.parseInt(splitHoraConsulta[0]); private int[] generarHoraMinutoAleatorio(String horaMinuto) {
int[] aleatorio = new int[2];//horaAleatoria index=0, minAleatorio index=1
String[] splitHoraConsulta = horaMinuto.split(":");
int min = Integer.parseInt(splitHoraConsulta[1]);
int hora = Integer.parseInt(splitHoraConsulta[0]);
// Actualizacion de salidas // Actualizacion de salidas
if (min == 0) { if (min == 0) {
aleatorio[0] = (int) Math.floor(Math.random() * 2 + (hora - 1)); aleatorio[0] = (int) Math.floor(Math.random() * 2 + (hora - 1));
} else { } else {
aleatorio[0] = hora; aleatorio[0] = hora;
} }
if (hora == aleatorio[0]) { if (hora == aleatorio[0]) {
if (min == 0) { if (min == 0) {
aleatorio[1] = (int) Math.floor(Math.random() * (3 - 0 + 1) + 0); aleatorio[1] = (int) Math.floor(Math.random() * (3 - 0 + 1) + 0);
} else { } else {
aleatorio[1] = (int) Math.floor(Math.random() * (33 - 27 + 1) + 27); aleatorio[1] = (int) Math.floor(Math.random() * (33 - 27 + 1) + 27);
} }
} else { } else {
aleatorio[1] = (int) Math.floor(Math.random() * 3 + 57); aleatorio[1] = (int) Math.floor(Math.random() * 3 + 57);
} }
return aleatorio; return aleatorio;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment