feat(models): 优化添加商品逻辑,支持扫码记录和更新商品信息
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
- 优化handle_add_product函数,支持扫码记录和更新商品信息 - 当扫描到已存在的商品时,获取商品信息并记录扫码日志 - 当扫描到新商品时,通过爬虫获取商品信息并记录扫码日志 - 添加BarcodeDB模型的add_product方法,用于添加或更新商品信息
This commit is contained in:
parent
789111e629
commit
2cd9b6e106
13
app.py
13
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
|
||||
|
||||
13
models.py
13
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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user