隐藏式商品/类型增加归属商家端类型,点单按归属写入抢单字段;抢单池只返回商家端类型。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
62
utils/shangpin_guishu.py
Normal file
62
utils/shangpin_guishu.py
Normal file
@@ -0,0 +1,62 @@
|
||||
"""
|
||||
隐藏式商品/类型归属商家端类型:点单写入订单抢单字段时使用。
|
||||
"""
|
||||
from shangpin.models import ShangpinLeixing
|
||||
|
||||
|
||||
def parse_guishu_leixing_id(raw, shenhezhuangtai=None):
|
||||
"""
|
||||
解析归属商家端类型 ID。
|
||||
非隐藏式(4)一律视为无归属;有值时必须指向 shenhezhuangtai=3 的类型。
|
||||
返回 (guishu_leixing_id|None, error_message|None)
|
||||
"""
|
||||
try:
|
||||
status = int(shenhezhuangtai) if shenhezhuangtai is not None else None
|
||||
except (TypeError, ValueError):
|
||||
status = None
|
||||
if status is not None and status != 4:
|
||||
return None, None
|
||||
|
||||
if raw is None or raw == '' or str(raw).lower() in ('null', 'none', 'undefined'):
|
||||
return None, None
|
||||
try:
|
||||
gid = int(raw)
|
||||
except (TypeError, ValueError):
|
||||
return None, '归属商家端类型ID无效'
|
||||
if gid <= 0:
|
||||
return None, None
|
||||
if not ShangpinLeixing.objects.filter(id=gid, shenhezhuangtai=3).exists():
|
||||
return None, '归属类型必须是商家端商品类型(审核状态=3)'
|
||||
return gid, None
|
||||
|
||||
|
||||
def resolve_order_qiangdan_fields(shangpin):
|
||||
"""
|
||||
点单写入 Dingdan 的抢单相关字段:
|
||||
- 商品或所属类型配置了 guishu_leixing_id → 用该商家端类型的 id/yaoqiuleixing/huiyuan_id/yongjin
|
||||
- 否则沿用商品自身字段
|
||||
"""
|
||||
guishu_id = getattr(shangpin, 'guishu_leixing_id', None)
|
||||
if not guishu_id and getattr(shangpin, 'leixing_id', None):
|
||||
own_type = ShangpinLeixing.objects.filter(id=shangpin.leixing_id).only(
|
||||
'guishu_leixing_id',
|
||||
).first()
|
||||
if own_type:
|
||||
guishu_id = own_type.guishu_leixing_id
|
||||
|
||||
if guishu_id:
|
||||
merchant = ShangpinLeixing.objects.filter(id=guishu_id, shenhezhuangtai=3).first()
|
||||
if merchant:
|
||||
return {
|
||||
'leixing_id': merchant.id,
|
||||
'yaoqiuleixing': merchant.yaoqiuleixing,
|
||||
'huiyuan_id': merchant.huiyuan_id or '',
|
||||
'yongjin': merchant.yongjin if merchant.yongjin is not None else 0,
|
||||
}
|
||||
|
||||
return {
|
||||
'leixing_id': shangpin.leixing_id,
|
||||
'yaoqiuleixing': getattr(shangpin, 'yaoqiuleixing', None),
|
||||
'huiyuan_id': getattr(shangpin, 'huiyuan_id', '') or '',
|
||||
'yongjin': getattr(shangpin, 'yongjin', 0) or 0,
|
||||
}
|
||||
Reference in New Issue
Block a user