Quellcode durchsuchen

feat(database): 新增 ocr_channels 表及其相关功能

wui vor 10 Monaten
Ursprung
Commit
7ceb6c0d79

+ 98 - 0
app/Controllers/Http/OcrChannelController.ts

@@ -0,0 +1,98 @@
+import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
+import PaginationService from 'App/Services/PaginationService'
+import OcrChannel from 'App/Models/OcrChannel'
+import { schema } from '@ioc:Adonis/Core/Validator'
+
+export default class OcrChannelController {
+    private paginationService = new PaginationService(OcrChannel)
+
+    public async index({ request }: HttpContextContract) {
+        return await this.paginationService.paginate(request.all())
+    }
+
+    public async store({ request, bouncer }: HttpContextContract) {
+        await request.validate({
+            schema: schema.create({
+                name: schema.string.optional(),
+                deviceNum: schema.number(),
+                recordNum: schema.number(),
+                scanNum: schema.number()
+            })
+        })
+        return await OcrChannel.create(request.all())
+    }
+
+    public async update({ request, bouncer }: HttpContextContract) {
+        const data = await request.validate({
+            schema: schema.create({
+                name: schema.string.optional(),
+                deviceNum: schema.number.optional(),
+                recordNum: schema.number.optional(),
+                scanNum: schema.number.optional()
+            })
+        })
+        const ocrChannel = await OcrChannel.findOrFail(request.param('id'))
+        return await ocrChannel.merge(data).save()
+    }
+
+    public async plusDeviceNum({ request, response }: HttpContextContract) {
+        try {
+            const ocrChannel = await OcrChannel.findBy('id', request.param('id'))
+            if (!ocrChannel) {
+                return response.notFound({ message: `未找到ID为 ${request.param('id')} 的OCR渠道` })
+            }
+
+            ocrChannel.deviceNum += 1
+            await ocrChannel.save()
+            return ocrChannel
+        } catch (error) {
+            return response.internalServerError({
+                message: '更新设备数量时发生错误',
+                error: error.message
+            })
+        }
+    }
+
+    public async plusRecordNum({ request, response }: HttpContextContract) {
+        try {
+            const ocrChannel = await OcrChannel.findBy('id', request.param('id'))
+            if (!ocrChannel) {
+                return response.notFound({ message: `未找到ID为 ${request.param('id')} 的OCR渠道` })
+            }
+            ocrChannel.recordNum += 1
+            await ocrChannel.save()
+            return ocrChannel
+        } catch (error) {
+            return response.internalServerError({
+                message: '更新记录数量时发生错误',
+                error: error.message
+            })
+        }
+    }
+
+    public async plusScanNum({ request, response }: HttpContextContract) {
+        const scanCount = Number(request.param('scanCount')) // 确保 scanCount 是数字
+        if (isNaN(scanCount)) {
+            return response.badRequest({ message: 'scanCount 参数必须是有效数字' })
+        }
+
+        try {
+            const ocrChannel = await OcrChannel.findBy('id', request.param('id'))
+            if (!ocrChannel) {
+                return response.notFound({
+                    message: `未找到 ID 为 ${request.param('id')} 的 OCR 渠道`
+                })
+            }
+
+            ocrChannel.scanNum = (Number(ocrChannel.scanNum) || 0) + scanCount // 确保 scanNum 也是数字
+            await ocrChannel.save()
+
+            return response.ok(ocrChannel)
+        } catch (error) {
+            return response.internalServerError({
+                message: '更新扫描数量时发生错误',
+                error: error.message
+            })
+        }
+    }
+}

+ 26 - 0
app/Models/OcrChannel.ts

@@ -0,0 +1,26 @@
+import AppBaseModel from 'App/Models/AppBaseModel'
+import { column } from '@ioc:Adonis/Lucid/Orm'
+import { DateTime } from 'luxon'
+
+export default class OcrChannel extends AppBaseModel {
+    @column({ isPrimary: true })
+    public id: number
+
+    @column()
+    public name: string
+
+    @column()
+    public deviceNum: number
+
+    @column()
+    public recordNum: number
+
+    @column()
+    public scanNum: number
+
+    @column.dateTime({ autoCreate: true })
+    public createdAt: DateTime
+
+    @column.dateTime({ autoCreate: true, autoUpdate: true })
+    public updatedAt: DateTime
+}

+ 21 - 0
database/migrations/1741164449535_ocr_channels.ts

@@ -0,0 +1,21 @@
+import BaseSchema from '@ioc:Adonis/Lucid/Schema'
+
+export default class extends BaseSchema {
+    protected tableName = 'ocr_channels'
+
+    public async up() {
+        this.schema.createTable(this.tableName, (table) => {
+            table.increments('id')
+            table.string('name').notNullable()
+            table.integer('device_num').defaultTo(0).notNullable()
+            table.integer('record_num').defaultTo(0).notNullable()
+            table.integer('scan_num').defaultTo(0).notNullable()
+            table.timestamp('created_at', { useTz: true })
+            table.timestamp('updated_at', { useTz: true })
+        })
+    }
+
+    public async down() {
+        this.schema.dropTable(this.tableName)
+    }
+}

+ 10 - 0
start/routes.ts

@@ -116,4 +116,14 @@ Route.group(() => {
     Route.group(() => {
     Route.group(() => {
         Route.post('upload', 'FilesController.store')
         Route.post('upload', 'FilesController.store')
     }).prefix('/ocrImg')
     }).prefix('/ocrImg')
+
+    Route.group(() => {
+        Route.get('ocrChannel', 'OcrChannelController.index')
+        Route.post('ocrChannel', 'OcrChannelController.store')
+    }).middleware('auth:api')
+    Route.group(() => {
+        Route.get('/plusDevice/:id', 'OcrChannelController.plusDeviceNum')
+        Route.get('/plusRecord/:id', 'OcrChannelController.plusRecordNum')
+        Route.get('/plusScan/:id/:scanCount', 'OcrChannelController.plusScanNum')
+    }).prefix('/ocrChannel')
 }).prefix('/api')
 }).prefix('/api')