diff --git a/src/controllers/PrinterController.ts b/src/controllers/PrinterController.ts index bf78e39..5553bb4 100644 --- a/src/controllers/PrinterController.ts +++ b/src/controllers/PrinterController.ts @@ -74,12 +74,17 @@ class PrinterController { } }) - if (printer) + if (printer) { + const avgMonthPrint = await PrinterStatusService.avgMonthPrint( + printer.serialNumber + ) + res.json({ ...printer, + avgMonthPrint, status: distributedCopy(printer.status, Number(take)) }) - else res.status(400).json({ error: 'Printer not found' }) + } else res.status(400).json({ error: 'Printer not found' }) } static async edit(req: Request, res: Response) { diff --git a/src/services/PrinterStatusService.ts b/src/services/PrinterStatusService.ts index fd4be7f..203b63e 100644 --- a/src/services/PrinterStatusService.ts +++ b/src/services/PrinterStatusService.ts @@ -254,4 +254,52 @@ export class PrinterStatusService { return printerInfo } + + static async avgMonthPrint(serialNumber: string) { + const gte = new Date(new Date().getTime() - 1000 * 3600 * 24 * 180) + + const firstPrinterStatus = await prisma.printerStatus.findFirst({ + where: { + printer: { + serialNumber + }, + timestamp: { + gte + } + }, + orderBy: { timestamp: 'asc' } + }) + + const lastPrinterStatus = await prisma.printerStatus.findFirst({ + where: { + printer: { + serialNumber + }, + timestamp: { + gte + } + }, + orderBy: { timestamp: 'desc' } + }) + + if (!firstPrinterStatus || !lastPrinterStatus) return 0 + + const firstCounter = firstPrinterStatus.counter + const lastCounter = lastPrinterStatus.counter + + const firstTimestamp = firstPrinterStatus.timestamp + const lastTimestamp = lastPrinterStatus.timestamp + + const timeDiff = lastTimestamp.getTime() - firstTimestamp.getTime() + + const counterDiff = lastCounter - firstCounter + + const avgMonthPrint = Math.floor( + counterDiff / (timeDiff / 1000 / 3600 / 24 / 30) + ) + + console.log(counterDiff, timeDiff, avgMonthPrint) + + return avgMonthPrint + } } diff --git a/web/src/views/Printer.vue b/web/src/views/Printer.vue index 0d090fe..b422373 100644 --- a/web/src/views/Printer.vue +++ b/web/src/views/Printer.vue @@ -13,6 +13,24 @@ + + + + + Média mensal de impressões + + + + + {{ + new Intl.NumberFormat('pt-BR').format(printer?.avgMonthPrint) + }} + +
Baseado nos dados dos últimos 180 dias
+
+
+
+