Compare commits

...

178 Commits

Author SHA1 Message Date
RogerWork 5394cd5c6a 修改会员接口默认不开启配餐 1 week ago
RogerWork 1faedcd52d 修改会员接口默认不开启配餐 1 week ago
RogerWork 5cd0911072 修改多卖品逻辑 1 week ago
RogerWork 10b2924bdb 修改非本影院会员卡报错逻辑 1 week ago
RogerWork 7fe023a6cd 修改执行顺序的逻辑 2 weeks ago
RogerWork 80688c6fc8 修改执行顺序的逻辑 2 weeks ago
RogerWork ae24d8ebb2 修改执行顺序的逻辑 2 weeks ago
RogerWork f201c8dc4e 修改执行顺序的逻辑 2 weeks ago
RogerWork 313629097a 修改执行顺序的逻辑 2 weeks ago
RogerWork 24d74daaa5 修改执行顺序的逻辑 2 weeks ago
RogerWork b563411769 重写会员卡购票逻辑 2 weeks ago
RogerWork 9aba7042a6 会员卡密码功能 3 weeks ago
RogerWork a6518aaff2 优化全部会员接口 4 weeks ago
RogerWork ed6430c378 优化全部会员接口 4 weeks ago
RogerWork 884ccc7352 完成全部会员接口 4 weeks ago
RogerWork 01ec30a462 完成会员场次座位相关接口 4 weeks ago
RogerWork 2b7628186f 完成基本的会员卡接口 4 weeks ago
RogerWork 6608249bc2 完成会员锁座购票和卖品接口 4 weeks ago
RogerWork 2de20ab892 封装常用方法 2 months ago
RogerWork a8396d3f37 debug 2 months ago
RogerWork 4c82cc1559 debug 2 months ago
RogerWork 04796ff691 debug 2 months ago
RogerWork 806c7d285b debug 2 months ago
RogerWork c04a8b6c19 debug 2 months ago
RogerWork 04d1b18186 debug 2 months ago
RogerWork 510e1c8ede debug 2 months ago
RogerWork 449cb1c3d4 debug 2 months ago
RogerWork 76f7616fe1 debug 2 months ago
RogerWork 5262d89d98 debug 2 months ago
RogerWork ed65ae7312 debug 2 months ago
RogerWork 7f00ed37d4 debug 2 months ago
RogerWork e5f6f818b0 debug 2 months ago
RogerWork e3e00d3244 debug 2 months ago
RogerWork fb266aed01 debug 2 months ago
RogerWork 6432038a4e debug 2 months ago
RogerWork 882f0fbfc6 debug 2 months ago
RogerWork 4854f237b7 debug 2 months ago
RogerWork cb35d0cc74 debug 2 months ago
RogerWork 8d7cec5150 非会员基本完成一半,有些接口还是老要的实现方式,以后更新 2 months ago
RogerWork f8d2fd236d 购票部分先提交一版 3 months ago
RogerWork b873d44561 购票部分先提交一版 4 months ago
RogerWork b786e0ddc1 购票部分先提交一版 4 months ago
RogerWork c1cfc46a8b 完善redis缓存逻辑,区分不同环境 4 months ago
RogerWork b2b7b5f65c 修复随机参数生成的逻辑问题 5 months ago
RogerWork 3ed500d635 完成添加券的逻辑,准备开始锁座购票逻辑 5 months ago
RogerWork 1364601791 1. 完成联名卡接口 6 months ago
RogerWork 1e8bc8a713 联名卡的逻辑完成了80% 6 months ago
RogerWork c108d68073 1. 优化代码,把特殊处理的代码从两处变为一处 6 months ago
RogerWork d0991cac01 1. 完成锁座接口处理 6 months ago
RogerWork 888452e7a1 1. 增加随机数据的逻辑 6 months ago
RogerWork b25e499da7 写的啥破玩意,一堆bug 6 months ago
RogerWork ffcaac7bc1 添加调用 6 months ago
RogerWork db3cc7cd3c 1. 为前端增加reload的判断依据, 返回的推荐字段增加result 6 months ago
RogerWork 3accec70cf 1. 优化了用户选择数据在redis中的存储格式, 6 months ago
RogerWork ee839e8f61 将xml处理后的数据也写入redis 6 months ago
RogerWork 522c904fdb 1. 支持xml的美化输出 6 months ago
RogerWork 0e14a86aed 完成如下接口推荐 7 months ago
RogerWork 9e1acfae20 提交缺失的文件 7 months ago
RogerWork ae7d0897eb 修复执行sed命令无效的问题 7 months ago
RogerWork 25313c6d81 完成第一个参数推荐逻辑 7 months ago
RogerWork ebe7e0b6e0 注入基础数据 7 months ago
RogerWork e87526749f 增加xml返回值的基本处理逻辑 7 months ago
RogerWork bc3e98ac08 修复生成sql差异文件为方法 7 months ago
RogerWork f6d4821f9a 修复生成sql差异文件为方法 7 months ago
RogerWork 8ff2692848 错误参数兼容 7 months ago
RogerWork 2df3558c16 修复请求接口的方法 7 months ago
RogerWork 456a4af8d5 修复生成请求的方法 7 months ago
RogerWork 371909c9bf 修复过场退票逻辑的bug 7 months ago
RogerWork 7958eb4492 增加url处理的逻辑 9 months ago
RogerWork d3d930b001 增加url处理的逻辑 9 months ago
RogerWork 8940d23028 电商接口第一次提交 9 months ago
RogerWork 0a9ac4c11b 调整服务器参数 9 months ago
RogerWork 4af87b20ee 调整服务器参数 9 months ago
RogerWork fcb73453a2 调整服务器参数 9 months ago
RogerWork 7872ef7860 调整服务器参数 9 months ago
RogerWork 7d65c7fef4 调整服务器参数 9 months ago
RogerWork 61228b118c 调整服务器参数 9 months ago
RogerWork b8154e5ca8 调试代码 11 months ago
RogerWork c4cc36ec3e 调试代码 11 months ago
RogerWork a175c332d1 调试代码 11 months ago
RogerWork 25318f1477 调试代码 11 months ago
RogerWork d42861ce07 调试代码 11 months ago
RogerWork 10cc34903f 调试代码 11 months ago
RogerWork 1e9a25332a 调试代码 11 months ago
RogerWork cb4af1059b 调试代码 11 months ago
RogerWork 54c694fc0f 增加关联执行的功能 11 months ago
RogerWork 6bb7f57c18 .\logs\dingxin.log 11 months ago
RogerWork 1eef9f1b94 优化日志打印 11 months ago
RogerWork 3411007afb 修复日志版本号问题 11 months ago
RogerWork 3050ddf632 增加手动升级的日志记录功能 11 months ago
RogerWork 737c50127d 增加记录版本变化的功能 12 months ago
RogerWork 4250fc3457 返回结果中增加客户端版本号 12 months ago
RogerWork a3ee2ee85e 整理线上配置 12 months ago
RogerWork 77023d8538 整理线上配置 1 year ago
RogerWork 13defdf973 整理线上配置 1 year ago
RogerWork db074070ea 整理线上配置 1 year ago
RogerWork 36b9d9a369 整理线上配置 1 year ago
RogerWork 40b7d979db 整理线上配置 1 year ago
RogerWork a4a6ebda62 整理线上配置 1 year ago
RogerWork eefa2dfc56 整理线上配置 1 year ago
RogerWork e6180e5b56 整理线上配置 1 year ago
RogerWork cccb6b0ac9 整理线上配置 1 year ago
RogerWork e097656611 整理线上配置 1 year ago
RogerWork aa9df02521 整理线上配置 1 year ago
RogerWork 86eb9da215 整理线上配置 1 year ago
RogerWork e8b87cce0d 调试 uvicorn 1 year ago
RogerWork 3fb812cf01 调试 uvicorn 1 year ago
RogerWork 2dd57fd9dd 调试 uvicorn 1 year ago
RogerWork 4531100393 调试 uvicorn 1 year ago
RogerWork 90b86d341d 调试 uvicorn 1 year ago
RogerWork de86232b70 调试 uvicorn 1 year ago
RogerWork 5185ba9680 调试 uvicorn 1 year ago
RogerWork af49c07060 调试 uvicorn 1 year ago
RogerWork da3c9f6911 调试 uvicorn 1 year ago
RogerWork 13ed65a2fb 调试 uvicorn 1 year ago
RogerWork dd39b830f9 调试 uvicorn 1 year ago
RogerWork 44d8a331ab 调试 uvicorn 1 year ago
RogerWork 61373d6dc5 调试 uvicorn 1 year ago
RogerWork 7950ca6f36 调试 uvicorn 1 year ago
RogerWork e64398cd8a 调试 uvicorn 1 year ago
RogerWork 5b94754e52 调试 eventlet 1 year ago
RogerWork 47c359f379 调试 eventlet 1 year ago
RogerWork 2611211bc1 调试 eventlet 1 year ago
RogerWork 4dfdc54aba 调试 eventlet 1 year ago
RogerWork ade81b7691 调试 uvicorn 1 year ago
RogerWork 2cafb54498 调试执行git命令的代码 1 year ago
RogerWork 4311a867c0 优化REDIS_IP 1 year ago
RogerWork 9dee6c74b9 优化路径 1 year ago
RogerWork c1d895e48f 支持gunicorn 1 year ago
RogerWork 2f7a570b1b 支持gunicorn 1 year ago
RogerWork 5d0f178416 支持gunicorn 1 year ago
RogerWork 23e295dcdb 增加降级提示的逻辑 1 year ago
RogerWork a88e8afd48 优化升级处理逻辑 1 year ago
RogerWork 613c56700a 为websocket增加ping响应 1 year ago
RogerWork 15ed79245c 完成websocket发送状态的逻辑 1 year ago
RogerWork 1875ec0c9f 完成更新状态和描述的逻辑 1 year ago
RogerWork acda8b7d6e 增加修改设置的逻辑 1 year ago
RogerWork 9ca73dac30 1. 添加云版本和远程办公标识的逻辑 1 year ago
RogerWork d4f76925ba 简单的逻辑修改 1 year ago
RogerWork 9424d8a761 修复获取版本号并写入数据库的逻辑 1 year ago
RogerWork 4139c71361 完成后台升级逻辑 1 year ago
RogerWork f43c65e4e4 添加逻辑支持设置常用人 1 year ago
RogerWork b7b6cfcea3 优化代码逻辑兼容客户端没上传的情况 1 year ago
RogerWork 8a8ed30e05 完成第一可用的单机升级逻辑 1 year ago
RogerWork ce0b4a501a 提交一个可用的代码 1 year ago
RogerWork 7d755311ab 修复bug 1 year ago
RogerWork 8b53aacc54 完成生成cine.sql的逻辑 1 year ago
RogerWork db9471e2e0 完成数据库对比文件生成的脚本 1 year ago
RogerWork 32339fe0e4 整理代码 1 year ago
roger_mac 08ea7aa9a1 修改数据库字段 1 year ago
RogerWork ace158f64b 临时代码 1 year ago
RogerWork b0330acc2e 完成子模块代码 1 year ago
RogerWork 59f8ca151f 临时代码 1 year ago
RogerWork b9df7114e8 添加git模块 1 year ago
RogerWork e327669ade V1.0版本基本完成 1 year ago
RogerWork 8a442be939 修复返回指定json的bug 1 year ago
roger_mac 20f74288d4 完成自定义返回值的功能 1 year ago
roger_mac 9ffc3c764e Merge remote-tracking branch 'origin/main' 1 year ago
roger_mac 6f1e19cda8 修复超时售票退票的bypass 逻辑 1 year ago
RogerWork 13601fddbf 临时代码 1 year ago
roger_mac c380bf10b4 临时代码 1 year ago
RogerWork de7f4b382b 兼容前端逻辑 1 year ago
RogerWork 087f20dc10 添加启动mock的逻辑 1 year ago
RogerWork b4e22e3f07 修改数据库账号 1 year ago
RogerWork b02c3aba3d 把较复杂的sql提出成cinema_sql, 封装数据库查询逻辑db() 1 year ago
RogerWork 7f005cc298 基本完成mock的后台逻辑 盲写 1 year ago
roger_mac 28e47abe07 临时代码 1 year ago
RogerWork 966de6abe9 临时代码 1 year ago
RogerWork 37b0120b38 完成了一个get和一个post的mock请求,抽象通用逻辑,增加返回模板 1 year ago
RogerWork ac4be88ca0 增加mock应用简单调试 1 year ago
RogerWork 75642532e9 增加自定义刷新发法 1 year ago
RogerWork 30cd5eef5a 修复最后更新时间不修改的问题 1 year ago
RogerWork de7c1c4234 完成多线程更新影院版本的逻辑 1 year ago
roger_mac b28ac7f621 增加mac系统兼容性,去掉mysqlclient,增加pymysql调用 1 year ago
RogerWork 948c9a6d9f 完成redis的学习 1 year ago
roger_home_pc 6404c02310 完成搜索功能 1 year ago
roger_home_pc 71aa137798 修改ignore 1 year ago
RogerWork e9c9ef7fc5 备注 1 year ago
  1. 6
      .gitignore
  2. 1
      command.txt
  3. 2
      dingxin_toolbox_drf/__init__.py
  4. 11
      dingxin_toolbox_drf/asgi.py
  5. 23
      dingxin_toolbox_drf/http.py
  6. 13
      dingxin_toolbox_drf/routing.py
  7. 139
      dingxin_toolbox_drf/settings.py
  8. 9
      dingxin_toolbox_drf/urls.py
  9. 0
      dspt_api/__init__.py
  10. 3
      dspt_api/admin.py
  11. 6
      dspt_api/apps.py
  12. 120
      dspt_api/migrations/0001_initial.py
  13. 18
      dspt_api/migrations/0002_ecenv_type.py
  14. 18
      dspt_api/migrations/0003_ecchannel_type.py
  15. 27
      dspt_api/migrations/0004_remove_ecapi_m_path_ecapi_type_alter_ecapi_path.py
  16. 18
      dspt_api/migrations/0005_alter_ecapiparams_value.py
  17. 22
      dspt_api/migrations/0006_rename_cinemaids_eccinemaids_ecapigroup_type.py
  18. 22
      dspt_api/migrations/0007_remove_ecapigroup_order_alter_ecapigroup_api_id.py
  19. 18
      dspt_api/migrations/0008_rename_desc_ecapi_comment.py
  20. 18
      dspt_api/migrations/0009_rename_comment_ecapi_description.py
  21. 18
      dspt_api/migrations/0010_rename_desc_ecapiparams_description.py
  22. 23
      dspt_api/migrations/0011_alter_ecrequestlog_request_and_more.py
  23. 18
      dspt_api/migrations/0012_alter_ecapi_description.py
  24. 18
      dspt_api/migrations/0013_alter_ecapiparams_description.py
  25. 18
      dspt_api/migrations/0014_ecapi_order.py
  26. 0
      dspt_api/migrations/__init__.py
  27. 117
      dspt_api/models.py
  28. 45
      dspt_api/serializers.py
  29. 3
      dspt_api/tests.py
  30. 20
      dspt_api/urls.py
  31. 0
      dspt_api/util/__init__.py
  32. 0
      dspt_api/util/api/__init__.py
  33. 41
      dspt_api/util/api/cinema_goods_pic.py
  34. 33
      dspt_api/util/api/cinema_hall_seats.py
  35. 29
      dspt_api/util/api/cinema_plays_increment.py
  36. 53
      dspt_api/util/api/ecard_detail.py
  37. 62
      dspt_api/util/api/ecard_order_detail.py
  38. 30
      dspt_api/util/api/ecard_refund.py
  39. 45
      dspt_api/util/api/ecard_regist.py
  40. 83
      dspt_api/util/api/ecard_renew.py
  41. 29
      dspt_api/util/api/ecard_seat_price.py
  42. 52
      dspt_api/util/api/goods_deduct.py
  43. 66
      dspt_api/util/api/order_buy_goods.py
  44. 4
      dspt_api/util/api/order_info.py
  45. 46
      dspt_api/util/api/order_status.py
  46. 46
      dspt_api/util/api/order_ticket_flag.py
  47. 34
      dspt_api/util/api/play_info.py
  48. 38
      dspt_api/util/api/play_period_changed_seats.py
  49. 33
      dspt_api/util/api/play_seat_overview.py
  50. 38
      dspt_api/util/api/play_seat_status.py
  51. 81
      dspt_api/util/api/seat_check_coupon.py
  52. 53
      dspt_api/util/api/seat_lock.py
  53. 109
      dspt_api/util/api/seat_lock_buy.py
  54. 61
      dspt_api/util/api/seat_unlock.py
  55. 10
      dspt_api/util/api/ticket_info.py
  56. 46
      dspt_api/util/api/ticket_info_by_qrcode.py
  57. 50
      dspt_api/util/api/ticket_print.py
  58. 54
      dspt_api/util/api/ticket_refund.py
  59. 52
      dspt_api/util/api/ticket_refundv2.py
  60. 0
      dspt_api/util/general/__init__.py
  61. 8
      dspt_api/util/general/format_xml.py
  62. 110
      dspt_api/util/general/get_cinema_quan.py
  63. 17
      dspt_api/util/general/get_order_num.py
  64. 12
      dspt_api/util/general/goods_list.py
  65. 139
      dspt_api/util/general/handle_card.py
  66. 47
      dspt_api/util/general/handle_ecard.py
  67. 4
      dspt_api/util/general/handle_float.py
  68. 297
      dspt_api/util/general/handle_goods.py
  69. 6
      dspt_api/util/general/handle_params.py
  70. 65
      dspt_api/util/general/handle_redis.py
  71. 425
      dspt_api/util/general/handle_seat.py
  72. 20
      dspt_api/util/general/handle_ticket.py
  73. 10
      dspt_api/util/general/handle_time.py
  74. 1002
      dspt_api/util/general/handle_xml_resp.py
  75. 100
      dspt_api/util/general/insert_api_to_db.py
  76. 64
      dspt_api/util/general/random_params.py
  77. 46
      dspt_api/util/general/sign.py
  78. 718
      dspt_api/util/general/suggest_params.py
  79. 27
      dspt_api/util/general/xml_util.py
  80. 0
      dspt_api/util/mapi/__init__.py
  81. 51
      dspt_api/util/mapi/card_active.py
  82. 42
      dspt_api/util/mapi/card_auth.py
  83. 49
      dspt_api/util/mapi/card_buy_info.py
  84. 5
      dspt_api/util/mapi/card_detail.py
  85. 57
      dspt_api/util/mapi/card_get_goods_price.py
  86. 45
      dspt_api/util/mapi/card_jifen_query.py
  87. 51
      dspt_api/util/mapi/card_recharge.py
  88. 5
      dspt_api/util/mapi/card_recharge_log.py
  89. 62
      dspt_api/util/mapi/card_regist.py
  90. 44
      dspt_api/util/mapi/card_trade_query.py
  91. 4
      dspt_api/util/mapi/cinema_goods_bill.py
  92. 40
      dspt_api/util/mapi/cinema_recharge_bill.py
  93. 4
      dspt_api/util/mapi/cinema_send_card_bill.py
  94. 4
      dspt_api/util/mapi/cinema_ticket_bill.py
  95. 45
      dspt_api/util/mapi/movie_info.py
  96. 84
      dspt_api/util/mapi/order_buy_goods.py
  97. 52
      dspt_api/util/mapi/order_detail.py
  98. 70
      dspt_api/util/mapi/order_info.py
  99. 5
      dspt_api/util/mapi/order_list.py
  100. 60
      dspt_api/util/mapi/order_status.py
  101. Some files were not shown because too many files have changed in this diff Show More

6
.gitignore vendored

@ -1,2 +1,6 @@
/venv/
.idea
.idea
/dx/
/logs/
/logs/dingxin.log
*.log

