Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Alejandro Martínez Muñoz
/
ProyectoRobotAmbientales
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
27fe502d
authored
May 12, 2024
by
Fátima Sanz Baena
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Retoque final + comentarios
parent
d55a88a1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
68 deletions
src/app/app.component.ts
src/app/backend.service.ts
src/app/cola-pedidos/cola-pedidos.component.ts
src/app/crear-pedido-dialog/crear-pedido-dialog.component.ts
src/app/mapa/mapa.component.ts
src/app/app.component.ts
View file @
27fe502d
...
...
@@ -4,9 +4,9 @@ import { MqttService, IMqttMessage } from 'ngx-mqtt';
import
{
Subscription
,
interval
}
from
'rxjs'
;
import
{
startWith
,
switchMap
}
from
'rxjs/operators'
;
import
{
CrearPedidoDialogComponent
}
from
'./crear-pedido-dialog/crear-pedido-dialog.component'
;
import
{
MapaComponent
}
from
'./mapa/mapa.component'
;
// Importa MapaComponent
import
{
MapaComponent
}
from
'./mapa/mapa.component'
;
import
{
BackendService
}
from
'./backend.service'
;
import
{
ServicioPedidoService
}
from
'./servicio-pedido.service'
;
// Asegúrate de tener este servicio
import
{
ServicioPedidoService
}
from
'./servicio-pedido.service'
;
@
Component
({
selector
:
'app-root'
,
...
...
@@ -16,11 +16,9 @@ import { ServicioPedidoService } from './servicio-pedido.service'; // Asegúrat
export
class
AppComponent
implements
OnInit
,
OnDestroy
{
private
subscription
:
Subscription
=
new
Subscription
();
//Variable para suscribirse a un topic
private
finalizaSubscription
:
Subscription
=
new
Subscription
();
private
publishInterval
:
Subscription
=
new
Subscription
();
//Variable para publicar datos cada 10 segundos
//0202000105030705000200041109060110031000000200080101100110000106010701
message
:
string
=
'
0202000105030705000200041109060110031000000200080101100110000106010701
'
;
//Variable para mostrar el mensaje MQTT
message
:
string
=
''
;
//Variable para mostrar el mensaje MQTT
@
ViewChild
(
MapaComponent
)
mapaComponent
!
:
MapaComponent
;
@
ViewChild
(
CrearPedidoDialogComponent
)
pedidodialog
!
:
CrearPedidoDialogComponent
;
...
...
@@ -37,15 +35,9 @@ export class AppComponent implements OnInit, OnDestroy {
ngOnDestroy
()
{
this
.
subscription
?.
unsubscribe
();
//Nos desconectamos del topic
this
.
publishInterval
?.
unsubscribe
();
//Nos desconectamos de publicar datos
}
/**
* Suscribe al topic 'pruebaMQTT' para recibir mensajes.
* Al recibir un mensaje, el contenido se convierte a cadena y se almacena en la propiedad `message`,
* y además se muestra en la consola.
*/
//Método para suscribirse al topic del mapa
subscribeToTopicMapa
()
{
console
.
log
(
'Conectado:'
);
...
...
@@ -55,13 +47,13 @@ subscribeToTopicMapa() {
this
.
backendService
.
enviarMapa
(
messageMQTT
).
then
((
output
:
string
)
=>
{
console
.
log
(
'Respuesta del servidor:'
,
output
)
});
// Update mapStr in MapaComponent
this
.
mapaComponent
.
mapStr
=
messageMQTT
;
this
.
message
=
messageMQTT
;
// Call ngOnInit in MapaComponent to refresh the map
this
.
mapaComponent
.
ngOnInit
();
});
}
//Método para suscribirse al topic de la posicion
subscribeToTopicPosicion
()
{
this
.
subscription
=
this
.
mqttService
.
observe
(
'equipoD/posicion'
).
subscribe
((
data
:
IMqttMessage
)
=>
{
try
{
...
...
@@ -78,8 +70,9 @@ subscribeToTopicPosicion() {
});
}
//Método para suscribirse al topic que indica si un pedido ha finalizado
subscribeToFinaliza
()
{
this
.
finalizaS
ubscription
=
this
.
mqttService
.
observe
(
'equipoD/finalizacion'
).
subscribe
({
this
.
s
ubscription
=
this
.
mqttService
.
observe
(
'equipoD/finalizacion'
).
subscribe
({
next
:
(
message
)
=>
{
console
.
log
(
'Robot ha finalizado el pedido:'
,
message
.
payload
.
toString
());
this
.
procesarFinalizacionPedido
();
...
...
@@ -92,11 +85,7 @@ procesarFinalizacionPedido() {
this
.
pedidoService
.
finalizarPedidoEnCurso
();
console
.
log
(
'Primer pedido eliminado, siguiente pedido en la cola.'
);
}
/**
* Inicia la publicación periódica de mensajes en el topic 'pruebaMQTT'.
* Se configura un intervalo que publica un mensaje cada 10 segundos, el cual incluye
* la palabra 'Prueba' seguida de la fecha y hora actual.
*/
abrirPopupCrearPedido
():
void
{
const
dialogRef
=
this
.
dialog
.
open
(
CrearPedidoDialogComponent
,
{
...
...
@@ -120,6 +109,7 @@ actualizarUltimoIdDestino(nuevoDestinoId: number) {
this
.
ultimoIdDestino
=
nuevoDestinoId
;
}
//Función para enviar el camino optimo de entrega del paquete mediante MQTT al robot
enviarCaminos
(
actual
:
number
,
paquete
:
number
,
destino
:
number
)
{
this
.
backendService
.
enviarCaminos
(
actual
,
paquete
,
destino
).
then
(
response
=>
{
console
.
log
(
'Caminos recibidos:'
,
response
);
...
...
src/app/backend.service.ts
View file @
27fe502d
// Definir las interfaces en un archivo separado o en la parte superior de tu servicio
export
interface
MapResponse
{
status
:
string
;
message
:
string
;
}
export
interface
Error
{
status
:
string
;
message
:
string
;
}
export
interface
RouteResponse
{
route
:
any
[];
// Especifica un tipo más concreto si conoces la estructura de la ruta
duration
:
number
;
}
import
{
Injectable
}
from
'@angular/core'
;
import
{
HttpClient
}
from
'@angular/common/http'
;
import
{
Observable
}
from
'rxjs'
;
@
Injectable
({
providedIn
:
'root'
...
...
@@ -24,6 +9,7 @@ export class BackendService {
constructor
(
private
http
:
HttpClient
)
{
}
//Método para realizar una petición get al backend para enviarle el mapa a este para luego pedirle caminos
enviarMapa
(
mapa
:
string
):
Promise
<
any
>
{
const
url
=
this
.
baseUrl
+
"procesarmapa?mapa="
+
encodeURIComponent
(
mapa
);
const
response
=
this
.
http
.
get
(
url
).
toPromise
();
...
...
@@ -32,11 +18,12 @@ export class BackendService {
}
//Método para realizar una petición get al backend para que este nos envíe el camino óptimo para el paquete
enviarCaminos
(
actual
:
number
,
paquete
:
number
,
destino
:
number
):
Promise
<
any
>
{
const
url
=
`
${
this
.
baseUrl
}
getcaminos?actual=
${
encodeURIComponent
(
actual
.
toString
())}
&paquete=
${
encodeURIComponent
(
paquete
.
toString
())}
&destino=
${
encodeURIComponent
(
destino
.
toString
())}
`
;
const
response
=
this
.
http
.
get
(
url
).
toPromise
();
console
.
log
(
"Respuesta sobre la ruta"
,
response
);
return
response
;
}
}
src/app/cola-pedidos/cola-pedidos.component.ts
View file @
27fe502d
...
...
@@ -34,12 +34,4 @@ export class ColaPedidosComponent implements OnInit {
this
.
pedidos
=
pedidosActualizados
;
});
}
/**
* @brief Elimina un pedido específico de la cola de pedidos.
*
* Llama al método de eliminarPedido del servicio de pedidos, que filtra y actualiza la lista de pedidos.
*
* @param id Identificador único del pedido a eliminar.
*/
}
src/app/crear-pedido-dialog/crear-pedido-dialog.component.ts
View file @
27fe502d
...
...
@@ -25,22 +25,21 @@ puntoDeEntrega: {idUnico:number,id: string, row: number, col: number} | null = n
constructor
(
private
pedidoService
:
ServicioPedidoService
,
private
dialogRef
:
MatDialogRef
<
CrearPedidoDialogComponent
>
,@
Inject
(
MAT_DIALOG_DATA
)
public
data
:
any
,
)
{
this
.
mapaString
=
data
.
mapaString
;
// Aquí se asigna el string recibido al campo mapaString
this
.
mapaString
=
data
.
mapaString
;
}
/**
* @brief Maneja la selección de un bloque en el mapa.
*
*
* Asigna el bloque seleccionado como punto de recogida o punto de entrega según el estado actual.
* Solo se permite seleccionar un punto de entrega si ya se ha seleccionado un punto de recogida y son distintos.
*
*
* @param event Objeto que contiene el ID del bloque y sus coordenadas de fila y columna.
*/
enCeldaSeleccionada
(
event
:
{
idUnico
:
number
,
id
:
string
,
row
:
number
,
col
:
number
}):
void
{
if
(
!
this
.
puntoDeRecogida
)
{
this
.
puntoDeRecogida
=
event
;
// Actualiza los estilos de resaltado aquí si es necesario
}
else
if
(
!
this
.
puntoDeEntrega
&&
(
this
.
puntoDeRecogida
.
row
!==
event
.
row
||
this
.
puntoDeRecogida
.
col
!==
event
.
col
))
{
this
.
puntoDeEntrega
=
event
;
}
...
...
@@ -48,9 +47,9 @@ constructor(private pedidoService: ServicioPedidoService, private dialogRef: Mat
/**
* @brief Obtiene la ruta de la imagen del bloque basada en sus coordenadas.
*
*
* Utiliza el servicio de mapa para obtener la imagen correspondiente al ID del bloque.
*
*
* @param block Objeto que contiene el ID del bloque y sus coordenadas de fila y columna.
* @return Ruta de la imagen del bloque.
*/
...
...
@@ -60,7 +59,7 @@ constructor(private pedidoService: ServicioPedidoService, private dialogRef: Mat
/**
* @brief Reinicia la selección de los puntos de recogida y entrega.
*
*
* Utilizado para comenzar una nueva selección después de confirmar un pedido o al desear cambiar la selección actual.
*/
resetearSeleccion
():
void
{
...
...
@@ -70,19 +69,19 @@ constructor(private pedidoService: ServicioPedidoService, private dialogRef: Mat
/**
* @brief Confirma la selección de los puntos de recogida y entrega y crea un nuevo pedido.
*
*
* Utiliza el servicio de pedidos para agregar el nuevo pedido generado con un ID único a la cola de pedidos.
*/
confirmarSeleccion
():
void
{
console
.
log
(
'Confirmación de selección con:'
,
this
.
puntoDeRecogida
,
this
.
puntoDeEntrega
);
if
(
this
.
puntoDeRecogida
&&
this
.
puntoDeEntrega
)
{
const
nuevoPedido
:
Pedido
=
{
id
:
''
,
// Asumiendo que el ID se asignará en alguna otra parte o por el backend
id
:
''
,
puntoDeRecogida
:
this
.
puntoDeRecogida
,
puntoDeEntrega
:
this
.
puntoDeEntrega
};
console
.
log
(
'Nuevo pedido:'
,
nuevoPedido
);
this
.
pedidoService
.
agregarPedido
(
nuevoPedido
);
// Cerrar el diálogo y pasar los datos necesarios al componente que abrió el diálogo
this
.
dialogRef
.
close
({
...
...
@@ -94,5 +93,5 @@ constructor(private pedidoService: ServicioPedidoService, private dialogRef: Mat
console
.
log
(
'No se ha completado la selección de puntos, no se puede confirmar.'
);
}
}
}
src/app/mapa/mapa.component.ts
View file @
27fe502d
...
...
@@ -23,10 +23,9 @@ export class MapaComponent implements OnInit {
@
Input
()
interactivo
:
boolean
=
true
;
@
Output
()
celdaSeleccionada
=
new
EventEmitter
<
{
id
:
string
,
idUnico
:
number
,
row
:
number
,
col
:
number
}
>
();
@
Output
()
celdaInvalidaClickeada
=
new
EventEmitter
<
void
>
();
// Extiende la definición de cada celda en tu matriz del mapa
mapMatrix
:
{
id
:
string
,
idUnico
:
number
,
robotPresente
:
boolean
}[][]
=
[];
//0202000105030705000200041109060110031000000200080101100110000106010701
@
Input
()
mapStr
:
string
=
"
0202000105030705000200041109060110031000000200080101100110000106010701
"
;
// Cadena de texto que representa las casillas del mapa
@
Input
()
mapStr
:
string
=
""
;
// Cadena de texto que representa las casillas del mapa
rows
:
number
=
7
;
cols
:
number
=
5
;
SeleccionadoIdRecogida
:
string
|
null
=
null
;
...
...
@@ -90,17 +89,7 @@ actualizarPosicionRobot(idUnico: number): void {
}
}
/*
enviarPedido(pedido: any): void {
this.backendService.obtenerRuta(pedido).subscribe({
next: (ruta:RouteResponse) => {
console.log('Ruta recibida del backend', ruta);
// Aquí puedes manejar la lógica para actualizar la ruta del robot o lo que sea necesario
},
error: (error:Error) => console.error('Error al obtener la ruta', error)
});
}
*/
/**
* @brief Obtiene la ruta de la imagen para un ID de bloque específico.
*
...
...
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