隐藏式商品/类型增加归属商家端类型,点单按归属写入抢单字段;抢单池只返回商家端类型。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-22 16:26:43 +08:00
parent bc22bd0df1
commit 04fcfb909b
5 changed files with 176 additions and 13 deletions

62
utils/shangpin_guishu.py Normal file
View 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,
}