You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
5.6 KiB
124 lines
5.6 KiB
from dspt_api.util.general.handle_redis import get_data_from_redis, get_param_from_redis |
|
from dspt_api.util.general.handle_ecard import get_ecard_level, get_ecard |
|
from dspt_api.util.general.handle_float import f2 |
|
|
|
|
|
# 将接口请求的数据中卖品信息整理成列表结构 |
|
def format_goods(_data): |
|
goods_list = [] |
|
for cate in _data['res']['data']: |
|
for g in cate['goods']: |
|
goods_list.append(g) |
|
return {'res': {'status': _data['res']['status'], 'data': goods_list}} |
|
|
|
|
|
# 将接口获取的卖品数据转化成请求参数格式 |
|
def general_goods_field(_data, ecard_level=None): |
|
params = [] |
|
total_cash = 0 |
|
for g in _data: |
|
_num = g.get('buy_num', 1) |
|
info = { |
|
'id': g['id'], |
|
'type': g['type'], |
|
'price': str(get_goods_price(g, _num, ecard_level=ecard_level)), |
|
'num': _num |
|
} |
|
if g['type'] == 'package' and g['packageType'] == '2': |
|
add_price = f2(0) |
|
optional_package = [] |
|
for key, val in g['user_select'].items(): |
|
member = [] |
|
member_id = [] |
|
for m in val['data']: |
|
if m['id'] in member_id: |
|
for item in member: |
|
if item['id'] == m['id']: |
|
item['num'] = item['num'] + 1 |
|
add_price += f2(m['addPrice']) |
|
else: |
|
member.append({'id': m['id'], 'num': 1, 'add_price': m['addPrice']}) |
|
member_id.append(m['id']) |
|
add_price += f2(m['addPrice']) |
|
optional_package.append({'index': key, 'members': member}) |
|
info['optional_package'] = optional_package |
|
info['price'] = str(f2(info['price']) + add_price) |
|
total_cash = f2(total_cash) + f2(info['price']) |
|
params.append(info) |
|
if g.get('discount1', False): |
|
total_discount = f2(0) |
|
discount_list = [] |
|
if g['discount1'] > 0: |
|
total_discount += f2(g['discount1']) |
|
discount_list.append( |
|
{"discount_price": g['discount1'], "discount_name": f"现金优惠券{str(g['discount1'])}元"}) |
|
if g['discount2'] > 0: |
|
total_discount += f2(g['discount2']) |
|
discount_list.append( |
|
{"discount_price": g['discount2'], "discount_name": f"现金优惠券{str(g['discount2'])}元"}) |
|
if len(discount_list) > 0: |
|
info['discount_price'] = str(total_discount) |
|
info['discount_detail'] = discount_list |
|
total_cash -= total_discount |
|
|
|
print('general_goods_param---------params', params) |
|
return params, str(total_cash) |
|
|
|
|
|
def get_goods_price(goods, num, ecard_level=None): |
|
price = goods.get('partnerPrice', goods['onlinePrice']) if ecard_level is None else get_ecard_price(goods, |
|
ecard_level) |
|
return f2(price) |
|
|
|
|
|
def get_ecard_price(goods, ecard_level): |
|
if ecard_price_list := goods.get('ecardPrices', False): |
|
for ecard_price_item in ecard_price_list: |
|
if ecard_price_item['ecardLevelNo'] == ecard_level: |
|
return ecard_price_item['ecardLevelPrice'] |
|
return False |
|
|
|
|
|
def general_goods_params(pay_type, data, ticket_cash=f2(0)): |
|
# 券信息 |
|
quan = '' |
|
# redis_key 前缀 |
|
redis_key_prefix = f'dspt_api_{data["ip"]}_{data["env"]}_{data["member_type"]}_{data["pid"]}_{data["cid"]}' |
|
# 获取卖品数据 |
|
request_api = {'name': '3.2.1 获取卖品列表', 'path': 'cinema/goods'} |
|
redis_key_api = f'{redis_key_prefix}_{request_api["path"]}' |
|
result, _format, goods_data, _timestamp = get_data_from_redis(redis_key_api) |
|
if result is False: |
|
return False, None, None, None |
|
if pay_type == 'cash': |
|
goods_field, goods_cash = general_goods_field(goods_data) |
|
goods_cash = f2(goods_cash) |
|
goods_cash += ticket_cash |
|
elif pay_type == 'ecard': |
|
ecard_num = get_ecard(data['ip'], data["env"], data["pid"], data["cid"]) |
|
ecard_level = get_ecard_level(ecard_num) |
|
goods_field, goods_cash = general_goods_field(goods_data, ecard_level) |
|
goods_cash = f2(goods_cash) |
|
goods_cash += ticket_cash |
|
elif pay_type in ['yushouquan', 'equan']: |
|
goods_field, goods_cash = general_goods_field(goods_data) |
|
# 获取券价格 |
|
request_api_yushouquan = {'name': '3.6.1 添加券', 'path': 'seat/check-coupon'} |
|
redis_key_api_yushouquan = f'{redis_key_prefix}_{request_api_yushouquan["path"]}' |
|
result_yushouquan, _format_yushouquan, cash_from_yushouquan, _timestamp_yushouquan = get_data_from_redis( |
|
redis_key_api_yushouquan) |
|
if not result_yushouquan: |
|
return False, None, None, None, None, None, None, None |
|
# 获取券码 |
|
req_params = get_param_from_redis(redis_key_api_yushouquan) |
|
if pay_type == 'yushouquan': |
|
quan = req_params['coupons'] if req_params.get('coupons', False) else '3.6.1添加券接口中选择的券类型为会员卡赠券,与当前设置不符合' |
|
elif pay_type == 'equan': |
|
quan = req_params['card_coupons'] if req_params.get('equan', False) else '3.6.1添加券接口中选择的券类型为扫码券,与当前设置不符合' |
|
else: |
|
quan = '请检查3.6.1添加券接口' |
|
goods_cash = cash_from_yushouquan['balance'] |
|
return True, goods_field, goods_cash, quan, _timestamp_yushouquan |
|
else: |
|
pass |
|
return True, goods_field, str(goods_cash), quan, _timestamp
|
|
|