@ -0,0 +1 @@
py .\manage.py runserver 0.0.0.0:8000

@ -0,0 +1,2 @@
import pymysql
pymysql.install_as_MySQLdb()

@ -8,9 +8,16 @@ https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/
"""
import os
import django
# from django.conf import settings
# # from django.core.asgi import get_asgi_application
# from channels.routing import ProtocolTypeRouter, URLRouter
from channels.routing import get_default_application
from django.core.asgi import get_asgi_application
from .wsgi import *
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dingxin_toolbox_drf.settings')
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
application = get_asgi_application()
django.setup()
application = get_default_application()

@ -0,0 +1,23 @@
from django.utils.deprecation import MiddlewareMixin
class SetRemoteAddrFromForwardedFor(MiddlewareMixin):
"""
如果部署了代理使用此中间件获取远程客户端IP
在settings中注册该中间件
"""
def process_request(self, request):
# print('process_request')
# print("request.META")
# print(request.META)
try:
# print("request.META")
real_ip = request.META['HTTP_X_FORWARDED_FOR']
# print('real_ip', real_ip)
except KeyError as err:
print('HTTP_X_FORWARDED_FOR key error')
print(err)
else:
real_ip = real_ip.split(",")[0]
request.META['REMOTE_ADDR'] = real_ip

@ -0,0 +1,13 @@
from .wsgi import *
# from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
from .urls import websocket_urlpatterns
application = ProtocolTypeRouter(
{
'http': get_asgi_application(),
'websocket': URLRouter(websocket_urlpatterns)
}
)

@ -12,11 +12,79 @@ https://docs.djangoproject.com/en/4.2/ref/settings/
from pathlib import Path
import os
from env import ENV
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
print(BASE_DIR)
# 服务器IP
# # SERVER_IP = '172.16.1.63'
# # REDIS_IP = '172.16.1.63'
# SERVER_IP = '172.16.1.222'
# REDIS_IP = '172.16.1.222'
# # SERVER_IP = ''
CONFIG = {
'dev': {
'SERVER_IP': '172.16.1.168',
'WEB_SERVER_IP': '172.16.1.168',
'DB': {
"HOST": 'home.rogersun.cn',
"PORT": 3306,
"USER": "dingxin",
"PASSWORD": "cine123456",
"NAME": "dingxin_toolbox",
},
'REDIS_IP': '172.16.1.168',
'ECARD_DB': {
"HOST": '172.16.3.53',
"PORT": 3306,
"USER": "test",
"PASSWORD": "cine123456",
"NAME": "fws_dgp_card_db",
}
},
'local': {
'SERVER_IP': '127.0.0.1',
'WEB_SERVER_IP': '127.0.0.1',
'DB': {
"HOST": 'home.rogersun.cn',
"PORT": 3306,
"USER": "dingxin",
"PASSWORD": "cine123456",
"NAME": "dingxin_toolbox",
},
'REDIS_IP': '127.0.0.1',
'ECARD_DB': {
"HOST": '172.16.3.53',
"PORT": 3306,
"USER": "test",
"PASSWORD": "cine123456",
"NAME": "fws_dgp_card_db",
}
},
'prd': {
'SERVER_IP': '172.16.1.63',
'WEB_SERVER_IP': '172.16.1.222',
'DB': {
"HOST": '172.16.1.63',
"PORT": 3306,
"USER": "root",
"PASSWORD": "Cine123456",
"NAME": "dingxin_toolbox",
},
'REDIS_IP': '172.16.1.63',
'ECARD_DB': {
"HOST": '172.16.3.53',
"PORT": 3306,
"USER": "test",
"PASSWORD": "cine123456",
"NAME": "fws_dgp_card_db",
}
}
}
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
@ -25,8 +93,10 @@ SECRET_KEY = 'django-insecure-hfujy!ih1uvio_p^cfdj^%8juf_wdb@szu$t=aaacd)^(zf@b%
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
# 增加异步和同步多线程的支持
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']
# Application definition
@ -36,11 +106,16 @@ INSTALLED_APPS = [
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'channels',
# 'daphne',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders', # coreapi生成接口文档
'rest_framework',
'rest_framework.authtoken', # Token验证应用
'django_filters',
'update',
'mock',
'dspt_api'
]
MIDDLEWARE = [
@ -49,6 +124,7 @@ MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'dingxin_toolbox_drf.http.SetRemoteAddrFromForwardedFor',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
@ -74,20 +150,46 @@ TEMPLATES = [
WSGI_APPLICATION = 'dingxin_toolbox_drf.wsgi.application'
# 设置ASGI
ASGI_APPLICATION = 'dingxin_toolbox_drf.routing.application'
# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"HOST": "home.rogersun.cn",
"PORT": 3306,
"USER": "root",
"PASSWORD": "Sxzgx1209",
"NAME": "dingxin_toolbox",
# "HOST": "home.rogersun.cn",
"HOST": CONFIG[ENV]['DB']['HOST'],
"PORT": CONFIG[ENV]['DB']['PORT'],
"USER": CONFIG[ENV]['DB']['USER'],
"PASSWORD": CONFIG[ENV]['DB']['PASSWORD'],
"NAME": CONFIG[ENV]['DB']['NAME'],
}
}
CACHES = {
"default": {
'BACKEND': 'django_redis.cache.RedisCache',
# "BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": f"redis://{CONFIG[ENV]['REDIS_IP']}:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
REST_FRAMEWORK_EXTENSIONS = {
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 1, # 缓存时间
'DEFAULT_USE_CACHE': 'default', # 缓存存储
'DEFAULT_OBJECT_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_object_cache_key_func',
'DEFAULT_LIST_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_list_cache_key_func',
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 使用Redis做为session缓存
SESSION_CACHE_ALIAS = 'default' # 指定本地session使用本地缓存名称是default
# Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
@ -114,8 +216,10 @@ LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
# USE_I18N = False
USE_TZ = True
# USE_TZ = False
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/
@ -154,7 +258,7 @@ LOGGING = {
'file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, "logs/dingxin.log"),
'filename': os.path.join(BASE_DIR, "logs", "dingxin.log"),
'maxBytes': 300 * 1024 * 1024,
'backupCount': 10,
'formatter': 'verbose'
@ -170,9 +274,26 @@ LOGGING = {
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication',), # 配置验证方式
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema' # 配置接口文档
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', # 配置接口文档
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}
# 跨域配置
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
# 默认时间格式
# DATE_FORMAT = '%Y-%m-%d' # 设置日期格式为年/月/日
# TIME_FORMAT = '%H:%M:%S' # 设置时间格式为小时:分钟
# DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" # 设置日期时间格式为年/月/日 小时:分钟
# Channel 设置
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [(CONFIG[ENV]['REDIS_IP'], 6379)],
# "hosts": [os.environ.get('REDIS_URL', 'redis://127.0.0.1:6379/1')]
}
}
}

@ -18,10 +18,17 @@ from django.contrib import admin
from django.urls import path, include
from rest_framework.documentation import include_docs_urls
from rest_framework.authtoken.views import obtain_auth_token
from update import consumers
urlpatterns = [
path('admin/', admin.site.urls),
path('api-token-auth/', obtain_auth_token),
path('update/', include('update.urls')),
path('update/', include('update.urls')), # cinema Update 备注
path('ec/', include('dspt_api.urls')), # 电商平台接口
path('', include('mock.urls')),
path('docs/', include_docs_urls(title='接口文档')),
]
websocket_urlpatterns = [
path('ws/update/', consumers.UpdateConsumer.as_asgi())
]

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

@ -0,0 +1,6 @@
from django.apps import AppConfig
class DsptApiConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'dspt_api'

@ -0,0 +1,120 @@
# Generated by Django 4.2.7 on 2024-05-23 07:57
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='CinemaIds',
fields=[
('id', models.IntegerField(primary_key=True, serialize=False)),
('env', models.CharField(max_length=10, verbose_name='环境')),
('cinema_id', models.IntegerField(verbose_name='影院id')),
('cinema_name', models.CharField(max_length=30, verbose_name='影院名称')),
('cid', models.CharField(max_length=10, verbose_name='影院cid')),
],
options={
'verbose_name': '影院cid',
'verbose_name_plural': '影院cid',
'db_table': 'ec_cinema_cid',
},
),
migrations.CreateModel(
name='EcApi',
fields=[
('id', models.IntegerField(primary_key=True, serialize=False)),
('desc', models.CharField(max_length=20, verbose_name='接口描述')),
('path', models.CharField(max_length=50, verbose_name='非会员接口地址')),
('m_path', models.CharField(max_length=50, verbose_name='会员接口地址')),
],
options={
'verbose_name': '接口',
'verbose_name_plural': '接口',
'db_table': 'ec_api',
},
),
migrations.CreateModel(
name='EcApiGroup',
fields=[
('id', models.IntegerField(primary_key=True, serialize=False)),
('group_id', models.CharField(max_length=20, verbose_name='接口分组id')),
('name', models.CharField(max_length=20, verbose_name='接口分组id')),
('order', models.IntegerField(verbose_name='子接口顺序')),
('api_id', models.IntegerField(verbose_name='接口id')),
],
options={
'verbose_name': '接口组',
'verbose_name_plural': '接口组',
'db_table': 'ec_api_group',
},
),
migrations.CreateModel(
name='EcApiParams',
fields=[
('id', models.IntegerField(primary_key=True, serialize=False)),
('api_id', models.IntegerField(verbose_name='接口id')),
('param', models.CharField(max_length=50, verbose_name='参数')),
('desc', models.CharField(max_length=500, verbose_name='参数描述')),
('value', models.CharField(max_length=500, verbose_name='参数值模版')),
('is_checked', models.BooleanField(default=False, verbose_name='是否默认勾选')),
('is_request', models.BooleanField(default=False, verbose_name='是否是必选项')),
],
options={
'verbose_name': '接口参数',
'verbose_name_plural': '接口参数',
'db_table': 'ec_api_params',
},
),
migrations.CreateModel(
name='EcChannel',
fields=[
('id', models.IntegerField(primary_key=True, serialize=False)),
('env', models.CharField(max_length=10, verbose_name='环境')),
('name', models.CharField(max_length=20, verbose_name='渠道名称')),
('pid', models.CharField(max_length=10, verbose_name='渠道id')),
('channel_key', models.CharField(max_length=20, verbose_name='渠道key')),
],
options={
'verbose_name': '渠道',
'verbose_name_plural': '渠道',
'db_table': 'ec_channel',
},
),
migrations.CreateModel(
name='EcEnv',
fields=[
('id', models.IntegerField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=20, verbose_name='环境名称')),
('code', models.CharField(max_length=20, verbose_name='环境编码')),
('host', models.CharField(max_length=50, verbose_name='环境地址')),
],
options={
'verbose_name': '环境',
'verbose_name_plural': '环境',
'db_table': 'ec_env',
},
),
migrations.CreateModel(
name='EcRequestLog',
fields=[
('id', models.IntegerField(primary_key=True, serialize=False)),
('ip', models.CharField(max_length=20, verbose_name='请求ip')),
('env', models.CharField(max_length=10, verbose_name='环境')),
('request', models.CharField(max_length=500, verbose_name='请求链接')),
('response', models.CharField(max_length=10000, verbose_name='返回值')),
('request_datetime', models.DateTimeField(verbose_name='请求发送时间')),
],
options={
'verbose_name': '请求日志',
'verbose_name_plural': '请求日志',
'db_table': 'ec_request_log',
},
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-05-23 08:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='ecenv',
name='type',
field=models.CharField(default='', max_length=20, verbose_name='会员非会员'),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-05-23 08:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0002_ecenv_type'),
]
operations = [
migrations.AddField(
model_name='ecchannel',
name='type',
field=models.CharField(default='', max_length=20, verbose_name='会员非会员'),
),
]

@ -0,0 +1,27 @@
# Generated by Django 4.2.7 on 2024-05-23 09:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0003_ecchannel_type'),
]
operations = [
migrations.RemoveField(
model_name='ecapi',
name='m_path',
),
migrations.AddField(
model_name='ecapi',
name='type',
field=models.CharField(default='', max_length=20, verbose_name='会员非会员'),
),
migrations.AlterField(
model_name='ecapi',
name='path',
field=models.CharField(max_length=50, verbose_name='接口地址'),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-05-23 10:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0004_remove_ecapi_m_path_ecapi_type_alter_ecapi_path'),
]
operations = [
migrations.AlterField(
model_name='ecapiparams',
name='value',
field=models.CharField(blank=True, max_length=500, null=True, verbose_name='参数值模版'),
),
]

@ -0,0 +1,22 @@
# Generated by Django 4.2.7 on 2024-06-07 03:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0005_alter_ecapiparams_value'),
]
operations = [
migrations.RenameModel(
old_name='CinemaIds',
new_name='EcCinemaIds',
),
migrations.AddField(
model_name='ecapigroup',
name='type',
field=models.CharField(default='', max_length=20, verbose_name='会员非会员'),
),
]

@ -0,0 +1,22 @@
# Generated by Django 4.2.7 on 2024-06-07 03:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0006_rename_cinemaids_eccinemaids_ecapigroup_type'),
]
operations = [
migrations.RemoveField(
model_name='ecapigroup',
name='order',
),
migrations.AlterField(
model_name='ecapigroup',
name='api_id',
field=models.CharField(max_length=2000, verbose_name='接口id'),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-07-19 02:23
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0007_remove_ecapigroup_order_alter_ecapigroup_api_id'),
]
operations = [
migrations.RenameField(
model_name='ecapi',
old_name='desc',
new_name='comment',
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-07-19 02:24
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0008_rename_desc_ecapi_comment'),
]
operations = [
migrations.RenameField(
model_name='ecapi',
old_name='comment',
new_name='description',
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-07-19 02:25
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0009_rename_comment_ecapi_description'),
]
operations = [
migrations.RenameField(
model_name='ecapiparams',
old_name='desc',
new_name='description',
),
]

@ -0,0 +1,23 @@
# Generated by Django 4.2.7 on 2024-07-29 05:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0010_rename_desc_ecapiparams_description'),
]
operations = [
migrations.AlterField(
model_name='ecrequestlog',
name='request',
field=models.CharField(max_length=5000, verbose_name='请求链接'),
),
migrations.AlterField(
model_name='ecrequestlog',
name='response',
field=models.TextField(verbose_name='返回值'),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-08-05 09:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0011_alter_ecrequestlog_request_and_more'),
]
operations = [
migrations.AlterField(
model_name='ecapi',
name='description',
field=models.CharField(max_length=50, verbose_name='接口描述'),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-08-05 10:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0012_alter_ecapi_description'),
]
operations = [
migrations.AlterField(
model_name='ecapiparams',
name='description',
field=models.CharField(max_length=5000, verbose_name='参数描述'),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2024-08-29 00:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dspt_api', '0013_alter_ecapiparams_description'),
]
operations = [
migrations.AddField(
model_name='ecapi',
name='order',
field=models.IntegerField(default=9999, verbose_name='显示顺序'),
),
]

@ -0,0 +1,117 @@
from django.db import models
class EcChannel(models.Model):
id = models.IntegerField(primary_key=True)
env = models.CharField(verbose_name='环境', max_length=10, null=False) # 电商平台 dspt 自营电商 zyds
name = models.CharField(verbose_name='渠道名称', max_length=20, null=False) # 电商平台 dspt 自营电商 zyds
pid = models.CharField(verbose_name='渠道id', max_length=10, null=False) # pid
channel_key = models.CharField(verbose_name='渠道key', max_length=20, null=False) # pid key
type = models.CharField(verbose_name='会员非会员', max_length=20, default='', null=False) # 会员 member 非会员 nonmember
def __str__(self):
return self.name
class Meta:
verbose_name = '渠道'
verbose_name_plural = '渠道'
db_table = 'ec_channel'
class EcEnv(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(verbose_name='环境名称', max_length=20, null=False) # 电商平台 自营电商
code = models.CharField(verbose_name='环境编码', max_length=20, null=False) # 电商平台 dspt 自营电商 zyds
type = models.CharField(verbose_name='会员非会员', max_length=20, default='', null=False) # 会员 member 非会员 nonmember
host = models.CharField(verbose_name='环境地址', max_length=50, null=False) # 环境地址
def __str__(self):
return self.name
class Meta:
verbose_name = '环境'
verbose_name_plural = '环境'
db_table = 'ec_env'
class EcApi(models.Model):
id = models.IntegerField(primary_key=True)
description = models.CharField(verbose_name='接口描述', max_length=50, null=False)
path = models.CharField(verbose_name='接口地址', max_length=50, null=False)
type = models.CharField(verbose_name='会员非会员', max_length=20, default='', null=False) # 会员 member 非会员 nonmember
order = models.IntegerField(verbose_name='显示顺序', default=9999)
def __str__(self):
return self.description
class Meta:
verbose_name = '接口'
verbose_name_plural = '接口'
db_table = 'ec_api'
class EcApiParams(models.Model):
id = models.IntegerField(primary_key=True)
api_id = models.IntegerField(verbose_name='接口id', null=False)
param = models.CharField(verbose_name='参数', max_length=50, null=False)
description = models.CharField(verbose_name='参数描述', max_length=5000, null=False)
value = models.CharField(verbose_name='参数值模版', max_length=500, null=True, blank=True)
is_checked = models.BooleanField(verbose_name='是否默认勾选', null=False, default=False)
is_request = models.BooleanField(verbose_name='是否是必选项', null=False, default=False)
def __str__(self):
return self.param
class Meta:
verbose_name = '接口参数'
verbose_name_plural = '接口参数'
db_table = 'ec_api_params'
class EcCinemaIds(models.Model):
id = models.IntegerField(primary_key=True)
env = models.CharField(verbose_name='环境', max_length=10, null=False) # 电商平台 dspt 自营电商 zyds
cinema_id = models.IntegerField(verbose_name='影院id', null=False)
cinema_name = models.CharField(verbose_name='影院名称', max_length=30, null=False)
cid = models.CharField(verbose_name='影院cid', max_length=10, null=False)
def __str__(self):
return self.cid
class Meta:
verbose_name = '影院cid'
verbose_name_plural = '影院cid'
db_table = 'ec_cinema_cid'
class EcRequestLog(models.Model):
id = models.IntegerField(primary_key=True)
ip = models.CharField(verbose_name='请求ip', max_length=20, null=False) # 接口测试人的ip
env = models.CharField(verbose_name='环境', max_length=10, null=False) # 电商平台 dspt 自营电商 zyds
request = models.CharField(verbose_name='请求链接', max_length=5000, null=False)
response = models.TextField(verbose_name='返回值', null=False)
request_datetime = models.DateTimeField(verbose_name='请求发送时间', null=False)
def __str__(self):
return self.ip
class Meta:
verbose_name = '请求日志'
verbose_name_plural = '请求日志'
db_table = 'ec_request_log'
class EcApiGroup(models.Model):
id = models.IntegerField(primary_key=True)
group_id = models.CharField(verbose_name='接口分组id', max_length=20, null=False)
name = models.CharField(verbose_name='接口分组id', max_length=20, null=False)
api_id = models.CharField(verbose_name='接口id', max_length=2000, null=False)
type = models.CharField(verbose_name='会员非会员', max_length=20, default='', null=False) # 会员 member 非会员 nonmember
def __str__(self):
return self.name
class Meta:
verbose_name = '接口组'
verbose_name_plural = '接口组'
db_table = 'ec_api_group'

@ -0,0 +1,45 @@
from rest_framework import serializers
from dspt_api.models import EcChannel, EcEnv, EcApi, EcApiParams, EcCinemaIds, EcRequestLog, EcApiGroup
class EcChannelSerializer(serializers.ModelSerializer):
class Meta:
model = EcChannel
fields = '__all__'
class EcEnvSerializer(serializers.ModelSerializer):
class Meta:
model = EcEnv
fields = '__all__'
class EcApiSerializer(serializers.ModelSerializer):
class Meta:
model = EcApi
fields = '__all__'
class EcApiParamsSerializer(serializers.ModelSerializer):
class Meta:
model = EcApiParams
fields = '__all__'
class EcCinemaIdsSerializer(serializers.ModelSerializer):
class Meta:
model = EcCinemaIds
fields = '__all__'
class EcRequestLogSerializer(serializers.ModelSerializer):
class Meta:
model = EcRequestLog
fields = '__all__'
class EcApiGroupSerializer(serializers.ModelSerializer):
class Meta:
model = EcApiGroup
fields = '__all__'

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1,20 @@
from dspt_api import views
from django.urls import path
urlpatterns = [
path('get_channel', views.EcChannelViewSet.as_view({'get': 'list'}), name='get_ec_channel'),
path('get_env', views.EcEnvViewSet.as_view({'get': 'list'}), name='get_ec_env'),
path('get_api', views.EcApiViewSet.as_view({'get': 'list'}), name='get_ec_api'),
path('get_api_params', views.EcApiParamsViewSet.as_view({'get': 'list'}), name='get_ec_api_params'),
path('get_cinema_ids', views.EcCinemaIdsViewSet.as_view({'get': 'list'}), name='get_ec_cinema_ids'),
path('get_request_log', views.EcRequestLogViewSet.as_view({'get': 'list'}), name='get_ec_request_log'),
path('get_api_group', views.EcApiGroupViewSet.as_view({'get': 'list'}), name='get_ec_api_group'),
path('get_params_by_type', views.get_api_params_by_api_type),
path('get_url', views.general_api_url),
path('send_request', views.send_request),
path('get_suggest_params', views.get_suggest_params_by_api),
path('get_suggest_params_timestamp', views.get_suggest_params_timestamp_by_api),
path('set_user_data', views.set_user_select_data),
path('clear_user_data', views.clear_user_select_data),
path('get_quan', views.get_quan),
]

@ -0,0 +1,41 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.goods_list import get_goods_list
import random
class ApiCinemaGoodsPic(object):
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')
def get_suggestion(self):
# play_id play_update_time
request_api = {'name': '3.2.1 获取卖品列表', 'path': 'cinema/goods'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
goods_list = get_goods_list(redis_data, _format)
goods = random.choice(goods_list)
goods_id = goods['id']
goods_type = goods['type']
return [
{'param': 'goods_id', 'value': goods_id, 'is_checked': True, 'result': True, 'timestamp': _timestamp},
{'param': 'type', 'value': goods_type, 'is_checked': True, 'result': True, 'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'goods_id', 'value': redis_data + request_api["name"], 'is_checked': True, 'result': False,
'timestamp': _timestamp},
{'param': 'type', 'value': redis_data + request_api["name"], 'is_checked': True, 'result': False,
'timestamp': _timestamp}]
def get_timestamp(self):
# play_id play_update_time
request_api = {'name': '3.2.1 获取卖品列表', 'path': 'cinema/goods'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
return _timestamp if result else 0

@ -0,0 +1,33 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
import random
class ApiCinemaHallSeats:
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')
def get_suggestion(self):
# hall_id
request_api = {'name': '3.1.3 获取影厅列表', 'path': 'cinema/halls'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, hall_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
hall_id = hall_data['id']
return [{'param': 'hall_id', 'value': hall_id, 'is_checked': True, 'result': True, 'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'hall_id', 'value': hall_data + request_api["name"], 'is_checked': True, 'result': False,
'timestamp': _timestamp}]
def get_timestamp(self):
# hall_id
request_api = {'name': '3.1.3 获取影厅列表', 'path': 'cinema/halls'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, hall_data, _timestamp = get_data_from_redis(redis_key_api)
return _timestamp if result else 0

@ -0,0 +1,29 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
import datetime
class ApiCinemaPlaysIncrement:
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')
def get_suggestion(self):
# start
request_api = {'name': '3.1.6 获取放映计划列表(增量)', 'path': 'cinema/plays-increment'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
# 生成默认值
start = redis_data['nextSyncStartTime'] if result else datetime.datetime.strftime(datetime.datetime.now(),
'%Y-%m-%d') + ' 06:00:00'
return [{'param': 'start', 'value': start, 'is_checked': True, 'result': True, 'timestamp': _timestamp}]
def get_timestamp(self):
# start
request_api = {'name': '3.1.6 获取放映计划列表(增量)', 'path': 'cinema/plays-increment'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
return _timestamp if result else 0

@ -0,0 +1,53 @@
import time
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.handle_ecard import get_ecard
class ApiEcardDetail:
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')
def get_suggestion(self):
_now = int(time.time() * 1000)
# 获取本地记录的联名卡
if ecard_num := get_ecard(self.ip, self.env, self.pid, self.cid):
return [{'param': 'ecard_number', 'value': ecard_num,'is_checked': True, 'result': True,'timestamp': _now}]
# ecard_number
request_api_ec_1 = {'name': '3.4.4 获取联名卡详情', 'path': 'ecard/detail'}
redis_key_api_ec_1 = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_ec_1["path"]}'
request_api_ec_2 = {'name': '3.4.2 联名卡开卡', 'path': 'ecard/regist'}
redis_key_api_ec_2 = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_ec_2["path"]}'
result_ec_1, _format_ec_1, redis_data_ec_1, _timestamp_ec_1 = get_data_from_redis(redis_key_api_ec_1)
result_ec_2, _format_ec_2, redis_data_ec_2, _timestamp_ec_2 = get_data_from_redis(redis_key_api_ec_2)
ecard_number_result = False
ecard_number = False
if result_ec_2:
print('redis_data_ec_2', redis_data_ec_2)
ecard_number_ec_2 = {'param': 'ecard_number', 'value': redis_data_ec_2['ecardNumber'],
'is_checked': True, 'result': True,
'timestamp': _timestamp_ec_2}
ecard_number = ecard_number_ec_2
ecard_number_result = True
if result_ec_1:
ecard_number_ec_1 = {'param': 'ecard_number', 'value': redis_data_ec_1['ecardNumber'],
'is_checked': True, 'result': True,
'timestamp': _timestamp_ec_1}
ecard_number = ecard_number_ec_1
ecard_number_result = True
if result_ec_1 and result_ec_2:
ecard_number = ecard_number_ec_1 if _timestamp_ec_1 >= _timestamp_ec_2 else ecard_number_ec_2
if ecard_number_result:
return [ecard_number]
else:
return [{'param': 'ecard_number', 'value': redis_data_ec_1 + request_api_ec_1["name"], 'is_checked': True,
'result': True,
'timestamp': _now},]
def get_timestamp(self):
return int(time.time() * 1000)

@ -0,0 +1,62 @@
import time
from django_redis import get_redis_connection
from dspt_api.util.general.handle_redis import get_data_from_redis
class ApiEcardOrderDetail:
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')
def get_suggestion(self):
_now = int(time.time() * 1000)
# partner_order_no
request_renew = {'name': '3.4.3 联名卡续卡', 'path': 'ecard/renew'}
redis_key_renew_order_num = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_renew["path"]}_order_num'
redis_key_renew = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_renew["path"]}'
request_regist = {'name': '3.4.2 联名卡开卡', 'path': 'ecard/regist'}
redis_key_regist_order_num = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_regist["path"]}_order_num'
redis_key_regist = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_regist["path"]}'
result_renew, _format__renew, redis_data_renew, _timestamp_renew = get_data_from_redis(redis_key_renew)
result_regist, _format_regist, redis_data_regist, _timestamp_regist = get_data_from_redis(redis_key_regist)
redis_conn = get_redis_connection()
order_num_renew = redis_conn.get(redis_key_renew_order_num)
print('order_num_renew', order_num_renew)
order_num_regist = redis_conn.get(redis_key_regist_order_num)
print('order_num_regist', order_num_regist)
order_num_result = [
{'param': 'partner_order_no', 'value': '请手动输入参数!', 'is_checked': True, 'result': True,
'timestamp': _now},
{'param': 'order_type', 'value': '请手动输入参数!', 'is_checked': True, 'result': True, 'timestamp': _now}]
if order_num_regist:
order_num_result_regist = [
{'param': 'partner_order_no', 'value': str(order_num_regist, encoding='utf-8'), 'is_checked': True,
'result': True, 'timestamp': _now},
{'param': 'order_type', 'value': '1', 'is_checked': True, 'result': True, 'timestamp': _now}]
if order_num_renew:
order_num_result_renew = [
{'param': 'partner_order_no', 'value': str(order_num_renew, encoding='utf-8'), 'is_checked': True,
'result': True,
'timestamp': _now},
{'param': 'order_type', 'value': '2', 'is_checked': True, 'result': True, 'timestamp': _now}]
if order_num_renew:
order_num_result = order_num_result_renew
if order_num_regist:
order_num_result = order_num_result_regist
if order_num_renew and order_num_regist:
order_num_result = order_num_result_regist if _timestamp_regist > _timestamp_renew else order_num_result_renew
return order_num_result
def get_timestamp(self):
return int(time.time() * 1000)

@ -0,0 +1,30 @@
import time
from django_redis import get_redis_connection
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.api.ecard_order_detail import ApiEcardOrderDetail
from dspt_api.util.general.handle_ecard import get_ecard
class ApiEcardRefund:
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.kwargs = kwargs
def get_suggestion(self):
# source_order_no
source_order_no = ApiEcardOrderDetail(**self.kwargs).get_suggestion()[0]
# partner_order_no
order_num = general_order_num('REF', self.api, self.member_type, self.ip, self.env, self.pid, self.cid)
return [{'param': 'source_order_no', 'value': source_order_no['value'], 'is_checked': True, 'result': True,
'timestamp': int(time.time() * 1000)},
{'param': 'partner_order_no', 'value': order_num, 'is_checked': True, 'result': True,
'timestamp': int(time.time() * 1000)}]
def get_timestamp(self):
return int(time.time() * 1000)

@ -0,0 +1,45 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
class ApiEcardRegist:
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')
def get_suggestion(self):
request_api = {'name': '3.4.1 获取联名卡等级', 'path': 'ecard/ecard-levels'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, level_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
level_no = level_data['ecardLevelNo']
fee = level_data['registerFee']
order_num = general_order_num('REG', self.api, self.member_type, self.ip, self.env, self.pid, self.cid)
return [
{'param': 'mobile', 'value': 18688886666, 'is_checked': True, 'result': True, 'timestamp': _timestamp},
{'param': 'register_fee', 'value': fee, 'is_checked': True, 'result': True, 'timestamp': _timestamp},
{'param': 'ecard_level_no', 'value': level_no, 'is_checked': True, 'result': True,
'timestamp': _timestamp},
{'param': 'partner_order_no', 'value': order_num, 'is_checked': True, 'result': True,
'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'mobile', 'value': 18688886666, 'is_checked': True, 'result': True, 'timestamp': _timestamp},
{'param': 'register_fee', 'value': level_data + request_api["name"], 'is_checked': True, 'result': True,
'timestamp': _timestamp},
{'param': 'ecard_level_no', 'value': level_data + request_api["name"], 'is_checked': True,
'result': True,
'timestamp': _timestamp},
{'param': 'partner_order_no', 'value': '', 'is_checked': True, 'result': True,
'timestamp': _timestamp}
]
def get_timestamp(self):
return int(time.time() * 1000)

@ -0,0 +1,83 @@
import random
import time
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.handle_ecard import get_ecard, get_ecard_renew_fee
class ApiEcardRenew:
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')
def get_suggestion(self):
_now = int(time.time() * 1000)
# ecard_number
# 获取本地记录的联名卡
ecard_number_result = False
ecard_number = False
if ecard_num := get_ecard(self.ip, self.env, self.pid, self.cid):
ecard_number = {'param': 'ecard_number', 'value': ecard_num, 'is_checked': True, 'result': True,
'timestamp': _now}
ecard_number_result = True
else:
request_api_ec_1 = {'name': '3.4.4 获取联名卡详情', 'path': 'ecard/detail'}
redis_key_api_ec_1 = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_ec_1["path"]}'
request_api_ec_2 = {'name': '3.4.2 联名卡开卡', 'path': 'ecard/regist'}
redis_key_api_ec_2 = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_ec_2["path"]}'
result_ec_1, _format_ec_1, redis_data_ec_1, _timestamp_ec_1 = get_data_from_redis(redis_key_api_ec_1)
result_ec_2, _format_ec_2, redis_data_ec_2, _timestamp_ec_2 = get_data_from_redis(redis_key_api_ec_2)
if result_ec_2:
print('redis_data_ec_2', redis_data_ec_2)
ecard_number_ec_2 = {'param': 'ecard_number', 'value': redis_data_ec_2['ecardNumber'],
'is_checked': True, 'result': True,
'timestamp': _timestamp_ec_2}
ecard_number = ecard_number_ec_2
ecard_number_result = True
if result_ec_1:
ecard_number_ec_1 = {'param': 'ecard_number', 'value': redis_data_ec_1['ecardNumber'],
'is_checked': True, 'result': True,
'timestamp': _timestamp_ec_1}
ecard_number = ecard_number_ec_1
ecard_number_result = True
if result_ec_1 and result_ec_2:
ecard_number = ecard_number_ec_1 if _timestamp_ec_1 >= _timestamp_ec_2 else ecard_number_ec_2
# renew_fee
result_renew_fee = False
if ecard_number is not False:
fee = get_ecard_renew_fee(ecard_number['value'])
if fee is not None:
renew_fee = {'param': 'renew_fee', 'value': fee,
'is_checked': True, 'result': True,
'timestamp': _now}
result_renew_fee = True
else:
renew_fee = {'param': 'renew_fee', 'value': '此卡级别不能续卡',
'is_checked': True, 'result': True,
'timestamp': _now}
result_renew_fee = True
# partner_order_no
order_num = general_order_num('REN', self.api, self.member_type, self.ip, self.env, self.pid, self.cid)
partner_order_no = {'param': 'partner_order_no', 'value': order_num, 'is_checked': True, 'result': True,
'timestamp': _now}
if ecard_number_result and result_renew_fee:
return [ecard_number, renew_fee, partner_order_no]
else:
return [{'param': 'ecard_number', 'value': redis_data_ec_1 + request_api_ec_1["name"], 'is_checked': True,
'result': True,
'timestamp': _now},
{'param': 'renew_fee', 'value': '请手动输入参数!', 'is_checked': True, 'result': True,
'timestamp': _now},
partner_order_no
]
def get_timestamp(self):
return int(time.time() * 1000)

@ -0,0 +1,29 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.api.seat_lock import ApiSeatLock
from dspt_api.util.api.ecard_detail import ApiEcardDetail
import random
class ApiEcardSeatPrice:
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.kwargs = kwargs
def get_suggestion(self):
# 获取 play_id seat_idplay_update_time
params = ApiSeatLock(**self.kwargs).get_suggestion()
# 获取 ecard_number
ecard_number = ApiEcardDetail(**self.kwargs).get_suggestion()
return params + ecard_number
def get_timestamp(self):
# 获取 play_id seat_idplay_update_time
params_ts = ApiSeatLock(**self.kwargs).get_timestamp()
# 获取 ecard_number
ecard_number_ts = ApiEcardDetail(**self.kwargs).get_timestamp()
return params_ts if params_ts > ecard_number_ts else ecard_number_ts

@ -0,0 +1,52 @@
import json
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
"""
UPDATE cinema_common_info SET cinema_common_info_val = '[{"channel_name":"ziying","shelf_id":"1"}]' WHERE cinema_common_info_key = 'third_channel_autosell_config';
"""
class ApiGoodsDeduct:
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
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 获取 ticket_flag
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_lock_buy = {'name': '3.3.3 混合下单(影票、卖品)', 'path': 'seat/lock-buy'}
redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}'
result_lock_buy, _format_lock_buy, ticket_flag_lock_buy, _timestamp_lock_buy = get_data_from_redis(
redis_key_api_lock_buy)
if not result_lock_buy:
self.add_param('center_flag', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('center_flag', ticket_flag_lock_buy['ticketFlag1'] + ticket_flag_lock_buy['ticketFlag2'])
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,66 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_goods import general_goods_params
from dspt_api.util.general.handle_ecard import get_ecard
import time
import random
import json
class ApiOrderBuyGoods:
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,
}
self.return_data = []
def get_suggestion(self):
# 通用字段
self.add_param('mobile', '18688886666', timestamp=1000000000000)
_partner_buy_ticket_id = general_order_num('BUY_G', self.api, self.member_type, self.ip, self.env, self.pid,
self.cid)
self.add_param('partner_buy_ticket_id', _partner_buy_ticket_id)
# 联名卡卡号
ecard_num = None
if self.pay_type == 'ecard':
ecard_num = get_ecard(self.ip, self.env, self.pid, self.cid)
self.add_param('ecard_number', ecard_num, timestamp=1000000000000)
self.goods()
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def goods(self):
delivery_appoint_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() + 5 * 60))
_good_result, _goods_field, _goods_cash, _quan, _goods_timestamp = general_goods_params(self.pay_type,
self.user_data)
if _good_result is False:
self.add_param('goods', '请手动输入参数,或先请求接口:3.2.1 获取卖品列表', timestamp=_goods_timestamp)
self.add_param('cash', '请手动输入参数,或先请求接口:3.2.1 获取卖品列表', timestamp=_goods_timestamp)
return False
self.add_param('goods', json.dumps(_goods_field), timestamp=_goods_timestamp)
self.add_param('cash', _goods_cash, timestamp=_goods_timestamp)
self.add_param('delivery_type', '2', is_checked=False, timestamp=_goods_timestamp)
self.add_param('delivery_location', '1号厅', is_checked=False, timestamp=_goods_timestamp)
self.add_param('delivery_appoint_time', delivery_appoint_time, is_checked=False, timestamp=_goods_timestamp)
self.add_param('contact_number', '18688886666', is_checked=False, timestamp=_goods_timestamp)
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,4 @@
from dspt_api.util.api.order_ticket_flag import ApiOrderTicketFlag
class ApiOrderInfo(ApiOrderTicketFlag):
pass

@ -0,0 +1,46 @@
import json
from dspt_api.util.general.handle_redis import get_param_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
class ApiOrderStatus:
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
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 获取 ticket_flag
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_lock_buy = {'name': '3.3.3 混合下单(影票、卖品)', 'path': 'seat/lock-buy'}
redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}'
result_lock_buy = get_param_from_redis(redis_key_api_lock_buy)
if not result_lock_buy:
self.add_param('partner_order_id', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('partner_order_id', result_lock_buy['partner_buy_ticket_id'])
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,46 @@
import json
from dspt_api.util.general.handle_redis import get_param_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
class ApiOrderTicketFlag:
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
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 获取 ticket_flag
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_lock_buy = {'name': '3.3.3 混合下单(影票、卖品)', 'path': 'seat/lock-buy'}
redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}'
result_lock_buy = get_param_from_redis(redis_key_api_lock_buy)
if not result_lock_buy:
self.add_param('partner_buy_ticket_id', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('partner_buy_ticket_id', result_lock_buy['partner_buy_ticket_id'])
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,34 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from django_redis import get_redis_connection
import random
class ApiPlayInfo:
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')
def get_suggestion(self):
# play_id
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, play_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
play_id = play_data['id']
return [{'param': 'play_id', 'value': play_id, 'is_checked': True, 'result': True, 'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'play_id', 'value': play_data + request_api["name"], 'is_checked': True, 'result': True,
'timestamp': _timestamp}]
def get_timestamp(self):
# play_id
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
return _timestamp if result else 0

@ -0,0 +1,38 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
import random
import datetime
class ApiPlayPeriodChangedSeats:
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')
def get_suggestion(self):
# play_id play_update_time
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, play_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
play_id = play_data['id']
start = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d') + ' 06:00:00'
return [{'param': 'play_id', 'value': play_id, 'is_checked': True, 'result': True, 'timestamp': _timestamp},
{'param': 'start', 'value': start, 'is_checked': True, 'result': True, 'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'play_id', 'value': play_data + request_api["name"], 'is_checked': True, 'result': True,
'timestamp': _timestamp},
{'param': 'start', 'value': play_data + request_api["name"], 'is_checked': True, 'result': True,
'timestamp': _timestamp}]
def get_timestamp(self):
# play_id play_update_time
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
return _timestamp if result else 0

@ -0,0 +1,33 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
import random
class ApiPlaySeatOverview:
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')
def get_suggestion(self):
# play_id play_update_time
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, play_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
play_id = play_data['id']
return [{'param': 'play_id', 'value': play_id, 'is_checked': True, 'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'play_id', 'value': play_data + request_api["name"], 'is_checked': True, 'result': True,
'timestamp': _timestamp}]
def get_timestamp(self):
# play_id play_update_time
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
return _timestamp if result else 0

@ -0,0 +1,38 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
import random
class ApiPlaySeatStatus:
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')
def get_suggestion(self):
# play_id play_update_time
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, play_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
play_id = play_data['id']
play_update_time = play_data['cineUpdateTime']
return [{'param': 'play_id', 'value': play_id, 'is_checked': True, 'result': True, 'timestamp': _timestamp},
{'param': 'play_update_time', 'value': play_update_time, 'is_checked': True, 'result': True,
'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'play_id', 'value': play_data + request_api["name"], 'is_checked': True, 'result': True,
'timestamp': _timestamp},
{'param': 'play_update_time', 'value': play_data + request_api["name"], 'is_checked': True,
'result': True, 'timestamp': _timestamp}]
def get_timestamp(self):
# play_id play_update_time
request_api = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, redis_data, _timestamp = get_data_from_redis(redis_key_api)
return _timestamp if result else 0

@ -0,0 +1,81 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_goods import general_goods_field
from dspt_api.util.general.handle_ticket import get_ticket_price
import time
import random
import json
class ApiSeatCheckCoupon:
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')
def get_suggestion(self):
print('self.sale_type', self.sale_type)
if self.sale_type == 'ticket':
return self.get_play()
if self.sale_type == 'goods':
return self.get_goods()
if self.sale_type == 'all':
return self.get_play() + self.get_goods()
def get_play(self):
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_'
# play_id
print('get_play')
request_api_play = {'name': '3.1.8 获取某场次座位状态', 'path': 'cinema/plays'}
redis_key_api_play = f'{redis_key_prefix}{request_api_play["path"]}'
result_play, _format_play, redis_data_play, _timestamp_play = get_data_from_redis(redis_key_api_play)
print('redis_data_play', redis_data_play)
# seat_num
request_api_seat = {'name': '3.1.5 获取放映计划列表', 'path': 'play/seat-status'}
redis_key_api_seat = f'{redis_key_prefix}{request_api_seat["path"]}'
result_seat, _format_seat, redis_data_seat, _timestamp_seat = get_data_from_redis(redis_key_api_seat)
print('redis_data_seat', redis_data_seat)
seat_num = len(redis_data_seat) if result_seat else 1
if result_play:
ticket_price, service_fee = get_ticket_price(redis_data_play,None,None,True)
return [{'param': 'play_id', 'value': redis_data_play['id'], 'is_checked': True, 'result': True},
{'param': 'price', 'value': ticket_price, 'is_checked': True, 'result': True},
{'param': 'seat_num', 'value': seat_num, 'is_checked': True, 'result': True}]
else:
return [{'param': 'play_id', 'value': redis_data_play + request_api_play["name"], 'is_checked': True,
'result': True},
{'param': 'price', 'value': '0.00', 'is_checked': True, 'result': True},
{'param': 'seat_num', 'value': seat_num, 'is_checked': True, 'result': True}]
def get_goods(self):
request_api = {'name': '3.2.1 获取卖品列表', 'path': 'cinema/goods'}
redis_key_api = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api["path"]}'
result, _format, goods_data, _timestamp = get_data_from_redis(redis_key_api)
if result:
goods_info, cash = general_goods_field(goods_data)
print('ApiSeatCheckCoupon', goods_info)
coupon_goods = [self.format_goods(goods) for goods in goods_info]
return [
{'param': 'goods', 'value': json.dumps(coupon_goods), 'is_checked': True, 'result': True,
'timestamp': _timestamp}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
# redis_data + request_api["name"]
return [
{'param': 'goods', 'value': goods_data + request_api["name"], 'is_checked': True, 'result': True,
'timestamp': _timestamp}, ]
@staticmethod
def format_goods(goods):
goods['goods_type'] = goods['type']
goods['sell_price'] = goods['price']
goods.pop('type')
goods.pop('price')
return goods
def get_timestamp(self):
return int(time.time() * 1000)

@ -0,0 +1,53 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
import random
class ApiSeatLock:
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')
def get_suggestion(self):
# play_id
request_api_play = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api_play = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_play["path"]}'
result_play, _format_play, play_data, _timestamp_play = get_data_from_redis(redis_key_api_play)
# seat_id
request_api_seat = {'name': '3.1.8 获取某场次座位状态', 'path': 'play/seat-status'}
redis_key_api_seat = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_seat["path"]}'
result_seat, _format_seat, seat_data, _timestamp_seat = get_data_from_redis(redis_key_api_seat)
if result_play and result_seat:
print('random.choice(redis_data_seat)', seat_data)
seat_id = ','.join([seat['cineSeatId'] for seat in seat_data])
return [{'param': 'play_id', 'value': play_data['id'], 'is_checked': True, 'result': True},
{'param': 'play_update_time', 'value': play_data['cineUpdateTime'], 'is_checked': True,
'result': True},
{'param': 'seat_id', 'value': seat_id, 'is_checked': True, 'result': True}]
else:
# 返回推荐参数应该包含参数名,参数值,和是否勾选的状态
return [
{'param': 'play_id', 'value': play_data + request_api_play["name"], 'is_checked': True,
'result': True},
{'param': 'play_update_time', 'value': play_data + request_api_play["name"], 'is_checked': True,
'result': True},
{'param': 'seat_id', 'value': seat_data + request_api_seat["name"], 'is_checked': True,
'result': True}
]
def get_timestamp(self):
# play_id
request_api_play = {'name': '3.1.5 获取放映计划列表', 'path': 'cinema/plays'}
redis_key_api_play = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_play["path"]}'
result_play, _format_play, redis_data_play, _timestamp_play = get_data_from_redis(redis_key_api_play)
# seat_id
request_api_seat = {'name': '3.1.8 获取某场次座位状态', 'path': 'play/seat-status'}
redis_key_api_seat = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_seat["path"]}'
result_seat, _format_seat, redis_data_seat, _timestamp_seat = get_data_from_redis(redis_key_api_seat)
# 处理混合结果
if result_play and result_seat:
return _timestamp_play if _timestamp_play > _timestamp_seat else _timestamp_seat
return 0

@ -0,0 +1,109 @@
import json
from twisted.mail.alias import handle
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.handle_seat import general_seat_params
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_goods import general_goods_params
from dspt_api.util.general.handle_ecard import get_ecard
import time
import random
class ApiSeatLockBuy:
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,
}
self.return_data = []
def get_suggestion(self):
print('get_suggestion', self.user_data, self.sale_type, self.pay_type)
# 通用字段
self.add_param('mobile', '18688886666', timestamp=1000000000000)
_partner_buy_ticket_id = general_order_num('BUY_T', self.api, self.member_type, self.ip, self.env, self.pid,
self.cid)
self.add_param('partner_buy_ticket_id', _partner_buy_ticket_id)
# 联名卡卡号
ecard_num = None
if self.pay_type == 'ecard':
ecard_num = get_ecard(self.ip, self.env, self.pid, self.cid)
self.add_param('ecard_number', ecard_num, timestamp=1000000000000)
self.handle()
print('ApiSeatLockBuy-get_suggestion', self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 处理影票部分
_ticket_result, _seat, _ticket_cash, _play_id, _play_update_time, _lock_flag, _quan, _ticket_timestamp = general_seat_params(
self.pay_type, self.user_data)
print('general_seat_params', _ticket_result, _seat, _ticket_cash, _play_id, _play_update_time, _lock_flag,
_quan, _ticket_timestamp)
if _ticket_result is False:
self.add_param('play_id', '请手动输入参数,或先请求接口:3.1.5 获取放映计划列表', timestamp=_ticket_timestamp)
self.add_param('seat', '请手动输入参数,或先请求接口:3.1.8 获取某场次座位状态', timestamp=_ticket_timestamp)
self.add_param('lock_flag', '请手动输入参数,或先请求接口:3.3.1 座位锁定', timestamp=_ticket_timestamp)
self.add_param('play_update_time', '请手动输入参数,或先请求接口:3.1.5 获取放映计划列表',
timestamp=_ticket_timestamp)
self.add_param('cash', '请手动输入参数,或先请求接口:3.1.5 获取放映计划列表', timestamp=_ticket_timestamp)
if self.pay_type == 'ecard':
self.add_param('ecard_number', '请手动输入参数,检查相关接口返回值:3.4.6 获取座位的联名卡价格',
timestamp=_ticket_timestamp)
if self.pay_type == 'yushouquan':
self.add_param('coupons', '3.6.1添加券接口中选择的券类型为扫码券,与当前设置不符合',
timestamp=_ticket_timestamp)
if self.pay_type == 'equan':
self.add_param('card_coupons', '3.6.1添加券接口中选择的券类型为扫码券,与当前设置不符合',
timestamp=_ticket_timestamp)
return False
self.add_param('play_id', _play_id, timestamp=_ticket_timestamp)
self.add_param('seat', _seat, timestamp=_ticket_timestamp)
self.add_param('lock_flag', _lock_flag, timestamp=_ticket_timestamp)
self.add_param('play_update_time', _play_update_time, timestamp=_ticket_timestamp)
# 处理卖品部分
if self.sale_type == 'all':
delivery_appoint_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() + 5 * 60))
_good_result, _goods_field, _goods_cash, _quan, _goods_timestamp = general_goods_params(self.pay_type,
self.user_data,
_ticket_cash)
print('_goods_field', _goods_field)
if _good_result is False:
self.add_param('goods', '请手动输入参数,或先请求接口:3.2.1 获取卖品列表', timestamp=_goods_timestamp)
self.add_param('cash', '请手动输入参数,或先请求接口:3.2.1 获取卖品列表', timestamp=_goods_timestamp)
return False
self.add_param('goods', json.dumps(_goods_field), timestamp=_goods_timestamp)
self.add_param('cash', _goods_cash, timestamp=_goods_timestamp)
self.add_param('delivery_type', '2', is_checked=False, timestamp=_goods_timestamp)
self.add_param('delivery_location', '1号厅', is_checked=False, timestamp=_goods_timestamp)
self.add_param('delivery_appoint_time', delivery_appoint_time, is_checked=False, timestamp=_goods_timestamp)
self.add_param('contact_number', '18688886666', is_checked=False, timestamp=_goods_timestamp)
else:
self.add_param('cash', _ticket_cash, timestamp=_ticket_timestamp)
# 处理券码部分
if self.pay_type == 'yushouquan':
self.add_param('coupons', _quan, timestamp=_ticket_timestamp)
if self.pay_type == 'equan':
self.add_param('card_coupons', _quan, timestamp=_ticket_timestamp)
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,61 @@
from django.utils.timezone import template_localtime
from twisted.mail.alias import handle
from dspt_api.util.general.handle_redis import get_data_from_redis
import time
class ApiSeatUnlock:
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.return_data = []
def get_suggestion(self):
self.handle()
return self.return_data
def get_timestamp(self):
self.handle()
temp_timestamp = 0
for data in self.return_data:
temp_timestamp = data['timestamp'] if data['timestamp'] > 0 else temp_timestamp
return temp_timestamp
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, data_play, _timestamp_play = get_data_from_redis(redis_key_api_play)
if not result_play:
self.add_param('play_id', '请手动输入参数,或先请求接口:3.1.5 获取放映计划列表')
else:
self.add_param('play_id', data_play['id'], timestamp=_timestamp_play)
# 获取 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, data_seat, _timestamp_seat = get_data_from_redis(redis_key_api_seat)
if not result_seat:
self.add_param('seat_id', '请手动输入参数,或先请求接口:3.1.8 获取某场次座位状态')
else:
seat_id = ','.join([seat['cineSeatId'] for seat in data_seat])
self.add_param('seat_id', seat_id, timestamp=_timestamp_seat)
# 获取 lock_flag
request_api_lock = {'name': '3.3.1 座位锁定', 'path': 'seat/lock'}
redis_key_api_lock = f'{redis_key_prefix}_{request_api_lock["path"]}'
result_lock, _format_lock, data_lock, _timestamp_lock = get_data_from_redis(redis_key_api_lock)
if not result_lock:
self.add_param('lock_flag', '请手动输入参数,或先请求接口:3.3.1 座位锁定')
else:
self.add_param('lock_flag', data_lock['lockFlag'], timestamp=_timestamp_lock)
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,10 @@
import json
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
from dspt_api.util.api.ticket_print import ApiTicketPrint
class ApiTicketInfo(ApiTicketPrint):
pass

@ -0,0 +1,46 @@
import json
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
class ApiTicketInfoByQrcode:
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
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 获取 ticket_flag
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_lock_buy = {'name': '3.3.3 混合下单(影票、卖品)', 'path': 'seat/lock-buy'}
redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}'
result_lock_buy, _format_lock_buy, ticket_flag_lock_buy, _timestamp_lock_buy = get_data_from_redis(redis_key_api_lock_buy)
if not result_lock_buy:
self.add_param('qr_code', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('qr_code', random.choice(ticket_flag_lock_buy['sellInfo'])['qrCode'])
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,50 @@
import json
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
class ApiTicketPrint:
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
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 获取 ticket_flag
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_lock_buy = {'name': '3.3.3 混合下单(影票、卖品)', 'path': 'seat/lock-buy'}
redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}'
print(redis_key_api_lock_buy)
result_lock_buy, _format_lock_buy, ticket_flag_lock_buy, _timestamp_lock_buy = get_data_from_redis(redis_key_api_lock_buy)
print('ApiTicketPrint', ticket_flag_lock_buy)
if not result_lock_buy:
self.add_param('ticket_flag1', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('ticket_flag2', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('ticket_flag1', ticket_flag_lock_buy['ticketFlag1'])
self.add_param('ticket_flag2', ticket_flag_lock_buy['ticketFlag2'])
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,54 @@
import json
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
class ApiTicketRefund:
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)
_partner_refund_ticket_id = general_order_num('REF_T', self.api, self.member_type, self.ip, self.env, self.pid,
self.cid)
self.add_param('partner_refund_ticket_id', _partner_refund_ticket_id)
self.handle()
print('ApiTicketRefundV2-get_suggestion', self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 获取 area_info和partner_price
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_lock_buy = {'name': '3.3.3 混合下单(影票、卖品)', 'path': 'seat/lock-buy'}
redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}'
result_lock_buy, _format_lock_buy, ticket_flag_lock_buy, _timestamp_lock_buy = get_data_from_redis(redis_key_api_lock_buy)
if not result_lock_buy:
self.add_param('ticket_flag1', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('ticket_flag2', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('ticket_flag1', ticket_flag_lock_buy['ticketFlag1'])
self.add_param('ticket_flag2', ticket_flag_lock_buy['ticketFlag2'])
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,52 @@
import json
from dspt_api.util.general.handle_redis import get_param_from_redis
from dspt_api.util.general.get_order_num import general_order_num
import time
import random
class ApiTicketRefundV2:
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)
_partner_refund_ticket_id = general_order_num('REF_T', self.api, self.member_type, self.ip, self.env, self.pid,
self.cid)
self.add_param('partner_refund_ticket_id', _partner_refund_ticket_id)
self.handle()
print('ApiTicketRefundV2-get_suggestion', self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self):
# 获取 area_info和partner_price
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_lock_buy = {'name': '3.3.3 混合下单(影票、卖品)', '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:
self.add_param('partner_buy_ticket_id', '请手动输入参数,或先请求接口:3.3.3 混合下单(影票、卖品)')
self.add_param('partner_buy_ticket_id', params_lock_buy['partner_buy_ticket_id'])
def add_param(self, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
self.return_data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,8 @@
from xml.dom import minidom
import xml.etree.ElementTree as ET
def format_xml(_xml):
root = ET.fromstring(_xml)
dom = minidom.parseString(ET.tostring(root))
pretty_xml = dom.toprettyxml(indent="\t", newl="")
return pretty_xml

@ -0,0 +1,110 @@
from pickletools import opcodes
import pymysql
from pymysql.cursors import DictCursor
QUAN_SQL = sql = """
SELECT cqi.cinema_quan_name,
cqi.cinema_allow_tickets_flag,
cqi.cinema_tickets_pay_type ,
cqi.cinema_allow_retail_flag ,
cqi.cinema_retail_pay_type,
m1.cinema_yushouquan_book_order,
m1.cinema_yushouquan_encrypt_barcode
FROM cinema_yushouquan_info m1
LEFT JOIN cinema_yushouquan_info m2
ON m1.cinema_yushouquan_id >m2.cinema_yushouquan_id AND m1.`cinema_yushouquan_book_order`=m2.`cinema_yushouquan_book_order`
left join cinema_quan_info cqi ON
cqi.cinema_quan_id = m1.cinema_quan_id
where m1.cinema_yushouquan_status = '5'
AND m1.cinema_yushouquan_active_flag = '1'
AND cqi.card_quan_channel = '2'
GROUP BY m2.`cinema_yushouquan_book_order`,m2.cinema_yushouquan_encrypt_barcode
HAVING COUNT(*)<10
ORDER BY m1.cinema_yushouquan_book_order, m1.cinema_yushouquan_encrypt_barcode;
"""
CARD_QUAN_SQL = "SELECT cqo.card_quan_order_id, cqi.cinema_quan_name, cqo.cinema_quan_id, cqo.quan_remain_nums, cqo.cinema_dead_time FROM cine.card_quan_order cqo LEFT JOIN cine.cinema_quan_info cqi ON cqo.cinema_quan_id = cqi.cinema_quan_id WHERE cqi.card_quan_channel = '2' AND cqo.quan_remain_nums > 0 AND cqo.cinema_dead_time >= NOW() AND cqo.cinema_card_num = %s;"
class GetQuan:
def __init__(self, cinema_info):
self.cinema_db = cinema_info
def get_quan(self):
db_conn = pymysql.connect(**self.cinema_db)
db_cursor = db_conn.cursor(DictCursor)
db_cursor.execute(QUAN_SQL)
quan_list = db_cursor.fetchall()
quan = []
quan_label_list = []
for q in quan_list:
quan_pay_type = []
ticket = ''
goods = ''
if q['cinema_allow_tickets_flag'] == 1:
match q['cinema_tickets_pay_type']:
case 'zk':
ticket = '票<折扣>'
case 'dj':
ticket = '票<代金>'
case 'zq':
ticket = '票<最低票价>'
case 'dhbl':
ticket = '票<兑换>'
case 'zgxe':
ticket = '票<最高限额>'
quan_pay_type.append(ticket)
if q['cinema_allow_retail_flag'] == 1:
match q['cinema_retail_pay_type']:
case 'zk':
goods = '卖品<折扣>'
case 'dj':
goods = '卖品<代金>'
case 'dhbl':
goods = '卖品<兑换>'
quan_pay_type.append(goods)
quan_label_list_str = '(' + '+'.join(quan_pay_type) + ')'
label = (q['cinema_quan_name'] + ' ' + quan_label_list_str + ' -> ' + q['cinema_yushouquan_book_order'])
if label not in quan_label_list:
quan.append({
'label': label,
'value': label,
'options': [{'label': q['cinema_yushouquan_encrypt_barcode'],
'value': q['cinema_yushouquan_encrypt_barcode']}],
})
quan_label_list.append(label)
else:
for item in quan:
if item['label'] == label:
item['options'].append({'label': q['cinema_yushouquan_encrypt_barcode'],
'value': q['cinema_yushouquan_encrypt_barcode']})
# if quan['cinema_quan_name'] not in quan_dict.keys():
# quan_dict[quan['cinema_quan_name']] = {
# 'rule': {'cinema_allow_tickets_flag': quan['cinema_allow_tickets_flag'],
# 'cinema_tickets_pay_type': quan['cinema_tickets_pay_type'],
# 'cinema_allow_retail_flag': quan['cinema_allow_retail_flag'],
# 'cinema_retail_pay_type': quan['cinema_retail_pay_type']},
# 'order_num': [quan['cinema_yushouquan_book_order']],
# 'order': {quan['cinema_yushouquan_book_order']: [quan['cinema_yushouquan_encrypt_barcode']]}
# }
# else:
# if quan['cinema_yushouquan_book_order'] not in quan_dict[quan['cinema_quan_name']]['order_num']:
# quan_dict[quan['cinema_quan_name']]['order_num'].append(quan['cinema_yushouquan_book_order'])
# quan_dict[quan['cinema_quan_name']]['order'][quan['cinema_yushouquan_book_order']] = [
# quan['cinema_yushouquan_encrypt_barcode']]
# else:
# quan_dict[quan['cinema_quan_name']]['order'][quan['cinema_yushouquan_book_order']].append(
# quan['cinema_yushouquan_encrypt_barcode'])
return quan
def get_card_quan(self, card_num):
db_conn = pymysql.connect(**self.cinema_db)
db_cursor = db_conn.cursor(DictCursor)
db_cursor.execute(CARD_QUAN_SQL, (card_num,))
card_quan_list = db_cursor.fetchall()
return card_quan_list

@ -0,0 +1,17 @@
import time
import random
from django_redis import get_redis_connection
def general_order_num(prefix, api, api_type, ip, env, pid, cid):
# 生成新的order_num
_now = str(int(time.time() * 1000))
_rand = str(random.randint(100, 999))
order_num = prefix + _now + _rand
# 注册redis写入order_num
redis_conn = get_redis_connection()
redis_key = f'dspt_api_{ip}_{env}_{api_type}_{pid}_{cid}_{api}_order_num'
if redis_conn.get(redis_key):
redis_conn.delete(redis_key)
redis_conn.set(redis_key, order_num, 10 * 60 * 60)
return order_num

@ -0,0 +1,12 @@
def get_goods_list(goods_resp, _format):
goods_list = []
if _format == 'json':
for goods_cate in goods_resp:
goods_list = goods_list + goods_cate['goods']
if _format == 'xml':
for goods_cate in goods_resp['cate']:
if isinstance(goods_cate['goods']['item'], dict):
goods_list.append(goods_cate['goods']['item'])
else:
goods_list = goods_list + goods_cate['goods']['item']
return goods_list

@ -0,0 +1,139 @@
from django_redis import get_redis_connection
from dspt_api.models import EcChannel, EcEnv
from django.db.models import Q
from dspt_api.util.general.sign import Sign
import requests
def get_card(ip, env, pid, cid, card=None):
if card is not None and card != "请手动输入会员卡号":
set_card(ip, env, pid, cid, card)
return True, card
redis_con = get_redis_connection()
redis_key = f"card_{ip}_{env}_{pid}_{cid}"
print('get_card-card_num', redis_key)
if redis_con.exists(redis_key):
card_num = redis_con.get(redis_key)
print('get_card-card_num', card_num)
return True, str(card_num, encoding='utf-8')
return False, '请手动输入会员卡号'
def set_card(ip, env, pid, cid, card):
redis_con = get_redis_connection()
redis_key = f"card_{ip}_{env}_{pid}_{cid}"
if redis_con.exists(redis_key):
redis_con.delete(redis_key)
return redis_con.set(redis_key, card)
def get_card_type(env, pid, cid, 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
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)
req_params = sign.add_sig(params)
response = requests.get(request_url, params=req_params)
if response.json()['res']['status'] != 1:
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

@ -0,0 +1,47 @@
from django_redis import get_redis_connection
import pymysql
from pymysql.cursors import DictCursor
from dingxin_toolbox_drf.settings import CONFIG
from env import ENV
def get_ecard(ip, env, pid, cid):
redis_con = get_redis_connection()
redis_key = f"ecard_{ip}_{env}_{pid}_{cid}"
print('get_ecard-ecard_num', redis_key)
if redis_con.exists(redis_key):
ecard_num = redis_con.get(redis_key)
print('get_ecard-ecard_num', ecard_num)
return str(ecard_num, encoding='utf-8')
return False
def set_ecard(ip, env, pid, cid, ecard):
redis_con = get_redis_connection()
redis_key = f"ecard_{ip}_{env}_{pid}_{cid}"
if redis_con.exists(redis_key):
redis_con.delete(redis_key)
return redis_con.set(redis_key, ecard)
def get_ecard_renew_fee(ecard_number):
return get_ecard_info('renew_fee', ecard_number)
def get_ecard_level(ecard_number):
return get_ecard_info('card_level_no', ecard_number)
def get_ecard_info(filed, ecard_number):
ecard_server = {
'host': CONFIG[ENV]['ECARD_DB']['HOST'],
'user': CONFIG[ENV]['ECARD_DB']['USER'],
'password': CONFIG[ENV]['ECARD_DB']['PASSWORD'],
'port': CONFIG[ENV]['ECARD_DB']['PORT'],
'database': CONFIG[ENV]['ECARD_DB']['NAME'],
}
ecard_conn = pymysql.Connect(**ecard_server)
ecard_cursor = ecard_conn.cursor(DictCursor)
sql = f'SELECT {filed} FROM fws_dgp_card_db.card_level WHERE card_level_no = (SELECT card_level_no FROM fws_dgp_card_db.card WHERE card_num = %s);'
ecard_cursor.execute(sql, (ecard_number,))
result = ecard_cursor.fetchone()[filed]
return result

@ -0,0 +1,4 @@
from decimal import Decimal, ROUND_HALF_UP
def f2(val):
return Decimal(str(val)).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)

@ -0,0 +1,297 @@
from functools import reduce
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_card import get_card_type
from dspt_api.util.general.handle_float import f2
import time
# 将接口请求的数据中卖品信息整理成列表结构
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'])*f2(int(info['num']))
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, 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
# 获取券码
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
# 将接口获取的卖品数据转化成请求参数格式
def general_goods_field_member(_goods_data, _data):
# 获取会员价
redis_key_prefix = f'dspt_api_{_data["ip"]}_{_data["env"]}_{_data["member_type"]}_{_data["pid"]}_{_data["cid"]}'
request_api_get_goods_price = {'name': '3.3.2 获取卖品折扣信息', 'path': 'card/get-goods-price'}
redis_key_api_get_goods_price = f'{redis_key_prefix}_{request_api_get_goods_price["path"]}'
result, _format, _goods_price, _timestamp = get_data_from_redis(redis_key_api_get_goods_price, True)
params = []
total_cash = 0
for g in _goods_data:
_num = g.get('buy_num', 1)
price = f2(g['counterPrice'] if g['cardDiscountType'] == "1" else g['onlinePrice'])
if result:
for gp in _goods_price:
if gp['id'] == str(g['id']):
price = f2(gp['discountPrice'])
info = {
'id': g['id'],
'type': g['type'],
'price': price,
'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'] += add_price
total_cash = f2(total_cash) + f2(info['price']*info['num'])
params.append(info)
print('general_goods_param---------params', params)
return params, total_cash
def general_goods_params_member(data, pay_type, card, ticket_cash=f2(0)):
# 返回值 result, goods_field, goods_card_balance_pay, goods_cash, cash, timestamp
goods_card_balance_pay = 0
goods_cash = 0
third_pay = f2(ticket_cash)
quan_num = int(pay_type['goods_quan']['goods_quan_num'])
quan_val = f2(pay_type['goods_quan']['goods_quan_value'])
quan_type = pay_type['goods_quan']['goods_quan_type']
# 获取卡类型
card_type = get_card_type(data["env"], data["pid"], data["cid"], card)
if card_type is False:
return_str = '此会员卡在该影院无法使用,请使用3.1.3 查询会员卡的详细信息接口查看卡信息'
return False, return_str, return_str, return_str, third_pay, int(time.time() * 1000)
# 券信息
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, third_pay, int(time.time() * 1000)
goods_field_list, total_goods_val = general_goods_field_member(goods_data, data)
if pay_type['select_price_type'] == 'cinema_price':
goods_card_balance_pay = str(total_goods_val)
if card_type == '权益卡(积分卡)':
third_pay += total_goods_val
return True, change_goods_price_str(goods_field_list), goods_card_balance_pay, goods_cash, third_pay, _timestamp
if pay_type['select_price_type'] == 'third_price':
if pay_type['goods_quan_check'] is False:
goods_card_balance_pay = str(total_goods_val)
if card_type == '权益卡(积分卡)':
third_pay += total_goods_val
return True, change_goods_price_str(
goods_field_list), goods_card_balance_pay, goods_cash, third_pay, _timestamp
else:
quan_per_goods_list = quan_num_pre_goods(int(pay_type['goods_quan']['goods_quan_num']),
len(goods_field_list))
if quan_type == '兑换券':
total_goods_pay = 0
for i, goods in enumerate(goods_field_list):
goods['coupons'] = []
for n in range(quan_per_goods_list[i]):
goods['coupons'].append(
{'name': 'Rog卖品接口兑换券', 'code': f'rog{str(time.time_ns())}{goods["id"]}',
'show_price': 0, 'sell_price': 0, 'coupon_type': 1})
if n == 0:
goods['price'] = f2(pay_type['goods_quan']['goods_quan_value'])
else:
goods['price'] += f2(pay_type['goods_quan']['goods_quan_value'])
total_goods_pay += goods['price']
goods_card_balance_pay = str(total_goods_pay)
if card_type == '权益卡(积分卡)':
third_pay += total_goods_pay
return True, change_goods_price_str(
goods_field_list), goods_card_balance_pay, goods_cash, third_pay, _timestamp
if quan_type == '代金券':
total_quan_val = quan_val * quan_num
remain_quan_val = total_quan_val
total_goods_pay = 0
for i, goods in enumerate(goods_field_list):
if i + 1 < len(goods_field_list):
goods_val = f2(f2(goods['price']) - remain_quan_val)
goods['price'] = goods_val if goods_val > 0 else 0
total_goods_pay += goods['price']
else:
quan_val = f2((f2(goods['price']) / total_goods_val) * total_quan_val)
remain_quan_val -= quan_val
goods_val = f2(f2(goods['price']) - quan_val)
goods['price'] = goods_val if goods_val > 0 else 0
total_goods_pay += goods['price']
goods_card_balance_pay = str(total_goods_pay)
if card_type == '权益卡(积分卡)':
third_pay += total_goods_pay
return True, change_goods_price_str(
goods_field_list), goods_card_balance_pay, goods_cash, third_pay, _timestamp
if quan_type == '抵值兑换券':
total_goods_pay = 0
total_quan_pay = 0
for i, goods in enumerate(goods_field_list):
if quan_per_goods_list[i] == 0:
total_goods_pay += f2(goods['price'])
else:
goods['coupons'] = []
for n in range(quan_per_goods_list[i]):
goods['coupons'].append(
{'name': 'Rog卖品接口抵值兑换券', 'code': f'rog{str(time.time_ns())}{goods["id"]}',
'show_price': str(quan_val), 'sell_price': str(quan_val), 'coupon_type': 3})
if n == 0:
goods['price'] = f2(quan_val)
else:
goods['price'] += f2(quan_val)
total_quan_pay += goods['price']
goods_card_balance_pay = str(total_goods_pay)
goods_cash = str(total_quan_pay)
if card_type == '权益卡(积分卡)':
third_pay += total_goods_pay
return True, change_goods_price_str(
goods_field_list), goods_card_balance_pay, goods_cash, third_pay, _timestamp
return False, None, None, None, third_pay, int(time.time() * 1000)
def quan_num_pre_goods(quan_total_num, goods_num):
quan_average_num = int(quan_total_num / goods_num) # 计算个卖品平均用几张券
result = [quan_average_num] * goods_num # 生成每个卖品的用券数量列表
for i in range(quan_total_num % goods_num): # 用券与卖品的余数作为范围,为卖品添加券
result[i] += 1
return result
def change_goods_price_str(goods_list):
for goods in goods_list:
goods['price'] = str(goods['price'])
return goods_list

@ -0,0 +1,6 @@
import time
def add_param(data, field, value, is_checked=True, result=True, timestamp=int(time.time() * 1000)):
data.append(
{'param': field, 'value': value, 'is_checked': is_checked, 'result': result, 'timestamp': timestamp})

@ -0,0 +1,65 @@
from random import random
from django_redis import get_redis_connection
import json
import random
import xmltodict
# 封装方法处理从redis中获取接口数据
def get_data_from_redis(redis_key, raw=False):
# 初始化redis
redis_conn = get_redis_connection()
# 如果有用户数据则处理用户数据
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('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('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('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))
if str(resp_result) == '1':
print('get_data_from_redis-1')
resp_data = resp['res']['data'] if isinstance(resp['res']['data'], list) else [resp['res']['data']]
print('get_data_from_redis-resp_data', resp_data)
if str(resp_result) != '1':
print('get_data_from_redis-2')
return False, redis_data['format'], '请检查接口返回值或手动输入参数:', 0
if len(resp_data) == 0:
print('get_data_from_redis-3')
return False, redis_data['format'], '接口返回数据为空,请手动输入参数:', 0
if raw is True:
return True, redis_data['format'], resp_data, redis_data['timestamp']
return True, redis_data['format'], random.choice(resp_data), redis_data['timestamp']
return False, 'json', '请手动输入参数,或先请求接口:', 0
def get_param_from_redis(redis_key):
# 初始话redis
redis_conn = get_redis_connection()
if redis_conn.exists(redis_key):
redis_data = json.loads(redis_conn.get(redis_key))
request_params = redis_data['params']
return request_params
return False
def get_timestamp_from_redis(redis_key):
# 初始话redis
redis_conn = get_redis_connection()
if redis_conn.exists(redis_key):
redis_data = json.loads(redis_conn.get(redis_key))
request_timestamp = redis_data['timestamp']
return request_timestamp
return 0

@ -0,0 +1,425 @@
from dspt_api.util.general.handle_float import f2
from dspt_api.util.general.handle_redis import get_data_from_redis, get_param_from_redis
from dspt_api.util.general.handle_card import get_card_type
import time
def general_seat_params(pay_type, data):
"""
说明
支持现金联名卡支付电子券支付扫码券支付
现金支付时可以走电商渠道定价
联名卡支付时价格取联名卡的优惠价支付方式还是现金
电子券和扫码券都是走鼎新定价然后通过券接口获取价格剩余待支付的金额为现金支付
券只支持如下几种券
先从seat_lock接口获取座位价格
如果seat_lock没有获取到座位价格就到
返回 结果, seat , ticket_cash, play_id, play_update_time, lock_flag, quan, timestamp
"""
redis_key_prefix = f'dspt_api_{data["ip"]}_{data["env"]}_{data["member_type"]}_{data["pid"]}_{data["cid"]}'
# 获取 area_info和partner_price
request_api_lock = {'name': '3.3.1 座位锁定', '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:
print('result_lock False')
return False, None, None, None, None, None, None, None
area_info = seat_price_from_lock['areaInfo'] if len(seat_price_from_lock['areaInfo']) > 0 else False
lock_flag = seat_price_from_lock['lockFlag']
# partner_price = seat_price_from_lock['partnerPrice'] if seat_price_from_lock['partnerPrice'] is not None else False
# 获取market_price
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, seat_price_from_play, _timestamp_play = get_data_from_redis(redis_key_api_play)
if not result_play:
print('result_play False')
return False, None, None, None, None, None, None, None
market_price = seat_price_from_play['marketPrice']
play_id = seat_price_from_play['id']
play_update_time = seat_price_from_play['cineUpdateTime']
# 获取手续费
request_api_config = {'name': '3.1.2 获取单个影院配置信息', 'path': 'cinema/config'}
redis_key_api_config = f'{redis_key_prefix}_{request_api_config["path"]}'
result_config, _format_config, seat_price_from_config, _timestamp_config = get_data_from_redis(redis_key_api_config)
if not result_config:
print('result_config False')
return False, None, None, None, None, None, None, None
handle_fee = seat_price_from_config['handleFee']
partner_type = seat_price_from_config['partnerSubsidyType'] # 1:电商平台补贴;2:合作商补贴
# 获取座位信息
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_price_from_seat, _timestamp_seat = get_data_from_redis(redis_key_api_seat)
if not result_seat:
print('result_seat False')
return False, None, None, None, None, None, None, None
seat_id_list = [{'seat_id': seat['cineSeatId'], 'ticket_discount': seat.get('ticketDiscount', 0),
'service_discount': seat.get('serviceDiscount', 0)} for seat in seat_price_from_seat]
# 计算最大时间戳
last_timestamp = max([_timestamp_lock, _timestamp_play, _timestamp_config, _timestamp_seat])
# 判断获取到了全部接口数据,就继续,否则报错
if not (result_lock and result_play and result_config and result_seat):
return_str = '请手动输入参数,检查相关接口返回值:3.3.1 座位锁定、3.1.5 获取放映计划列表、3.1.8 获取某场次座位状态、3.1.2 获取单个影院配置信息'
return False, return_str, 0, return_str, return_str, return_str, return_str, last_timestamp
if pay_type == 'cash':
"""
-- 当影院合作商是电商平台定价时partner_type = 1
price不包含手续费,含服务费
user_real_pay_price用户真实支付影票金额不含手续费服务费该字段只做记录不参与计算
service_fee影厅座位服务费仅当锁座接口返回的服务费[areaServiceFee]不为零时才传此参数
ticket_discount_price影票优惠金额; service_fee_discount_price服务费优惠金额
如果是鼎新电商平台对合作商价格管控使用以上两个优惠金额字段需要联系请联系鼎新杰盈公司商务打开开关即可使用否则直接回传会产生掉单
-- 当影院合作商是合作商自主定价时partner_type = 2
price真实的票价[不含服务费不含手续费]
user_real_pay_price用户真实支付影票金额[不含手续费服务费] 需要扣减 ticket_discount_price
service_fee真实的服务费
ticket_discount_price影票优惠金额仅做记录
service_fee_discount_price服务费优惠金额仅做记录
测试影院
测试影院3.166 乐影网 电商平台补贴 是否允许传递优惠金额 影票价格控制 卖品价格控制
测试影院3.166 淘票票 电商平台补贴 是否允许传递优惠金额 影票价格控制 卖品价格控制
测试影院3.166 美团猫眼 电商平台补贴 是否允许传递优惠金额 影票价格控制 卖品价格控制
测试影院3.166 合作商补贴 合作商补贴 是否允许传递优惠金额 影票价格控制 卖品价格控制
"""
quan = ''
seat_list = []
ticket_cash = 0 # 统计cash字段用
for seat_info in seat_id_list:
seat = [seat_info["seat_id"], handle_fee]
ticket_discount = seat_info["ticket_discount"]
service_discount = seat_info["service_discount"]
if area_info is not False:
# 查找座位对应的区域价格
for area_seat_info in area_info:
if int(area_seat_info['seatId']) == int(seat_info['seat_id']):
# 获取price字段值
price = f2(area_seat_info["areaPrice"])
seat.append(str(price))
seat.append('0')
seat.append(area_seat_info["areaServiceFee"])
# if partner_type == '2': # 合作商定价
# price -= Decimal(area_seat_info["areaServiceFee"]).quantize(Decimal('0.00'), ROUND_HALF_UP)
# 计算用户实际支付的值
real_pay = f2(area_seat_info["areaPrice"])
real_pay -= f2(area_seat_info["areaServiceFee"])
# 处理影票和服务费折扣
if ticket_discount != 0:
real_pay -= f2(ticket_discount)
seat.append(str(ticket_discount))
if service_discount != 0:
if partner_type == '2':
real_pay -= f2(service_discount)
seat.append(str(service_discount))
else:
seat.append(str(service_discount))
seat[3] = str(real_pay)
# seat = f'{seat_info["seat_id"]}-{handle_fee}-{str(price)}-{str(real_pay)}-{area_seat_info["areaServiceFee"]}{f"-{str(ticket_discount)}" if ticket_discount != 0 else ""}{f"-{str(service_discount)}" if service_discount != 0 else ""}'
seat_list.append('-'.join(seat))
ticket_cash += real_pay
else:
seat.append(market_price)
seat.append('0')
seat.append('0.00')
real_pay = f2(market_price)
if ticket_discount != 0:
real_pay -= f2(ticket_discount)
seat.append(str(ticket_discount))
if service_discount != 0:
real_pay -= f2(service_discount)
seat.append(str(service_discount))
seat[3] = str(real_pay)
# seat = f'{seat_info["seat_id"]}-{handle_fee}-{market_price}-{str(real_pay)}-0{f"-{str(ticket_discount)}" if ticket_discount != 0 else ""}{f"-{str(service_discount)}" if service_discount != 0 else ""}'
seat_list.append('-'.join(seat))
ticket_cash += real_pay
return True, ','.join(seat_list), ticket_cash, play_id, play_update_time, lock_flag, quan, last_timestamp
elif pay_type == 'ecard':
quan = ''
# 获取联名卡价格
request_api_ecard = {'name': '3.4.6 获取座位的联名卡价格', 'path': 'ecard/seat-price'}
redis_key_api_ecard = f'{redis_key_prefix}_{request_api_ecard["path"]}'
result_ecard, _format_ecard, seat_price_from_ecard, _timestamp_ecard = get_data_from_redis(
redis_key_api_ecard)
if not result_ecard:
print('result_ecard False')
return False, None, None, None, None, None, None, None
ecard_info = seat_price_from_ecard['seatPrices'] if len(seat_price_from_ecard['seatPrices']) > 0 else False
# 错误判断
if ecard_info is False:
return_str = '请手动输入参数,检查相关接口返回值:3.4.6 获取座位的联名卡价格'
return False, return_str, 0, return_str, return_str, return_str, last_timestamp
# 处理价格
seat_list = []
ticket_cash = 0 # 统计cash字段用
for seat_info in seat_id_list:
seat = [seat_info["seat_id"], handle_fee]
ticket_discount = seat_info["ticket_discount"]
service_discount = seat_info["service_discount"]
for ecard_seat_info in ecard_info:
if int(ecard_seat_info['seatId']) == int(seat_info['seat_id']):
# 获取price字段值
price = f2(ecard_seat_info["price"])
seat.append(str(price))
seat.append('0')
seat.append(ecard_seat_info["serviceFee"])
# if partner_type == '2': # 合作商定价
# price -= Decimal(area_seat_info["areaServiceFee"]).quantize(Decimal('0.00'), ROUND_HALF_UP)
# 计算用户实际支付的值
real_pay = f2(ecard_seat_info["price"])
real_pay -= f2(ecard_seat_info["serviceFee"])
# 处理影票和服务费折扣
if ticket_discount != 0:
real_pay -= f2(ticket_discount)
seat.append(str(ticket_discount))
if service_discount != 0:
if partner_type == '2':
real_pay -= f2(service_discount)
seat.append(str(service_discount))
else:
seat.append(str(service_discount))
seat[3] = str(real_pay)
# seat = f'{seat_info["seat_id"]}-{handle_fee}-{str(price)}-{str(real_pay)}-{area_seat_info["areaServiceFee"]}{f"-{str(ticket_discount)}" if ticket_discount != 0 else ""}{f"-{str(service_discount)}" if service_discount != 0 else ""}'
seat_list.append('-'.join(seat))
ticket_cash += real_pay
return True, ','.join(seat_list), ticket_cash, play_id, play_update_time, lock_flag, quan, last_timestamp
elif pay_type in ['yushouquan', 'equan']:
# 获取券价格
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, seat_price_from_yushouquan, _timestamp_yushouquan = get_data_from_redis(
redis_key_api_yushouquan)
if not result_yushouquan:
print('result_yushouquan False')
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添加券接口'
# 获取座位参数
seat_list = []
ticket_cash = 0 # 统计cash字段用
for seat_info in seat_id_list:
seat = [seat_info["seat_id"], handle_fee]
ticket_discount = seat_info["ticket_discount"]
service_discount = seat_info["service_discount"]
seat.append(market_price)
seat.append('0')
seat.append('0.00')
real_pay = f2(market_price)
if ticket_discount != 0:
real_pay -= f2(ticket_discount)
seat.append(str(ticket_discount))
if service_discount != 0:
real_pay -= f2(service_discount)
seat.append(str(service_discount))
seat[3] = str(real_pay)
# seat = f'{seat_info["seat_id"]}-{handle_fee}-{market_price}-{str(real_pay)}-0{f"-{str(ticket_discount)}" if ticket_discount != 0 else ""}{f"-{str(service_discount)}" if service_discount != 0 else ""}'
seat_list.append('-'.join(seat))
ticket_cash += real_pay
ticket_cash = seat_price_from_yushouquan['balance']
return True, ','.join(seat_list), ticket_cash, play_id, play_update_time, lock_flag, quan, last_timestamp
else:
pass
def general_seat_params_member(pay_type, data, card):
"""
seat_id-handle_fee-price-ticket_type-is_discount-settlement_price-service_fee 组成的字符串多个值(多个seat)组用半角逗号分隔
seat_id: 要购买的座位号
handle_fee手续费如果下单传入了退票订单号会将handle_fee字段视为改签手续费
price不包含手续费会员卡支付金额,该字段值是否包含影厅座位服务费取决于字段is_split_service_fee
ticket_type: 影票类型会员卡详细信息接口的业务响应参数desc的值
is_discount 0:普通票1:会员票2:全局会员票
settlement_price座位结算价用于计算座位补贴补贴=结算价-支付价该值不能低于场次最低票价只有当参数is_cinema_price=2该值才有效平台请求影院购票接口时会将计算出的补贴金额传给影院补贴金额会计入影城报表
该字段值是否包含影厅座位服务费取决于字段is_split_service_fee
service_fee影厅座位服务费只有当参数is_cinema_price=2该值才有效
返回 结果, seat, play_id, play_update_time, lock_flag, seat_coupons, is_cinema_price, is_split_service_fee, cash_pay, timestamp
"""
# 获取卡类型
card_type = get_card_type(data["env"], data["pid"], data["cid"], card)
if card_type is False:
return_str = '此会员卡在该影院无法使用,请使用3.1.3 查询会员卡的详细信息接口查看卡信息'
return False, return_str, return_str, return_str, return_str, return_str, '2', 'Y', None, int(
time.time() * 1000)
# 获取其他参数
redis_key_prefix = f'dspt_api_{data["ip"]}_{data["env"]}_{data["member_type"]}_{data["pid"]}_{data["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)
if not result_seat:
return False, None, None, None, None, None, None, None, None, None
# 获取play_id 和 play_update_time
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:
return False, None, None, None, None, None, None, None, None, None
play_id = seat_price_from_play['id']
play_update_time = seat_price_from_play['cineUpdateTime']
lowest_price = f2(seat_price_from_play['lowestPrice'])
# 获取 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:
return False, None, None, None, None, None, None, None, None, None
lock_flag = seat_price_from_lock['lockFlag']
# cinema_price
request_api_seat = {'name': '3.4.4 锁定座位后获取票价', 'path': 'seat/price'}
redis_key_api_seat = f'{redis_key_prefix}_{request_api_seat["path"]}'
result_seat_price, _format_seat_price, seat_data_price, _timestamp_seat_price = get_data_from_redis(
redis_key_api_seat)
if not result_seat_price:
return False, None, None, None, None, None, None, None, None, None
# handle_fee
request_api_config = {'name': '3.2.2 获取单个影院配置信息', 'path': 'cinema/config'}
redis_key_api_config = f'{redis_key_prefix}_{request_api_config["path"]}'
result_config, _format_config, seat_price_from_config, _timestamp_config = get_data_from_redis(redis_key_api_config)
if not result_config:
return False, None, None, None, None, None, None, None, None, None
handle_fee = f2(seat_price_from_config['handleFee'])
# 计算最大时间戳
last_timestamp = max([_timestamp_seat, _timestamp_play, _timestamp_config, _timestamp_lock, _timestamp_seat_price])
# 判断获取到了全部接口数据,就继续,否则报错
if not (result_seat and result_play and result_lock and result_seat_price and result_config):
return_str = '请手动输入参数,检查相关接口返回值:3.2.6 获取某场次座位状态、3.2.3 获取放映计划列表、3.4.3 座位锁定、3.4.4 锁定座位后获取票价、3.2.2 获取单个影院配置信息'
return False, return_str, return_str, return_str, return_str, return_str, '1', None, None, last_timestamp
seat_list = []
# 处理影院定价逻辑
if pay_type['select_price_type'] == 'cinema_price':
# 11682-1-27.7-会员票-1
is_cinema_price = '1'
is_split_service_fee = None
seat_coupons = None
# 计算影票价
ticket_price = f2(f2(seat_data_price['totalPrice']) / int(seat_data_price['ticketNum']))
ticket_service = f2(f2(seat_data_price['totalServiceCharge']) / int(seat_data_price['ticketNum']))
cash_pay = 0 # 计算需要非卡余额支付的金额
# 生成座位字段
for seat in seat_data:
seat_list.append(f"{seat['cineSeatId']}-{str(handle_fee)}-{str(ticket_price)}-会员票-1")
if card_type == '权益卡(积分卡)':
cash_pay += f2(ticket_price + handle_fee)
else:
cash_pay += 0
return True, ','.join(
seat_list), play_id, play_update_time, lock_flag, seat_coupons, is_cinema_price, is_split_service_fee, str(
cash_pay), last_timestamp
# 处理三方定价的逻辑
if pay_type['select_price_type'] == 'third_price':
quan_type = pay_type['ticket_quan']['ticket_quan_type']
# 11664-1-16.5-会员票-1-26.5-1.5
is_cinema_price = '2'
# 处理is_split_service_fee字段
if pay_type['ticket_info']['have_service_fee'] is True:
is_split_service_fee = 'Y'
else:
is_split_service_fee = 'N'
# 生成券字段
# 11663-Rog自营兑换券10元@@6777bbcfhirW6VAqkHItn3PZ@@10.00@@0
quan_list = []
quan_price_list = []
if pay_type['ticket_quan_check']:
quan_per_ticket = int(int(pay_type['ticket_quan']['ticket_quan_num']) / len(seat_data)) # 每张票平均分配的券数量
quan_price_num = [quan_per_ticket] * len(seat_data) # 每张票平均分配的券数量列表
# 多余的券添加到每张票上
for i in range(int(pay_type['ticket_quan']['ticket_quan_num']) % len(seat_data)):
quan_price_num[i] += 1
print('quan_price_num', quan_price_num) # quan_price_num [2, 2, 1] 3个座位 5张券
# 生成券字段列表
quan_price = f2(pay_type['ticket_quan']['ticket_quan_value'])
for i, num in enumerate(quan_price_num):
seat_id = seat_data[i]['cineSeatId']
quan_code_list = [f"rog{str(time.time_ns())}{seat_id}{str(n)}" for n in range(num)]
quan_code = '|'.join(quan_code_list)
quan_code_price = f2(quan_price * num)
# 券名称@@券码@@券面额@@券抵值金额
if quan_type == '抵值兑换券':
quan_list.append(
f"{seat_id}-Rog{quan_type}{str(quan_price)}@@{quan_code}@@{str(quan_code_price)}@@{str(quan_code_price)}")
else:
quan_list.append(
f"{seat_id}-Rog{quan_type}{str(quan_price)}@@{quan_code}@@{str(quan_code_price)}@@0")
quan_price_list.append(quan_code_price)
seat_coupons = ','.join(quan_list) if len(quan_list) > 0 else None # 生成券字段
print('quan_price_list',
quan_price_list) # quan_price_list [Decimal('22.22'), Decimal('22.22'), Decimal('11.11')]
# 计算影票价格部分
ticket_price = f2(pay_type['ticket_info']['ticket_price'])
service_fee = f2(f2(seat_data_price['totalServiceCharge']) / int(seat_data_price['ticketNum']))
cash_pay = 0
for i, seat in enumerate(seat_data):
# 计算实付金额
ticket_real_pay = ticket_price
if pay_type['ticket_quan_check']:
if quan_type == '代金券':
ticket_real_pay = f2(ticket_price - quan_price_list[i])
elif quan_type in ['抵值兑换券', '兑换券']:
ticket_real_pay = quan_price_list[i]
ticket_real_pay = ticket_real_pay if ticket_real_pay > 0 else 0 # 处理用券后小于0的情况
# 计算影票结算金额
ticket_pay = ticket_real_pay
if ticket_real_pay < lowest_price:
ticket_pay = lowest_price
if is_split_service_fee == 'Y':
ticket_real_pay += service_fee
ticket_pay += service_fee
if card_type == '权益卡(积分卡)' or quan_type == '抵值兑换券':
cash_pay += f2(ticket_real_pay + handle_fee) # 当使用权益卡支付时,需要将实付票价累加到现金支付字段中
else:
cash_pay += 0
seat_list.append(
f"{seat['cineSeatId']}-{str(handle_fee)}-{str(ticket_real_pay)}-会员票-1-{str(ticket_pay)}-{str(service_fee)}")
return True, ','.join(
seat_list), play_id, play_update_time, lock_flag, seat_coupons, is_cinema_price, is_split_service_fee, str(
cash_pay), last_timestamp

@ -0,0 +1,20 @@
def get_ticket_price(data, seat=None, ecard=None, quan=False):
print('get_ticket_price-data', data)
if quan is True:
return data.get('marketPrice'), None
if data.get('areaInfo') is None:
if data.get('partnerPrice') is None:
return data.get('marketPrice'), None
else:
return data.get('partnerPrice'), None
else:
if seat is None:
return data.get('partnerPrice'), None
else:
area_id = seat.get('areaId')
if ecard is None:
for area in data.get('areaInfo'):
if area.get('areaId') == area_id:
return area.get('areaPrice'), area.get('areaServiceFee')
else:
pass

@ -0,0 +1,10 @@
import datetime
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)
start_date = (_now + datetime.timedelta(days=-30)).strftime(time_format)
return start_date, end_date

File diff suppressed because it is too large Load Diff

@ -0,0 +1,100 @@
# import pymysql
# from pymysql.cursors import DictCursor
#
# db_config = {
# 'host': 'home.rogersun.cn',
# 'database': 'dingxin_toolbox',
# 'user': 'dingxin',
# 'password': 'cine123456',
# 'port': 3306,
# }
#
# db_conn = pymysql.Connect(**db_config)
# db_cursor = db_conn.cursor(DictCursor)
#
# api_data = {
# 'desc': '3.5.4 发卡明细对账',
# 'path': 'cinema/send-card-bill',
# 'type': 'member',
# }
#
# params_data = [
# {
# 'param': 'format',
# 'description': '返回数据格式:xml或json',
# 'value': 'json',
# 'is_checked': 1,
# 'is_request': 1,
# },
# {
# 'param': 'pid',
# 'description': '合作商id',
# 'value': None,
# 'is_checked': 1,
# 'is_request': 1,
# },
# {
# 'param': 'cid',
# 'description': '影院ID',
# 'value': None,
# 'is_checked': 1,
# 'is_request': 1,
# },
# {
# 'param': 'start_date',
# 'description': '对账开始日期 示例 2016-03-01',
# 'value': None,
# 'is_checked': 1,
# 'is_request': 1,
# },
# {
# 'param': 'end_date',
# 'description': '对账结束日期 示例 2016-03-01',
# 'value': None,
# 'is_checked': 1,
# 'is_request': 1,
# },
# {
# 'param': 'start_order_time',
# 'description': '查询订单开始时间,如:2016-03-01 00:00:00 首次调用不传,默认为{start_date 00:00:00},之后调用按返回字段startOrderTime进行调用该时间只能在start_date与end_date范围内',
# 'value': None,
# 'is_checked': 0,
# 'is_request': 0,
# },
# {
# 'param': 'page_len',
# 'description': '每次获取订单数,默认1000。范围:大于等于1000,小于等于2000。',
# 'value': None,
# 'is_checked': 0,
# 'is_request': 0,
# },
# ]
# params_data.append({
# 'param': '_sig',
# 'description': '接口签名',
# 'value': None,
# 'is_checked': 1,
# 'is_request': 1,
# })
#
# api_sql = """
# insert into dingxin_toolbox.ec_api (id, description, path, type)
# values (NULL, %s, %s, %s);
# """
#
# r = db_cursor.execute(api_sql, (api_data['desc'], api_data['path'], api_data['type']))
# db_conn.commit()
#
# get_id = """select id from dingxin_toolbox.ec_api where path = %s;"""
# r1 = db_cursor.execute(get_id, (api_data['path'],))
# api_id = db_cursor.fetchone()['id']
# print(api_id)
#
# param_sql = """insert into dingxin_toolbox.ec_api_params (id, api_id, param, description, value, is_checked, is_request)
# values (NULL, %s, %s, %s, %s, %s, %s);"""
#
# for param in params_data:
# print(param)
# r2 = db_cursor.execute(param_sql, (
# api_id, param['param'], param['description'], param['value'], param['is_checked'], param['is_request']))
# db_conn.commit()

