Show avg
This commit is contained in:
parent
e416bbf00b
commit
3d9f3f0135
|
@ -74,12 +74,17 @@ class PrinterController {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (printer)
|
if (printer) {
|
||||||
|
const avgMonthPrint = await PrinterStatusService.avgMonthPrint(
|
||||||
|
printer.serialNumber
|
||||||
|
)
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
...printer,
|
...printer,
|
||||||
|
avgMonthPrint,
|
||||||
status: distributedCopy(printer.status, Number(take))
|
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) {
|
static async edit(req: Request, res: Response) {
|
||||||
|
|
|
@ -254,4 +254,52 @@ export class PrinterStatusService {
|
||||||
|
|
||||||
return printerInfo
|
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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,24 @@
|
||||||
<printer-counter-chart v-if="printer" :status="printer?.status" />
|
<printer-counter-chart v-if="printer" :status="printer?.status" />
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
<v-row v-if="printer?.avgMonthPrint">
|
||||||
|
<v-col>
|
||||||
|
<v-card>
|
||||||
|
<v-card-title class="font-weight-regular">
|
||||||
|
Média mensal de impressões
|
||||||
|
</v-card-title>
|
||||||
|
|
||||||
|
<v-card-text>
|
||||||
|
<span class="text-h3">
|
||||||
|
{{
|
||||||
|
new Intl.NumberFormat('pt-BR').format(printer?.avgMonthPrint)
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
<div>Baseado nos dados dos últimos 180 dias</div>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user