From 2cd9b6e106471aac13102207aee38e748eb977a0 Mon Sep 17 00:00:00 2001 From: Ching Date: Sun, 9 Feb 2025 18:57:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(models):=20=E4=BC=98=E5=8C=96=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=95=86=E5=93=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=89=AB=E7=A0=81=E8=AE=B0=E5=BD=95=E5=92=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=95=86=E5=93=81=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化handle_add_product函数,支持扫码记录和更新商品信息 - 当扫描到已存在的商品时,获取商品信息并记录扫码日志 - 当扫描到新商品时,通过爬虫获取商品信息并记录扫码日志 - 添加BarcodeDB模型的add_product方法,用于添加或更新商品信息 --- app.py | 13 +++++++++---- models.py | 13 +++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app.py b/app.py index 89c605f..5cc5aa9 100644 --- a/app.py +++ b/app.py @@ -271,6 +271,10 @@ def handle_add_product(barcode, location): barcode_ = None amount = 1.0 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: if product_barcode.barcode == barcode: barcode_ = product_barcode @@ -288,15 +292,16 @@ def handle_add_product(barcode, location): spiders.append(BarcodeSpider(x_rapidapi_key=X_RapidAPI_Key)) for spider in spiders: - good = spider.get_good(barcode) - if good: + product_info = spider.get_good(barcode) + if product_info: + models.BarcodeDB.add_product(barcode, product_info) break - if not good: + if not product_info: response_data = {"message": "Item not found"} return response_data, 400, None try: - added, good_name = add_product(good, location) + added, good_name = add_product(product_info, location) if added: response_data = {"message": "New item added successfully"} return response_data, 200, good_name diff --git a/models.py b/models.py index 3fb0d9a..11fcae3 100644 --- a/models.py +++ b/models.py @@ -16,6 +16,19 @@ class BarcodeDB(BaseModel): class Meta: 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): barcode = CharField() scan_at = DateTimeField(default=datetime.now)