@ -0,0 +1,64 @@
import random
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', 'cinema/card-level-rule']
def random_params(_user_info, _handle_data):
if _user_info["api"] in RANDOM_DATA_API_LIST:
if str(_handle_data['res']['status']) == '0':
return False
redis_key_api = f'dspt_api_{_user_info["user_ip"]}_{_user_info["env"]}_{_user_info["member_type"]}_{_user_info["pid"]}_{_user_info["cid"]}_{_user_info["api"]}_random'
redis_conn = get_redis_connection()
if redis_conn.get(redis_key_api):
redis_conn.delete(redis_key_api)
data = {
'api': _user_info["api"],
'member_type': _user_info["member_type"],
'format': _user_info["format"],
'timestamp': int(time.time() * 1000),
}
print('random_params_user_info["api"]', _user_info["api"])
if _user_info["api"] == 'play/seat-status':
_user_data = get_ok_status_seat_list(_handle_data['res']['data'])
elif _user_info["api"] == 'ecard/ecard-levels':
print('ecard/ecard-levels')
_user_data = _handle_data['res']['data']['ecardLevelData']
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)
if len(_user_data) > 0:
print('random_params', _user_data)
if _user_info["api"] in ('play/seat-status', 'cinema/goods'):
data['user_data'] = [[random.choice(_user_data)]]
else:
data['user_data'] = [random.choice(_user_data)]
redis_conn.set(redis_key_api, json.dumps(data), 10 * 60 * 60)
else:
redis_conn.delete(redis_key_api)
def get_ok_status_seat_list(_data):
seat_list = []
for s in _data:
if s['seatStatus'] == 'ok' and s['type'] in ['danren', 'zhendong', 'vip']:
seat_list.append(s)
return seat_list
def random_goods(_data):
goods = random.choice(_data)
n = 1
while goods['type'] == 'package' and goods['packageType'] == '2' and n < 10:
goods = random.choice(_data)
n += 1
return goods

