Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
SalidasAutomaticas
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Billy Larru
SalidasAutomaticas
Commits
04e6c7d0
Commit
04e6c7d0
authored
Sep 22, 2018
by
Billy Larru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[EDIT leyendo horario de salida diferente de 00:00 y 24:00]
parent
5a1dc576
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
221 additions
and
218 deletions
+221
-218
SalidasMysqlDAO.java
...ain/java/salidasautomaticas/mysqldao/SalidasMysqlDAO.java
+221
-218
No files found.
src/main/java/salidasautomaticas/mysqldao/SalidasMysqlDAO.java
View file @
04e6c7d0
...
...
@@ -24,222 +24,226 @@ import salidasautomaticas.util.EstandarDAO;
*/
public
class
SalidasMysqlDAO
implements
SalidasDAO
{
private
static
final
Logger
log
=
LogManager
.
getLogger
(
SalidasMysqlDAO
.
class
);
@Override
public
JSONArray
obtenerHorariosSalida
()
throws
Exception
{
JSONArray
jsonArray
=
new
JSONArray
();
int
diaSemana
=
obtenerDiaSemana
();
if
(
diaSemana
==
7
)
{
return
jsonArray
;
}
Connection
cn
=
MysqlDAOFactory
.
obtenerConexion
(
"nuevo"
);
String
query
=
"SELECT {campo_salida} as salida FROM ("
+
"SELECT"
+
" p.salidaLV, "
+
" p.salidaS "
+
"FROM "
+
"personal p "
+
"WHERE "
+
"p.codtipo!=3 "
//Que registren asistencia
+
"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.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} "
;
if
(
diaSemana
>=
1
&&
diaSemana
<=
5
)
{
query
=
query
.
replaceAll
(
"\\{campo_salida\\}"
,
"tabla.salidaLV"
);
}
else
if
(
diaSemana
==
6
)
{
query
=
query
.
replaceAll
(
"\\{campo_salida\\}"
,
"tabla.salidaS"
);
}
jsonArray
=
EstandarDAO
.
getInstance
().
consultar
(
cn
,
query
);
return
jsonArray
;
}
private
int
obtenerDiaSemana
()
{
int
diaSemana
;
LocalDate
date
=
LocalDate
.
now
();
diaSemana
=
date
.
getDayOfWeek
().
getValue
();
return
diaSemana
;
}
private
String
getFechaHoy
()
{
String
fechaHoy
;
LocalDate
date
=
LocalDate
.
now
();
int
anio
=
date
.
getYear
();
int
mes
=
date
.
getMonthValue
();
int
dia
=
date
.
getDayOfMonth
();
fechaHoy
=
String
.
format
(
"%s-%02d-%02d"
,
anio
,
mes
,
dia
);
return
fechaHoy
;
}
private
String
getFechaAyer
()
{
String
fechaAyer
;
LocalDate
date
=
LocalDate
.
now
();
date
=
date
.
minusDays
(
1
);
int
anio
=
date
.
getYear
();
int
mes
=
date
.
getMonthValue
();
int
dia
=
date
.
getDayOfMonth
();
fechaAyer
=
String
.
format
(
"%s-%02d-%02d"
,
anio
,
mes
,
dia
);
return
fechaAyer
;
}
@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, "
+
"asistencia.fecha_asis, "
+
"{campo_salida} as salida "
+
"FROM "
+
" asistencia "
+
"INNER JOIN personal ON asistencia.codper = personal.codper "
+
"WHERE "
+
" asistencia.horasal = '' "
+
"AND asistencia.minsal = '' "
+
"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 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 personal.tmp_id not in (99998, 9998, 99999, 9888) "
//Que esten en planilla
+
"AND personal.codtipo!=3 "
//Que si registren asistencia
+
"AND personal.retirado=0) as tabla "
//Que no esten retirados
+
"where tabla.salida!=''"
;
String
campoSalida
=
"("
+
"case "
+
"when (WEEKDAY(asistencia.fecha_asis) + 1)<6 then salidaLV "
+
"when (WEEKDAY(asistencia.fecha_asis) + 1)=6 then salidaS end "
+
") "
;
String
codCargoPrimaria
=
"1, 2, 4, 9, 11, 12, 20, 25, 33, 39, 40, 45, 51"
;
query
=
query
.
replaceAll
(
"\\{campo_salida\\}"
,
campoSalida
);
query
=
query
.
replaceAll
(
"\\{fecha_hoy\\}"
,
getFechaHoy
());
query
=
query
.
replaceAll
(
"\\{fecha_partida\\}"
,
fechaPartida
);
query
=
query
.
replaceAll
(
"\\{fecha_ayer\\}"
,
getFechaAyer
());
query
=
query
.
replaceAll
(
"\\{cod_cargo_primaria\\}"
,
codCargoPrimaria
);
JSONArray
parametros
=
new
JSONArray
();
parametros
.
put
(
horaProgramada
);
JSONArray
jsonArray
=
EstandarDAO
.
getInstance
().
consultar
(
cn
,
query
,
parametros
);
return
jsonArray
;
}
@Override
public
JSONObject
actualizarSalida
(
String
horaSalida
)
throws
Exception
{
JSONObject
resultado
=
new
JSONObject
();
Connection
cn
=
MysqlDAOFactory
.
obtenerConexion
(
"nuevo"
);
int
aleatorioHora
=
0
,
aleatorioMin
=
0
;
JSONArray
listaAsistencias
=
obtenerAsistencias
(
horaSalida
);
log
.
info
(
"hora de salida="
+
horaSalida
+
", asistencias para actualizar="
+
listaAsistencias
.
length
());
Instant
inicioEjecucion
=
Instant
.
now
();
int
[]
updateCounts
=
new
int
[
listaAsistencias
.
length
()];
boolean
updateAll
=
false
;
int
i
=
0
;
for
(
Iterator
it
=
listaAsistencias
.
iterator
();
it
.
hasNext
();)
{
JSONObject
asistencia
=
(
JSONObject
)
it
.
next
();
String
salidaPersonal
=
asistencia
.
getString
(
"salida"
);
if
(
salidaPersonal
==
null
||
salidaPersonal
.
isEmpty
())
{
updateCounts
[
i
]
=
-
1
;
continue
;
}
int
[]
aleatorio
=
generarHoraMinutoAleatorio
(
salidaPersonal
);
aleatorioHora
=
aleatorio
[
0
];
aleatorioMin
=
aleatorio
[
1
];
String
queryPersonal
=
"update asistencia set horasal= ?,minsal=? where codasis=? "
;
JSONArray
parametros
=
new
JSONArray
();
parametros
.
put
(
aleatorioHora
)
.
put
(
aleatorioMin
)
.
put
(
asistencia
.
getString
(
"codasis"
));
resultado
=
EstandarDAO
.
getInstance
().
ejecutar
(
cn
,
queryPersonal
,
parametros
);
updateCounts
[
i
]
=
resultado
.
getInt
(
"msg"
);
i
++;
}
Instant
finEjecucion
=
Instant
.
now
();
Duration
duracionProceso
=
Duration
.
between
(
inicioEjecucion
,
finEjecucion
);
log
.
info
(
"El proceso ha durado "
+
duracionProceso
);
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
;
}
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
]);
private
static
final
Logger
log
=
LogManager
.
getLogger
(
SalidasMysqlDAO
.
class
);
@Override
public
JSONArray
obtenerHorariosSalida
()
throws
Exception
{
JSONArray
jsonArray
=
new
JSONArray
();
int
diaSemana
=
obtenerDiaSemana
();
if
(
diaSemana
==
7
)
{
return
jsonArray
;
}
Connection
cn
=
MysqlDAOFactory
.
obtenerConexion
(
"nuevo"
);
String
query
=
"SELECT {campo_salida} as salida FROM ("
+
"SELECT"
+
" p.salidaLV, "
+
" p.salidaS "
+
"FROM "
+
"personal p "
+
"WHERE "
+
"p.codtipo!=3 "
//Que registren asistencia
+
"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.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 "
+
"AND ({campo_salida}!='24:00' AND {campo_salida}!='00:00')"
+
"GROUP BY {campo_salida} "
;
if
(
diaSemana
>=
1
&&
diaSemana
<=
5
)
{
query
=
query
.
replaceAll
(
"\\{campo_salida\\}"
,
"tabla.salidaLV"
);
}
else
if
(
diaSemana
==
6
)
{
query
=
query
.
replaceAll
(
"\\{campo_salida\\}"
,
"tabla.salidaS"
);
}
jsonArray
=
EstandarDAO
.
getInstance
().
consultar
(
cn
,
query
);
return
jsonArray
;
}
private
int
obtenerDiaSemana
()
{
int
diaSemana
;
LocalDate
date
=
LocalDate
.
now
();
diaSemana
=
date
.
getDayOfWeek
().
getValue
();
return
diaSemana
;
}
private
String
getFechaHoy
()
{
String
fechaHoy
;
LocalDate
date
=
LocalDate
.
now
();
int
anio
=
date
.
getYear
();
int
mes
=
date
.
getMonthValue
();
int
dia
=
date
.
getDayOfMonth
();
fechaHoy
=
String
.
format
(
"%s-%02d-%02d"
,
anio
,
mes
,
dia
);
return
fechaHoy
;
}
private
String
getFechaAyer
()
{
String
fechaAyer
;
LocalDate
date
=
LocalDate
.
now
();
date
=
date
.
minusDays
(
1
);
int
anio
=
date
.
getYear
();
int
mes
=
date
.
getMonthValue
();
int
dia
=
date
.
getDayOfMonth
();
fechaAyer
=
String
.
format
(
"%s-%02d-%02d"
,
anio
,
mes
,
dia
);
return
fechaAyer
;
}
@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, "
+
"asistencia.fecha_asis, "
+
"{campo_salida} as salida "
+
"FROM "
+
" asistencia "
+
"INNER JOIN personal ON asistencia.codper = personal.codper "
+
"WHERE "
+
" asistencia.horasal = '' "
+
"AND asistencia.minsal = '' "
+
"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 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 personal.tmp_id not in (99998, 9998, 99999, 9888) "
//Que esten en planilla
+
"AND personal.codtipo!=3 "
//Que si registren asistencia
+
"AND personal.retirado=0) as tabla "
//Que no esten retirados
+
"where tabla.salida!=''"
;
String
campoSalida
=
"("
+
"case "
+
"when (WEEKDAY(asistencia.fecha_asis) + 1)<6 then salidaLV "
+
"when (WEEKDAY(asistencia.fecha_asis) + 1)=6 then salidaS end "
+
") "
;
String
codCargoPrimaria
=
"1, 2, 4, 9, 11, 12, 20, 25, 33, 39, 40, 45, 51"
;
query
=
query
.
replaceAll
(
"\\{campo_salida\\}"
,
campoSalida
);
query
=
query
.
replaceAll
(
"\\{fecha_hoy\\}"
,
getFechaHoy
());
query
=
query
.
replaceAll
(
"\\{fecha_partida\\}"
,
fechaPartida
);
query
=
query
.
replaceAll
(
"\\{fecha_ayer\\}"
,
getFechaAyer
());
query
=
query
.
replaceAll
(
"\\{cod_cargo_primaria\\}"
,
codCargoPrimaria
);
JSONArray
parametros
=
new
JSONArray
();
parametros
.
put
(
horaProgramada
);
JSONArray
jsonArray
=
EstandarDAO
.
getInstance
().
consultar
(
cn
,
query
,
parametros
);
return
jsonArray
;
}
@Override
public
JSONObject
actualizarSalida
(
String
horaSalida
)
throws
Exception
{
JSONObject
resultado
=
new
JSONObject
();
Connection
cn
=
MysqlDAOFactory
.
obtenerConexion
(
"nuevo"
);
int
aleatorioHora
=
0
,
aleatorioMin
=
0
;
JSONArray
listaAsistencias
=
obtenerAsistencias
(
horaSalida
);
log
.
info
(
"hora de salida="
+
horaSalida
+
", asistencias para actualizar="
+
listaAsistencias
.
length
());
Instant
inicioEjecucion
=
Instant
.
now
();
int
[]
updateCounts
=
new
int
[
listaAsistencias
.
length
()];
boolean
updateAll
=
false
;
int
i
=
0
;
for
(
Iterator
it
=
listaAsistencias
.
iterator
();
it
.
hasNext
();)
{
JSONObject
asistencia
=
(
JSONObject
)
it
.
next
();
String
salidaPersonal
=
asistencia
.
getString
(
"salida"
);
if
(
salidaPersonal
==
null
||
salidaPersonal
.
isEmpty
())
{
updateCounts
[
i
]
=
-
1
;
continue
;
}
int
[]
aleatorio
=
generarHoraMinutoAleatorio
(
salidaPersonal
);
aleatorioHora
=
aleatorio
[
0
];
aleatorioMin
=
aleatorio
[
1
];
String
queryPersonal
=
"update asistencia set horasal= ?,minsal=? where codasis=? "
;
JSONArray
parametros
=
new
JSONArray
();
parametros
.
put
(
aleatorioHora
)
.
put
(
aleatorioMin
)
.
put
(
asistencia
.
getString
(
"codasis"
));
resultado
=
EstandarDAO
.
getInstance
().
ejecutar
(
cn
,
queryPersonal
,
parametros
);
updateCounts
[
i
]
=
resultado
.
getInt
(
"msg"
);
i
++;
}
Instant
finEjecucion
=
Instant
.
now
();
Duration
duracionProceso
=
Duration
.
between
(
inicioEjecucion
,
finEjecucion
);
log
.
info
(
"El proceso ha durado "
+
duracionProceso
);
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
;
}
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
if
(
min
==
0
)
{
aleatorio
[
0
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
2
+
(
hora
-
1
));
}
else
{
aleatorio
[
0
]
=
hora
;
}
if
(
hora
==
aleatorio
[
0
])
{
if
(
min
==
0
)
{
aleatorio
[
1
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
(
3
-
0
+
1
)
+
0
);
}
else
{
aleatorio
[
1
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
(
33
-
27
+
1
)
+
27
);
}
}
else
{
aleatorio
[
1
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
3
+
57
);
}
return
aleatorio
;
}
}
\ No newline at end of file
if
(
min
==
0
)
{
aleatorio
[
0
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
2
+
(
hora
-
1
));
}
else
{
aleatorio
[
0
]
=
hora
;
}
if
(
hora
==
aleatorio
[
0
])
{
if
(
min
==
0
)
{
aleatorio
[
1
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
(
3
-
0
+
1
)
+
0
);
}
else
{
aleatorio
[
1
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
(
33
-
27
+
1
)
+
27
);
}
}
else
{
aleatorio
[
1
]
=
(
int
)
Math
.
floor
(
Math
.
random
()
*
3
+
57
);
}
return
aleatorio
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment