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
|
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
|
||||||
|
|||||||
13
models.py
13
models.py
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user