@ -0,0 +1,46 @@
import re
from hashlib import md5
"""
用于生成网售签名
"""
class Sign:
def __init__(self, salt='ly725xw701'):
self.salt = salt
def __ksort(self, params):
"""
请求参数排序
:params: 未排序的参数字典
:return: 排列后的请求参数字符串
"""
sorted_params = sorted(params.items(), key=lambda k: k[0])
p = [f'{k}={v}' for k, v in sorted_params]
params_str = '&'.join(p)
return params_str
def __generate_sign(self, params):
"""
生成签名方法
:param params: 未排序的参数字典
:param salt: 盐值授权码
:return: 生成签名
"""
str0 = self.salt + self.__ksort(params)
m1 = md5(str0.encode()).hexdigest()
str1 = m1 + self.salt
sign = md5(str1.encode()).hexdigest()
return sign
def add_sig(self, params):
"""
添加sig到params
:param params:
:return:
"""
sig = self.__generate_sign(params)
params.update({'_sig': sig})
return params

@ -0,0 +1,718 @@
from dspt_api.util.api.cinema_hall_seats import ApiCinemaHallSeats
from dspt_api.util.api.cinema_plays_increment import ApiCinemaPlaysIncrement
from dspt_api.util.api.ecard_refund import ApiEcardRefund
from dspt_api.util.api.ecard_regist import ApiEcardRegist
from dspt_api.util.api.ecard_renew import ApiEcardRenew
from dspt_api.util.api.play_info import ApiPlayInfo
from dspt_api.util.api.play_seat_status import ApiPlaySeatStatus
from dspt_api.util.api.play_period_changed_seats import ApiPlayPeriodChangedSeats
from dspt_api.util.api.play_seat_overview import ApiPlaySeatOverview
from dspt_api.util.api.cinema_goods_pic import ApiCinemaGoodsPic
from dspt_api.util.api.seat_lock import ApiSeatLock
from dspt_api.util.api.order_buy_goods import ApiOrderBuyGoods
from dspt_api.util.api.ecard_detail import ApiEcardDetail
from dspt_api.util.api.ecard_order_detail import ApiEcardOrderDetail
from dspt_api.util.api.ecard_seat_price import ApiEcardSeatPrice
from dspt_api.util.api.seat_check_coupon import ApiSeatCheckCoupon
from dspt_api.util.api.seat_lock_buy import ApiSeatLockBuy
from dspt_api.util.api.ticket_refundv2 import ApiTicketRefundV2
from dspt_api.util.api.ticket_refund import ApiTicketRefund
from dspt_api.util.api.seat_unlock import ApiSeatUnlock
from dspt_api.util.api.ticket_print import ApiTicketPrint
from dspt_api.util.api.ticket_info_by_qrcode import ApiTicketInfoByQrcode
from dspt_api.util.api.ticket_info import ApiTicketInfo
from dspt_api.util.api.order_ticket_flag import ApiOrderTicketFlag
from dspt_api.util.api.order_status import ApiOrderStatus
from dspt_api.util.api.order_info import ApiOrderInfo
from dspt_api.util.api.goods_deduct import ApiGoodsDeduct
from dspt_api.util.mapi.play_seat_status import MapiPlaySeatStatus
from dspt_api.util.mapi.seat_lock import MapiSeatLock
from dspt_api.util.mapi.seat_price import MapiSeatPrice
from dspt_api.util.mapi.seat_lock_buy import MapiSeatLockBuy
from dspt_api.util.mapi.card_get_goods_price import MapiCardGetGoodsPrice
from dspt_api.util.mapi.order_buy_goods import MapiOrderBuyGoods
from dspt_api.util.mapi.card_auth import MapiCardAuth
from dspt_api.util.mapi.card_detail import MapiCardDetail
from dspt_api.util.mapi.card_buy_info import MapiCardBuyInfo
from dspt_api.util.mapi.order_tickets import MapiOrderTickets
from dspt_api.util.mapi.card_recharge_log import MapiCardRechargeLog
from dspt_api.util.mapi.order_list import MapiOrderList
from dspt_api.util.mapi.order_detail import MapiOrderDetail
from dspt_api.util.mapi.card_trade_query import MapiCardTradeQuery
from dspt_api.util.mapi.card_jifen_query import MapiCardJifenQuery
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}
print('suggest_params: ', data)
params = []
# 非会员
# 3.1.4 获取影厅座位图*
if api == 'cinema/hall-seats' and member_type == 'nonmember':
print('cinema/hall-seats')
params = ApiCinemaHallSeats(**data).get_suggestion()
# 3.1.6 获取放映计划列表(增量)*
if api == 'cinema/plays-increment' and member_type == 'nonmember':
print('cinema/plays-increment')
params = ApiCinemaPlaysIncrement(**data).get_suggestion()
# 3.1.7 获取某(几)个场次信息*
if api == 'play/info' and member_type == 'nonmember':
print('play/info')
params = ApiPlayInfo(**data).get_suggestion()
# 3.1.8 获取某场次座位状态*
if api == 'play/seat-status' and member_type == 'nonmember':
print('play/seat-status')
params = ApiPlaySeatStatus(**data).get_suggestion()
# 3.1.9 获取某场次座位状态(增量)*
if api == 'play/period-changed-seats' and member_type == 'nonmember':
print('play/period-changed-seats')
params = ApiPlayPeriodChangedSeats(**data).get_suggestion()
# 3.1.10 获取某(几)个场次座位售卖统计信息*
if api == 'play/seat-overview' and member_type == 'nonmember':
print('play/seat-overview')
params = ApiPlaySeatOverview(**data).get_suggestion()
# 3.2.2 获取单个卖品的图片信息*
if api == 'cinema/goods-pic' and member_type == 'nonmember':
print('cinema/goods-pic')
params = ApiCinemaGoodsPic(**data).get_suggestion()
# 3.3.1 座位锁定*
if api == 'seat/lock' and member_type == 'nonmember':
print('seat/lock')
params = ApiSeatLock(**data).get_suggestion()
# 3.3.2 座位解锁*
if api == 'seat/unlock' and member_type == 'nonmember':
print('seat/unlock')
params = ApiSeatUnlock(**data).get_suggestion()
# 3.3.3 混合下单(影票、卖品)*
if api == 'seat/lock-buy' and member_type == 'nonmember':
print('seat/lock-buy')
print("kwargs['sale_type']", kwargs['sale_type'])
print("kwargs['pay_type']", kwargs['pay_type'])
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = ApiSeatLockBuy(**data).get_suggestion()
# 3.3.4 单独下单(卖品)*
if api == 'order/buy-goods' and member_type == 'nonmember':
print('order/buy-goods')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = ApiOrderBuyGoods(**data).get_suggestion()
# 3.3.5 混合退单(影票、卖品)*
if api == 'ticket/refundv2' and member_type == 'nonmember':
print('ticket/refundv2')
params = ApiTicketRefundV2(**data).get_suggestion()
# 3.3.6 单独退单(影票)*
if api == 'ticket/refund' and member_type == 'nonmember':
print('ticket/refund')
params = ApiTicketRefund(**data).get_suggestion()
# 3.3.7 查询订单状态及取票码*
if api == 'order/ticket-flag' and member_type == 'nonmember':
print('order/ticket-flag')
params = ApiOrderTicketFlag(**data).get_suggestion()
# 3.3.8 查询订单状态*
if api == 'order/status' and member_type == 'nonmember':
print('order/status')
params = ApiOrderStatus(**data).get_suggestion()
# 3.3.9 查询订单信息(影票)*
if api == 'ticket/info' and member_type == 'nonmember':
print('ticket/info')
params = ApiTicketInfo(**data).get_suggestion()
# 3.3.10 查询订单信息(影票、卖品)*
if api == 'order/info' and member_type == 'nonmember':
print('order/info')
params = ApiOrderInfo(**data).get_suggestion()
# 3.3.11 查询影票信息(检票商闸机扫码)*
if api == 'ticket/info-by-qrcode' and member_type == 'nonmember':
print('ticket/info-by-qrcode')
params = ApiTicketInfoByQrcode(**data).get_suggestion()
# 3.3.12 确认出票(设置影票为已出票)*
if api == 'ticket/print' and member_type == 'nonmember':
print('ticket/print')
params = ApiTicketPrint(**data).get_suggestion()
# 3.3.13 卖品确认出货(扣减卖品库存量)*
if api == 'goods/deduct' and member_type == 'nonmember':
print('goods/deduct')
params = ApiGoodsDeduct(**data).get_suggestion()
# 3.4.2 联名卡开卡*
if api == 'ecard/regist' and member_type == 'nonmember':
print('ecard/regist')
params = ApiEcardRegist(**data).get_suggestion()
# 3.4.3 联名卡续卡*
if api == 'ecard/renew' and member_type == 'nonmember':
print('ecard/renew')
params = ApiEcardRenew(**data).get_suggestion()
# 3.4.4 获取联名卡详情*
if api == 'ecard/detail' and member_type == 'nonmember':
print('ecard/detail')
params = ApiEcardDetail(**data).get_suggestion()
# 3.4.5 联名卡开卡/续卡订单详情*
if api == 'ecard/order-detail' and member_type == 'nonmember':
print('ecard/order-detail')
params = ApiEcardOrderDetail(**data).get_suggestion()
# 3.4.6 获取座位的联名卡价格*
if api == 'ecard/seat-price' and member_type == 'nonmember':
print('ecard/seat-price')
params = ApiEcardSeatPrice(**data).get_suggestion()
# 3.4.8 联名卡退单*
if api == 'ecard/refund' and member_type == 'nonmember':
print('ecard/refund')
params = ApiEcardRefund(**data).get_suggestion()
# 3.6.1 添加券*
if api == 'seat/check-coupon' and member_type == 'nonmember':
print('seat/check-coupon')
print("kwargs['sale_type']", kwargs['sale_type'])
data['sale_type'] = kwargs['sale_type']
params = ApiSeatCheckCoupon(**data).get_suggestion()
# 会员
# 3.1.2 会员卡密码校验
if api == 'card/auth' and member_type == 'member':
print('card/auth')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardAuth(**data).get_suggestion()
# 3.1.3 查询会员卡的详细信息
if api == 'card/detail' and member_type == 'member':
print('card/detail')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardDetail(**data).get_suggestion()
# 3.1.4 获取会员卡某场次的购票信息
if api == 'card/buy-info' and member_type == 'member':
print('card/buy-info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardBuyInfo(**data).get_suggestion()
# 3.1.5 获取有效的未出票订单
if api == 'order/tickets' and member_type == 'member':
print('order/tickets')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiOrderTickets(**data).get_suggestion()
# 3.1.6 查询会员卡充值记录
if api == 'card/recharge-log' and member_type == 'member':
print('card/recharge-log')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardRechargeLog(**data).get_suggestion()
# 3.1.7 查询会员卡历史订单
if api == 'order/list' and member_type == 'member':
print('order/list')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiOrderList(**data).get_suggestion()
# 3.1.8 查询某条订单的详细信息
if api == 'order/detail' and member_type == 'member':
print('order/detail')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiOrderDetail(**data).get_suggestion()
# 3.1.10 会员卡消费流水查询
if api == 'card/trade-query' and member_type == 'member':
print('card/trade-query')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardTradeQuery(**data).get_suggestion()
# 3.1.12 会员卡积分记录查询
if api == 'card/jifen-query' and member_type == 'member':
print('card/jifen-query')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardJifenQuery(**data).get_suggestion()
# 3.2.4 获取影片详细信息
if api == 'movie/info' and member_type == 'member':
print('movie/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiMovieInfo(**data).get_suggestion()
# 3.2.5 获取场次详细信息
if api == 'play/info' and member_type == 'member':
print('play/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiPlayInfo(**data).get_suggestion()
# 3.2.6 获取场次座位状态
if api == 'play/seat-status' and member_type == 'member':
print('play/seat-status')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiPlaySeatStatus(**data).get_suggestion()
# 3.2.7 获取场次座位状态增量
if api == 'play/period-changed-seats' and member_type == 'member':
print('play/period-changed-seats')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiPlayPeriodChangedSeats(**data).get_suggestion()
# 3.2.8 获取场次座位售卖统计信息
if api == 'play/seat-overview' and member_type == 'member':
print('play/seat-overview')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiPlaySeatOverview(**data).get_suggestion()
# 3.3.2 获取卖品折扣信息
if api == 'card/get-goods-price' and member_type == 'member':
print('card/get-goods-price')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardGetGoodsPrice(**data).get_suggestion()
# 3.4.1 订票
if api == 'seat/book' and member_type == 'member':
print('seat/book')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiSeatBook(**data).get_suggestion()
# 3.4.2 会员卡充值
if api == 'card/recharge' and member_type == 'member':
print('card/recharge')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardRecharge(**data).get_suggestion()
# 3.4.3 座位锁定
if api == 'seat/lock' and member_type == 'member':
print('seat/lock')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiSeatLock(**data).get_suggestion()
# 3.4.4 座位锁定后获取票价
if api == 'seat/price' and member_type == 'member':
print('seat/price')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiSeatPrice(**data).get_suggestion()
# 3.4.5 座位解锁
if api == 'seat/unlock' and member_type == 'member':
print('seat/unlock')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiSeatUnlock(**data).get_suggestion()
# 3.4.6 混合下单(影票、卖品)
if api == 'seat/lock-buy' and member_type == 'member':
print('seat/lock-buy')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiSeatLockBuy(**data).get_suggestion()
# 3.4.7 单独下单(卖品)
if api == 'order/buy-goods' and member_type == 'member':
print('order/buy-goods')
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')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiTicketRefund(**data).get_suggestion()
# 3.4.9 查询订单状态及取票码
if api == 'order/ticket-flag' and member_type == 'member':
print('order/ticket-flag')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiOrderTicketFlag(**data).get_suggestion()
# 3.4.10 查询订单状态
if api == 'order/status' and member_type == 'member':
print('order/status')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiOrderStatus(**data).get_suggestion()
# 3.4.11 查询订单信息(影票)
if api == 'ticket/info' and member_type == 'member':
print('ticket/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiTicketInfo(**data).get_suggestion()
# 3.4.12 查询订单信息(影票、卖品)
if api == 'order/info' and member_type == 'member':
print('order/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiOrderInfo(**data).get_suggestion()
# 3.4.13 确认出票(设置影票为已出票)
if api == 'ticket/print' and member_type == 'member':
print('ticket/print')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiTicketPrint(**data).get_suggestion()
# 3.4.14 会员卡激活
if api == 'card/active' and member_type == 'member':
print('card/active')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardActive(**data).get_suggestion()
# 3.4.15 会员卡线上开卡
if api == 'card/regist' and member_type == 'member':
print('card/regist')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCardRegist(**data).get_suggestion()
# 3.5.1 充值明细对账
if api == 'cinema/recharge-bill' and member_type == 'member':
print('cinema/recharge-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCinemaRechargeBill(**data).get_suggestion()
# 3.5.2 影票对账
if api == 'cinema/ticket-bill' and member_type == 'member':
print('cinema/ticket-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCinemaTicketBill(**data).get_suggestion()
# 3.5.3 卖品对账
if api == 'cinema/goods-bill' and member_type == 'member':
print('cinema/goods-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
params = MapiCinemaGoodsBill(**data).get_suggestion()
# 3.5.4 发卡明细对账
if api == 'cinema/send-card-bill' and member_type == 'member':
print('cinema/send-card-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
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}
_timestamps = 0
# 非会员
# 3.1.4 获取影厅座位图*
if api == 'cinema/hall-seats' and member_type == 'nonmember':
print('cinema/hall-seats')
_timestamps = ApiCinemaHallSeats(**data).get_timestamp()
# 3.1.6 获取放映计划列表(增量)*
if api == 'cinema/plays-increment' and member_type == 'nonmember':
print('cinema/plays-increment')
_timestamps = ApiCinemaPlaysIncrement(**data).get_timestamp()
# 3.1.7 获取某(几)个场次信息*
if api == 'play/info' and member_type == 'nonmember':
print('play/info')
_timestamps = ApiPlayInfo(**data).get_timestamp()
# 3.1.8 获取某场次座位状态*
if api == 'play/seat-status' and member_type == 'nonmember':
print('play/seat-status')
_timestamps = ApiPlaySeatStatus(**data).get_timestamp()
# 3.1.9 获取某场次座位状态(增量)*
if api == 'play/period-changed-seats' and member_type == 'nonmember':
print('play/period-changed-seats')
_timestamps = ApiPlayPeriodChangedSeats(**data).get_timestamp()
# 3.1.10 获取某(几)个场次座位售卖统计信息*
if api == 'play/seat-overview' and member_type == 'nonmember':
print('play/seat-overview')
_timestamps = ApiPlaySeatOverview(**data).get_timestamp()
# 3.2.2 获取单个卖品的图片信息*
if api == 'cinema/goods-pic' and member_type == 'nonmember':
print('cinema/goods-pic')
_timestamps = ApiCinemaGoodsPic(**data).get_timestamp()
# 3.3.1 座位锁定*
if api == 'seat/lock' and member_type == 'nonmember':
print('seat/lock')
_timestamps = ApiSeatLock(**data).get_timestamp()
# 3.3.2 座位解锁*
if api == 'seat/unlock' and member_type == 'nonmember':
print('seat/unlock')
_timestamps = ApiSeatUnlock(**data).get_timestamp()
# 3.3.3 混合下单(影票、卖品)*
if api == 'seat/lock-buy' and member_type == 'nonmember':
print('seat/lock-buy')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = ApiSeatLockBuy(**data).get_timestamp()
# 3.3.4 单独下单(卖品)*
if api == 'order/buy-goods' and member_type == 'nonmember':
print('order/buy-goods')
_timestamps = ApiOrderBuyGoods(**data).get_timestamp()
# 3.3.5 混合退单(影票、卖品)*
if api == 'ticket/refundv2' and member_type == 'nonmember':
print('ticket/refundv2')
_timestamps = ApiTicketRefundV2(**data).get_timestamp()
# 3.3.6 单独退单(影票)*
if api == 'ticket/refund' and member_type == 'nonmember':
print('ticket/refund')
_timestamps = ApiTicketRefund(**data).get_timestamp()
# 3.3.7 查询订单状态及取票码*
if api == 'order/ticket-flag' and member_type == 'nonmember':
print('order/ticket-flag')
_timestamps = ApiOrderTicketFlag(**data).get_timestamp()
# 3.3.8 查询订单状态*
if api == 'order/status' and member_type == 'nonmember':
print('order/status')
_timestamps = ApiOrderStatus(**data).get_timestamp()
# 3.3.9 查询订单信息(影票)*
if api == 'ticket/info' and member_type == 'nonmember':
print('ticket/info')
_timestamps = ApiTicketInfo(**data).get_timestamp()
# 3.3.10 查询订单信息(影票、卖品)*
if api == 'order/info' and member_type == 'nonmember':
print('order/info')
_timestamps = ApiOrderInfo(**data).get_timestamp()
# 3.3.11 查询影票信息(检票商闸机扫码)*
if api == 'ticket/info-by-qrcode' and member_type == 'nonmember':
print('ticket/info-by-qrcode')
_timestamps = ApiTicketInfoByQrcode(**data).get_timestamp()
# 3.3.12 确认出票(设置影票为已出票)*
if api == 'ticket/print' and member_type == 'nonmember':
print('ticket/print')
_timestamps = ApiTicketPrint(**data).get_timestamp()
# 3.3.13 卖品确认出货(扣减卖品库存量)*
if api == 'goods/deduct' and member_type == 'nonmember':
print('goods/deduct')
_timestamps = ApiGoodsDeduct(**data).get_timestamp()
# 3.4.2 联名卡开卡*
if api == 'ecard/regist' and member_type == 'nonmember':
print('ecard/regist')
_timestamps = ApiEcardRegist(**data).get_timestamp()
# 3.4.3 联名卡续卡*
if api == 'ecard/renew' and member_type == 'nonmember':
print('ecard/renew')
_timestamps = ApiEcardRenew(**data).get_timestamp()
# 3.4.4 获取联名卡详情*
if api == 'ecard/detail' and member_type == 'nonmember':
print('ecard/detail')
_timestamps = ApiEcardDetail(**data).get_timestamp()
# 3.4.5 联名卡开卡/续卡订单详情*
if api == 'ecard/order-detail' and member_type == 'nonmember':
print('ecard/order-detail')
_timestamps = ApiEcardOrderDetail(**data).get_timestamp()
# 3.4.6 获取座位的联名卡价格*
if api == 'ecard/seat-price' and member_type == 'nonmember':
print('ecard/seat-price')
_timestamps = ApiEcardSeatPrice(**data).get_timestamp()
# 3.4.8 联名卡退单*
if api == 'ecard/refund' and member_type == 'nonmember':
print('ecard/refund')
_timestamps = ApiEcardRefund(**data).get_timestamp()
# 3.6.1 添加券*
if api == 'seat/check-coupon' and member_type == 'nonmember':
print('seat/check-coupon')
print("kwargs['sale_type']", kwargs['sale_type'])
data['sale_type'] = kwargs['sale_type']
_timestamps = ApiSeatCheckCoupon(**data).get_timestamp()
# 会员
# 3.1.2 会员卡密码校验
if api == 'card/auth' and member_type == 'member':
print('card/auth')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardAuth(**data).get_timestamp()
# 3.1.3 查询会员卡的详细信息
if api == 'card/detail' and member_type == 'member':
print('card/detail')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardDetail(**data).get_timestamp()
# 3.1.4 获取会员卡某场次的购票信息
if api == 'card/buy-info' and member_type == 'member':
print('card/buy-info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardBuyInfo(**data).get_timestamp()
# 3.1.5 获取有效的未出票订单
if api == 'order/tickets' and member_type == 'member':
print('order/tickets')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiOrderTickets(**data).get_timestamp()
# 3.1.6 查询会员卡充值记录
if api == 'card/recharge-log' and member_type == 'member':
print('card/recharge-log')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardRechargeLog(**data).get_timestamp()
# 3.1.7 查询会员卡历史订单
if api == 'order/list' and member_type == 'member':
print('order/list')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiOrderList(**data).get_timestamp()
# 3.1.8 查询某条订单的详细信息
if api == 'order/detail' and member_type == 'member':
print('order/detail')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiOrderDetail(**data).get_timestamp()
# 3.1.10 会员卡消费流水查询
if api == 'card/trade-query' and member_type == 'member':
print('card/trade-query')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardTradeQuery(**data).get_timestamp()
# 3.1.12 会员卡积分记录查询
if api == 'card/jifen-query' and member_type == 'member':
print('card/jifen-query')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardJifenQuery(**data).get_timestamp()
# 3.2.4 获取影片详细信息
if api == 'movie/info' and member_type == 'member':
print('movie/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiMovieInfo(**data).get_timestamp()
# 3.2.5 获取场次详细信息
if api == 'play/info' and member_type == 'member':
print('play/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiPlayInfo(**data).get_timestamp()
# 3.2.6 获取场次座位状态
if api == 'play/seat-status' and member_type == 'member':
print('play/seat-status')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiPlaySeatStatus(**data).get_timestamp()
# 3.2.7 获取场次座位状态增量
if api == 'play/period-changed-seats' and member_type == 'member':
print('play/period-changed-seats')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiPlayPeriodChangedSeats(**data).get_timestamp()
# 3.2.8 获取场次座位售卖统计信息
if api == 'play/seat-overview' and member_type == 'member':
print('play/seat-overview')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiPlaySeatOverview(**data).get_timestamp()
# 3.3.2 获取卖品折扣信息
if api == 'card/get-goods-price' and member_type == 'member':
print('card/get-goods-price')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardGetGoodsPrice(**data).get_timestamp()
# 3.4.1 订票
if api == 'seat/book' and member_type == 'member':
print('seat/book')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiSeatBook(**data).get_timestamp()
# 3.4.2 会员卡充值
if api == 'card/recharge' and member_type == 'member':
print('card/recharge')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardRecharge(**data).get_timestamp()
# 3.4.3 座位锁定
if api == 'seat/lock' and member_type == 'member':
print('seat/lock')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiSeatLock(**data).get_timestamp()
# 3.4.4 座位锁定后获取票价
if api == 'seat/price' and member_type == 'member':
print('seat/price')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiSeatPrice(**data).get_timestamp()
# 3.4.5 座位解锁
if api == 'seat/unlock' and member_type == 'member':
print('seat/unlock')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiSeatUnlock(**data).get_timestamp()
# 3.4.6 混合下单(影票、卖品)
if api == 'seat/lock-buy' and member_type == 'member':
print('seat/lock-buy')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiSeatLockBuy(**data).get_timestamp()
# 3.4.7 单独下单(卖品)
if api == 'order/buy-goods' and member_type == 'member':
print('order/buy-goods')
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')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiTicketRefund(**data).get_timestamp()
# 3.4.9 查询订单状态及取票码
if api == 'order/ticket-flag' and member_type == 'member':
print('order/ticket-flag')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiOrderTicketFlag(**data).get_timestamp()
# 3.4.10 查询订单状态
if api == 'order/status' and member_type == 'member':
print('order/status')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiOrderStatus(**data).get_timestamp()
# 3.4.11 查询订单信息(影票)
if api == 'ticket/info' and member_type == 'member':
print('ticket/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiTicketInfo(**data).get_timestamp()
# 3.4.12 查询订单信息(影票、卖品)
if api == 'order/info' and member_type == 'member':
print('order/info')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiOrderInfo(**data).get_timestamp()
# 3.4.13 确认出票(设置影票为已出票)
if api == 'ticket/print' and member_type == 'member':
print('ticket/print')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiTicketPrint(**data).get_timestamp()
# 3.4.14 会员卡激活
if api == 'card/active' and member_type == 'member':
print('card/active')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardActive(**data).get_timestamp()
# 3.4.15 会员卡线上开卡
if api == 'card/regist' and member_type == 'member':
print('card/regist')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCardRegist(**data).get_timestamp()
# 3.5.1 充值明细对账
if api == 'cinema/recharge-bill' and member_type == 'member':
print('cinema/recharge-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCinemaRechargeBill(**data).get_timestamp()
# 3.5.2 影票对账
if api == 'cinema/ticket-bill' and member_type == 'member':
print('cinema/ticket-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCinemaTicketBill(**data).get_timestamp()
# 3.5.3 卖品对账
if api == 'cinema/goods-bill' and member_type == 'member':
print('cinema/goods-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCinemaGoodsBill(**data).get_timestamp()
# 3.5.4 发卡明细对账
if api == 'cinema/send-card-bill' and member_type == 'member':
print('cinema/send-card-bill')
data['sale_type'] = kwargs['sale_type']
data['pay_type'] = kwargs['pay_type']
_timestamps = MapiCinemaSendCardBill(**data).get_timestamp()
return _timestamps

@ -0,0 +1,27 @@
import xml.etree.ElementTree as ET
def parse_dict_to_xml(_root, data):
for key, val in data.items():
child = ET.SubElement(_root, key)
if isinstance(val, str) or isinstance(val, int) or isinstance(val, float):
child.text = str(val)
else:
parse_dict_to_xml(child, val)
return _root
def get_xml(_data):
root = ET.Element('root')
xml_data = parse_dict_to_xml(root, _data)
xml_str = ET.tostring(xml_data, encoding='utf8', method='xml')
return xml_str
if __name__ == '__main__':
# failed_resp_data = {'url': '请检查foramt、pid参数', 'sig': ''}
# root = ET.Element('root')
# xml_data = parse_dict_to_xml(root, failed_resp_data)
# xml_str = ET.tostring(xml_data, encoding='utf8', method='xml')
# print(xml_str)
pass

@ -0,0 +1,51 @@
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_card import get_card, get_card_level_val
from dspt_api.util.general.handle_params import add_param
import time
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num)
# partner_order_id
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)
# money
active_card_pay = '自动获取激活费用,请手动输入!'
if card_result:
active_card_pay = get_card_level_val(self.env, self.pid, self.cid, card_num, 'activeCardFee')
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)

@ -0,0 +1,42 @@
from dspt_api.util.general.handle_card import get_card
from dspt_api.util.general.handle_params import add_param
import hashlib
import time
class MapiCardAuth:
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000))
# password
add_param(self.return_data, 'password', self.pay_type['card_password'] , timestamp=int(time.time() * 1000))
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,49 @@
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 MapiCardBuyInfo:
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000))
# 获取play_id 和 play_update_time
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
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)
play_id = '请手动输入参数,检查相关接口返回值:3.2.3 获取放映计划列表'
if result_play:
play_id = seat_price_from_play['id']
add_param(self.return_data, 'play_id', play_id, timestamp=int(time.time() * 1000))
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,5 @@
from dspt_api.util.mapi.card_auth import MapiCardAuth
class MapiCardDetail(MapiCardAuth):
pass

@ -0,0 +1,57 @@
import json
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.handle_params import add_param
from dspt_api.util.general.handle_card import get_card
from dspt_api.util.general.handle_goods import general_goods_field_member, change_goods_price_str
class MapiCardGetGoodsPrice:
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)
# card & goods
self.handle()
print(__name__, self.return_data)
return self.return_data
def get_timestamp(self):
return self.handle()
def handle(self):
# 获取会员卡号
card_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num)
# goods
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
request_api_play_seat_status = {'name': '3.3.1 获取卖品列表', 'path': 'cinema/goods'}
redis_key_api_play_seat_status = f'{redis_key_prefix}_{request_api_play_seat_status["path"]}'
result, _format, _goods_data, _timestamp = get_data_from_redis(redis_key_api_play_seat_status)
goods = '请手动输入参数,或先请求接口:3.3.1 获取卖品列表'
if result:
goods_field_list, total_goods_val = general_goods_field_member(_goods_data, self.user_data)
goods = json.dumps(change_goods_price_str(goods_field_list))
add_param(self.return_data,'goods', goods)
return _timestamp if result else 0

@ -0,0 +1,45 @@
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 MapiCardJifenQuery:
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000))
# stime and etime
start_date, end_date = get_stime_etime('date')
add_param(self.return_data, 'start', start_date)
add_param(self.return_data, 'end', end_date)
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,51 @@
from dspt_api.util.general.get_order_num import general_order_num
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
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num)
# partner_deposit_id
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)
# money
recharge_pay = get_card_val(self.env, self.pid, self.cid, card_num, 'minAddMoney')
if not recharge_pay:
recharge_pay = '自动获取最低充值金额失败,请手动输入!'
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)

