From 884ccc7352196aa5f229fcdb303d1a25f0b4670a Mon Sep 17 00:00:00 2001 From: RogerWork Date: Sun, 26 Jan 2025 18:12:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=85=A8=E9=83=A8=E4=BC=9A?= =?UTF-8?q?=E5=91=98=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- dspt_api/util/general/handle_card.py | 81 +++++++++++ dspt_api/util/general/handle_redis.py | 6 +- dspt_api/util/general/handle_time.py | 2 +- dspt_api/util/general/random_params.py | 5 +- dspt_api/util/general/suggest_params.py | 142 +++++++++++++++++++- dspt_api/util/mapi/card_active.py | 55 ++++++++ dspt_api/util/mapi/card_recharge.py | 53 ++++++++ dspt_api/util/mapi/card_regist.py | 68 ++++++++++ dspt_api/util/mapi/cinema_goods_bill.py | 4 + dspt_api/util/mapi/cinema_recharge_bill.py | 39 ++++++ dspt_api/util/mapi/cinema_send_card_bill.py | 4 + dspt_api/util/mapi/cinema_ticket_bill.py | 4 + dspt_api/util/mapi/order_info.py | 4 + dspt_api/util/mapi/order_status.py | 53 ++++++++ dspt_api/util/mapi/order_ticket_flag.py | 52 +++++++ dspt_api/util/mapi/seat_book.py | 69 ++++++++++ dspt_api/util/mapi/seat_unlock.py | 59 ++++++++ dspt_api/util/mapi/ticket_info.py | 48 +++++++ dspt_api/util/mapi/ticket_print.py | 4 + dspt_api/util/mapi/ticket_refund.py | 57 ++++++++ 21 files changed, 802 insertions(+), 10 deletions(-) create mode 100644 dspt_api/util/mapi/card_active.py create mode 100644 dspt_api/util/mapi/card_recharge.py create mode 100644 dspt_api/util/mapi/card_regist.py create mode 100644 dspt_api/util/mapi/cinema_goods_bill.py create mode 100644 dspt_api/util/mapi/cinema_recharge_bill.py create mode 100644 dspt_api/util/mapi/cinema_send_card_bill.py create mode 100644 dspt_api/util/mapi/cinema_ticket_bill.py create mode 100644 dspt_api/util/mapi/order_info.py create mode 100644 dspt_api/util/mapi/order_status.py create mode 100644 dspt_api/util/mapi/order_ticket_flag.py create mode 100644 dspt_api/util/mapi/seat_book.py create mode 100644 dspt_api/util/mapi/seat_unlock.py create mode 100644 dspt_api/util/mapi/ticket_info.py create mode 100644 dspt_api/util/mapi/ticket_print.py create mode 100644 dspt_api/util/mapi/ticket_refund.py diff --git a/.gitignore b/.gitignore index ee9583d..e2000d4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .idea /dx/ /logs/ -/logs/dingxin.log \ No newline at end of file +/logs/dingxin.log +*.log \ No newline at end of file diff --git a/dspt_api/util/general/handle_card.py b/dspt_api/util/general/handle_card.py index 819f50b..aeeb260 100644 --- a/dspt_api/util/general/handle_card.py +++ b/dspt_api/util/general/handle_card.py @@ -53,3 +53,84 @@ def get_card_type(env, pid, cid, card): return False else: return response.json()['res']['data']['cardType'] + + +def get_card_val(env, pid, cid, card, param): + params = { + 'format': 'json', + 'pid': pid, + 'cid': cid, + 'card': card, + } + + try: + base_url = EcEnv.objects.filter(Q(code=env) & Q(type='member')).values('host').first()['host'] + except Exception as e: + return False, e + + card_request_url = f"{base_url}/card/detail" + + try: + key = EcChannel.objects.filter(Q(pid=pid) & Q(env=env)).values('channel_key').first()['channel_key'] + except Exception as e: + return False, e + + sign = Sign(key) + card_req_params = sign.add_sig(params) + + card_response = requests.get(card_request_url, params=card_req_params) + + if card_response.json()['res']['status'] != 1: + return False + else: + return card_response.json()['res']['data'][param] + + +def get_card_level_val(env, pid, cid, card, param): + card_params = { + 'format': 'json', + 'pid': pid, + 'cid': cid, + 'card': card, + } + + try: + base_url = EcEnv.objects.filter(Q(code=env) & Q(type='member')).values('host').first()['host'] + except Exception as e: + return False, e + + card_request_url = f"{base_url}/card/detail" + + try: + key = EcChannel.objects.filter(Q(pid=pid) & Q(env=env)).values('channel_key').first()['channel_key'] + except Exception as e: + return False, e + + sign = Sign(key) + card_req_params = sign.add_sig(card_params) + + card_response = requests.get(card_request_url, params=card_req_params) + + if card_response.json()['res']['status'] != 1: + return False + + card_level_id = card_response.json()['res']['data']['cardLevelId'] + + card_level_params = { + 'format': 'json', + 'pid': pid, + 'cid': cid, + } + + card_level_request_url = f"{base_url}/cinema/card-level-rule" + card_level_req_params = sign.add_sig(card_level_params) + + card_level_response = requests.get(card_level_request_url, params=card_level_req_params) + + if card_level_response.json()['res']['status'] != 1: + return False + + for level in card_level_response.json()['res']['data']['rule']: + if level['levelId'] == card_level_id: + return level[param] + return False diff --git a/dspt_api/util/general/handle_redis.py b/dspt_api/util/general/handle_redis.py index d47eb31..8cfb993 100644 --- a/dspt_api/util/general/handle_redis.py +++ b/dspt_api/util/general/handle_redis.py @@ -14,20 +14,20 @@ def get_data_from_redis(redis_key, raw=False): if redis_conn.exists(redis_key + '_user_data'): redis_data = json.loads(redis_conn.get(redis_key + '_user_data')) user_data = redis_data['user_data'] - print('user_data', json.dumps(user_data)) + print('get_data_from_redis_user_data', json.dumps(user_data)) return True, redis_data['format'], user_data[0], redis_data['timestamp'] # 如果没用户数据时优先获取随机数据 if redis_conn.exists(redis_key + '_random'): redis_data = json.loads(redis_conn.get(redis_key + '_random')) user_data = redis_data['user_data'] - print('user_data', json.dumps(user_data)) + print('get_data_from_redis_random', json.dumps(user_data)) return True, redis_data['format'], user_data[0], redis_data['timestamp'] # 没有用户数据时,随机选择数据 if redis_conn.exists(redis_key): redis_data = json.loads(redis_conn.get(redis_key)) resp_data = [] resp = redis_data['handled_data'] - print('handled_data', json.dumps(redis_data['handled_data'])) + print('get_data_from_redis', json.dumps(redis_data['handled_data'])) resp_result = resp['res']['status'] print('resp_result', resp_result) print('resp_result-type', type(resp_result)) diff --git a/dspt_api/util/general/handle_time.py b/dspt_api/util/general/handle_time.py index a637834..f0f007a 100644 --- a/dspt_api/util/general/handle_time.py +++ b/dspt_api/util/general/handle_time.py @@ -5,6 +5,6 @@ def get_stime_etime(_type='date', today=True): # stime and etime time_format = '%Y-%m-%d' if _type == 'date' else '%Y-%m-%d %H:%M:%S' _now = datetime.datetime.now() - end_date = _now.strftime(time_format) if today else (_now - datetime.timedelta(days=-1)).strftime(time_format) + end_date = _now.strftime(time_format) if today else (_now + datetime.timedelta(days=-1)).strftime(time_format) start_date = (_now + datetime.timedelta(days=-30)).strftime(time_format) return start_date, end_date diff --git a/dspt_api/util/general/random_params.py b/dspt_api/util/general/random_params.py index a5f5bc2..ef51426 100644 --- a/dspt_api/util/general/random_params.py +++ b/dspt_api/util/general/random_params.py @@ -3,7 +3,7 @@ import json import time from django_redis import get_redis_connection -RANDOM_DATA_API_LIST = ['cinema/plays', 'play/seat-status', 'cinema/goods', 'ecard/ecard-levels'] +RANDOM_DATA_API_LIST = ['cinema/plays', 'play/seat-status', 'cinema/goods', 'ecard/ecard-levels', 'cinema/card-level-rule'] def random_params(_user_info, _handle_data): @@ -29,6 +29,9 @@ def random_params(_user_info, _handle_data): elif _user_info["api"] == 'cinema/goods': print('random_params', _handle_data['res']['data']) _user_data = [random_goods(_handle_data['res']['data'])] + elif _user_info["api"] == 'cinema/card-level-rule': + print('cinema/card-level-rule') + _user_data = _handle_data['res']['data']['rule'] else: _user_data = _handle_data['res']['data'] print('random_params', _user_data) diff --git a/dspt_api/util/general/suggest_params.py b/dspt_api/util/general/suggest_params.py index 959b101..a91f243 100644 --- a/dspt_api/util/general/suggest_params.py +++ b/dspt_api/util/general/suggest_params.py @@ -44,12 +44,27 @@ from dspt_api.util.mapi.movie_info import MapiMovieInfo from dspt_api.util.mapi.play_info import MapiPlayInfo from dspt_api.util.mapi.play_period_changed_seats import MapiPlayPeriodChangedSeats from dspt_api.util.mapi.play_seat_overview import MapiPlaySeatOverview +from dspt_api.util.mapi.seat_book import MapiSeatBook +from dspt_api.util.mapi.card_recharge import MapiCardRecharge +from dspt_api.util.mapi.seat_unlock import MapiSeatUnlock +from dspt_api.util.mapi.ticket_refund import MapiTicketRefund +from dspt_api.util.mapi.order_ticket_flag import MapiOrderTicketFlag +from dspt_api.util.mapi.order_status import MapiOrderStatus +from dspt_api.util.mapi.ticket_info import MapiTicketInfo +from dspt_api.util.mapi.order_info import MapiOrderInfo +from dspt_api.util.mapi.ticket_print import MapiTicketPrint +from dspt_api.util.mapi.card_active import MapiCardActive +from dspt_api.util.mapi.card_regist import MapiCardRegist +from dspt_api.util.mapi.cinema_recharge_bill import MapiCinemaRechargeBill +from dspt_api.util.mapi.cinema_ticket_bill import MapiCinemaTicketBill +from dspt_api.util.mapi.cinema_goods_bill import MapiCinemaGoodsBill +from dspt_api.util.mapi.cinema_send_card_bill import MapiCinemaSendCardBill # 通过api来匹配不同的接口文件获取推荐 # 返回推荐参数应该包含参数名,参数值,和是否勾选的状态 def suggest_params(member_type, api, env, cid, pid, ip, **kwargs): - data = {'member_type': member_type, 'api': api, 'env': env, 'cid': cid, 'pid':pid, 'ip': ip} + data = {'member_type': member_type, 'api': api, 'env': env, 'cid': cid, 'pid': pid, 'ip': ip} print('suggest_params: ', data) params = [] # 非会员 @@ -231,6 +246,14 @@ def suggest_params(member_type, api, env, cid, pid, ip, **kwargs): if api == 'card/get-goods-price' and member_type == 'member': print('card/get-goods-price') params = MapiCardGetGoodsPrice(**data).get_suggestion() + # 3.4.1 订票 + if api == 'seat/book' and member_type == 'member': + print('seat/book') + params = MapiSeatBook(**data).get_suggestion() + # 3.4.2 会员卡充值 + if api == 'card/recharge' and member_type == 'member': + print('card/recharge') + params = MapiCardRecharge(**data).get_suggestion() # 3.4.3 座位锁定 if api == 'seat/lock' and member_type == 'member': print('seat/lock') @@ -239,6 +262,10 @@ def suggest_params(member_type, api, env, cid, pid, ip, **kwargs): if api == 'seat/price' and member_type == 'member': print('seat/price') params = MapiSeatPrice(**data).get_suggestion() + # 3.4.5 座位解锁 + if api == 'seat/unlock' and member_type == 'member': + print('seat/unlock') + params = MapiSeatUnlock(**data).get_suggestion() # 3.4.6 混合下单(影票、卖品) if api == 'seat/lock-buy' and member_type == 'member': print('seat/lock-buy') @@ -255,10 +282,59 @@ def suggest_params(member_type, api, env, cid, pid, ip, **kwargs): data['sale_type'] = kwargs['sale_type'] data['pay_type'] = kwargs['pay_type'] params = MapiOrderBuyGoods(**data).get_suggestion() + # 3.4.8 退单(影票、卖品) + if api == 'ticket/refund' and member_type == 'member': + print('ticket/refund') + params = MapiTicketRefund(**data).get_suggestion() + # 3.4.9 查询订单状态及取票码 + if api == 'order/ticket-flag' and member_type == 'member': + print('order/ticket-flag') + params = MapiOrderTicketFlag(**data).get_suggestion() + # 3.4.10 查询订单状态 + if api == 'order/status' and member_type == 'member': + print('order/status') + params = MapiOrderStatus(**data).get_suggestion() + # 3.4.11 查询订单信息(影票) + if api == 'ticket/info' and member_type == 'member': + print('ticket/info') + params = MapiTicketInfo(**data).get_suggestion() + # 3.4.12 查询订单信息(影票、卖品) + if api == 'order/info' and member_type == 'member': + print('order/info') + params = MapiOrderInfo(**data).get_suggestion() + # 3.4.13 确认出票(设置影票为已出票) + if api == 'ticket/print' and member_type == 'member': + print('ticket/print') + params = MapiTicketPrint(**data).get_suggestion() + # 3.4.14 会员卡激活 + if api == 'card/active' and member_type == 'member': + print('card/active') + params = MapiCardActive(**data).get_suggestion() + # 3.4.15 会员卡线上开卡 + if api == 'card/regist' and member_type == 'member': + print('card/regist') + params = MapiCardRegist(**data).get_suggestion() + # 3.5.1 充值明细对账 + if api == 'cinema/recharge-bill' and member_type == 'member': + print('cinema/recharge-bill') + params = MapiCinemaRechargeBill(**data).get_suggestion() + # 3.5.2 影票对账 + if api == 'cinema/ticket-bill' and member_type == 'member': + print('cinema/ticket-bill') + params = MapiCinemaTicketBill(**data).get_suggestion() + # 3.5.3 卖品对账 + if api == 'cinema/goods-bill' and member_type == 'member': + print('cinema/goods-bill') + params = MapiCinemaGoodsBill(**data).get_suggestion() + # 3.5.4 发卡明细对账 + if api == 'cinema/send-card-bill' and member_type == 'member': + print('cinema/send-card-bill') + params = MapiCinemaSendCardBill(**data).get_suggestion() return params + def suggest_params_timestamp(member_type, api, env, cid, pid, ip, **kwargs): - data = {'member_type': member_type, 'api': api, 'env': env, 'cid': cid, 'pid':pid, 'ip': ip} + data = {'member_type': member_type, 'api': api, 'env': env, 'cid': cid, 'pid': pid, 'ip': ip} _timestamps = 0 # 非会员 # 3.1.4 获取影厅座位图* @@ -435,6 +511,14 @@ def suggest_params_timestamp(member_type, api, env, cid, pid, ip, **kwargs): if api == 'card/get-goods-price' and member_type == 'member': print('card/get-goods-price') _timestamps = MapiCardGetGoodsPrice(**data).get_timestamp() + # 3.4.1 订票 + if api == 'seat/book' and member_type == 'member': + print('seat/book') + _timestamps = MapiSeatBook(**data).get_timestamp() + # 3.4.2 会员卡充值 + if api == 'card/recharge' and member_type == 'member': + print('card/recharge') + _timestamps = MapiCardRecharge(**data).get_timestamp() # 3.4.3 座位锁定 if api == 'seat/lock' and member_type == 'member': print('seat/lock') @@ -443,6 +527,10 @@ def suggest_params_timestamp(member_type, api, env, cid, pid, ip, **kwargs): if api == 'seat/price' and member_type == 'member': print('seat/price') _timestamps = MapiSeatPrice(**data).get_timestamp() + # 3.4.5 座位解锁 + if api == 'seat/unlock' and member_type == 'member': + print('seat/unlock') + _timestamps = MapiSeatUnlock(**data).get_timestamp() # 3.4.6 混合下单(影票、卖品) if api == 'seat/lock-buy' and member_type == 'member': print('seat/lock-buy') @@ -457,6 +545,52 @@ def suggest_params_timestamp(member_type, api, env, cid, pid, ip, **kwargs): data['sale_type'] = kwargs['sale_type'] data['pay_type'] = kwargs['pay_type'] _timestamps = MapiOrderBuyGoods(**data).get_timestamp() + # 3.4.8 退单(影票、卖品) + if api == 'ticket/refund' and member_type == 'member': + print('ticket/refund') + _timestamps = MapiTicketRefund(**data).get_timestamp() + # 3.4.9 查询订单状态及取票码 + if api == 'order/ticket-flag' and member_type == 'member': + print('order/ticket-flag') + _timestamps = MapiOrderTicketFlag(**data).get_timestamp() + # 3.4.10 查询订单状态 + if api == 'order/status' and member_type == 'member': + print('order/status') + _timestamps = MapiOrderStatus(**data).get_timestamp() + # 3.4.11 查询订单信息(影票) + if api == 'ticket/info' and member_type == 'member': + print('ticket/info') + _timestamps = MapiTicketInfo(**data).get_timestamp() + # 3.4.12 查询订单信息(影票、卖品) + if api == 'order/info' and member_type == 'member': + print('order/info') + _timestamps = MapiOrderInfo(**data).get_timestamp() + # 3.4.13 确认出票(设置影票为已出票) + if api == 'ticket/print' and member_type == 'member': + print('ticket/print') + _timestamps = MapiTicketPrint(**data).get_timestamp() + # 3.4.14 会员卡激活 + if api == 'card/active' and member_type == 'member': + print('card/active') + _timestamps = MapiCardActive(**data).get_timestamp() + # 3.4.15 会员卡线上开卡 + if api == 'card/regist' and member_type == 'member': + print('card/regist') + _timestamps = MapiCardRegist(**data).get_timestamp() + # 3.5.1 充值明细对账 + if api == 'cinema/recharge-bill' and member_type == 'member': + print('cinema/recharge-bill') + _timestamps = MapiCinemaRechargeBill(**data).get_timestamp() + # 3.5.2 影票对账 + if api == 'cinema/ticket-bill' and member_type == 'member': + print('cinema/ticket-bill') + _timestamps = MapiCinemaTicketBill(**data).get_timestamp() + # 3.5.3 卖品对账 + if api == 'cinema/goods-bill' and member_type == 'member': + print('cinema/goods-bill') + _timestamps = MapiCinemaGoodsBill(**data).get_timestamp() + # 3.5.4 发卡明细对账 + if api == 'cinema/send-card-bill' and member_type == 'member': + print('cinema/send-card-bill') + _timestamps = MapiCinemaSendCardBill(**data).get_timestamp() return _timestamps - - diff --git a/dspt_api/util/mapi/card_active.py b/dspt_api/util/mapi/card_active.py new file mode 100644 index 0000000..bb5de23 --- /dev/null +++ b/dspt_api/util/mapi/card_active.py @@ -0,0 +1,55 @@ +import json +from dspt_api.util.general.handle_redis import get_data_from_redis +from dspt_api.util.general.handle_seat import general_seat_params_member +from dspt_api.util.general.get_order_num import general_order_num +from dspt_api.util.general.handle_goods import general_goods_params_member +from dspt_api.util.general.handle_card import get_card, get_card_level_val, get_card_type +from dspt_api.util.general.handle_params import add_param +import time +import random + + +class MapiCardActive: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # 获取会员卡号 + card_num = get_card(self.ip, self.env, self.pid, self.cid) + add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000)) + # 通用字段 + partner_order_id = general_order_num('ACTIVE', self.api, self.member_type, self.ip, self.env, self.pid, + self.cid) + add_param(self.return_data, 'partner_order_id', partner_order_id) + + active_card_pay = get_card_level_val(self.env, self.pid, self.cid, card_num, 'activeCardFee') + + if not active_card_pay: + add_param(self.return_data, 'money', '自动获取激活费用,请手动输入!') + else: + add_param(self.return_data, 'money', active_card_pay) + + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/card_recharge.py b/dspt_api/util/mapi/card_recharge.py new file mode 100644 index 0000000..1f671c4 --- /dev/null +++ b/dspt_api/util/mapi/card_recharge.py @@ -0,0 +1,53 @@ +import json +from dspt_api.util.general.handle_redis import get_data_from_redis +from dspt_api.util.general.handle_seat import general_seat_params_member +from dspt_api.util.general.get_order_num import general_order_num +from dspt_api.util.general.handle_goods import general_goods_params_member +from dspt_api.util.general.handle_card import get_card, get_card_val +from dspt_api.util.general.handle_params import add_param +import time +import random + + +class MapiCardRecharge: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # 获取会员卡号 + card_num = get_card(self.ip, self.env, self.pid, self.cid) + add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000)) + # 通用字段 + partner_deposit_id = general_order_num('RECHARGE', self.api, self.member_type, self.ip, self.env, self.pid, + self.cid) + add_param(self.return_data, 'partner_deposit_id', partner_deposit_id) + recharge_pay = get_card_val(self.env, self.pid, self.cid, card_num, 'minAddMoney') + if not recharge_pay: + add_param(self.return_data, 'money', '自动获取最低充值金额失败,请手动输入!') + else: + add_param(self.return_data, 'money', recharge_pay) + + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/card_regist.py b/dspt_api/util/mapi/card_regist.py new file mode 100644 index 0000000..769a4ec --- /dev/null +++ b/dspt_api/util/mapi/card_regist.py @@ -0,0 +1,68 @@ +import json +from dspt_api.util.general.handle_redis import get_data_from_redis +from dspt_api.util.general.handle_seat import general_seat_params_member +from dspt_api.util.general.get_order_num import general_order_num +from dspt_api.util.general.handle_goods import general_goods_params_member +from dspt_api.util.general.handle_card import get_card, get_card_level_val, get_card_type +from dspt_api.util.general.handle_params import add_param +import time +import random + + +class MapiCardRegist: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # 通用字段 + partner_order_id = general_order_num('REG', self.api, self.member_type, self.ip, self.env, self.pid, + self.cid) + add_param(self.return_data, 'partner_order_id', partner_order_id) + + add_param(self.return_data, 'check_mobile', '2') + + # card_info + redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}' + request_api_card_level= {'name': '3.1.1 获取影院卡等级规则', 'path': 'cinema/card-level-rule'} + redis_key_api_card_level = f'{redis_key_prefix}_{request_api_card_level["path"]}' + print('redis_key_api_card_level', redis_key_api_card_level) + result_card_level, _format_card_level, data_card_level, _timestamp_card_level = get_data_from_redis(redis_key_api_card_level) + print('data_card_level', data_card_level) + + if not result_card_level: + add_param(self.return_data, 'card_info', '请手动输入参数,或先请求接口:3.1.1 获取影院卡等级规则') + else: + card_info = {'password': 'c8837b23ff8aaa8a2dde915473ce0991', + 'mobile': '18688886666', + 'cardLevelId': data_card_level['levelId'], + 'cardLevelName': data_card_level['levelName'], + 'rechargeValue': data_card_level['initMoney'], + 'sendCardFee': data_card_level['sendCardFee'], + 'sendCardEquityFee': data_card_level['sendCardEquityFee'], + 'exchangeBarcode': None} + add_param(self.return_data, 'card_info', json.dumps(card_info)) + + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/cinema_goods_bill.py b/dspt_api/util/mapi/cinema_goods_bill.py new file mode 100644 index 0000000..ba03e30 --- /dev/null +++ b/dspt_api/util/mapi/cinema_goods_bill.py @@ -0,0 +1,4 @@ +from dspt_api.util.mapi.cinema_recharge_bill import MapiCinemaRechargeBill + +class MapiCinemaGoodsBill(MapiCinemaRechargeBill): + pass \ No newline at end of file diff --git a/dspt_api/util/mapi/cinema_recharge_bill.py b/dspt_api/util/mapi/cinema_recharge_bill.py new file mode 100644 index 0000000..44125d7 --- /dev/null +++ b/dspt_api/util/mapi/cinema_recharge_bill.py @@ -0,0 +1,39 @@ +from dspt_api.util.general.handle_time import get_stime_etime +from dspt_api.util.general.handle_card import get_card +from dspt_api.util.general.handle_params import add_param +import time + + +class MapiCinemaRechargeBill: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # stime and etime + start_date, end_date = get_stime_etime('date', today=False) + add_param(self.return_data, 'start_date', start_date) + add_param(self.return_data, 'end_date', end_date) + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/cinema_send_card_bill.py b/dspt_api/util/mapi/cinema_send_card_bill.py new file mode 100644 index 0000000..8d5386d --- /dev/null +++ b/dspt_api/util/mapi/cinema_send_card_bill.py @@ -0,0 +1,4 @@ +from dspt_api.util.mapi.cinema_recharge_bill import MapiCinemaRechargeBill + +class MapiCinemaSendCardBill(MapiCinemaRechargeBill): + pass \ No newline at end of file diff --git a/dspt_api/util/mapi/cinema_ticket_bill.py b/dspt_api/util/mapi/cinema_ticket_bill.py new file mode 100644 index 0000000..0b5cfaa --- /dev/null +++ b/dspt_api/util/mapi/cinema_ticket_bill.py @@ -0,0 +1,4 @@ +from dspt_api.util.mapi.cinema_recharge_bill import MapiCinemaRechargeBill + +class MapiCinemaTicketBill(MapiCinemaRechargeBill): + pass \ No newline at end of file diff --git a/dspt_api/util/mapi/order_info.py b/dspt_api/util/mapi/order_info.py new file mode 100644 index 0000000..51e7954 --- /dev/null +++ b/dspt_api/util/mapi/order_info.py @@ -0,0 +1,4 @@ +from dspt_api.util.mapi.ticket_info import MapiTicketInfo + +class MapiOrderInfo(MapiTicketInfo): + pass \ No newline at end of file diff --git a/dspt_api/util/mapi/order_status.py b/dspt_api/util/mapi/order_status.py new file mode 100644 index 0000000..b42d3ae --- /dev/null +++ b/dspt_api/util/mapi/order_status.py @@ -0,0 +1,53 @@ +import json +from dspt_api.util.general.handle_redis import get_data_from_redis, get_param_from_redis +from dspt_api.util.general.handle_seat import general_seat_params_member +from dspt_api.util.general.get_order_num import general_order_num +from dspt_api.util.general.handle_goods import general_goods_params_member +from dspt_api.util.general.handle_card import get_card +from dspt_api.util.general.handle_params import add_param +import time +import random + + +class MapiOrderStatus: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # 获取其他参数 + redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}' + # partner_buy_ticket_id + request_api_lock_buy = {'name': '3.4.6 混合下单(影票、卖品)', 'path': 'seat/lock-buy'} + redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}' + params_lock_buy = get_param_from_redis(redis_key_api_lock_buy) + + if not params_lock_buy: + add_param(self.return_data, 'partner_order_id', + '请手动输入参数,或先请求接口3.4.6 混合下单(影票、卖品)') + else: + add_param(self.return_data, 'partner_order_id', params_lock_buy['partner_buy_ticket_id']) + + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/order_ticket_flag.py b/dspt_api/util/mapi/order_ticket_flag.py new file mode 100644 index 0000000..259f9df --- /dev/null +++ b/dspt_api/util/mapi/order_ticket_flag.py @@ -0,0 +1,52 @@ +import json +from dspt_api.util.general.handle_redis import get_data_from_redis, get_param_from_redis +from dspt_api.util.general.handle_seat import general_seat_params_member +from dspt_api.util.general.get_order_num import general_order_num +from dspt_api.util.general.handle_goods import general_goods_params_member +from dspt_api.util.general.handle_card import get_card +from dspt_api.util.general.handle_params import add_param +import time +import random + + +class MapiOrderTicketFlag: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # 获取其他参数 + redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}' + # partner_buy_ticket_id + request_api_lock_buy = {'name': '3.4.6 混合下单(影票、卖品)', 'path': 'seat/lock-buy'} + redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}' + params_lock_buy = get_param_from_redis(redis_key_api_lock_buy) + + if not params_lock_buy: + add_param(self.return_data, 'partner_buy_ticket_id', '请手动输入参数,或先请求接口3.4.6 混合下单(影票、卖品)') + else: + add_param(self.return_data, 'partner_buy_ticket_id', params_lock_buy['partner_buy_ticket_id']) + + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/seat_book.py b/dspt_api/util/mapi/seat_book.py new file mode 100644 index 0000000..689da05 --- /dev/null +++ b/dspt_api/util/mapi/seat_book.py @@ -0,0 +1,69 @@ +import json +from dspt_api.util.general.handle_redis import get_data_from_redis +from dspt_api.util.general.handle_seat import general_seat_params_member +from dspt_api.util.general.get_order_num import general_order_num +from dspt_api.util.general.handle_goods import general_goods_params_member +from dspt_api.util.general.handle_card import get_card +from dspt_api.util.general.handle_params import add_param +import time +import random + + +class MapiSeatBook: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # 获取会员卡号 + card_num = get_card(self.ip, self.env, self.pid, self.cid) + add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000)) + # 通用字段 + add_param(self.return_data, 'phone', '18688886666', timestamp=1000000000000) + partner_book_id = general_order_num('BOOK_T', self.api, self.member_type, self.ip, self.env, self.pid, + self.cid) + add_param(self.return_data, 'partner_book_id', partner_book_id) + + # 获取其他参数 + redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}' + # seat_id + request_api_seat = {'name': '3.2.6 获取某场次座位状态', 'path': 'play/seat-status'} + redis_key_api_seat = f'{redis_key_prefix}_{request_api_seat["path"]}' + result_seat, _format_seat, seat_data, _timestamp_seat = get_data_from_redis(redis_key_api_seat) + seat_id_list = [seat['cineSeatId'] for seat in seat_data] + if not result_seat: + add_param(self.return_data, 'seat_id', '请手动输入参数,或先请求接口3.2.6 获取某场次座位状态') + else: + add_param(self.return_data, 'seat_id', ','.join(seat_id_list)) + # 获取play_id + request_api_play = {'name': '3.2.3 获取放映计划列表', 'path': 'cinema/plays'} + redis_key_api_play = f'{redis_key_prefix}_{request_api_play["path"]}' + result_play, _format_play, seat_price_from_play, _timestamp_play = get_data_from_redis(redis_key_api_play) + + if not result_play: + add_param(self.return_data, 'play_id', '请手动输入参数,或先请求接口3.2.3 获取放映计划列表') + else: + add_param(self.return_data, 'play_id', seat_price_from_play['id']) + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/seat_unlock.py b/dspt_api/util/mapi/seat_unlock.py new file mode 100644 index 0000000..60194e0 --- /dev/null +++ b/dspt_api/util/mapi/seat_unlock.py @@ -0,0 +1,59 @@ +from dspt_api.util.general.handle_redis import get_data_from_redis +from dspt_api.util.general.handle_params import add_param +import random + + +class MapiSeatUnlock: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data) + self.handle() + return self.return_data + + def get_timestamp(self): + return self.handle() + + def handle(self): + redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}' + # play_id + request_api_play = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'} + redis_key_api_play = f'{redis_key_prefix}_{request_api_play["path"]}' + result_play, _format_play, play_data, _timestamp_play = get_data_from_redis(redis_key_api_play) + if not result_play: + add_param(self.return_data, 'play_id', '请手动输入参数,或先请求接口:3.2.3 获取放映计划列表') + else: + add_param(self.return_data, 'play_id', play_data['id']) + # seat_id + request_api_seat = {'name': '3.1.8 获取某场次座位状态', 'path': 'play/seat-status'} + redis_key_api_seat = f'{redis_key_prefix}_{request_api_seat["path"]}' + result_seat, _format_seat, seat_data, _timestamp_seat = get_data_from_redis(redis_key_api_seat) + if not result_seat: + add_param(self.return_data, 'seat_id', '请手动输入参数,或先请求接口:3.2.6 获取场次座位状态') + else: + seat_id = ','.join([seat['cineSeatId'] for seat in seat_data]) + add_param(self.return_data, 'seat_id', seat_id) + # 获取 lock_flag + request_api_lock = {'name': '3.4.3 座位锁定', 'path': 'seat/lock'} + redis_key_api_lock = f'{redis_key_prefix}_{request_api_lock["path"]}' + result_lock, _format_lock, seat_price_from_lock, _timestamp_lock = get_data_from_redis(redis_key_api_lock) + if not result_lock: + add_param(self.return_data, 'lock_flag', '请手动输入参数,或先请求接口:3.4.3 座位锁定') + lock_flag = seat_price_from_lock['lockFlag'] + add_param(self.return_data, 'lock_flag', lock_flag) + # 处理混合结果 + return max(_timestamp_play, _timestamp_seat, _timestamp_lock) diff --git a/dspt_api/util/mapi/ticket_info.py b/dspt_api/util/mapi/ticket_info.py new file mode 100644 index 0000000..8901b7c --- /dev/null +++ b/dspt_api/util/mapi/ticket_info.py @@ -0,0 +1,48 @@ +from dspt_api.util.general.handle_redis import get_data_from_redis +from dspt_api.util.general.handle_card import get_card +from dspt_api.util.general.handle_params import add_param +import time + + +class MapiTicketInfo: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # ticket_flag1 & ticket_flag2 + redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}' + request_api_play = {'name': '3.4.6 混合下单(影票、卖品)', 'path': 'seat/lock-buy'} + redis_key_api_play = f'{redis_key_prefix}_{request_api_play["path"]}' + result_buy, _format_buy, data_buy, _timestamp_buy = get_data_from_redis(redis_key_api_play) + if result_buy is False: + add_param(self.return_data, 'ticket_flag1', '请手动输入参数,检查相关接口返回值:3.4.6 混合下单(影票、卖品)', + timestamp=int(time.time() * 1000)) + add_param(self.return_data, 'ticket_flag2', '请手动输入参数,检查相关接口返回值:3.4.6 混合下单(影票、卖品)', + timestamp=int(time.time() * 1000)) + else: + add_param(self.return_data, 'ticket_flag1', data_buy['ticketFlag1']) + add_param(self.return_data, 'ticket_flag2', data_buy['ticketFlag2']) + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000) diff --git a/dspt_api/util/mapi/ticket_print.py b/dspt_api/util/mapi/ticket_print.py new file mode 100644 index 0000000..006771f --- /dev/null +++ b/dspt_api/util/mapi/ticket_print.py @@ -0,0 +1,4 @@ +from dspt_api.util.mapi.ticket_info import MapiTicketInfo + +class MapiTicketPrint(MapiTicketInfo): + pass \ No newline at end of file diff --git a/dspt_api/util/mapi/ticket_refund.py b/dspt_api/util/mapi/ticket_refund.py new file mode 100644 index 0000000..d081894 --- /dev/null +++ b/dspt_api/util/mapi/ticket_refund.py @@ -0,0 +1,57 @@ +import json +from dspt_api.util.general.handle_redis import get_data_from_redis, get_param_from_redis +from dspt_api.util.general.handle_seat import general_seat_params_member +from dspt_api.util.general.get_order_num import general_order_num +from dspt_api.util.general.handle_goods import general_goods_params_member +from dspt_api.util.general.handle_card import get_card +from dspt_api.util.general.handle_params import add_param +import time +import random + + +class MapiTicketRefund: + def __init__(self, **kwargs): + self.member_type = kwargs.get('member_type') + self.api = kwargs.get('api') + self.ip = kwargs.get('ip') + self.env = kwargs.get('env') + self.cid = kwargs.get('cid') + self.pid = kwargs.get('pid') + self.sale_type = kwargs.get('sale_type') + self.pay_type = kwargs.get('pay_type') + self.user_data = { + 'ip': self.ip, + 'env': self.env, + 'member_type': self.member_type, + 'pid': self.pid, + 'cid': self.cid, + 'sale_type': self.sale_type, + 'pay_type': self.pay_type, + } + self.return_data = [] + + def get_suggestion(self): + print('get_suggestion', self.user_data, self.sale_type, self.pay_type) + # partner_refund_ticket_id + partner_refund_ticket_id = general_order_num('REF_T', self.api, self.member_type, self.ip, self.env, self.pid, + self.cid) + add_param(self.return_data, 'partner_refund_ticket_id', partner_refund_ticket_id) + + # 获取其他参数 + redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}' + # partner_buy_ticket_id + request_api_lock_buy = {'name': '3.4.6 混合下单(影票、卖品)', 'path': 'seat/lock-buy'} + redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}' + params_lock_buy = get_param_from_redis(redis_key_api_lock_buy) + + if not params_lock_buy: + add_param(self.return_data, 'partner_buy_ticket_id', '请手动输入参数,或先请求接口3.4.6 混合下单(影票、卖品)') + else: + add_param(self.return_data, 'partner_buy_ticket_id', params_lock_buy['partner_buy_ticket_id']) + + print(__name__, self.return_data) + return self.return_data + + @staticmethod + def get_timestamp(): + return int(time.time() * 1000)