63 lines
2.3 KiB
Python
63 lines
2.3 KiB
Python
"""
|
||
隐藏式商品/类型归属商家端类型:点单写入订单抢单字段时使用。
|
||
"""
|
||
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,
|
||
}
|