@ -0,0 +1,5 @@
from dspt_api.util.mapi.card_auth import MapiCardAuth
class MapiCardRechargeLog(MapiCardAuth):
pass

@ -0,0 +1,62 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_params import add_param
import json
import time
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
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)
# check_mobile
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"]}'
result_card_level, _format_card_level, data_card_level, _timestamp_card_level = get_data_from_redis(
redis_key_api_card_level)
card_info = '请手动输入参数,或先请求接口:3.1.1 获取影院卡等级规则'
if result_card_level:
card_info = {'password': self.pay_type['card_password'],
'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) if result_card_level else card_info)
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,44 @@
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 MapiCardTradeQuery:
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000))
# stime and etime
start_date, end_date = get_stime_etime('time')
add_param(self.return_data, 'stime', start_date)
add_param(self.return_data, 'etime', end_date)
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,4 @@
from dspt_api.util.mapi.cinema_recharge_bill import MapiCinemaRechargeBill
class MapiCinemaGoodsBill(MapiCinemaRechargeBill):
pass

@ -0,0 +1,40 @@
from dspt_api.util.general.handle_time import get_stime_etime
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)

@ -0,0 +1,4 @@
from dspt_api.util.mapi.cinema_recharge_bill import MapiCinemaRechargeBill
class MapiCinemaSendCardBill(MapiCinemaRechargeBill):
pass

