yhxx.py 5.0 KB

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