falta procesar el resultado

This commit is contained in:
Jaime Jiménez
2025-09-10 22:44:00 +02:00
parent 030e8af3d3
commit 6a9c197a02
12 changed files with 259 additions and 93 deletions

View File

@ -593,81 +593,72 @@ public class PresupuestoService {
return price_prototipo;
}
public HashMap<String, Object> getPrecioMaquetacion(Presupuesto presupuesto) {
public HashMap<String, Object> getPrecioMaquetacion(PresupuestoMaquetacion presupuestoMaquetacion) {
try {
if (Boolean.TRUE.equals(presupuesto.getPresupuestoMaquetacion())
&& presupuesto.getPresupuestoMaquetacionData() != null
&& !presupuesto.getPresupuestoMaquetacionData().equals("{}")) {
List<MaquetacionPrecios> lista = maquetacionPreciosRepository.findAll();
String jsonData = presupuesto.getPresupuestoMaquetacionData();
ObjectMapper objectMapper = new ObjectMapper();
PresupuestoMaquetacion pm = objectMapper.readValue(jsonData, PresupuestoMaquetacion.class);
List<MaquetacionPrecios> lista = maquetacionPreciosRepository.findAll();
// helper para obtener un precio por clave
java.util.function.Function<String, Double> price = key -> lista.stream()
.filter(p -> key.equals(p.getKey()))
.map(MaquetacionPrecios::getValue)
.findFirst()
.orElse(0.0);
// helper para obtener un precio por clave
java.util.function.Function<String, Double> price = key -> lista.stream()
.filter(p -> key.equals(p.getKey()))
.map(MaquetacionPrecios::getValue)
.findFirst()
.orElse(0.0);
BigDecimal precio = BigDecimal.ZERO;
BigDecimal precio = BigDecimal.ZERO;
// millar_maquetacion * (numCaracteres / 1000.0)
BigDecimal millares = BigDecimal.valueOf(presupuestoMaquetacion.getNumCaracteres()).divide(BigDecimal.valueOf(1000), 6,
RoundingMode.HALF_UP);
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("millar_maquetacion"))));
// millar_maquetacion * (numCaracteres / 1000.0)
BigDecimal millares = BigDecimal.valueOf(pm.getNumCaracteres()).divide(BigDecimal.valueOf(1000), 6,
RoundingMode.HALF_UP);
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("millar_maquetacion"))));
// Numero de paginas estimado
int numPaginas = 0;
Integer matricesPorPagina = maquetacionMatricesRepository.findMatrices(
MaquetacionMatrices.Formato.valueOf(pm.getFormato()),
MaquetacionMatrices.FontSize.valueOf(pm.getFontSize()));
if (matricesPorPagina != null && matricesPorPagina > 0) {
numPaginas = pm.getNumCaracteres() / matricesPorPagina;
}
// Precio por pagina estimado
BigDecimal precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
double precioPaginaEstimado = 0.0;
if (numPaginas > 0) {
precioPaginaEstimado = precioRedondeado
.divide(BigDecimal.valueOf(numPaginas), 2, RoundingMode.HALF_UP)
.doubleValue();
}
// tabla, columna, foto
precio = precio
.add(BigDecimal.valueOf(pm.getNumTablas()).multiply(BigDecimal.valueOf(price.apply("tabla"))));
precio = precio.add(
BigDecimal.valueOf(pm.getNumColumnas()).multiply(BigDecimal.valueOf(price.apply("columnas"))));
precio = precio
.add(BigDecimal.valueOf(pm.getNumFotos()).multiply(BigDecimal.valueOf(price.apply("foto"))));
if (pm.isCorreccionOrtotipografica()) {
precio = precio
.add(millares.multiply(BigDecimal.valueOf(price.apply("correccion_ortotipografica"))));
}
if (pm.isTextoMecanografiado()) {
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("mecanoescritura_por_millar"))));
}
if (pm.isDisenioPortada()) {
precio = precio.add(BigDecimal.valueOf(price.apply("disenio_portada")));
}
if (pm.isEpub()) {
precio = precio.add(BigDecimal.valueOf(price.apply("epub")));
}
// redondeo final
precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
HashMap<String, Object> out = new HashMap<>();
out.put("precio", precioRedondeado.doubleValue());
out.put("numPaginasEstimadas", numPaginas);
out.put("precioPaginaEstimado", precioPaginaEstimado);
return out;
// Numero de paginas estimado
int numPaginas = 0;
Integer matricesPorPagina = maquetacionMatricesRepository.findMatrices(
presupuestoMaquetacion.getFormato(),
presupuestoMaquetacion.getCuerpoTexto());
if (matricesPorPagina != null && matricesPorPagina > 0) {
numPaginas = presupuestoMaquetacion.getNumCaracteres() / matricesPorPagina;
}
} catch (JsonProcessingException e) {
System.out.println("Error procesando JSON de presupuesto maquetacion: " + e.getMessage());
// Precio por pagina estimado
BigDecimal precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
double precioPaginaEstimado = 0.0;
if (numPaginas > 0) {
precioPaginaEstimado = precioRedondeado
.divide(BigDecimal.valueOf(numPaginas), 2, RoundingMode.HALF_UP)
.doubleValue();
}
// tabla, columna, foto
precio = precio
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumTablas()).multiply(BigDecimal.valueOf(price.apply("tabla"))));
precio = precio.add(
BigDecimal.valueOf(presupuestoMaquetacion.getNumColumnas()).multiply(BigDecimal.valueOf(price.apply("columnas"))));
precio = precio
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumFotos()).multiply(BigDecimal.valueOf(price.apply("foto"))));
if (presupuestoMaquetacion.isCorreccionOrtotipografica()) {
precio = precio
.add(millares.multiply(BigDecimal.valueOf(price.apply("correccion_ortotipografica"))));
}
if (presupuestoMaquetacion.isTextoMecanografiado()) {
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("mecanoescritura_por_millar"))));
}
if (presupuestoMaquetacion.isDisenioPortada()) {
precio = precio.add(BigDecimal.valueOf(price.apply("disenio_portada")));
}
if (presupuestoMaquetacion.isEpub()) {
precio = precio.add(BigDecimal.valueOf(price.apply("epub")));
}
// redondeo final
precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
HashMap<String, Object> out = new HashMap<>();
out.put("precio", precioRedondeado.doubleValue());
out.put("numPaginasEstimadas", numPaginas);
out.put("precioPaginaEstimado", precioPaginaEstimado);
return out;
} catch (Exception e) {
System.out.println("Error procesando presupuesto maquetacion: " + e.getMessage());
}