@ -0,0 +1,4 @@
from dspt_api.util.mapi.cinema_recharge_bill import MapiCinemaRechargeBill
class MapiCinemaTicketBill(MapiCinemaRechargeBill):
pass

@ -0,0 +1,45 @@
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.handle_params import add_param
import time
class MapiMovieInfo:
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)
# mid
redis_key_prefix = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}'
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)
mid = '请手动输入参数,检查相关接口返回值:3.2.3 获取放映计划列表'
if result_play:
mid = seat_price_from_play['movieInfo'][0]['cineMovieId']
add_param(self.return_data, 'mid', mid, timestamp=int(time.time() * 1000))
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,84 @@
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 json
class MapiOrderBuyGoods:
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num)
# mobile
add_param(self.return_data, 'mobile', '18688886666', timestamp=1000000000000)
# partner_buy_ticket_id
partner_buy_ticket_id = general_order_num('BUY_G', self.api, self.member_type, self.ip, self.env, self.pid,
self.cid)
add_param(self.return_data, 'partner_buy_ticket_id', partner_buy_ticket_id)
self.handle(card_num)
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)
def handle(self, card_num):
_third_pay = 0
if self.sale_type == 'goods':
# goods & goods_card_balance_pay & goods_cash
_good_result, _goods_field, _goods_card_balance_pay, _goods_cash, _third_pay, _goods_timestamp = general_goods_params_member(
self.user_data, self.pay_type, card_num, _third_pay)
print('general_goods_params_member', _good_result, _goods_field, _goods_card_balance_pay, _goods_cash,
_third_pay, _goods_timestamp)
goods = '请手动输入参数,或先请求接口:3.3.1 获取卖品列表'
goods_card_balance_pay = '请手动输入参数,或先请求接口:3.3.1 获取卖品列表'
goods_cash = '请手动输入参数,或先请求接口:3.3.1 获取卖品列表'
if (not _good_result) and _goods_field is not None:
goods = _goods_field
goods_card_balance_pay = _goods_card_balance_pay
goods_cash = _goods_cash
if _good_result:
goods = json.dumps(_goods_field)
goods_card_balance_pay = _goods_card_balance_pay
goods_cash = _goods_cash
add_param(self.return_data, 'goods', goods, timestamp=_goods_timestamp)
add_param(self.return_data, 'goods_card_balance_pay', goods_card_balance_pay, timestamp=_goods_timestamp)
add_param(self.return_data, 'goods_cash', goods_cash, timestamp=_goods_timestamp)
add_param(self.return_data, 'delivery_type', '2', is_checked=False, timestamp=_goods_timestamp)
add_param(self.return_data, 'delivery_location', '1号厅', is_checked=False, timestamp=_goods_timestamp)
add_param(self.return_data, 'delivery_appoint_time',
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() + 5 * 60)), is_checked=False,
timestamp=_goods_timestamp)
add_param(self.return_data, 'contact_number', '18688886666', is_checked=False, timestamp=_goods_timestamp)
add_param(self.return_data, 't3d_pay_amount', _third_pay, timestamp=_goods_timestamp)

