统一冠字号为J+9位数字

This commit is contained in:
甲辰生产 2026-04-12 00:51:20 +08:00
parent 29c2d6f3a9
commit dd1790b0be
1 changed files with 25 additions and 35 deletions

View File

@ -452,24 +452,14 @@ def create_information(
db: Session = Depends(get_db) db: Session = Depends(get_db)
): ):
"""发布资讯""" """发布资讯"""
# 验证并矫正冠字号 # 验证并矫正冠字号J0 + 8位数字 = 共10位
if data.title: if data.title:
import re import re
# 提取冠字号 # 提取冠字号J开头后面跟数字
match = re.search(r'J(\d+)', data.title) match = re.search(r'J(\d+)', data.title)
if match: if match:
num = match.group(1) num = match.group(1)
# 根据前缀判断正确位数 # 必须是10位J + 9位数字
# 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: if len(num) > 9:
num = num[:9] num = num[:9]
elif len(num) < 9: elif len(num) < 9:
@ -1304,10 +1294,10 @@ async def batch_parse_deals(text: str = Body(..., embed=True)):
data = json.loads(content.strip()) data = json.loads(content.strip())
# 对AI返回的数据进行冠字号矫正 # 对AI返回的数据进行冠字号矫正
def normalize_serial_ai(num_str): def normalize_serial_ai(num_str):
"""矫正冠字号:确保是J0+9位数字只对位数不对的进行矫正""" """矫正冠字号:J+9位数字共10位"""
if not num_str.startswith('J0'): if not num_str.startswith('J'):
return None return None
num = num_str[2:] # 去掉J0 num = num_str[1:] # 去掉J
diff = 9 - len(num) diff = 9 - len(num)
# 位数正好9位不需要矫正 # 位数正好9位不需要矫正
if diff == 0: if diff == 0:
@ -1316,19 +1306,19 @@ async def batch_parse_deals(text: str = Body(..., embed=True)):
if len(num) >= 4: if len(num) >= 4:
result = num[:5] + num[-4:] result = num[:5] + num[-4:]
if len(result) == 9: if len(result) == 9:
return 'J0' + result return 'J' + result
result2 = num[:4] + num[-5:] result2 = num[:4] + num[-5:]
if len(result2) == 9: if len(result2) == 9:
return 'J0' + result2 return 'J' + result2
elif diff == 1: elif diff == 1:
return 'J0' + '0' + num return 'J' + '0' + num
elif diff == -2: elif diff == -2:
if len(num) >= 5: if len(num) >= 5:
result = num[:5] + num[-4:] result = num[:5] + num[-4:]
if len(result) == 9: if len(result) == 9:
return 'J0' + result return 'J' + result
elif diff == 2: elif diff == 2:
return 'J0' + '00' + num return 'J' + '00' + num
return None return None
# 矫正每条记录的冠字号 # 矫正每条记录的冠字号
@ -1404,37 +1394,37 @@ def parse_deals_locally(text: str, default_packaging: str = '', default_date: st
if not serial_match: if not serial_match:
continue continue
# 冠字号矫正函数 - 只对位数不对的进行矫正 # 冠字号矫正函数 - 统一为J+9位数字10位
def normalize_serial(num_str): def normalize_serial(num_str):
"""矫正冠字号:确保是J0+9位数字""" """矫正冠字号:J+9位数字共10位"""
num = num_str num = num_str
diff = 9 - len(num) diff = 9 - len(num)
# 位数正好9位不需要矫正 # 位数正好9位不需要矫正
if diff == 0: if diff == 0:
return 'J0' + num return 'J' + num
# 位数不对才需要矫正 # 位数不对才需要矫正
elif diff == -1: elif diff == -1:
# 多1位10位数字→ 去掉倒数第4位 # 多1位10位数字→ 去掉倒数第4位
if len(num) >= 4: if len(num) >= 4:
result = num[:5] + num[-4:] result = num[:5] + num[-4:]
if len(result) == 9: if len(result) == 9:
return 'J0' + result return 'J' + result
result2 = num[:4] + num[-5:] result2 = num[:4] + num[-5:]
if len(result2) == 9: if len(result2) == 9:
return 'J0' + result2 return 'J' + result2
elif diff == 1: elif diff == 1:
# 少1位8位数字→ 在J0后加0 # 少1位8位数字→ 在J后加0
return 'J0' + '0' + num return 'J' + '0' + num
elif diff == -2: elif diff == -2:
# 多2位11位数字→ 去掉倒数第4、5位 # 多2位11位数字→ 去掉倒数第4、5位
if len(num) >= 5: if len(num) >= 5:
result = num[:5] + num[-4:] result = num[:5] + num[-4:]
if len(result) == 9: if len(result) == 9:
return 'J0' + result return 'J' + result
elif diff == 2: elif diff == 2:
# 少2位7位数字→ 在J0后加00 # 少2位7位数字→ 在J后加00
return 'J0' + '00' + num return 'J' + '00' + num
return None # 无法矫正 return None # 无法矫正
serial_num = serial_match.group(1) serial_num = serial_match.group(1)