From dd1790b0be8386aeb9f2b1eae9189a45499638b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B2=E8=BE=B0=E7=94=9F=E4=BA=A7?= Date: Sun, 12 Apr 2026 00:51:20 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=86=A0=E5=AD=97=E5=8F=B7?= =?UTF-8?q?=E4=B8=BAJ+9=E4=BD=8D=E6=95=B0=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/routers/information.py | 60 +++++++++++++----------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/backend/app/routers/information.py b/backend/app/routers/information.py index 969be9a..a5887f6 100644 --- a/backend/app/routers/information.py +++ b/backend/app/routers/information.py @@ -452,28 +452,18 @@ def create_information( db: Session = Depends(get_db) ): """发布资讯""" - # 验证并矫正冠字号 + # 验证并矫正冠字号:J0 + 8位数字 = 共10位 if data.title: import re - # 提取冠字号 + # 提取冠字号(J开头后面跟数字) match = re.search(r'J(\d+)', data.title) if match: num = match.group(1) - # 根据前缀判断正确位数 - # J0开头:J0 + 8位数字 = 9位 - # J1/J2/J3等开头:J + 9位数字 = 9位 - if data.title.startswith('J0'): - # J0开头,需要8位数字 - if len(num) > 8: - num = num[:8] - elif len(num) < 8: - num = num.zfill(8) - else: - # 其他J开头,需要9位数字 - if len(num) > 9: - num = num[:9] - elif len(num) < 9: - num = num.zfill(9) + # 必须是10位:J + 9位数字 + if len(num) > 9: + num = num[:9] + elif len(num) < 9: + num = num.zfill(9) # 重新构建title original = match.group(0) data.title = data.title.replace(original, 'J' + num, 1) @@ -1304,10 +1294,10 @@ async def batch_parse_deals(text: str = Body(..., embed=True)): data = json.loads(content.strip()) # 对AI返回的数据进行冠字号矫正 def normalize_serial_ai(num_str): - """矫正冠字号:确保是J0+9位数字,只对位数不对的进行矫正""" - if not num_str.startswith('J0'): + """矫正冠字号:J+9位数字(共10位)""" + if not num_str.startswith('J'): return None - num = num_str[2:] # 去掉J0 + num = num_str[1:] # 去掉J diff = 9 - len(num) # 位数正好9位,不需要矫正 if diff == 0: @@ -1316,19 +1306,19 @@ async def batch_parse_deals(text: str = Body(..., embed=True)): if len(num) >= 4: result = num[:5] + num[-4:] if len(result) == 9: - return 'J0' + result + return 'J' + result result2 = num[:4] + num[-5:] if len(result2) == 9: - return 'J0' + result2 + return 'J' + result2 elif diff == 1: - return 'J0' + '0' + num + return 'J' + '0' + num elif diff == -2: if len(num) >= 5: result = num[:5] + num[-4:] if len(result) == 9: - return 'J0' + result + return 'J' + result elif diff == 2: - return 'J0' + '00' + num + return 'J' + '00' + num return None # 矫正每条记录的冠字号 @@ -1404,37 +1394,37 @@ def parse_deals_locally(text: str, default_packaging: str = '', default_date: st if not serial_match: continue - # 冠字号矫正函数 - 只对位数不对的进行矫正 + # 冠字号矫正函数 - 统一为J+9位数字(10位) def normalize_serial(num_str): - """矫正冠字号:确保是J0+9位数字""" + """矫正冠字号:J+9位数字(共10位)""" num = num_str diff = 9 - len(num) # 位数正好9位,不需要矫正 if diff == 0: - return 'J0' + num + return 'J' + num # 位数不对才需要矫正 elif diff == -1: # 多1位(10位数字)→ 去掉倒数第4位 if len(num) >= 4: result = num[:5] + num[-4:] if len(result) == 9: - return 'J0' + result + return 'J' + result result2 = num[:4] + num[-5:] if len(result2) == 9: - return 'J0' + result2 + return 'J' + result2 elif diff == 1: - # 少1位(8位数字)→ 在J0后加0 - return 'J0' + '0' + num + # 少1位(8位数字)→ 在J后加0 + return 'J' + '0' + num elif diff == -2: # 多2位(11位数字)→ 去掉倒数第4、5位 if len(num) >= 5: result = num[:5] + num[-4:] if len(result) == 9: - return 'J0' + result + return 'J' + result elif diff == 2: - # 少2位(7位数字)→ 在J0后加00 - return 'J0' + '00' + num + # 少2位(7位数字)→ 在J后加00 + return 'J' + '00' + num return None # 无法矫正 serial_num = serial_match.group(1)