hb_bfjs.py 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355
  1. # *_* coding:utf-8 *_*
  2. import json
  3. import re
  4. import time
  5. import os
  6. import execjs
  7. import requests
  8. import ddddocr
  9. import base64
  10. from spiders.hengbang.guishu.hb_config import *
  11. from config import *
  12. class hb_calculation(object):
  13. def __init__( # token、车辆、人员信息
  14. self,username, modelCName, engineNo, vin, licenseNo,seatCount, purchasePrice,vehicleUse,limitLoad,completeKerbMass,cartype,energyType,enginedesc,
  15. identifyNumber, uname, address, phone_number,
  16. tb_identifyNumber, tb_uname, tb_address, tb_phone_number,
  17. bb_identifyNumber, bb_uname, bb_address, bb_phone_number,
  18. registerDate, issueDate, isTransfer,
  19. # 交强险、商业险是否选择,起止日期信息
  20. jiaoqiang_chooseFlag, chesun_chooseFlag, jiaoqiang_startDate, jiaoqiang_endDate, chesun_startDate,
  21. chesun_endDate, shangye_chooseFlag,
  22. # # 三者责任险、价格,司机、乘客责任险、价格,划痕险、价格
  23. sanzhe_chooseFlag, sanzhe_amount, sjzeren_chooseFlag, sjzeren_amount, ckzeren_chooseFlag, ckzeren_amount,
  24. huahen_chooseFlag, huahen_amount,
  25. # # 附加险信息
  26. fujiachesun_chooseFlag, fujiachesun_amount, fujiasanzhe_chooseFlag, fujiasanzhe_amount,
  27. fujiasiji_chooseFlag, fujiasiji_amount, fujiachengke_chooseFlag, fujiachengke_amount,
  28. fujia_jiejiari_chooseFlag, fujia_jiejiari_amount,
  29. ybw_sanzhe_chooseFlag, ybw_sanzhe_amount,
  30. ybw_siji_chooseFlag, ybw_siji_amount, ybw_ck_chooseFlag, ybw_ck_amount,
  31. #脱保车标识
  32. isOutOfInsurance,accidentalDriving
  33. ):
  34. self.username=username
  35. self.seat=seatCount
  36. self.uname = uname
  37. self.address = address
  38. self.phone_number = phone_number
  39. self.identifyNumber = str(identifyNumber)
  40. self.tb_identifyNumber = str(tb_identifyNumber)
  41. self.tb_uname = tb_uname
  42. self.tb_address = tb_address
  43. self.tb_phone_number = tb_phone_number
  44. self.bb_identifyNumber = str(bb_identifyNumber)
  45. self.bb_uname = bb_uname
  46. self.bb_address = bb_address
  47. self.bb_phone_number = bb_phone_number
  48. self.energyType=energyType
  49. self.enginedesc=enginedesc
  50. self.token=None
  51. self.headers =None
  52. self.modelCName = modelCName.replace('牌', '')
  53. self.engineNo = engineNo
  54. self.vin = vin
  55. self.licenseNo = licenseNo
  56. self.purchasePrice = purchasePrice
  57. if limitLoad:
  58. self.limitLoad=limitLoad
  59. else:
  60. self.limitLoad=''
  61. self.completeKerbMass=completeKerbMass
  62. self.cartype=cartype
  63. self.vehicleUse=vehicleUse
  64. if self.vehicleUse=='08' or self.vehicleUse=='04':
  65. self.carKindCode='200'
  66. else:
  67. self.carKindCode = '100'
  68. #usenatureCode营业01 非营业02
  69. #carUseType车辆用途 01家庭自用 08营业货运
  70. if self.vehicleUse=='04':
  71. self.usenatureCode='01'
  72. self.carUseType='08'
  73. else:
  74. self.usenatureCode='02'
  75. self.carUseType='01'
  76. # 是否过户
  77. self.isTransfer = isTransfer
  78. self.registerDate = registerDate
  79. self.issueDate = issueDate
  80. # 保险起止日期
  81. self.jiaoqiang_chooseFlag = jiaoqiang_chooseFlag
  82. self.chesun_chooseFlag = chesun_chooseFlag
  83. self.shangye_chooseFlag = shangye_chooseFlag
  84. self.jiaoqiang_startDate = jiaoqiang_startDate
  85. self.jiaoqiang_endDate = jiaoqiang_endDate
  86. self.chesun_startDate = chesun_startDate
  87. self.chesun_endDate = chesun_endDate
  88. # self.outofwarrantytype = ''
  89. self.carInsureItem = None
  90. self.carInsureRiskRelatedParty = None
  91. self.carInsureRelatedParty = None
  92. self.carinfo = None
  93. self.plyappno = None
  94. self.actualValue = None
  95. self.json_data = None
  96. self.JQres = ''
  97. self.JQres_beta=''
  98. self.SYres = ''
  99. self.SYres_beta = ''
  100. self.bj_response = None
  101. self.risktype = None
  102. # 商业险选择信息
  103. self.sanzhe_chooseFlag = sanzhe_chooseFlag
  104. self.sanzhe_amount = sanzhe_amount
  105. self.sjzeren_chooseFlag = sjzeren_chooseFlag
  106. self.sjzeren_amount = sjzeren_amount
  107. self.ckzeren_chooseFlag = ckzeren_chooseFlag
  108. self.ckzeren_amount = ckzeren_amount
  109. self.huahen_chooseFlag = huahen_chooseFlag
  110. self.huahen_amount = huahen_amount
  111. # 附加险选择信息
  112. self.fujiachesun_chooseFlag = fujiachesun_chooseFlag
  113. self.fujiachesun_amount = fujiachesun_amount
  114. self.fujiasanzhe_chooseFlag = fujiasanzhe_chooseFlag
  115. self.fujiasanzhe_amount = fujiasanzhe_amount
  116. self.fujiasiji_chooseFlag = fujiasiji_chooseFlag
  117. self.fujiasiji_amount = fujiasiji_amount
  118. self.fujiachengke_chooseFlag = fujiachengke_chooseFlag
  119. self.fujiachengke_amount = fujiachengke_amount
  120. self.fujia_jiejiari_chooseFlag = fujia_jiejiari_chooseFlag
  121. self.fujia_jiejiari_amount = fujia_jiejiari_amount
  122. # 医保外
  123. self.ybw_sanzhe_chooseFlag = ybw_sanzhe_chooseFlag
  124. self.ybw_sanzhe_amount = ybw_sanzhe_amount
  125. self.ybw_siji_chooseFlag = ybw_siji_chooseFlag
  126. self.ybw_siji_amount = ybw_siji_amount
  127. self.ybw_ck_chooseFlag = ybw_ck_chooseFlag
  128. self.ybw_ck_amount = ybw_ck_amount
  129. # 附加险价格默认值
  130. self.csx = 0.0
  131. self.szx = 0.0
  132. self.cssj = 0.0
  133. self.csck = 0.0
  134. self.hhx = 0.0
  135. self.jjr = 0.0
  136. self.fjcs = 0.0
  137. self.fjsz = 0.0
  138. self.fjsj = 0.0
  139. self.fjck = 0.0
  140. self.ybwsz_price = 0.0
  141. self.ybwsj_price = 0.0
  142. self.ybwck_price = 0.0
  143. self.cs_amount=0.0
  144. self.cftb_message=None
  145. self.js_code=open(js_path+'hengbang/get_utctime.js','r',encoding='utf8').read()
  146. self.message=None
  147. self.jq_repeatinfo=''
  148. self.sy_repeatinfo=''
  149. #脱保标识
  150. # if isOutOfInsurance==True:
  151. # self.isOutOfInsurance='N'
  152. # else:
  153. # self.isOutOfInsurance=''
  154. self.isOutOfInsurance=''
  155. #非车险信息
  156. self.accidentalDriving=accidentalDriving
  157. #生成订单号错误信息
  158. self.quoteimmediately_info=''
  159. self.companyCode=''
  160. def get_bjdata(self,x):
  161. data=execjs.compile(open(js_path+'hengbang/decrypt.js','r',encoding='utf8').read()).call('decrypt',x)
  162. return data
  163. def get_actualvalue(self,beginDate):
  164. params = {
  165. 'beginDate': beginDate,
  166. 'riskCode': '0808',
  167. 'carKindCode': self.carKindCode,
  168. 'enrollDate': self.get_utctime(self.registerDate),
  169. 'purchasePrice': str(self.carinfo.get('purchasePriceNotTax')),
  170. 'carUseType': self.carUseType,
  171. 'seatCount': str(self.seat),
  172. 'tonCount': self.limitLoad,
  173. 'useNatureCode': self.usenatureCode,
  174. 'energyType': '0' if self.energyType=="0" or self.energyType=='4' else '1',
  175. }
  176. response = requests.get('https://car.hbins.com.cn/backstage/api/coredblink/depreciationrate',
  177. headers=self.headers,
  178. params=params)
  179. self.actualValue = response.text
  180. def get_utctime(self,x):
  181. ret=execjs.compile(self.js_code).call('get_utc',x)
  182. return ret
  183. def get_time(self,x):
  184. ret = execjs.compile(self.js_code).call('get_time', x)
  185. ret=ret.replace('T',' ').replace('+08:00','')
  186. return ret
  187. def check_login(self):
  188. # redis取出token
  189. self.token=str(redis_conn.hget('hengbang_'+self.username,'token'),'utf8')
  190. if self.token=='':
  191. self.token = '用户名、密码错误'
  192. else:
  193. self.headers = {
  194. "Content-Type": "application/json;charset=UTF-8",
  195. 'Authorization': self.token,
  196. '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'
  197. }
  198. params = {
  199. "sysCategory": "2",
  200. "resourceType": "HBXSH"
  201. }
  202. response = requests.get('https://car.hbins.com.cn/intermarket/api/userinfo/'+self.username, params=params,
  203. headers=self.headers)
  204. self.companyCode="".join(re.findall(r'COMPANYCODE" : "(.*?)"',response.text))
  205. if '登录失效' in response.text:
  206. get_userinfo(self.username)
  207. self.check_login()
  208. def get_fcxinfo(self,res):
  209. if self.accidentalDriving:
  210. res['accidentEpolicyFlag']='Y'
  211. if '1座' in self.accidentalDriving:
  212. res['drivingtype'] = "C1-小型汽车/C2/C3"
  213. else:
  214. res['drivingtype'] =""
  215. if self.shangye_chooseFlag=='on':
  216. res['begintimeAccident']=self.get_utctime(self.chesun_startDate)
  217. else:
  218. res['begintimeAccident'] = self.get_utctime(self.jiaoqiang_startDate)
  219. if self.uname==self.tb_uname:
  220. res['relationCarOwner']='a'
  221. else:
  222. res['relationCarOwner']='d'
  223. self.accidentalDriving['policycode'] = None
  224. self.accidentalDriving['ifdefault']=True
  225. self.accidentalDriving['proposalnostatus'] = None
  226. self.accidentalDriving['proposalnoinfo'] = None
  227. self.accidentalDriving['familyinsureitem'] = None
  228. self.accidentalDriving['drivingtype'] = None
  229. self.accidentalDriving['relationcarowner'] = None
  230. if self.accidentalDriving.get('ifDefault')==False:
  231. del self.accidentalDriving['policyCode']
  232. del self.accidentalDriving['ifDefault']
  233. del self.accidentalDriving['proposalnoStatus']
  234. del self.accidentalDriving['proposalnoInfo']
  235. del self.accidentalDriving['familyInsureItem']
  236. del self.accidentalDriving['drivingType']
  237. del self.accidentalDriving['relationCarOwner']
  238. res['accidentInsuranceList']=[self.accidentalDriving]
  239. return res
  240. else:
  241. return res
  242. #获取车辆信息
  243. def get_carinfo(self):
  244. url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/renewinsurance"
  245. params = {
  246. "licenseNo": "",
  247. "frameno": self.vin,
  248. "companyCode": self.companyCode
  249. }
  250. response = requests.get(url, headers=self.headers, params=params)
  251. if response.json().get('modelCodes'):
  252. modelCodes=response.json().get('modelCodes')
  253. params = {
  254. 'modelCName': self.modelCName,
  255. 'licenseNo': '',
  256. 'vinCode': '',
  257. 'cimodelCode': modelCodes,
  258. 'pageNo': '0',
  259. 'pageSize': '50',
  260. 'pageNo + 1': '1',
  261. }
  262. response = requests.get('https://car.hbins.com.cn/backstage/api/car-model/vague', params=params,
  263. headers=self.headers)
  264. if response.json().get('content'):
  265. cars_list = response.json().get('content')
  266. for i in cars_list:
  267. if str(int(i.get('purchasePriceNotTax'))) == str(self.purchasePrice):
  268. self.carinfo = i
  269. break
  270. if self.carinfo:
  271. pass
  272. else:
  273. self.carinfo = cars_list[0]
  274. else:
  275. url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/renewinsurance"
  276. params = {
  277. "licenseNo": "",
  278. "frameno": self.vin
  279. }
  280. response = requests.get(url, headers=self.headers, params=params)
  281. modelCodes=response.json().get('modelCodes')
  282. if modelCodes:
  283. modelCodes=",".join(response.json().get('modelCodes'))
  284. else:
  285. modelCodes = ""
  286. url = "https://car.hbins.com.cn/backstage/api/car-model/vague"
  287. params = {
  288. "modelCName": "",
  289. "licenseNo": "",
  290. "vinCode": self.vin,
  291. "cimodelCode": "",
  292. "modelCodes": modelCodes,
  293. "pageNo": "0",
  294. "pageSize": "5"
  295. }
  296. response = requests.get(url, headers=self.headers, params=params)
  297. cars_list = response.json().get('content')
  298. for i in cars_list:
  299. if str(int(i.get('purchasePriceNotTax'))) == str(self.purchasePrice):
  300. self.carinfo = i
  301. if self.carinfo:
  302. pass
  303. else:
  304. self.carinfo = cars_list[0]
  305. elif response.json().get('carMappings'):
  306. carMappings=response.json().get('carMappings').get('cbitData')
  307. url = "https://car.hbins.com.cn/backstage/api/car-model/queryByCarMapping"
  308. data = {
  309. "cbitData": carMappings,
  310. "pageNo": 0,
  311. "pageSize": 5,
  312. "pageNo + 1": 1
  313. }
  314. data = json.dumps(data)
  315. response = requests.post(url, headers=self.headers, data=data)
  316. if response.json().get('content'):
  317. cars_list = response.json().get('content')
  318. for i in cars_list:
  319. if str(int(i.get('purchasePriceNotTax'))) == str(self.purchasePrice):
  320. self.carinfo = i
  321. break
  322. if self.carinfo:
  323. pass
  324. else:
  325. self.carinfo = cars_list[0]
  326. else:
  327. self.carinfo = ''
  328. return ''
  329. else:
  330. url = "https://car.hbins.com.cn/backstage/api/car-model/vague"
  331. params = {
  332. "modelCName": "",
  333. "licenseNo": "",
  334. "vinCode": self.vin,
  335. "cimodelCode": "",
  336. "modelCodes": "",
  337. "pageNo": "0",
  338. "pageSize": "20"
  339. }
  340. response = requests.get(url, headers=self.headers, params=params)
  341. cars_list = response.json().get('content')
  342. for i in cars_list:
  343. if str(int(i.get('purchasePriceNotTax'))) == str(self.purchasePrice):
  344. self.carinfo = i
  345. if self.carinfo:
  346. pass
  347. else:
  348. self.carinfo = cars_list[0]
  349. beginDate=''
  350. if self.chesun_startDate:
  351. beginDate=self.get_utctime(self.chesun_startDate)
  352. else:
  353. beginDate = self.get_utctime(self.jiaoqiang_startDate)
  354. # 判断过户
  355. self.get_actualvalue(beginDate)
  356. if self.isTransfer == False:
  357. self.isTransfer = '0'
  358. else:
  359. self.isTransfer = '1'
  360. # 车辆信息
  361. # completeKerbMass=self.completeKerbMass
  362. # if completeKerbMass:
  363. # completeKerbMass=str(int(self.carinfo.get('completeKerbMass')))
  364. self.carInsureItem = {
  365. 'energyType': '0' if self.energyType=="0" or self.energyType=='4' else '1',
  366. 'purerange': '',
  367. 'otherEnergyTypeDesc': '',
  368. 'licenseNo': self.licenseNo,
  369. 'enrollDate': self.registerDate + 'T00:00:00+08:00',
  370. 'frameNo': self.vin,
  371. 'engineNo': self.engineNo,
  372. 'printBrandName': self.carinfo.get('modelCName'),
  373. 'brandName': self.carinfo.get('modelCName'),
  374. 'modelCode': self.carinfo.get('modelCode'),
  375. 'familyName': self.carinfo.get('familyName'),
  376. 'carKindCode': self.carKindCode,
  377. 'usenatureCode': self.usenatureCode,
  378. 'attachNature': '01',
  379. 'carUseType': self.carUseType,
  380. 'negotiationValue': self.actualValue,
  381. 'licenseKindCode': '02',
  382. 'vehicleType': self.cartype,
  383. 'chgownerFlag': str(self.isTransfer),
  384. 'transferDate': self.issueDate + 'T00:00:00+08:00' if self.isTransfer != 0 else '',
  385. "issueDate": self.issueDate + 'T00:00:00+08:00',
  386. 'seatCount': str(self.seat),
  387. 'countrynature': '',
  388. 'purchasePrice': str(int(self.carinfo.get('purchasePrice'))),
  389. 'exhaustscale': str(int(float(self.enginedesc)*1000)) if self.enginedesc else '0',
  390. 'exhaustScale': str(int(float(self.enginedesc)*1000)) if self.enginedesc else '0',
  391. 'power': self.carinfo.get('power'),
  392. 'tonCount': self.limitLoad,
  393. 'completeKerbMass': self.completeKerbMass,
  394. 'totalTonCount': '',
  395. 'specialCarFlag': '1',
  396. 'dealerCode': '',
  397. 'dealerName': '',
  398. 'ciModelCode': str(self.carinfo.get('cimodelCode')).replace('None', '') if str(
  399. self.carinfo.get('cimodelCode')).replace('None', '') else str(self.carinfo.get('cimodelCodeC')).replace(
  400. 'None', ''),
  401. 'actualValue': self.actualValue,
  402. 'purchasePriceNotTax': str(int(self.carinfo.get('purchasePriceNotTax'))),
  403. 'groupCode': '',
  404. 'carOwner': self.uname,
  405. 'credentialType': '01',
  406. 'credentialNo': self.identifyNumber,
  407. 'countyCode': '',
  408. 'countyCodeArray': '',
  409. 'countyNameArray': '',
  410. "maxDesignSpeed": "",
  411. "id": "1",
  412. "plyappno": "1",
  413. "styleUniqueId": "5548",
  414. "noticeType": "SVW7167AMD",
  415. }
  416. self.carinfo['seatCount']=int(self.seat)
  417. def get_peopleinfo(self):
  418. # 被保人信息
  419. self.carInsureRiskRelatedParty = {
  420. 'id': '',
  421. 'plyappno': '',
  422. 'name': self.bb_uname,
  423. 'mobilePhone': self.bb_phone_number,
  424. 'insuredType': '1',
  425. 'identifyType': '01',
  426. 'identifyNumber': self.bb_identifyNumber,
  427. 'birthday': '',
  428. 'company': '60',
  429. 'email': '',
  430. 'countyCode': '',
  431. 'countyNameArray': '',
  432. 'countyCodeArray': '',
  433. 'postCode': '',
  434. 'position': '60',
  435. 'sex': '女' if int(self.bb_identifyNumber[16]) % 2 == 0 else '男',
  436. 'address': self.bb_address,
  437. 'validityBegintime': '2015-09-02T00:00:00+08:00',
  438. 'validityEndTime': '2045-09-02T00:00:00+08:00',
  439. 'customerType': '00',
  440. 'vipInd': '0',
  441. 'relationshipToInsrnt': '0' if self.tb_uname == self.bb_uname else '6',
  442. 'moneyLaunderingInd': '',
  443. 'invoiceRequest': '03',
  444. }
  445. # 投保人信息
  446. self.carInsureRelatedParty = {
  447. 'id': '',
  448. 'plyappno': '',
  449. 'name': self.tb_uname,
  450. 'identifyNumber': self.tb_identifyNumber,
  451. 'identifyType': '01',
  452. 'sex': '女' if int(self.tb_identifyNumber[16]) % 2 == 0 else '男',
  453. 'email': '',
  454. 'postCode': '',
  455. 'address': self.tb_address,
  456. 'company': '60',
  457. 'position': '60',
  458. 'vipInd': '0',
  459. 'insuredType': '1',
  460. 'birthday': '',
  461. 'countyCode': '',
  462. 'mobilePhone': self.tb_phone_number,
  463. 'validityBegintime': '2015-09-02T00:00:00+08:00',
  464. 'validityEndTime': '2045-09-02T00:00:00+08:00',
  465. 'moneyLaunderingInd': '',
  466. 'customerType': '00',
  467. 'countyCodeArray': '',
  468. 'countyNameArray': '',
  469. 'invoiceRequest': '03',
  470. }
  471. def quoteimmediately(self):
  472. # 获取归属手机号
  473. params = {
  474. 'sysCategory': '2',
  475. 'resourceType': 'HBXSH',
  476. }
  477. response = requests.get('https://car.hbins.com.cn/intermarket/api/userinfo/'+self.username, params=params,
  478. headers=self.headers)
  479. mobile = response.json().get('userInfo')[0].get('MOBILE')
  480. # 根据手机号获取归属
  481. params = {
  482. 'mobile': mobile,
  483. }
  484. response = requests.get('https://car.hbins.com.cn/backstage/api/findSaleInformationNew', params=params,
  485. headers=self.headers)
  486. hb_encd = response.json().get('hb_enc_d')
  487. res_data = self.get_bjdata(hb_encd)
  488. res_data_json = json.loads(res_data)
  489. salesMan = res_data_json.get('salesMan')
  490. companys = res_data_json.get('companys')
  491. json_data = {
  492. 'carInsureItem': self.carInsureItem,
  493. 'carInsureRiskRelatedParty': self.carInsureRiskRelatedParty,
  494. 'carInsureRelatedParty': self.carInsureRelatedParty,
  495. 'carInsureMain': {
  496. 'businessMode': '2',
  497. 'businessModeName': '代理',
  498. 'businessSource': salesMan.get('saleschannel'),
  499. 'businessAgency': '',
  500. 'intermediaryCode': salesMan.get('usercode'),
  501. 'intermediaryName': salesMan.get('username'),
  502. 'agreementCode': salesMan.get('agreementcode'),
  503. 'solutionCode': salesMan.get('solutioncode'),
  504. 'salesman': '',
  505. 'resourceType': 'HBXSH',
  506. 'businessChannel': salesMan.get('channelsort'),
  507. 'businessChannelName': salesMan.get('channelsortName'),
  508. 'channelDetailCode': salesMan.get('channeltip'),
  509. 'channelDetailName': salesMan.get('channeltipName'),
  510. 'salesmanCode': salesMan.get('salesmancode'),
  511. 'companyCode': salesMan.get('companycode'),
  512. 'companyCName': companys.get('companyCName'),
  513. 'accountPeriod': '账期',
  514. 'mobile': salesMan.get('mobile'),
  515. 'salesmanname': salesMan.get('salesmanname'),
  516. 'dealerCode': '',
  517. 'dealerName': '',
  518. 'usertype': salesMan.get('usertype'),
  519. 'invoiceRequest': '03',
  520. 'operatorCode': self.username,
  521. 'creator': self.username,
  522. },
  523. }
  524. response = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/quoteimmediately',headers=self.headers, json=json_data)
  525. if 'status' not in response.text:
  526. self.plyappno = response.text
  527. url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/carInsureItem"
  528. params = {
  529. "plyappno": self.plyappno
  530. }
  531. response = requests.get(url, headers=self.headers, params=params)
  532. else:
  533. self.quoteimmediately_info = response.json().get('title')
  534. def calculation(self):
  535. if self.jiaoqiang_chooseFlag == 'on' and self.shangye_chooseFlag == 'on':
  536. self.risktype = '2'
  537. elif self.jiaoqiang_chooseFlag == 'on' and self.shangye_chooseFlag == 'False':
  538. self.risktype = '1'
  539. else:
  540. self.risktype = '0'
  541. # 正常险种信息列表
  542. epersonliabilityList = []
  543. # 新能源险种信息表
  544. epersonliabilityList1 = []
  545. # 险种信息列表添加险种
  546. if self.chesun_chooseFlag == 'on':
  547. epersonliabilityList.append({
  548. "kindcode": "101",
  549. "model": "0",
  550. "liabamt": str(self.actualValue),
  551. "liabname": "机动车损失保险"
  552. })
  553. epersonliabilityList1.append({
  554. "kindcode": "0401",
  555. "model": "0",
  556. "liabamt": str(self.actualValue),
  557. "liabname": "新能源汽车损失保险"
  558. })
  559. if self.sanzhe_chooseFlag == 'on':
  560. epersonliabilityList.append({
  561. "kindcode": "102",
  562. "model": "0",
  563. "liabamt": str(self.sanzhe_amount),
  564. "liabname": "机动车第三者责任保险"
  565. })
  566. epersonliabilityList1.append({
  567. "kindcode": "0402",
  568. "model": "0",
  569. "liabamt": str(self.sanzhe_amount),
  570. "liabname": "新能源汽车第三者责任保险"
  571. })
  572. if self.sjzeren_chooseFlag == 'on':
  573. epersonliabilityList.append({
  574. "kindcode": "103",
  575. "model": "0",
  576. "quantity": "1",
  577. "liabamt": str(self.sjzeren_amount),
  578. "liabname": "车上人员责任险(司机)",
  579. "unitAmount": str(self.sjzeren_amount)
  580. })
  581. epersonliabilityList1.append({
  582. "kindcode": "0403",
  583. "model": "0",
  584. "quantity": "1",
  585. "liabamt": str(self.sjzeren_amount),
  586. "liabname": "新能源汽车车上人员责任保险(司机)",
  587. "unitAmount": str(self.sjzeren_amount)
  588. })
  589. if self.ckzeren_chooseFlag == 'on':
  590. epersonliabilityList.append({
  591. "kindcode": "104",
  592. "model": "0",
  593. "quantity": int(self.carinfo.get('seatCount') - 1),
  594. "liabamt": str(int(self.ckzeren_amount) * int(int(self.carinfo.get('seatCount') - 1))),
  595. "liabname": "车上人员责任险(乘客)",
  596. "unitAmount": str(self.ckzeren_amount)
  597. })
  598. epersonliabilityList1.append({
  599. "kindcode": "0404",
  600. "model": "0",
  601. "quantity": int(self.carinfo.get('seatCount') - 1),
  602. "liabamt": str(int(self.ckzeren_amount) * int(int(self.carinfo.get('seatCount') - 1))),
  603. "liabname": "新能源汽车车上人员责任保险(乘客)",
  604. "unitAmount": str(self.ckzeren_amount)
  605. })
  606. if self.huahen_chooseFlag == 'on':
  607. epersonliabilityList.append({
  608. "kindcode": "107",
  609. "model": "0",
  610. "liabamt": str(self.huahen_amount),
  611. "liabname": "附加车身划痕损失险"
  612. })
  613. epersonliabilityList1.append({
  614. "kindcode": "0414",
  615. "model": "0",
  616. "liabamt": str(self.huahen_amount),
  617. "liabname": "附加车身划痕损失险(新能源汽车)"
  618. })
  619. if self.fujiachesun_chooseFlag == 'on':
  620. epersonliabilityList.append({
  621. "kindcode": "114",
  622. "model": "0",
  623. "liabamt": None,
  624. "liabname": "附加绝对免赔率特约险(车损)",
  625. "deDuctibleFranchise": str(self.fujiachesun_amount),
  626. "amount": None
  627. })
  628. epersonliabilityList1.append({
  629. "kindcode": "0426",
  630. "model": "0",
  631. "liabamt": None,
  632. "liabname": "附加绝对免赔率特约险(车损)(新能源汽车)",
  633. "deDuctibleFranchise": str(self.fujiachesun_amount),
  634. "amount": None
  635. })
  636. if self.fujiasanzhe_chooseFlag == 'on':
  637. epersonliabilityList.append({
  638. "kindcode": "120",
  639. "model": "0",
  640. "liabamt": None,
  641. "liabname": "附加绝对免赔率特约险(三者)",
  642. "deDuctibleFranchise": str(self.fujiasanzhe_amount),
  643. "amount": None
  644. })
  645. epersonliabilityList1.append({
  646. "kindcode": "0427",
  647. "model": "0",
  648. "liabamt": None,
  649. "liabname": "附加绝对免赔率特约险(三者)(新能源汽车)",
  650. "deDuctibleFranchise": str(self.fujiasanzhe_amount),
  651. "amount": None
  652. })
  653. if self.fujiasiji_chooseFlag == 'on':
  654. epersonliabilityList.append({
  655. "kindcode": "121",
  656. "model": "0",
  657. "liabamt": None,
  658. "liabname": "附加绝对免赔率特约险(人员司机)",
  659. "deDuctibleFranchise": str(self.fujiasiji_amount),
  660. "amount": None
  661. })
  662. epersonliabilityList1.append({
  663. "kindcode": "0428",
  664. "model": "0",
  665. "liabamt": None,
  666. "liabname": "附加绝对免赔率特约条款(人员司机)(新能源汽车)",
  667. "deDuctibleFranchise": str(self.fujiasiji_amount),
  668. "amount": None
  669. })
  670. if self.fujiachengke_chooseFlag == 'on':
  671. epersonliabilityList.append({
  672. "kindcode": "122",
  673. "model": "0",
  674. "liabamt": None,
  675. "liabname": "附加绝对免赔率特约险(人员乘客)",
  676. "deDuctibleFranchise": str(self.fujiachengke_amount),
  677. "amount": None
  678. })
  679. epersonliabilityList1.append({
  680. "kindcode": "0429",
  681. "model": "0",
  682. "liabamt": None,
  683. "liabname": "附加绝对免赔率特约条款(人员乘客)(新能源汽车)",
  684. "deDuctibleFranchise": str(self.fujiachengke_amount),
  685. "amount": None
  686. })
  687. if self.fujia_jiejiari_chooseFlag == 'on':
  688. epersonliabilityList.append({
  689. "kindcode": "113",
  690. "model": "0",
  691. "liabamt": None,
  692. "liabname": "附加法定节假日限额翻倍险"
  693. })
  694. epersonliabilityList1.append({
  695. "kindcode": "0422",
  696. "model": "0",
  697. "liabamt": "1000000",
  698. "liabname": "附加法定节假日限额翻倍险(新能源汽车)"
  699. })
  700. if self.ybw_sanzhe_chooseFlag=='on':
  701. epersonliabilityList.append(
  702. {
  703. "kindcode": "115",
  704. "model": "0",
  705. "liabamt": self.ybw_sanzhe_amount,
  706. "liabname": "附加医保外医疗费用责任险(三者)"
  707. }
  708. )
  709. if self.ybw_siji_chooseFlag == 'on':
  710. epersonliabilityList.append(
  711. {
  712. "kindcode": "131",
  713. "model": "0",
  714. "liabamt": self.ybw_siji_amount,
  715. "liabname": "附加医保外医疗费用责任险(人员司机)"
  716. }
  717. )
  718. if self.ybw_ck_chooseFlag=='on':
  719. epersonliabilityList.append(
  720. {
  721. "kindcode": "132",
  722. "model": "0",
  723. "liabamt": self.ybw_ck_amount,
  724. "liabname": "附加医保外医疗费用责任险(人员乘客)"
  725. }
  726. )
  727. self.chesun_startDate = self.get_utctime(self.chesun_startDate)
  728. self.jiaoqiang_startDate =self.get_utctime(self.jiaoqiang_startDate)
  729. self.json_data = {
  730. 'clauseType': '2' if self.energyType=="0" or self.energyType=='4' else '3',
  731. 'ecarChargingPosts': [],
  732. 'carInsureDevices': [],
  733. 'effectfLag': None,
  734. 'accidentInsuranceList': [],
  735. 'epersonliabilityList': epersonliabilityList if self.energyType=="0" or self.energyType=='4' else epersonliabilityList1,
  736. # 商业险起始日期
  737. 'begintimeBi': self.chesun_startDate,
  738. 'begintimeCi': self.jiaoqiang_startDate,
  739. 'endtimeBi': '',
  740. 'endtimeCi': '',
  741. 'plyappno': self.plyappno,
  742. # 0:单商业
  743. # 1:单交强
  744. # 2:交商
  745. 'risktype': self.risktype,
  746. 'expdisc': '',
  747. 'ecarshiptaxPart': '投保人',
  748. 'taxonomyCode': '02',
  749. 'epolicyFlag': 'Y',
  750. 'accidentEpolicyFlag': '',
  751. 'outofwarrantytype':self.isOutOfInsurance,
  752. }
  753. response = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation',
  754. headers=self.headers,
  755. json=self.get_fcxinfo(self.json_data))
  756. url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/proposal"
  757. params = {
  758. "plyappno": self.plyappno
  759. }
  760. res = requests.get(url, headers=self.headers, params=params)
  761. return response
  762. def repeat(self, response):
  763. # 第一次报价后响应及后续操作处理
  764. if '该车是转保车,请输入对应的转保验证码' in response.text:
  765. querynoSy = response.json().get('responseBody').get('querynoSy')
  766. querynoJq = response.json().get('responseBody').get('querynoJq')
  767. checkcodeSyImg = response.json().get('map').get('responseBody').get('checkcodeSyImg')
  768. checktypeSy = response.json().get('responseBody').get('checktypeSy')
  769. checkcodeJqImg = response.json().get('map').get('responseBody').get('checkcodeJqImg')
  770. checktypeJq = response.json().get('responseBody').get('checktypeJq')
  771. ocr = ddddocr.DdddOcr()
  772. ocr_beta = ddddocr.DdddOcr(beta=True)
  773. if checkcodeSyImg != None:
  774. open(images_path+'hengbang/hbSY.jpg', 'wb').write(base64.b64decode(checkcodeSyImg))
  775. with open(images_path+'hengbang/hbSY.jpg', 'rb') as f:
  776. image = f.read()
  777. self.SYres = ocr.classification(image).replace('0','O')
  778. self.SYres_beta=ocr_beta.classification(image).replace('0','O')
  779. if checkcodeJqImg != None:
  780. open(images_path+'hengbang/hbJQ.jpg', 'wb').write(base64.b64decode(checkcodeJqImg))
  781. with open(images_path+'hengbang/hbJQ.jpg', 'rb') as f:
  782. image = f.read()
  783. self.JQres = ocr.classification(image).replace('0','O')
  784. self.JQres_beta = ocr_beta.classification(image).replace('0', 'O')
  785. transferVehicle = {
  786. 'checkcodeJq': self.JQres,
  787. 'checkcodeSy': self.SYres,
  788. 'checktypeJq': checktypeJq,
  789. 'checktypeSy': checktypeSy,
  790. 'querynoJq': querynoJq,
  791. 'querynoSy': querynoSy,
  792. }
  793. self.json_data['transferVehicle'] = transferVehicle
  794. self.json_data['outofwarrantytype'] = self.isOutOfInsurance
  795. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation',
  796. headers=self.headers,
  797. json=self.get_fcxinfo(self.json_data))
  798. if '校验码有误' in ress.text:
  799. transferVehicle = {
  800. 'checkcodeJq': self.JQres_beta,
  801. 'checkcodeSy': self.SYres_beta,
  802. 'checktypeJq': checktypeJq,
  803. 'checktypeSy': checktypeSy,
  804. 'querynoJq': querynoJq,
  805. 'querynoSy': querynoSy,
  806. }
  807. self.json_data['transferVehicle'] = transferVehicle
  808. self.json_data['outofwarrantytype'] = self.isOutOfInsurance
  809. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation',
  810. headers=self.headers,
  811. json=self.get_fcxinfo(self.json_data))
  812. self.repeat(ress)
  813. elif '重复投保' in response.text and '终保日期' in response.text:
  814. if '失败:平台校验:' in response.text or "失败:交强险平台提示" in response.text:
  815. if re.findall(r'终保日期 (.*?);', response.text):
  816. self.jiaoqiang_startDate = self.get_utctime(re.findall(r'终保日期 (.*?);', response.text)[0])
  817. else:
  818. self.jiaoqiang_startDate = self.get_utctime(re.findall(r'终保日期:(.*?),', response.text)[0])
  819. self.json_data['begintimeCi'] = self.jiaoqiang_startDate
  820. if self.json_data.get('transferVehicle'):
  821. del self.json_data['transferVehicle']
  822. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation',headers=self.headers,json=self.get_fcxinfo(self.json_data))
  823. self.jq_repeatinfo=response.json().get('detail')
  824. self.repeat(ress)
  825. elif 'begintimeBi' in response.text:
  826. self.sy_repeatinfo = response.json().get('message')
  827. self.chesun_startDate=self.get_utctime(response.json().get('responseBody').get('begintimeBi'))
  828. self.json_data['begintimeBi'] = self.chesun_startDate
  829. self.json_data['outofwarrantytype']=self.isOutOfInsurance
  830. if self.json_data.get('transferVehicle'):
  831. del self.json_data['transferVehicle']
  832. if self.chesun_chooseFlag=='on':
  833. self.get_actualvalue(self.chesun_startDate)
  834. for i in self.json_data['epersonliabilityList']:
  835. if i.get('kindcode')=='101' or i.get('kindcode')=='0401':
  836. i['liabamt']=str(self.actualValue)
  837. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation', headers=self.headers, json=self.get_fcxinfo(self.json_data))
  838. if '重复投保' not in ress.text:
  839. self.sy_repeatinfo=response.json().get('message')
  840. self.repeat(ress)
  841. else:
  842. url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/proposal"
  843. params = {
  844. "plyappno": self.plyappno
  845. }
  846. response = requests.get(url, headers=self.headers, params=params)
  847. self.repeat(response)
  848. elif 'begintimeCi' in response.text:
  849. self.jq_repeatinfo=response.json().get('message')
  850. self.jiaoqiang_startDate = self.get_utctime(response.json().get('responseBody').get('begintimeCi'))
  851. self.json_data['begintimeCi'] = self.jiaoqiang_startDate
  852. self.json_data['outofwarrantytype'] = self.isOutOfInsurance
  853. if self.json_data.get('transferVehicle'):
  854. del self.json_data['transferVehicle']
  855. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation', headers=self.headers, json=self.get_fcxinfo(self.json_data))
  856. if '重复投保' not in ress.text:
  857. self.jq_repeatinfo = response.json().get('message')
  858. self.repeat(ress)
  859. else:
  860. # url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/proposal"
  861. # params = {
  862. # "plyappno": self.plyappno
  863. # }
  864. # response = requests.get(url, headers=self.headers, params=params)
  865. # print(response.text)
  866. self.repeat(ress)
  867. elif '商业险平台返回信息' in response.text:
  868. self.sy_repeatinfo=response.json().get('carInsureMain').get('remark')
  869. sy_startday=re.findall(r'终保日期:(.*?),',response.text,re.S)
  870. if sy_startday:
  871. self.chesun_startDate=sy_startday[0]+' 00:00:00'
  872. self.json_data['begintimeBi'] = self.get_utctime(self.chesun_startDate)
  873. self.json_data['outofwarrantytype'] = self.isOutOfInsurance
  874. if self.json_data.get('transferVehicle'):
  875. del self.json_data['transferVehicle']
  876. if self.chesun_chooseFlag == 'on':
  877. self.get_actualvalue(self.chesun_startDate)
  878. for i in self.json_data['epersonliabilityList']:
  879. if i.get('kindcode') == '101' or i.get('kindcode') == '0401':
  880. i['liabamt'] = str(self.actualValue)
  881. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation', headers=self.headers, json=self.get_fcxinfo(self.json_data))
  882. return self.repeat(ress)
  883. else:
  884. self.message=response.text
  885. elif '脱保' in response.text:
  886. self.json_data['outofwarrantytype'] = 'N'
  887. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation',
  888. headers=self.headers,
  889. json=self.get_fcxinfo(self.json_data))
  890. self.repeat(ress)
  891. # self.message=response.json().get('message')
  892. elif 'begintimeCi' in response.text:
  893. self.jiaoqiang_startDate = self.get_utctime(response.json().get('responseBody').get('begintimeCi'))
  894. self.json_data['begintimeCi'] = self.jiaoqiang_startDate
  895. self.json_data['outofwarrantytype'] = self.isOutOfInsurance
  896. if self.json_data.get('transferVehicle'):
  897. del self.json_data['transferVehicle']
  898. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation', headers=self.headers, json=self.get_fcxinfo(self.json_data))
  899. if '重复投保' not in ress.text:
  900. self.jq_repeatinfo = response.json().get('message')
  901. self.repeat(ress)
  902. else:
  903. url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/proposal"
  904. params = {
  905. "plyappno": self.plyappno
  906. }
  907. response = requests.get(url, headers=self.headers, params=params)
  908. self.repeat(response)
  909. elif 'begintimeBi' in response.text:
  910. self.chesun_startDate = self.get_utctime(response.json().get('responseBody').get('begintimeBi'))
  911. self.json_data['begintimeBi'] = self.chesun_startDate
  912. self.json_data['outofwarrantytype'] = self.isOutOfInsurance
  913. if self.json_data.get('transferVehicle'):
  914. del self.json_data['transferVehicle']
  915. if self.chesun_chooseFlag == 'on':
  916. self.get_actualvalue(self.chesun_startDate)
  917. for i in self.json_data['epersonliabilityList']:
  918. if i.get('kindcode') == '101' or i.get('kindcode') == '0401':
  919. i['liabamt'] = str(self.actualValue)
  920. ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation', headers=self.headers, json=self.get_fcxinfo(self.json_data))
  921. if '重复投保' not in ress.text:
  922. self.sy_repeatinfo = response.json().get('message')
  923. self.repeat(ress)
  924. else:
  925. url = "https://car.hbins.com.cn/new-insure/api/carinsurenew/proposal"
  926. params = {
  927. "plyappno": self.plyappno
  928. }
  929. response = requests.get(url, headers=self.headers, params=params)
  930. self.repeat(response)
  931. elif response.json().get('carInsureRiskRelatedParty') and response.json().get('carInsureItem'):
  932. self.bj_response = response
  933. elif response.json().get('status')==500:
  934. self.message=response.json().get('detail')
  935. elif response.json().get('status')==400:
  936. self.message = response.json().get('title')
  937. else:
  938. # print(123321)
  939. # if self.json_data.get('epersonliabilityList'):
  940. # res = requests.get(
  941. # 'https://car.hbins.com.cn/new-insure/api/carinsurenew/carInsureItem?plyappno=' + self.plyappno,
  942. # headers=self.headers)
  943. #
  944. # liabamt = res.json().get('actualValue')
  945. # print(liabamt)
  946. # for i in self.json_data.get('epersonliabilityList'):
  947. #
  948. # if i.get('kindcode') == '101':
  949. # i['liabamt'] = liabamt
  950. #
  951. # ress = requests.post('https://car.hbins.com.cn/new-insure/api/carinsurenew/calculation',
  952. # headers=self.headers,
  953. # json=self.get_fcxinfo(self.json_data))
  954. self.bj_response = response
  955. def proposal(self):
  956. url = 'https://car.hbins.com.cn/new-insure/api/carinsurenew/proposal?plyappno=' + self.plyappno
  957. res = requests.get(url, headers=self.headers)
  958. hb_encd = res.json().get('hb_enc_d')
  959. res_data = self.get_bjdata(hb_encd)
  960. res_data_json=json.loads(res_data)
  961. #是否转保
  962. renewind="".join(re.findall(r'"renewind" : "(.*?)"',res_data,re.S))
  963. #交强出险次数
  964. jq_eaccidentRecordList=str(len(res_data_json.get('eaccidentRecordList')))
  965. #商业出险次数
  966. sy_eaccidentRecordList='0'
  967. if res_data_json.get('busiCarInsureRisk'):
  968. sy_eaccidentRecordList=res_data_json.get('busiCarInsureRisk').get('claimTimes')
  969. # 车险总价
  970. premium = re.findall(r'"totalPremium" : "(.*?)"',res_data,re.S)
  971. if premium:
  972. premium = premium[0]
  973. else:
  974. premium=0
  975. # 商业险价格
  976. busiTotalPremium = re.findall(r'"busiTotalPremium" : (.*?),',res_data,re.S)
  977. if busiTotalPremium:
  978. busiTotalPremium = busiTotalPremium[0]
  979. else:
  980. busiTotalPremium = 0
  981. # 交强险价格
  982. sumPremium = res_data_json.get('forceLiability')
  983. if sumPremium:
  984. sumPremium = res_data_json.get('forceLiability').get('liabprm')
  985. else:
  986. sumPremium = 0
  987. # 车船税
  988. ccsumPremium = res_data_json.get('carInsureShiptax')
  989. if ccsumPremium != None:
  990. ccsumPremium = res_data_json.get('carInsureShiptax').get('sumtax')
  991. message = res_data_json.get('busiCarInsureRisk')
  992. if message != None:
  993. message = res_data_json.get('busiCarInsureRisk').get('info')
  994. if ccsumPremium == None:
  995. ccsumPremium = 0
  996. # 商业险各个险种价格
  997. if res_data_json.get('carInsureLiabilityList') != []:
  998. for i in res_data_json.get('carInsureLiabilityList'):
  999. if i.get('liabname') == "机动车损失保险":
  1000. self.csx = i.get('liabprm')
  1001. elif i.get('liabname') == '机动车第三者责任保险':
  1002. self.szx = i.get('liabprm')
  1003. elif i.get('liabname') == '车上人员责任险(司机)':
  1004. self.cssj = i.get('liabprm')
  1005. elif i.get('liabname') == '车上人员责任险(乘客)':
  1006. self.csck = i.get('liabprm')
  1007. elif i.get('liabname') == '附加车身划痕损失险':
  1008. self.hhx = i.get('liabprm')
  1009. elif i.get('liabname') == '附加法定节假日限额翻倍险':
  1010. self.jjr = i.get('liabprm')
  1011. elif i.get('liabname') == '附加绝对免赔率特约险(车损)':
  1012. self.fjcs = i.get('liabprm')
  1013. elif i.get('liabname') == '附加绝对免赔率特约险(三者)':
  1014. self.fjsz = i.get('liabprm')
  1015. elif i.get('liabname') == '附加绝对免赔率特约险(人员司机)':
  1016. self.fjsj = i.get('liabprm')
  1017. elif i.get('liabname') == '附加绝对免赔率特约险(人员乘客)':
  1018. self.fjck = i.get('liabprm')
  1019. elif i.get('liabname') == '附加医保外医疗费用责任险(三者)':
  1020. self.ybwsz_price = i.get('liabprm')
  1021. elif i.get('liabname') == '附加医保外医疗费用责任险(人员司机)':
  1022. self.ybwsj_price = i.get('liabprm')
  1023. elif i.get('liabname') == '附加医保外医疗费用责任险(人员乘客)':
  1024. self.ybwck_price = i.get('liabprm')
  1025. #非车险信息
  1026. fcxinfo_list=[]
  1027. fcxinfo_dict ={}
  1028. fcx_list=res_data_json.get('accidentInsuranceList')
  1029. if fcx_list:
  1030. for i in fcx_list:
  1031. fcxinfo_dict['price']=i.get('sumgrosspremium')
  1032. fcxinfo_dict['name']=i.get('programname')
  1033. fcxinfo_dict['policy'] = ''
  1034. fcxinfo_list.append(fcxinfo_dict)
  1035. # 车船税逾期价格
  1036. zhinajin_list = res_data_json.get('ecarshiptaxSubList')
  1037. tax_arrears = []
  1038. if zhinajin_list:
  1039. for i in range(len(zhinajin_list)):
  1040. if i != 0:
  1041. # 车船税滞纳起止日期
  1042. tax_arrears.append({
  1043. 'start_day': zhinajin_list[i].get('taxStartDate'),
  1044. 'end_day': zhinajin_list[i].get('taxEndDate'),
  1045. 'late_fee': zhinajin_list[i].get('overdue'),
  1046. 'late_chechuan': zhinajin_list[i].get('totalAmount'),
  1047. 'all_late_fee': ''
  1048. })
  1049. if tax_arrears==[]:
  1050. tax_arrears=[
  1051. {
  1052. 'start_day': '',
  1053. 'end_day': '',
  1054. 'late_fee': '',
  1055. 'late_chechuan':'',
  1056. 'all_late_fee': ''
  1057. }
  1058. ]
  1059. #连接redis存储数据
  1060. redis_conn.hset('hengbang_'+self.plyappno,'token',self.token)
  1061. redis_conn.hset('hengbang_'+self.plyappno, 'risktype', self.risktype)
  1062. redis_conn.hset('hengbang_' + self.plyappno, 'license', self.licenseNo)
  1063. redis_conn.hset('hengbang_' + self.plyappno, 'time',
  1064. time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
  1065. redis_conn.hset('hengbang_' + self.plyappno, 'username',self.username)
  1066. redis_conn.hset('hengbang_' + self.plyappno, 'plyappno', self.plyappno)
  1067. redis_conn.hset('hengbang_' + self.plyappno, 'tb_id', self.tb_identifyNumber)
  1068. jq_startDate=''
  1069. jq_endDate = ''
  1070. sy_startDate = ''
  1071. sy_endDate = ''
  1072. if self.jiaoqiang_chooseFlag=='on' and self.shangye_chooseFlag=='on':
  1073. jq_startDate=self.get_time(res_data_json.get('forceCarInsureRisk').get('begintime'))
  1074. jq_endDate =self.get_time(res_data_json.get('forceCarInsureRisk').get('endtime'))
  1075. sy_startDate = self.get_time(res_data_json.get('busiCarInsureRisk').get('begintime'))
  1076. sy_endDate = self.get_time(res_data_json.get('busiCarInsureRisk').get('endtime'))
  1077. elif self.jiaoqiang_chooseFlag=='on':
  1078. jq_startDate = self.get_time(res_data_json.get('forceCarInsureRisk').get('begintime'))
  1079. jq_endDate = self.get_time(res_data_json.get('forceCarInsureRisk').get('endtime'))
  1080. elif self.shangye_chooseFlag=='on':
  1081. sy_startDate = self.get_time(res_data_json.get('busiCarInsureRisk').get('begintime'))
  1082. sy_endDate = self.get_time(res_data_json.get('busiCarInsureRisk').get('endtime'))
  1083. carInfo={}
  1084. #车型名称
  1085. carInfo['modelcname']=self.carInsureItem.get('brandName')
  1086. #车型编码
  1087. carInfo['modelCode'] = self.carInsureItem.get('modelCode')
  1088. #排量
  1089. carInfo['exhaustscale'] = self.carInsureItem.get('exhaustScale') if self.carInsureItem.get('exhaustScale')!='None' else '0'
  1090. #座位数
  1091. carInfo['seatCount'] = self.carInsureItem.get('seatCount')
  1092. #价格
  1093. carInfo['purchasePrice'] = self.carInsureItem.get('purchasePriceNotTax')
  1094. #功率
  1095. carInfo['power'] = self.carInsureItem.get('power')
  1096. #年款
  1097. carInfo['caryear'] = self.carinfo.get('carYear')
  1098. info_list=[]
  1099. if self.bj_response.json().get('message'):
  1100. info_list.append(self.bj_response.json().get('message'))
  1101. ret = {
  1102. # 车险总价(含驾意险) totalPremium参数含驾意险
  1103. 'carInsureMain': premium,
  1104. # 商业险总价
  1105. 'busiTotalPremium': busiTotalPremium,
  1106. # 交强险总价
  1107. 'forceCarInsureRisk': sumPremium,
  1108. # 车船税
  1109. 'carInsureShiptax': ccsumPremium,
  1110. # 滞纳金信息
  1111. 'tax_arrears': tax_arrears,
  1112. #附加险价格
  1113. 'INSURANCE_TYPE': {
  1114. 'A': self.csx,
  1115. 'A_amount':str(self.actualValue),
  1116. 'B': self.szx,
  1117. 'D3': self.cssj,
  1118. 'D4': self.csck,
  1119. 'L': self.hhx,
  1120. 'BD': self.jjr,
  1121. 'MJ1': self.fjcs,
  1122. 'MJ2': self.fjsz,
  1123. 'MJ3': self.fjsj,
  1124. 'MJ4': self.fjck,
  1125. 'SY_FJ_YBW1':self.ybwsz_price,
  1126. 'SY_FJ_YBW2': self.ybwck_price,
  1127. 'SY_FJ_YBW3': self.ybwsj_price,
  1128. },
  1129. 'code': 200,
  1130. 'message': message if message != None else '成功',
  1131. 'plyappno': self.plyappno,
  1132. 'jq_startDate' :jq_startDate if self.jiaoqiang_chooseFlag=='on' else '',
  1133. 'jq_endDate':jq_endDate if self.jiaoqiang_chooseFlag=='on' else '',
  1134. 'sy_startDate' : sy_startDate if self.shangye_chooseFlag=='on' else '',
  1135. 'sy_endDate' : sy_endDate if self.shangye_chooseFlag=='on' else '',
  1136. 'other': {
  1137. 'mark': '',
  1138. 'jq_discount': '',
  1139. 'sy_discount': '',
  1140. 'isQuoteGreenWay': '',
  1141. 'jq_renewalflag': renewind,
  1142. 'sy_renewalflag': renewind,
  1143. 'jq_accident':jq_eaccidentRecordList,
  1144. 'sy_accident':sy_eaccidentRecordList,
  1145. "info_list":info_list,
  1146. },
  1147. 'jq_repeatinfo':self.jq_repeatinfo,
  1148. 'sy_repeatinfo': self.sy_repeatinfo,
  1149. 'drivingInsurances': fcxinfo_list,
  1150. 'carInfo':carInfo
  1151. }
  1152. return ret
  1153. def main(self):
  1154. self.check_login()
  1155. if self.token == '用户名、密码错误':
  1156. return {
  1157. 'code': 400,
  1158. 'message': '用户名、密码错误'
  1159. }
  1160. self.get_carinfo()
  1161. if self.carinfo:
  1162. pass
  1163. else:
  1164. return {
  1165. 'code':400,
  1166. 'message':'车型查询失败'
  1167. }
  1168. self.get_peopleinfo()
  1169. self.quoteimmediately()
  1170. if self.quoteimmediately_info:
  1171. return {
  1172. 'code':400,
  1173. 'message':self.quoteimmediately_info
  1174. }
  1175. res = self.calculation()
  1176. self.repeat(res)
  1177. info = ''
  1178. if self.jq_repeatinfo and self.sy_repeatinfo:
  1179. info = self.jq_repeatinfo + ';;;;;;;;;;;;;;;;;;;;;;;;;;' + self.sy_repeatinfo + ';;;;;;;;;;;;;;;;;;;;;;;;;;'
  1180. elif self.jq_repeatinfo:
  1181. info = self.jq_repeatinfo + ';;;;;;;;;;;;;;;;;;;;;;;;;;;'
  1182. elif self.sy_repeatinfo:
  1183. info = self.sy_repeatinfo + ';;;;;;;;;;;;;;;;;;;;;;;;;;;'
  1184. if self.bj_response:
  1185. if self.bj_response.json().get('status') == '9':
  1186. ret = self.proposal()
  1187. message = self.bj_response.json().get('message')
  1188. ret['message'] = message
  1189. return ret
  1190. elif self.bj_response.json().get('status')==None:
  1191. ret = self.proposal()
  1192. return ret
  1193. elif self.bj_response.json().get('status') != '0' and self.bj_response.json().get('status') != '3':
  1194. if self.bj_response.json().get('message'):
  1195. message1 = self.bj_response.json().get('message')
  1196. else:
  1197. message1 = ''
  1198. if self.bj_response.json().get('status') != 500:
  1199. if self.cftb_message:
  1200. message2 = self.cftb_message
  1201. else:
  1202. message2 = ''
  1203. else:
  1204. if self.bj_response.json().get('detail'):
  1205. mes_detail = self.bj_response.json().get('detail')
  1206. else:
  1207. mes_detail = ''
  1208. if self.cftb_message:
  1209. ctfb = self.cftb_message
  1210. else:
  1211. ctfb = ''
  1212. message2 = mes_detail + '-------------------------------------------' + ctfb
  1213. return {
  1214. 'message': info+message1 + '-------------------------------------------' + message2,
  1215. 'code': 400
  1216. }
  1217. else:
  1218. ret = self.proposal()
  1219. return ret
  1220. else:
  1221. return {
  1222. 'code':400,
  1223. 'message':info+self.message
  1224. }