@ -0,0 +1,52 @@
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 MapiOrderDetail:
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_result, card_num = get_card(self.ip, self.env, self.pid, self.cid, self.pay_type['card_num'])
add_param(self.return_data, 'card', card_num, timestamp=int(time.time() * 1000))
# order_id
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)
order_id = '请手动输入参数,检查相关接口返回值:3.4.6 混合下单(影票、卖品)'
if result_buy:
order_id = data_buy['ticketFlag1'] + data_buy['ticketFlag2']
add_param(self.return_data, 'order_id', order_id)
#type
add_param(self.return_data, 'type', 'sell')
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,70 @@
from dspt_api.util.general.handle_redis import get_data_from_redis, get_timestamp_from_redis
from dspt_api.util.general.handle_params import add_param
import time
class MapiOrderInfo:
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_lock_buy = {'name': '3.4.6 混合下单(影票、卖品)', 'path': 'seat/lock-buy'}
redis_key_api_lock_buy = f'{redis_key_prefix}_{request_api_lock_buy["path"]}'
timestamp_lock_buy = get_timestamp_from_redis(redis_key_api_lock_buy)
result_lock_buy, _format_lock_buy, data_lock_buy, _timestamp_lock_buy = get_data_from_redis(
redis_key_api_lock_buy)
# 卖品
request_api_buy_goods = {'name': '3.4.7 单独下单(卖品)', 'path': 'order/buy-goods'}
redis_key_api_buy_goods = f'{redis_key_prefix}_{request_api_buy_goods["path"]}'
timestamp_buy_goods = get_timestamp_from_redis(redis_key_api_buy_goods)
result_buy_goods, _format_buy_goods, data_buy_goods, _timestamp_buy_goods = get_data_from_redis(
redis_key_api_buy_goods)
ticket_flag1 = '请手动输入参数,检查相关接口返回值:3.4.6 混合下单(影票、卖品) 或 3.4.7 单独下单(卖品)'
ticket_flag2 = '请手动输入参数,检查相关接口返回值:3.4.6 混合下单(影票、卖品) 或 3.4.7 单独下单(卖品)'
if result_lock_buy and result_buy_goods:
if int(timestamp_lock_buy) > int(timestamp_buy_goods):
ticket_flag1 = data_lock_buy['ticketFlag1']
ticket_flag2 = data_lock_buy['ticketFlag2']
else:
ticket_flag1 = data_buy_goods['ticketFlag1']
ticket_flag2 = data_buy_goods['ticketFlag2']
elif result_lock_buy:
ticket_flag1 = data_lock_buy['ticketFlag1']
ticket_flag2 = data_lock_buy['ticketFlag2']
elif result_buy_goods:
ticket_flag1 = data_buy_goods['ticketFlag1']
ticket_flag2 = data_buy_goods['ticketFlag2']
add_param(self.return_data, 'ticket_flag1', ticket_flag1)
add_param(self.return_data, 'ticket_flag2', ticket_flag2)
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

