yhxx.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. # -*- coding: utf-8 -*-
  2. from fastapi import APIRouter, Depends, Request
  3. from fastapi.responses import PlainTextResponse
  4. from sqlalchemy.orm import Session
  5. from database import get_db, get_share_db
  6. from utils.sg_auth import *
  7. from utils.redis_util import *
  8. from models import *
  9. from utils import *
  10. from extensions import logger
  11. from config import settings
  12. router = APIRouter()
  13. # 获取登录态数据
  14. # https://dgmpaas.yuque.com/appshell/yst/bgo7tx?#sjJu1
  15. @router.post("/get_yst_user_info", response_class=PlainTextResponse)
  16. def get_yst_user_info(
  17. request: Request,
  18. x_tif_signature: str = Header(None),
  19. x_tif_nonce: str = Header(None),
  20. x_tif_timestamp: str = Header(None),
  21. x_tif_uid: str = Header(None),
  22. x_tif_uinfo: str = Header(None),
  23. x_tif_ext: str = Header(None),
  24. db: Session = Depends(get_db)
  25. ):
  26. '''
  27. return yst_user_info_response(json.dumps({
  28. "account_type": "human",
  29. "corp": {
  30. "level": "L2",
  31. "qyInfo": {
  32. "qymc": "茂名市石油化工有限公司",
  33. "qyjb": "规模以上",
  34. "qydz": "--"
  35. }
  36. },
  37. "tokenid": "ccb7fb65a9ca5a2d74c2afeed928c522"
  38. }))
  39. '''
  40. pass_token = settings.YST_PASS_TOKEN
  41. token_exception = TokenException()
  42. if x_tif_signature is None or x_tif_nonce is None or x_tif_timestamp is None or x_tif_uid is None or x_tif_uinfo is None or x_tif_ext is None:
  43. logger.error('========================>>>>>>>>>>>>>>>>>>>>>>> yst authentication err: 1')
  44. raise token_exception
  45. if authentication(x_tif_timestamp, pass_token, x_tif_nonce, x_tif_uid, x_tif_uinfo, x_tif_ext, x_tif_signature) == False:
  46. logger.error('========================>>>>>>>>>>>>>>>>>>>>>>> yst authentication err: 2')
  47. raise token_exception
  48. json_str = base64.b64decode(x_tif_ext)
  49. json_str = json_str.decode(encoding='utf-8')
  50. x_tif_ext = json.loads(json_str)
  51. logger.info('========================>>>>>>>>>>>>>>>>>>>>>>> yst authentication ok: {}', x_tif_ext)
  52. logger.info('========================>>>>>>>>>>>>>>>>>>>>>>> yst account_type: {}', x_tif_ext['account_type'])
  53. tokenid = x_tif_ext['tokenid']
  54. redis_key = "yst_token_" + tokenid
  55. redis_set_json(redis_key, x_tif_ext)
  56. corp = x_tif_ext["corp"]
  57. if corp is not None:
  58. # with get_share_db() as sharedb:
  59. row = db.query(ChemicalCompany).filter(ChemicalCompany.credit_code == corp["social_credit_code"]).first()
  60. if row is not None:
  61. qymc = row.company_name
  62. qyjb = row.safe_level
  63. qydz = row.formatted_address
  64. else:
  65. qymc = corp["name"]
  66. qyjb = "-"
  67. qydz = "-"
  68. corp = {
  69. "level": corp["level"],
  70. "qyInfo": {
  71. "qymc": qymc,
  72. "qyjb": qyjb,
  73. "qydz": qydz
  74. }
  75. }
  76. return yst_user_info_response(json.dumps({
  77. "account_type": x_tif_ext["account_type"],
  78. "corp": corp,
  79. "tokenid": tokenid
  80. }))
  81. # 用户信息查询接口
  82. @router.post('/query')
  83. def yhxx(
  84. request: Request,
  85. token: str,
  86. ext_info: str = Depends(yst_pass_ext),
  87. param: dict = Depends(yst_request_param),
  88. db: Session = Depends(get_db)
  89. ):
  90. sfzh = ext_info['cid']
  91. uuid_str = new_guid()
  92. '''
  93. if settings.IS_DEV == True:
  94. logger.info("使用测试身份证号 341181198809150011")
  95. sfzh = "341181198809150011"
  96. '''
  97. redis_key = "mmyj_yhxx_" + uuid_str
  98. redis_set_json(redis_key, {
  99. "custcode": "3101893742",
  100. "compcode": "compcode",
  101. "compname": "compname"
  102. })
  103. resp = {
  104. 'ret': 0,
  105. 'msg': '',
  106. 'data': {
  107. 'token': token,
  108. 'custcode':'3101893742',
  109. 'uuid': uuid_str,
  110. 'xm': xm_tuomin(ext_info['name']),
  111. 'zjlx':'居民身份证',
  112. 'zjhm': sfz_tuomin(sfzh),
  113. 'lxdh': ext_info['mobile']
  114. }
  115. }
  116. return yst_response(resp)
  117. req = GetCustCodeListByIdReq()
  118. req.custId = sfzh
  119. result = requestApi.getCustCodeListById(req)
  120. if result is None:
  121. return yst_response({
  122. "ret": 1,
  123. "msg": "提交到应用服务器失败"
  124. })
  125. if len(result['data']) == 0:
  126. resp = {
  127. 'ret': 1,
  128. 'msg': '您在梅州中燃没有燃气账户'
  129. }
  130. return yst_response(resp)
  131. redis_key = "ranqi_yhxx_" + uuid_str
  132. redis_set_json(redis_key, result['data'])
  133. return_data = []
  134. data = result['data']
  135. for n in data:
  136. return_data.append({
  137. 'token': token,
  138. 'custcode': n['custcode'],
  139. 'uuid': uuid_str,
  140. 'xm': xm_tuomin(ext_info['name']),
  141. 'zjlx':'居民身份证',
  142. 'zjhm': sfzh_tuomin(sfzh),
  143. 'lxdh': ext_info['mobile']
  144. })
  145. resp = {
  146. 'ret': 0,
  147. 'msg': '',
  148. 'data': return_data
  149. }
  150. return yst_response(resp)