OcrDevicesController.ts 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import PaginationService from 'App/Services/PaginationService'
  3. import { schema } from '@ioc:Adonis/Core/Validator'
  4. import OcrDevice from 'App/Models/OcrDevice'
  5. import OcrChannel from 'App/Models/OcrChannel'
  6. export default class OcrDevicesController {
  7. private paginationService = new PaginationService(OcrDevice)
  8. public async index({ request, auth }: HttpContextContract) {
  9. const user = auth.user
  10. const isApiUser = user?.$attributes?.role === 'api'
  11. const requestData = request.all()
  12. if (isApiUser) {
  13. requestData.channel = user.username
  14. }
  15. return await this.paginationService.paginate(request.all())
  16. }
  17. public async store({ request, bouncer }: HttpContextContract) {
  18. // await bouncer.authorize('admin')
  19. const data = await request.validate({
  20. schema: schema.create({
  21. id: schema.string(),
  22. platform: schema.string(),
  23. channel: schema.string(),
  24. deviceInfo: schema.string.optional(),
  25. total: schema.number(),
  26. scanned: schema.number(),
  27. ipAddress: schema.string.optional()
  28. })
  29. })
  30. const clientIp = request.ip()
  31. if (!data.ipAddress) {
  32. data.ipAddress = clientIp
  33. }
  34. const device = await OcrDevice.findBy('id', data.id)
  35. if (device) {
  36. device.merge(data)
  37. return await device.save()
  38. } else {
  39. return await OcrDevice.create(data)
  40. }
  41. }
  42. public async show({ params, bouncer }: HttpContextContract) {
  43. await bouncer.authorize('admin')
  44. return await OcrDevice.findOrFail(params.id)
  45. }
  46. public async plusTotal({ request, response }: HttpContextContract) {
  47. try {
  48. const device = await OcrDevice.findBy('id', request.param('id'))
  49. if (!device) {
  50. return response.notFound({ message: `未找到ID为 ${request.param('id')} 的OCR设备` })
  51. }
  52. device.total += 1
  53. await device.save()
  54. return response.ok(device)
  55. } catch (error) {
  56. return response.internalServerError({
  57. message: '更新设备记录数量时发生错误',
  58. error: error.message
  59. })
  60. }
  61. }
  62. public async plusScanned({ request, response }: HttpContextContract) {
  63. const scanCount = Number(request.param('scanCount'))
  64. if (isNaN(scanCount)) {
  65. return response.badRequest({ message: 'scanCount 参数必须是有效数字' })
  66. }
  67. try {
  68. const device = await OcrDevice.findBy('id', request.param('id'))
  69. if (!device) {
  70. return response.notFound({
  71. message: `未找到 ID 为 ${request.param('id')} 的 OCR 设备`
  72. })
  73. }
  74. device.scanned += scanCount
  75. await device.save()
  76. return response.ok(device)
  77. } catch (error) {
  78. return response.internalServerError({
  79. message: '更新设备扫描数量时发生错误',
  80. error: error.message
  81. })
  82. }
  83. }
  84. }