@ -0,0 +1,5 @@
from dspt_api.util.mapi.card_auth import MapiCardAuth
class MapiOrderList(MapiCardAuth):
pass

@ -0,0 +1,60 @@
from dspt_api.util.general.handle_redis import get_param_from_redis, get_timestamp_from_redis
from dspt_api.util.general.handle_params import add_param
import time
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"]}'
timestamp_lock_buy = get_timestamp_from_redis(redis_key_api_lock_buy)
param_lock_buy = get_param_from_redis(redis_key_api_lock_buy)
# 卖品
request_api_buy_goods = {'name': '3.4.7 单独下单(卖品)', 'path': 'order/buy-goods'}
redis_key_api_buy_goods = f'{redis_key_prefix}_{request_api_buy_goods["path"]}'
timestamp_buy_goods = get_timestamp_from_redis(redis_key_api_buy_goods)
param_buy_goods = get_param_from_redis(redis_key_api_buy_goods)
partner_order_id = '请手动输入参数,或先请求接口3.4.6 混合下单(影票、卖品)或 3.4.7 单独下单(卖品)'
if timestamp_lock_buy and timestamp_buy_goods:
if int(timestamp_lock_buy) > int(timestamp_buy_goods):
partner_order_id = param_lock_buy['partner_buy_ticket_id']
else:
partner_order_id = param_buy_goods['partner_buy_ticket_id']
elif timestamp_lock_buy:
partner_order_id = param_lock_buy['partner_buy_ticket_id']
elif timestamp_buy_goods:
partner_order_id = param_buy_goods['partner_buy_ticket_id']
add_param(self.return_data, 'partner_order_id', partner_order_id)
print(__name__, self.return_data)
return self.return_data
@staticmethod
def get_timestamp():
return int(time.time() * 1000)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save