版本变更V3.34将图像的处理统一更换到新表当中

This commit is contained in:
dxc
2026-05-26 08:57:41 +08:00
parent e564c5a5d2
commit 682139bab8
5 changed files with 101 additions and 33 deletions

View File

@ -9,7 +9,9 @@ from sqlalchemy import or_, func, text, and_
from sqlalchemy.exc import IntegrityError
import traceback
import json
import numpy as np
from app.utils.ai_vision import extract_and_embed
from app.services.image_embedding_service import ImageEmbeddingService
class BuyInboundService:
@ -178,10 +180,15 @@ class BuyInboundService:
arrival_photo=json.dumps(data.get('arrival_photo', [])),
inspection_report=json.dumps(data.get('inspection_report', []))
)
# 实时提取到货图片向量(失败不影响业务)
if new_stock.arrival_photo:
new_stock.arrival_image_embedding = extract_and_embed(new_stock.arrival_photo)
db.session.add(new_stock)
db.session.flush() # 获取 new_stock.id
# 提取到货图片向量到新表(失败不影响业务)
photo_list = data.get('arrival_photo', [])
if isinstance(photo_list, list) and photo_list:
ImageEmbeddingService.save_embeddings(
ImageEmbeddingService.MODULE_STOCK_BUY, new_stock.id, photo_list
)
db.session.commit()
return new_stock
except Exception as e:
@ -244,9 +251,19 @@ class BuyInboundService:
for k, v in field_mapping.items():
if k in data: setattr(stock, v, data[k])
if 'arrival_photo' in data: stock.arrival_photo = json.dumps(data['arrival_photo'])
if 'arrival_photo' in data and stock.arrival_photo:
stock.arrival_image_embedding = extract_and_embed(stock.arrival_photo)
if 'arrival_photo' in data:
new_photo_list = data['arrival_photo']
stock.arrival_photo = json.dumps(new_photo_list)
# 保存向量到独立表(全量替换)
ImageEmbeddingService.save_embeddings(
ImageEmbeddingService.MODULE_STOCK_BUY, stock.id, new_photo_list
)
else:
stock.arrival_photo = None
ImageEmbeddingService.delete_embeddings(
ImageEmbeddingService.MODULE_STOCK_BUY, stock.id
)
if 'inspection_report' in data: stock.inspection_report = json.dumps(data['inspection_report'])
# 更新税率
@ -289,8 +306,11 @@ class BuyInboundService:
try:
stock = StockBuy.query.get(stock_id)
if not stock: raise ValueError("记录不存在")
# 提前获取物料名称用于审计日志(通过外键关系 base.name 获取)
material_name = stock.base.name if stock.base else '未知物料'
# 删除时同步清理向量记录
ImageEmbeddingService.delete_embeddings(
ImageEmbeddingService.MODULE_STOCK_BUY, stock.id
)
db.session.delete(stock)
db.session.commit()
return material_name