feat(models): 优化添加商品逻辑,支持扫码记录和更新商品信息
All checks were successful
continuous-integration/drone/push Build is passing

- 优化handle_add_product函数,支持扫码记录和更新商品信息
- 当扫描到已存在的商品时,获取商品信息并记录扫码日志
- 当扫描到新商品时,通过爬虫获取商品信息并记录扫码日志
- 添加BarcodeDB模型的add_product方法,用于添加或更新商品信息
This commit is contained in:
Ching 2025-02-09 18:57:37 +08:00
parent 789111e629
commit 2cd9b6e106
2 changed files with 22 additions and 4 deletions

13
app.py
View File

@ -271,6 +271,10 @@ def handle_add_product(barcode, location):
barcode_ = None barcode_ = None
amount = 1.0 amount = 1.0
if product: if product:
gdsinfo = grocy.get_userfields(EntityType.PRODUCTS,product.id).get('GDSInfo')
if gdsinfo:
product_info = json.loads(gdsinfo)
models.BarcodeDB.add_product(barcode, product_info)
for product_barcode in product.product_barcodes: for product_barcode in product.product_barcodes:
if product_barcode.barcode == barcode: if product_barcode.barcode == barcode:
barcode_ = product_barcode barcode_ = product_barcode
@ -288,15 +292,16 @@ def handle_add_product(barcode, location):
spiders.append(BarcodeSpider(x_rapidapi_key=X_RapidAPI_Key)) spiders.append(BarcodeSpider(x_rapidapi_key=X_RapidAPI_Key))
for spider in spiders: for spider in spiders:
good = spider.get_good(barcode) product_info = spider.get_good(barcode)
if good: if product_info:
models.BarcodeDB.add_product(barcode, product_info)
break break
if not good: if not product_info:
response_data = {"message": "Item not found"} response_data = {"message": "Item not found"}
return response_data, 400, None return response_data, 400, None
try: try:
added, good_name = add_product(good, location) added, good_name = add_product(product_info, location)
if added: if added:
response_data = {"message": "New item added successfully"} response_data = {"message": "New item added successfully"}
return response_data, 200, good_name return response_data, 200, good_name

View File

@ -16,6 +16,19 @@ class BarcodeDB(BaseModel):
class Meta: class Meta:
table_name = 'barcode_db' table_name = 'barcode_db'
@classmethod
def add_product(cls, barcode, product_info):
# if product already exists, update product info
product_info = json.dumps(product_info)
try:
product = cls.get(cls.barcode == barcode)
if product.product_info != product_info:
product.product_info = product_info
product.save()
except cls.DoesNotExist:
# Add new product
cls.create(barcode=barcode, product_info=product_info)
class ScanLog(BaseModel): class ScanLog(BaseModel):
barcode = CharField() barcode = CharField()
scan_at = DateTimeField(default=datetime.now) scan_at = DateTimeField(default=datetime.now)