|
@@ -3,6 +3,10 @@ import PaginationService from 'App/Services/PaginationService'
|
|
|
import OcrChannel from 'App/Models/OcrChannel'
|
|
import OcrChannel from 'App/Models/OcrChannel'
|
|
|
import { schema } from '@ioc:Adonis/Core/Validator'
|
|
import { schema } from '@ioc:Adonis/Core/Validator'
|
|
|
import { DateTime } from 'luxon'
|
|
import { DateTime } from 'luxon'
|
|
|
|
|
+import OcrDevice from 'App/Models/OcrDevice'
|
|
|
|
|
+import OcrRecord from 'App/Models/OcrRecord'
|
|
|
|
|
+import * as console from 'node:console'
|
|
|
|
|
+import Database from '@ioc:Adonis/Lucid/Database'
|
|
|
|
|
|
|
|
export default class OcrChannelController {
|
|
export default class OcrChannelController {
|
|
|
private paginationService = new PaginationService(OcrChannel)
|
|
private paginationService = new PaginationService(OcrChannel)
|
|
@@ -113,20 +117,20 @@ export default class OcrChannelController {
|
|
|
public async getStatistics({ request, response }: HttpContextContract) {
|
|
public async getStatistics({ request, response }: HttpContextContract) {
|
|
|
try {
|
|
try {
|
|
|
const name = request.input('name')
|
|
const name = request.input('name')
|
|
|
- const query = OcrChannel.query()
|
|
|
|
|
|
|
+ let query = Database.from('ocr_channels')
|
|
|
|
|
|
|
|
if (name) {
|
|
if (name) {
|
|
|
- query.where('name', name)
|
|
|
|
|
|
|
+ query = query.where('name', name)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const sevenDaysAgo = DateTime.now().minus({ days: 7 }).startOf('day').toSQL()
|
|
const sevenDaysAgo = DateTime.now().minus({ days: 7 }).startOf('day').toSQL()
|
|
|
const data = await query
|
|
const data = await query
|
|
|
- .where('createdAt', '>=', sevenDaysAgo)
|
|
|
|
|
- .orderBy('createdAt', 'asc')
|
|
|
|
|
- .select('createdAt', 'deviceNum', 'recordNum', 'scanNum')
|
|
|
|
|
|
|
+ .where('created_at', '>=', sevenDaysAgo)
|
|
|
|
|
+ .orderBy('created_at', 'asc')
|
|
|
|
|
+ .select('created_at', 'device_num as deviceNum', 'record_num as recordNum', 'scan_num as scanNum')
|
|
|
|
|
|
|
|
const result = {
|
|
const result = {
|
|
|
- dates: data.map((item) => item.createdAt.toFormat('yyyy-MM-dd')),
|
|
|
|
|
|
|
+ dates: data.map((item) => DateTime.fromISO(item.created_at).toFormat('yyyy-MM-dd')),
|
|
|
deviceNum: data.map((item) => item.deviceNum),
|
|
deviceNum: data.map((item) => item.deviceNum),
|
|
|
recordNum: data.map((item) => item.recordNum),
|
|
recordNum: data.map((item) => item.recordNum),
|
|
|
scanNum: data.map((item) => item.scanNum)
|
|
scanNum: data.map((item) => item.scanNum)
|
|
@@ -166,4 +170,62 @@ export default class OcrChannelController {
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public async updateStatistics({ response }: HttpContextContract) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 获取所有渠道
|
|
|
|
|
+ const channels = await OcrChannel.all()
|
|
|
|
|
+ const results: any[] = []
|
|
|
|
|
+
|
|
|
|
|
+ for (const channel of channels) {
|
|
|
|
|
+ // 使用Database查询生成器直接执行SQL查询
|
|
|
|
|
+
|
|
|
|
|
+ // 获取设备数量
|
|
|
|
|
+ const deviceCountResult = await Database.from('ocr_devices')
|
|
|
|
|
+ .where('channel', channel.name)
|
|
|
|
|
+ .count('* as total')
|
|
|
|
|
+ console.log('deviceCountResult', deviceCountResult)
|
|
|
|
|
+
|
|
|
|
|
+ // 获取记录数量
|
|
|
|
|
+ const recordCountResult = await Database.from('ocr_records')
|
|
|
|
|
+ .where('channel', channel.name)
|
|
|
|
|
+ .count('* as total')
|
|
|
|
|
+
|
|
|
|
|
+ // 获取扫描数量总和
|
|
|
|
|
+ const scanSumResult = await Database.from('ocr_devices')
|
|
|
|
|
+ .where('channel', channel.name)
|
|
|
|
|
+ .sum('scanned as total')
|
|
|
|
|
+ console.log('scanSumResult', scanSumResult)
|
|
|
|
|
+
|
|
|
|
|
+ // 确保数值正确转换为数字
|
|
|
|
|
+ const deviceNum = parseInt(deviceCountResult[0].total || '0', 10)
|
|
|
|
|
+ const recordNum = parseInt(recordCountResult[0].total || '0', 10)
|
|
|
|
|
+ const scanNum = parseInt(scanSumResult[0].total || '0', 10)
|
|
|
|
|
+
|
|
|
|
|
+ // 更新渠道数据
|
|
|
|
|
+ channel.deviceNum = deviceNum
|
|
|
|
|
+ channel.recordNum = recordNum
|
|
|
|
|
+ channel.scanNum = scanNum
|
|
|
|
|
+
|
|
|
|
|
+ await channel.save()
|
|
|
|
|
+ results.push({
|
|
|
|
|
+ id: channel.id,
|
|
|
|
|
+ name: channel.name,
|
|
|
|
|
+ deviceNum: channel.deviceNum,
|
|
|
|
|
+ recordNum: channel.recordNum,
|
|
|
|
|
+ scanNum: channel.scanNum
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return response.ok({
|
|
|
|
|
+ message: '所有渠道统计数据已更新',
|
|
|
|
|
+ data: results
|
|
|
|
|
+ })
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ return response.internalServerError({
|
|
|
|
|
+ message: '更新所有渠道统计数据时发生错误',
|
|
|
|
|
+ error: error.message
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|