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