Commit 9f3ad403 by Billy Larru

obtener asistencia solo de personal en planilla

parent ac350496
......@@ -9,17 +9,20 @@
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!--This all know is the output log format-->
<!--<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>-->
<PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level %logger{36}.%M() @%L - %msg%n}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}"/>
<!--%style{%-40.40C{1.}}{cyan}-->
<PatternLayout pattern="%highlight{%d{HH:mm:ss} %-5level %logger{36}.%M() @%L - %msg%n}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=magenta bold, TRACE=cyan}"/>
<!--<PatternLayout pattern="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold, TRACE=blue} %style{${sys:PID}}{magenta} [%15.15t] %style{%-40.40C{1.}}{cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%xEx}"/>-->
</Console>
<!--Document will print out all the information, the log every time you run the program will automatically clear, determined by the append property, this is also very useful, suitable for temporary test-->
<File name="log" fileName="D:/Logs/log/test.log" append="false">
<!--Para probar si guarda logs-->
<!-- <File name="log" fileName="D:/LogSalidasAutomaticas/log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
</File>-->
<!--This will print all the information, each size is more than size, then the size size of the log will automatically in the following year month was built according to the folder and file compression, as-->
<RollingFile name="RollingFile" fileName="D:/LogSalidasAutomaticas/traza.log"
filePattern="D:/Logs/errores-%d{MM-dd-yyyy}-%i.log.gz">
filePattern="D:/LogSalidasAutomaticas/traza-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss.S z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</RollingFile>
......
......@@ -16,12 +16,9 @@ public class Main {
private static final Logger log = LogManager.getLogger(Main.class);
public static void main(String[] args){
setLogLevel(Level.TRACE);
log.error("Inicializando programa...");
log.warn("advertencia...");
log.trace("traza");
log.debug("debug");
setLogLevel(Level.TRACE);
log.info("Inicializando programa [Salidas Automaticas]...");
Date horaInicio = Metodos.getHoraEjecucion("12:00");
int periodo = 86400000;//El codigo se ejecutará cada 24h, 86400000 representa 24h en milisegundos
......@@ -31,7 +28,7 @@ public class Main {
}
public static void setLogLevel(Level l) {
private static void setLogLevel(Level l) {
log.info("Setting log level to " + l.name());
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
......
......@@ -8,9 +8,8 @@ package salidasautomaticas.mysqldao;
import java.sql.Connection;
import java.time.LocalDate;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import salidasautomaticas.dao.SalidasDAO;
......@@ -21,7 +20,9 @@ import salidasautomaticas.util.EstandarDAO;
* @author sistem19user
*/
public class SalidasMysqlDAO implements SalidasDAO {
private static final org.apache.logging.log4j.Logger log = LogManager.getLogger(SalidasMysqlDAO.class);
private static final Logger log = LogManager.getLogger(SalidasMysqlDAO.class);
@Override
public JSONArray obtenerHorariosSalida() throws Exception {
JSONArray jsonArray = new JSONArray();
......@@ -41,15 +42,17 @@ public class SalidasMysqlDAO implements SalidasDAO {
+ "INNER JOIN personal p ON a.codper = p.codper "
+ "INNER JOIN salidas_update su ON p.codcargo = su.codcargo "
+ "WHERE "
+ " a.fecha_asis=? "
+ "estado in (1, 2, 5) "//Que sean asistencias 1=Asistio, 2=No marco y 5=Tardanza
+ "AND a.fecha_asis=? "
+ "AND p.retirado = 0 "
+ "AND p.horaing = su.horaLV "
+ "AND p.mining = su.minutoLV "
+ "AND p.horaingsabado = su.sabadoLV "
+ "AND p.miningsabado = su.sabadoS "
+ "AND NOT p.codlocal IN ('L035', 'L053', 'L038') "
+ "AND NOT p.pronoe = 1 "
+ "AND NOT p.codcargo IN (71, 13) "
+ "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.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 NOT p.horaing > 19 "
+ "AND NOT p.salidaS = '') as tabla WHERE NULLIF( {campo_salida} , '') is NOT null GROUP BY {campo_salida} ";
......@@ -104,6 +107,9 @@ public class SalidasMysqlDAO implements SalidasDAO {
@Override
public JSONArray obtenerAsistencias(String horaProgramada) throws Exception {
Connection cn = MysqlDAOFactory.obtenerConexion("nuevo");
String fechaPartida = "2018-01-01";
String query = "SELECT * from "
+ "(select "
+ " asistencia.codasis, "
......@@ -118,12 +124,13 @@ public class SalidasMysqlDAO implements SalidasDAO {
+ "AND ( {campo_salida} <= ? AND asistencia.fecha_asis='{fecha_hoy}' "//Se setea la horaProgramada como parametro en "?"
+ "OR asistencia.fecha_asis BETWEEN '{fecha_partida}' AND '{fecha_ayer}') "
+ "AND {campo_salida} is not NULL "
+ "AND NOT personal.codlocal IN ('L035', 'L053', 'L038') "//Que no sea profesores por horas, pronoe belisario, grupo MH
+ "AND NOT personal.codcargo IN (71, 13) "//Que no sea policia ni de cafeteria
+ "AND NOT personal.codlocal IN ('L035', 'L053', 'L038') "//Que no sea profesores por horas, pronoe belisario y grupo MH
+ "AND NOT personal.codcargo IN (71, 13, 96, 41) "//Que no sea policia ni de cafeteria ni vigilante ni interna psicologa
+ "AND NOT personal.pronoe = 1 " //Que no sea pronoe
+ "AND (WEEKDAY(asistencia.fecha_asis) + 1) !=7 " //Que no sea domingo
+ "AND NOT ( (WEEKDAY(asistencia.fecha_asis) + 1)=6 and personal.codcargo in ({cod_cargo_primaria}) ) " //Que no sean de primaria los sabados
+ "AND asistencia.estado in (1, 2, 5)"//Que sean asistio, tardanza y no marco
+ "AND asistencia.estado in (1, 2, 5) "//Que sean asistio, tardanza y no marco
+ "AND p.tmp_id not in (99998, 9998, 99999, 9888) "//Que esten en planilla
+ "AND personal.retirado=0) as tabla "
+ "where tabla.salida!=''";
......@@ -134,8 +141,6 @@ public class SalidasMysqlDAO implements SalidasDAO {
+ ") ";
String codCargoPrimaria = "1, 2, 4, 9, 11, 12, 20, 25, 33, 39, 40, 45, 51";
String fechaPartida = "2018-04-01";
query = query.replaceAll("\\{campo_salida\\}", campoSalida);
query = query.replaceAll("\\{fecha_hoy\\}", getFechaHoy());
......@@ -153,15 +158,14 @@ public class SalidasMysqlDAO implements SalidasDAO {
@Override
public JSONObject actualizarSalida(String horaSalida) throws Exception {
JSONObject resultado = null;
JSONObject resultado = new JSONObject();
Connection cn = MysqlDAOFactory.obtenerConexion("nuevo");
int aleatorioHora = 0, aleatorioMin = 0;
JSONArray listaAsistencias = obtenerAsistencias(horaSalida);
log.info("tamaño lista=" + listaAsistencias.length());
log.info("hora=" +horaSalida+ ", asistencias para actualizar=" + listaAsistencias.length());
log.info("lista de asistencias para actualizar " + horaSalida + " " + listaAsistencias);
int[] updateCounts = new int[listaAsistencias.length()];
boolean updateAll = false;
......@@ -193,9 +197,29 @@ public class SalidasMysqlDAO implements SalidasDAO {
updateCounts[i] = resultado.getInt("msg");
i++;
log.info("Asistencia actualizada");
}
int cont0=0;
int cont1 =0;
for(int update : updateCounts){
if(update==1)cont1++;
else if(update==0) cont0++;
}
if(cont1==updateCounts.length && cont1!=0){
resultado.put("msg", 1);
log.info("Se actualizaron todas las filas, ["+horaSalida+"]");
}
else if(cont1>0){
resultado.put("msg", 2);
log.info("Se actualizaron algunas filas y otras no, ["+horaSalida+"]");
}
else if(cont0==updateCounts.length){
resultado.put("msg", 0);
log.info("No se ha actualizado ninguna fila, ["+horaSalida+"]");
}
return resultado;
}
......@@ -232,7 +256,10 @@ public class SalidasMysqlDAO implements SalidasDAO {
+ " SELECT p.codper, su.salidaLV, su.salidaS FROM personal p INNER JOIN salidas_update su ON p.codcargo=su.codcargo "
+ " WHERE retirado=0 AND p.horaing=su.horaLV and p.mining=su.minutoLV "
+ " and p.horaingsabado=su.sabadoLV AND p.miningsabado=su.sabadoS and NOT p.codlocal in('L035','L053','L038') "
+ " AND NOT pronoe=1 AND not p.codcargo in (71,13) and horaing < 19 and (nullif(p.salidaLV,'') is null and nullif(p.salidaS, '') is null) "
+ " AND NOT pronoe=1 "
+ " AND not p.codcargo in (71, 13, 96, 41) "//Que no sea policia, cafeteria, vigilante ni interna psicologa
// + " AND p.tmp_id not in (99998, 9998, 99999, 9888) "//Que esten en planilla
+ " and horaing < 19 and (nullif(p.salidaLV,'') is null and nullif(p.salidaS, '') is null) "
+ " ) as tbl "
+ "SET p.salidaLV=tbl.salidaLV, "
+ " p.salidaS=tbl.salidaS "
......@@ -242,12 +269,12 @@ public class SalidasMysqlDAO implements SalidasDAO {
return resultado;
}
public static void main(String[] args) {
try {
System.out.println(new SalidasMysqlDAO().actualizarSalida("11:00"));;
System.out.println(new SalidasMysqlDAO().actualizarSalida("11:00"));
} catch (Exception ex) {
Logger.getLogger(SalidasMysqlDAO.class.getName()).log(Level.SEVERE, null, ex);
log.error("error", ex);
}
}
......
......@@ -7,39 +7,45 @@ package salidasautomaticas.schedule;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import salidasautomaticas.main.Main;
import salidasautomaticas.services.SalidasServices;
/**
*
* @author sistem19user
*/
public class ActualizarSalidaTask extends TimerTask{
public class ActualizarSalidaTask extends TimerTask {
private static final Logger log = LogManager.getLogger(Main.class);
SalidasServices services = new SalidasServices();
private Timer timer;
private String horaSalida;
public ActualizarSalidaTask(Timer timer, String horaSalida){
public ActualizarSalidaTask(Timer timer, String horaSalida) {
this.timer = timer;
this.horaSalida = horaSalida;
}
@Override
public void run() {
System.out.println("Ejecutando salida "+horaSalida);
JSONObject objJSON= services.actualizarSalidas(horaSalida);
log.trace("Ejecutando salida " + horaSalida);
services.actualizarSalidas(horaSalida);
log.info("Se generaron salidas");
JSONObject objSalidaAsignada= services.asignarHorarioSalida();
if(objSalidaAsignada.getInt("msg")>0){
System.out.println("Se asignaron horarios de salida correctamente, filas afectadas="+objSalidaAsignada.getInt("msg"));
}else{
System.out.println("No hubo horarios de salida que asignar");
JSONObject objSalidaAsignada = services.asignarHorarioSalida();
if (objSalidaAsignada.getInt("msg") > 0) {
log.info("Se asignaron horarios de salida correctamente, filas afectadas=" + objSalidaAsignada.getInt("msg"));
} else {
log.info("No hubo horarios de salida que asignar");
}
log.trace("Matando timer");
timer.cancel();
}
}
......@@ -10,9 +10,8 @@ import java.util.Date;
import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import salidasautomaticas.services.SalidasServices;
......@@ -23,30 +22,30 @@ import salidasautomaticas.util.Metodos;
* @author sistem19user
*/
public class ProgramarSalidasTask extends TimerTask {
private static final org.apache.logging.log4j.Logger log = LogManager.getLogger(ProgramarSalidasTask.class);
private SalidasServices service = new SalidasServices();
private static final Logger log = LogManager.getLogger(ProgramarSalidasTask.class);
private static SalidasServices service = new SalidasServices();
@Override
public void run() {
try {
// JSONArray listaHorarios = service.obtenerHorariosSalida();
JSONArray listaHorarios = new JSONArray();
String[] arraySalidas = {"12:31", "14:46", "14:50", "17:00", "17:30", "18:00"};
JSONArray listaHorarios = service.obtenerHorariosSalida();
// JSONArray listaHorarios = new JSONArray();
// String[] arraySalidas = {"08:42", "14:46", "14:50", "17:00", "17:30", "18:00"};
for (String salida : arraySalidas) {
listaHorarios.put(new JSONObject().put("salida", salida));
}
// for (String salida : arraySalidas) {
// listaHorarios.put(new JSONObject().put("salida", salida));
// }
Timer timer;
TimerTask task;
log.info("horario leido= "+listaHorarios);
for(Iterator it = listaHorarios.iterator(); it.hasNext();) {
JSONObject obj = (JSONObject) it.next();
String horaSalida = obj.getString("salida");
log.info("Leyendo hora de salida " + horaSalida);
log.trace("Leyendo hora de salida " + horaSalida);
if (validarProgramacionSalida(horaSalida)) {
log.info("Programando hora de salida " + horaSalida);
Date horaEjecucion = Metodos.getHoraEjecucion(horaSalida);
......@@ -55,15 +54,14 @@ public class ProgramarSalidasTask extends TimerTask {
task = new ActualizarSalidaTask(timer, horaSalida);
timer.schedule(task, horaEjecucion);
log.info("Timer " + timer);
log.trace("Timer " + timer);
} else {
log.info("Ya pasó la hora");
log.trace("Ya pasó la hora");
}
log.info("\n");
}
} catch (Exception ex) {
log.error(ex);
log.error("error", ex);
}
}
......
......@@ -6,7 +6,6 @@ import org.json.JSONArray;
import org.json.JSONObject;
import salidasautomaticas.dao.DAOFactory;
import salidasautomaticas.dao.SalidasDAO;
import salidasautomaticas.main.Main;
/**
*
......@@ -24,7 +23,7 @@ public class SalidasServices {
try {
listaHorarios = salidadao.obtenerHorariosSalida();
} catch (Exception e) {
log.error(e);
log.error("error", e);
}
return listaHorarios;
......@@ -35,7 +34,7 @@ public class SalidasServices {
try {
valor = salidadao.actualizarSalida(horaSalida);
} catch (Exception e) {
log.error(e);
log.error("error", e);
}
return valor;
}
......@@ -45,7 +44,7 @@ public class SalidasServices {
try {
valor = salidadao.asignarHorarioSalida();
} catch (Exception e) {
log.error(e);
log.error("error", e);
}
return valor;
}
......
......@@ -11,6 +11,8 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
......@@ -20,6 +22,8 @@ import org.json.JSONObject;
*/
public class EstandarDAO {
private static final Logger log = LogManager.getLogger(EstandarDAO.class);
private static EstandarDAO instance;
private EstandarDAO() {
......@@ -47,15 +51,17 @@ public class EstandarDAO {
}
/**
* Este metodo ejecuta una sentencia sql de consulta(solamente selects) en la base de datos y
* devuelve como resultado en un JSONArray los registros obtenidos
*
* Este metodo ejecuta una sentencia sql de consulta(solamente selects) en
* la base de datos y devuelve como resultado en un JSONArray los registros
* obtenidos
*
*
* @param cn objeto que representa la conexion a la base de datos
* @param query sentencia sql que se desea ejecutar en la base de datos
* @param parametros parametros que vamos a pasar al query, *es opcional
* @return Devuelve como resultado los registros obtenidos por el query en un objeto JSONArray
* @throws Exception
* @return Devuelve como resultado los registros obtenidos por el query en
* un objeto JSONArray
* @throws Exception
*/
public JSONArray consultar(Connection cn, String query, JSONArray... parametros) throws Exception {
//objeto que almacena todos las filas obtenidas por el query
......@@ -70,14 +76,14 @@ public class EstandarDAO {
if (parametros != null && parametros.length > 0) {
JSONArray params = parametros[0];
int cont = 1;
//Recorremos la lista de parametros y lo seteamos en el preparedstatement
for (Object parametro : params) {
castingPS(ps, cont, parametro);
cont++;
}
}
System.out.println("query [SELECT] ="+ps);
log.trace("query [SELECT] =" + ps);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rm = rs.getMetaData();
......@@ -96,7 +102,7 @@ public class EstandarDAO {
}
} catch (Exception ex) {
ex.printStackTrace();
log.error("error", ex);
throw ex;
}
return jsonArray;
......@@ -131,7 +137,7 @@ public class EstandarDAO {
}
}
System.out.println("consulta ..... "+ps);
log.trace("query [ExecuteUpdate]= " + ps);
int filas = ps.executeUpdate();
if (filas > 0) {
obj.put("msg", filas);
......@@ -141,14 +147,15 @@ public class EstandarDAO {
// cn.close();
}
} catch (Exception ex) {
ex.printStackTrace();
log.error("error", ex);
throw ex;
}
return obj;
}
/**
*Setea en el prepared statement el valor del parametro segun su tipo de dato.
* Setea en el prepared statement el valor del parametro segun su tipo de
* dato.
*
* @param ps representa el objeto PreparedStatement
* @param index indica la posicion del parametro en la consulta sql
......@@ -168,14 +175,16 @@ public class EstandarDAO {
}
/**
* Obtiene el valor de una columna de una tabla y lo guarda en el objeto JSONObject
* con el tipo de dato que le corresponde.
*
* @param rs Objeto ResultSet para obtener el valor de una columna de una tabla
* @param rsmd Objeto ResultSetMetaData nos permite obtener el nombre y tipo de columna
* Obtiene el valor de una columna de una tabla y lo guarda en el objeto
* JSONObject con el tipo de dato que le corresponde.
*
* @param rs Objeto ResultSet para obtener el valor de una columna de una
* tabla
* @param rsmd Objeto ResultSetMetaData nos permite obtener el nombre y tipo
* de columna
* @param columnIndex Posicion de la columna en la sentencia sql
* @param obj Representa a un registro de la base de datos
* @throws SQLException
* @throws SQLException
*/
private void castColumn(ResultSet rs, ResultSetMetaData rsmd, int columnIndex, JSONObject obj) throws SQLException {
//obtenemos el tipo de dato de la columna de la tabla
......@@ -197,13 +206,4 @@ public class EstandarDAO {
obj.put(rsmd.getColumnName(columnIndex), rs.getString(columnIndex));
}
}
// public static void main(String[] args) throws Exception {
// String query = "select * from ubigeo";
//
// Connection cn = MysqlDAOFactory.getConneccion("capacitacion");
// JSONArray obj = EstandarDAO.getInstance().consultar(cn, query);
//
// System.out.println(obj);
// }
}
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