hb_api.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. import traceback
  2. import flask
  3. import time
  4. import datetime
  5. import requests
  6. from flask import Blueprint
  7. from flask_cors import CORS
  8. from dateutil.relativedelta import relativedelta
  9. from logs.getlogs import *
  10. from spiders.hengbang.baojia.hb_bfjs import hb_calculation
  11. from spiders.hengbang.hebao.hb_hebao import HB_hebao
  12. from spiders.hengbang.yingxiang.hb_phoupload import photo_up
  13. from spiders.hengbang.baodan.hb_bdsearch import get_baodan
  14. from spiders.hengbang.guishu.hb_config import *
  15. from spiders.hengbang.guishu.hb_feichexian import get_feichexian
  16. from spiders.hengbang.baodan.hb_state import hb_Check
  17. hengbang=Blueprint('hb',__name__)
  18. CORS(hengbang, supports_credentials=True)
  19. @hengbang.route('/hb/login',methods=['post'])
  20. def hb_login():
  21. username = flask.request.json.get('username')
  22. pwd = flask.request.json.get('pwd')
  23. userinfo = {
  24. "username": username,
  25. 'pwd': pwd
  26. }
  27. ret=set_userinfo(userinfo)
  28. return ret,200, {'Content-Type': 'application/json'}
  29. @hengbang.route('/hb/bfjs',methods=['post'])
  30. def hb_bfjs():
  31. log_starttime = time.time()
  32. #车辆人员信息
  33. username=flask.request.json.get('username')
  34. modelCName = flask.request.json.get('carInfo').get('modelcname')
  35. engineNo = flask.request.json.get('carInfo').get('engineNo')
  36. vin = flask.request.json.get('carInfo').get('vinNo')
  37. licenseNo = flask.request.json.get('carInfo').get('licenseNo')
  38. seatCount = flask.request.json.get('carInfo').get('seatCount')
  39. purchasePrice = flask.request.json.get('carInfo').get('purchasePrice')
  40. identifyNumber=flask.request.json.get('ownerInfo').get('identifyNumber')
  41. vehicleUse=flask.request.json.get('carInfo').get('vehicleUse')
  42. #核定载质量
  43. limitLoad=flask.request.json.get('carInfo').get('limitLoad')
  44. cartype=flask.request.json.get('carInfo').get('cartype')
  45. uname = flask.request.json.get('ownerInfo').get('name')
  46. address = flask.request.json.get('ownerInfo').get('addr')
  47. phone_number = flask.request.json.get('ownerInfo').get('mobile')
  48. tb_identifyNumber = flask.request.json.get('policyHolderInfo').get('identifyNumber')
  49. tb_uname = flask.request.json.get('policyHolderInfo').get('name')
  50. tb_address = flask.request.json.get('policyHolderInfo').get('addr')
  51. tb_phone_number = flask.request.json.get('policyHolderInfo').get('mobile')
  52. bb_identifyNumber = flask.request.json.get('insuredPersonInfo').get('identifyNumber')
  53. bb_uname = flask.request.json.get('insuredPersonInfo').get('name')
  54. bb_address = flask.request.json.get('insuredPersonInfo').get('addr')
  55. bb_phone_number = flask.request.json.get('insuredPersonInfo').get('mobile')
  56. registerDate=flask.request.json.get('carInfo').get('registerDate')
  57. issueDate=flask.request.json.get('carInfo').get('issueDate')
  58. isTransfer=flask.request.json.get('carInfo').get('transferFlag')
  59. #脱保标识
  60. isOutOfInsurance=flask.request.json.get('carInfo').get('outOfInsurance')
  61. #非车险信息
  62. accidentalDriving=flask.request.json.get('accidentalDriving')
  63. #交强险、商业险是否选择。起始、结束时间默认参数
  64. jiaoqiang_chooseFlag = 'False'
  65. chesun_chooseFlag = 'False'
  66. shangye_chooseFlag='False'
  67. jiaoqiang_startDate = str(datetime.date.today() + relativedelta(days=1))+' 00:00:00'
  68. jiaoqiang_endDate = str(datetime.date.today() + relativedelta(years=1) - relativedelta(days=1))+' 00:00:00'
  69. chesun_startDate= str(datetime.date.today() + relativedelta(days=1))+' 00:00:00'
  70. chesun_endDate= str(datetime.date.today() + relativedelta(years=1) - relativedelta(days=1))+' 00:00:00'
  71. # 交强险、商业险是否选择。起始、结束时间传入参数
  72. riskList = flask.request.json.get('riskList')
  73. for i in riskList:
  74. if i.get('riskCode') == '0507':
  75. jiaoqiang_chooseFlag = 'on'
  76. jiaoqiang_startDate = i.get('startDate')
  77. jiaoqiang_startDate = jiaoqiang_startDate
  78. jiaoqiang_endDate = i.get('endDate')
  79. jiaoqiang_endDate = "".join(jiaoqiang_endDate)
  80. elif i.get('riskCode') == '0510':
  81. shangye_chooseFlag='on'
  82. chesun_startDate = i.get('startDate')
  83. chesun_startDate = "".join(chesun_startDate)
  84. chesun_endDate = i.get('endDate')
  85. chesun_endDate = "".join(chesun_endDate)
  86. #附加险默认参数
  87. sanzhe_chooseFlag='False'
  88. sanzhe_amount='10'
  89. sjzeren_chooseFlag='False'
  90. sjzeren_amount='30000'
  91. ckzeren_chooseFlag='False'
  92. ckzeren_amount='30000'
  93. huahen_chooseFlag='False'
  94. huahen_amount='2000'
  95. fujiachesun_chooseFlag='False'
  96. fujiachesun_amount='0.05'
  97. fujiasanzhe_chooseFlag = 'False'
  98. fujiasanzhe_amount = '0.05'
  99. fujiasiji_chooseFlag = 'False'
  100. fujiasiji_amount = '0.05'
  101. fujiachengke_chooseFlag = 'False'
  102. fujiachengke_amount = '0.05'
  103. fujia_jiejiari_chooseFlag = 'False'
  104. fujia_jiejiari_amount = '2000000'
  105. ybw_sanzhe_chooseFlag='False'
  106. ybw_sanzhe_amount='0'
  107. ybw_siji_chooseFlag='False'
  108. ybw_siji_amount='0'
  109. ybw_ck_chooseFlag='False'
  110. ybw_ck_amount='0'
  111. #附件险传入参数
  112. kindList = flask.request.json.get('kindList')
  113. for ii in kindList:
  114. if ii.get('kindCode')=='B':
  115. sanzhe_chooseFlag='on'
  116. sanzhe_amount=str(int(ii.get('amount')))
  117. elif ii.get('kindCode')=='A':
  118. chesun_chooseFlag = 'on'
  119. elif ii.get('kindCode')=='D3':
  120. sjzeren_chooseFlag = 'on'
  121. sjzeren_amount = ii.get('amount')
  122. elif ii.get('kindCode')=='D4':
  123. ckzeren_chooseFlag = 'on'
  124. ckzeren_amount = ii.get('unitAmount')
  125. elif ii.get('kindCode')=='L':
  126. huahen_chooseFlag = 'on'
  127. huahen_amount = ii.get('amount')
  128. elif ii.get('kindCode')=='MJ1':
  129. fujiachesun_chooseFlag = 'on'
  130. fujiachesun_amount = str(int(ii.get('deductibleRate'))/100)
  131. elif ii.get('kindCode')=='MJ2':
  132. fujiasanzhe_chooseFlag = 'on'
  133. fujiasanzhe_amount = str(int(ii.get('deductibleRate'))/100)
  134. elif ii.get('kindCode')=='MJ3':
  135. fujiasiji_chooseFlag = 'on'
  136. fujiasiji_amount = str(int(ii.get('deductibleRate'))/100)
  137. elif ii.get('kindCode')=='MJ4':
  138. fujiachengke_chooseFlag = 'on'
  139. fujiachengke_amount = str(int(ii.get('deductibleRate'))/100)
  140. elif ii.get('kindCode')=='BD':
  141. fujia_jiejiari_chooseFlag = 'on'
  142. fujia_jiejiari_amount = ii.get('amount')
  143. elif ii.get('kindCode') == 'SY_FJ_YBW1':
  144. ybw_sanzhe_chooseFlag = 'on'
  145. ybw_sanzhe_amount = ii.get('amount')
  146. elif ii.get('kindCode') == 'SY_FJ_YBW3':
  147. ybw_siji_chooseFlag = 'on'
  148. ybw_siji_amount = ii.get('amount')
  149. elif ii.get('kindCode') == 'SY_FJ_YBW2':
  150. ybw_ck_chooseFlag = 'on'
  151. ybw_ck_amount = ii.get('unitAmount')
  152. carinfo = hb_calculation(#token、车辆、人员信息
  153. username,modelCName,engineNo,vin,licenseNo,seatCount,purchasePrice,vehicleUse,limitLoad,cartype,
  154. identifyNumber, uname, address,phone_number,
  155. tb_identifyNumber, tb_uname, tb_address, tb_phone_number,
  156. bb_identifyNumber, bb_uname, bb_address, bb_phone_number,
  157. registerDate,issueDate,isTransfer,
  158. #交强险、商业险是否选择,起止日期信息
  159. jiaoqiang_chooseFlag,chesun_chooseFlag,jiaoqiang_startDate,jiaoqiang_endDate,chesun_startDate,
  160. chesun_endDate,shangye_chooseFlag,
  161. #三者责任险、价格,司机、乘客责任险、价格,划痕险、价格
  162. sanzhe_chooseFlag,sanzhe_amount,sjzeren_chooseFlag,sjzeren_amount,ckzeren_chooseFlag,ckzeren_amount,huahen_chooseFlag,huahen_amount,
  163. #附加险信息
  164. fujiachesun_chooseFlag,fujiachesun_amount ,fujiasanzhe_chooseFlag ,fujiasanzhe_amount ,
  165. fujiasiji_chooseFlag,fujiasiji_amount ,fujiachengke_chooseFlag ,fujiachengke_amount ,
  166. fujia_jiejiari_chooseFlag ,fujia_jiejiari_amount,
  167. ybw_sanzhe_chooseFlag, ybw_sanzhe_amount, ybw_siji_chooseFlag, ybw_siji_amount, ybw_ck_chooseFlag, ybw_ck_amount,
  168. #脱保车标识、非车险信息
  169. isOutOfInsurance,accidentalDriving
  170. )
  171. try:
  172. ret = carinfo.main()
  173. log_endtime = time.time()
  174. get_bfjslogger(hb_bj_log, log_endtime, log_starttime, '恒邦')
  175. return ret, 200, {'Content-Type': 'application/json'}
  176. except Exception as err:
  177. log_endtime = time.time()
  178. get_bfjslogger(hb_bj_log, log_endtime, log_starttime, '恒邦')
  179. get_errlogger(hb_bj_log, err, traceback.format_exc() + '-------------- \n')
  180. return {'code': 400, 'message': '程序异常'}, 200, {'Content-Type': 'application/json'}
  181. @hengbang.route('/hb/jiaofei', methods=['post'])
  182. def hb_jiaofei():
  183. log_starttime = time.time()
  184. plyappno = flask.request.json.get('plyappno')
  185. Hebao = HB_hebao(plyappno)
  186. try:
  187. ret = Hebao.main()
  188. log_endtime = time.time()
  189. get_hblogger(hb_hb_log, log_endtime, log_starttime, '恒邦')
  190. return ret, 200, {'Content-Type': 'application/json'}
  191. except Exception as err:
  192. log_endtime = time.time()
  193. get_bfjslogger(hb_hb_log, log_endtime, log_starttime, '恒邦')
  194. get_errlogger(hb_hb_log, err, traceback.format_exc() + '-------------- \n')
  195. return {'code': 400, 'message': '程序异常'}, 200, {'Content-Type': 'application/json'}
  196. @hengbang.route('/hb/yxsc',methods=['post'])
  197. def hb_yxsc():
  198. plyappno = flask.request.json.get('plyappno')
  199. photolist = flask.request.json.get('b64pho_list')
  200. ret=photo_up(plyappno,photolist).main()
  201. return ret, 200, {'Content-Type': 'application/json'}
  202. @hengbang.route('/hb/baodan',methods=['post'])
  203. def hb_baodan():
  204. plyappno = flask.request.json.get('plyappno')
  205. ret=get_baodan(plyappno).main()
  206. return ret, 200, {'Content-Type': 'application/json'}
  207. @hengbang.route('/hb/check',methods=['post'])
  208. def hb_check():
  209. plyappno = flask.request.json.get('plyappno')
  210. ret=hb_Check(plyappno).main()
  211. return ret, 200, {'Content-Type': 'application/json'}
  212. @hengbang.route('/hb/fcx',methods=['post'])
  213. def hb_get_fcx():
  214. username = flask.request.json.get('username')
  215. ret=get_feichexian(username)
  216. return ret, 200, {'Content-Type': 'application/json'}
  217. @hengbang.route('/hb/hb_bddownload',methods=['get'])
  218. def hb_bddownload():
  219. token=str(redis_conn.hget('hengbang','token'),'utf8')
  220. headers={
  221. 'Authorization':token,
  222. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
  223. }
  224. url =flask.request.args.get('values')
  225. filename=url[63:89]+'.pdf'
  226. res=requests.get(url=url,headers=headers)
  227. ret =res.content
  228. return ret , 200, {'Content-Type': 'application/pdf',
  229. 'Content-Disposition':'attachment;filename='+filename
  230. }