terminado

This commit is contained in:
2026-02-08 18:50:48 +01:00
parent cc2d2ef193
commit fe4d180e2d
5 changed files with 72 additions and 575 deletions

View File

@ -3,6 +3,7 @@ package com.imprimelibros.erp.pedidos;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import java.util.List;
@ -25,18 +26,34 @@ public class PedidoEstadoService {
/**
* Ejecuta cada noche a las 4:00 AM
*/
@Transactional
// test @Scheduled(cron = "0 * * * * *")
@Scheduled(cron = "0 0 4 * * *")
public void actualizarEstadosPedidos() {
log.info("JOB actualizarEstadosPedidos iniciado");
List<PedidoLinea> pedidosLineas = pedidoLineaRepository.findPedidosLineasParaActualizarEstado();
log.info("Pedidos líneas a procesar: {}", pedidosLineas.size());
for (PedidoLinea linea : pedidosLineas) {
log.info("Actualizando estado pedidoLineaId={}", linea.getId());
try {
Map<String, Object> resultado = pedidoService.actualizarEstado(linea.getId(), Locale.getDefault());
if (!Boolean.TRUE.equals(resultado.get("success"))) {
log.error("Error al actualizar estado. pedidoLineaId={} message={}",
linea.getId(), resultado.get("message"));
} else {
String msg = String.valueOf(resultado.get("message"));
if (msg != null && msg.contains("Orden de trabajo no encontrada")) {
log.warn("OT no encontrada. pedidoLineaId={} message={}", linea.getId(), msg);
}
}
} catch (Exception ex) {
log.error("Excepción actualizando estado. pedidoLineaId={}", linea.getId(), ex);

View File

@ -24,10 +24,12 @@ import com.imprimelibros.erp.presupuesto.service.PresupuestoService;
import com.imprimelibros.erp.users.UserService;
import com.imprimelibros.erp.direcciones.DireccionService;
import com.imprimelibros.erp.externalApi.skApiClient;
import com.imprimelibros.erp.facturacion.FacturaDireccion;
import com.imprimelibros.erp.facturacion.dto.DireccionFacturacionDto;
import com.imprimelibros.erp.pedidos.PedidoLinea.Estado;
import org.springframework.http.HttpStatus;
import org.springframework.web.client.HttpClientErrorException;
@Service
public class PedidoService {
@ -341,14 +343,27 @@ public class PedidoService {
Map<String, Object> result = skApiClient.checkPedidoEstado(refExterna, locale);
if (result == null || result.get("estado") == null) {
if (result == null) {
return Map.of(
"success", false,
"message", messageSource.getMessage("pedido.errors.update-server-error", null, locale));
}
String estadoStr = String.valueOf(result.get("estado"));
if (Boolean.TRUE.equals(result.get("notFound"))) {
return Map.of(
"success", true,
"message", String.valueOf(result.getOrDefault("message", "OT no encontrada (404). Se omite.")));
}
Object estadoObj = result.get("estado");
if (estadoObj == null) {
return Map.of(
"success", false,
"message", messageSource.getMessage("pedido.errors.update-server-error", null, locale));
}
String estadoStr = String.valueOf(estadoObj);
PedidoLinea.Estado estadoSk;
try {
// si la API devuelve minúsculas tipo "produccion", esto funciona