Ver Fonte

添加泰康车险

Administrator há 3 meses atrás
pai
commit
1063868336

+ 2 - 0
Flask_API.py

@@ -10,6 +10,7 @@ from blueprint.tp_api import taiping
 from blueprint.hn_api import huanong
 # from blueprint.ed_api import edian
 from blueprint.ht_api import huatai
+from blueprint.tk_api import taikang
 from gevent import pywsgi
 
 from logs.getlogs import *
@@ -25,6 +26,7 @@ api.register_blueprint(taiping)
 api.register_blueprint(getres)
 api.register_blueprint(huanong)
 api.register_blueprint(huatai)
+api.register_blueprint(taikang)
 # api.register_blueprint(edian)
 #跨域
 CORS(api, supports_credentials=True)

+ 3 - 1
blueprint/hb_api.py

@@ -46,6 +46,8 @@ def hb_bfjs():
     vehicleUse=flask.request.json.get('carInfo').get('vehicleUse')
     #核定载质量
     limitLoad=flask.request.json.get('carInfo').get('limitLoad')
+    # 排量
+    enginedesc = flask.request.json.get('carInfo').get('enginedesc')
     #整备质量
     completeKerbMass=flask.request.json.get('carInfo').get('completeKerbMass')
     energyType = flask.request.json.get('carInfo').get('energyType')
@@ -169,7 +171,7 @@ def hb_bfjs():
 
 
     carinfo = hb_calculation(#token、车辆、人员信息
-                username,modelCName,engineNo,vin,licenseNo,seatCount,purchasePrice,vehicleUse,limitLoad,completeKerbMass,cartype,energyType,
+                username,modelCName,engineNo,vin,licenseNo,seatCount,purchasePrice,vehicleUse,limitLoad,completeKerbMass,cartype,energyType,enginedesc,
                 identifyNumber, uname, address,phone_number,
                 tb_identifyNumber, tb_uname, tb_address, tb_phone_number,
                 bb_identifyNumber, bb_uname, bb_address, bb_phone_number,

+ 258 - 0
blueprint/tk_api.py

@@ -0,0 +1,258 @@
+import traceback
+import flask
+import time
+import datetime
+
+import requests
+from flask import Blueprint
+from flask_cors import CORS
+from dateutil.relativedelta import relativedelta
+
+from logs.getlogs import *
+from spiders.taikang.baojia.tk_bfjs import tk_calculation
+from spiders.taikang.guishu.tk_config import *
+from spiders.taikang.guishu.tk_feichexian import get_feichexian
+from spiders.taikang.hebao.tk_hebao import TK_hebao
+from spiders.taikang.yingxiang.tk_phoupload import photo_up
+from spiders.taikang.baodan.tk_state import tk_Check
+from spiders.taikang.baodan.tk_bddownload import get_baodan
+
+taikang=Blueprint('tk',__name__)
+CORS(taikang, supports_credentials=True)
+
+
+@taikang.route('/tk/login',methods=['post'])
+def tk_login():
+    userinfo= flask.request.json
+    ret=set_userinfo(userinfo)
+    return  ret,200, {'Content-Type': 'application/json'}
+
+@taikang.route('/tk/bfjs',methods=['post'])
+def tk_bfjs():
+    log_starttime = time.time()
+    #车辆人员信息
+    username=flask.request.json.get('username')
+    modelCName = flask.request.json.get('carInfo').get('modelcname')
+    engineNo = flask.request.json.get('carInfo').get('engineNo')
+    vin = flask.request.json.get('carInfo').get('vinNo')
+    licenseNo = flask.request.json.get('carInfo').get('licenseNo')
+    seatCount = flask.request.json.get('carInfo').get('seatCount')
+    #排量
+    enginedesc=flask.request.json.get('carInfo').get('enginedesc')
+    #核定载质量
+    limitLoad=flask.request.json.get('carInfo').get('limitLoad')
+    # 整备质量
+    completeKerbMass = flask.request.json.get('carInfo').get('completeKerbMass')
+    purchasePrice = flask.request.json.get('carInfo').get('purchasePrice')
+    energyType = flask.request.json.get('carInfo').get('energyType')
+    cartype = flask.request.json.get('carInfo').get('cartype')
+
+    vehicleUse=flask.request.json.get('carInfo').get('vehicleUse')
+
+
+    identifyNumber=flask.request.json.get('ownerInfo').get('identifyNumber')
+    uname = flask.request.json.get('ownerInfo').get('name')
+    address = flask.request.json.get('ownerInfo').get('addr')
+    phone_number = flask.request.json.get('ownerInfo').get('mobile')
+
+    tb_identifyNumber = flask.request.json.get('policyHolderInfo').get('identifyNumber')
+    tb_uname = flask.request.json.get('policyHolderInfo').get('name')
+    tb_address = flask.request.json.get('policyHolderInfo').get('addr')
+    tb_phone_number = flask.request.json.get('policyHolderInfo').get('mobile')
+
+    bb_identifyNumber = flask.request.json.get('insuredPersonInfo').get('identifyNumber')
+    bb_uname = flask.request.json.get('insuredPersonInfo').get('name')
+    bb_address = flask.request.json.get('insuredPersonInfo').get('addr')
+    bb_phone_number = flask.request.json.get('insuredPersonInfo').get('mobile')
+
+
+
+
+    registerDate=flask.request.json.get('carInfo').get('registerDate')
+    issueDate=flask.request.json.get('carInfo').get('issueDate')
+    #交强过户标志
+    isTransfer=flask.request.json.get('carInfo').get('transferFlag')
+    #商业过户标志
+    isTransferbi = flask.request.json.get('carInfo').get('transferFlagBi')
+    #脱保标识
+    # isOutOfInsurance=flask.request.json.get('carInfo').get('outOfInsurance')
+    #非车险信息
+    accidentalDriving=flask.request.json.get('accidentalDriving')
+    #交强险、商业险是否选择。起始、结束时间默认参数
+    jiaoqiang_chooseFlag = 'False'
+    chesun_chooseFlag = 'False'
+    shangye_chooseFlag='False'
+
+    jiaoqiang_startDate = str(datetime.date.today() + relativedelta(days=1))+' 00:00:00'
+    jiaoqiang_endDate = str(datetime.date.today() + relativedelta(years=1) - relativedelta(days=1))+' 00:00:00'
+    chesun_startDate= str(datetime.date.today() + relativedelta(days=1))+' 00:00:00'
+    chesun_endDate= str(datetime.date.today() + relativedelta(years=1) - relativedelta(days=1))+' 00:00:00'
+    # 交强险、商业险是否选择。起始、结束时间传入参数
+    riskList = flask.request.json.get('riskList')
+    for i in riskList:
+        if i.get('riskCode') == '0507':
+            jiaoqiang_chooseFlag = 'on'
+            jiaoqiang_startDate = i.get('startDate')
+            jiaoqiang_startDate = jiaoqiang_startDate
+            jiaoqiang_endDate = i.get('endDate')
+            jiaoqiang_endDate = "".join(jiaoqiang_endDate)
+        elif i.get('riskCode') == '0510':
+            shangye_chooseFlag='on'
+            chesun_startDate = i.get('startDate')
+            chesun_startDate = "".join(chesun_startDate)
+            chesun_endDate = i.get('endDate')
+            chesun_endDate = "".join(chesun_endDate)
+
+    #附加险默认参数
+    sanzhe_chooseFlag='False'
+    sanzhe_amount='10'
+    sjzeren_chooseFlag='False'
+    sjzeren_amount='30000'
+    ckzeren_chooseFlag='False'
+    ckzeren_amount='30000'
+    huahen_chooseFlag='False'
+    huahen_amount='2000'
+    fujiachesun_chooseFlag='False'
+    fujiachesun_amount='0.05'
+    fujiasanzhe_chooseFlag = 'False'
+    fujiasanzhe_amount = '0.05'
+    fujiasiji_chooseFlag = 'False'
+    fujiasiji_amount = '0.05'
+    fujiachengke_chooseFlag = 'False'
+    fujiachengke_amount = '0.05'
+    fujia_jiejiari_chooseFlag = 'False'
+    fujia_jiejiari_amount = '2000000'
+    ybw_sanzhe_chooseFlag='False'
+    ybw_sanzhe_amount='0'
+    ybw_siji_chooseFlag='False'
+    ybw_siji_amount='0'
+    ybw_ck_chooseFlag='False'
+    ybw_ck_amount='0'
+    #附件险传入参数
+    kindList = flask.request.json.get('kindList')
+    for ii in kindList:
+        if ii.get('kindCode')=='B':
+            sanzhe_chooseFlag='on'
+            sanzhe_amount=str(int(ii.get('amount')))
+        elif ii.get('kindCode')=='A':
+            chesun_chooseFlag = 'on'
+        elif ii.get('kindCode')=='D3':
+            sjzeren_chooseFlag = 'on'
+            sjzeren_amount = ii.get('amount')
+        elif ii.get('kindCode')=='D4':
+            ckzeren_chooseFlag = 'on'
+            ckzeren_amount = ii.get('unitAmount')
+        elif ii.get('kindCode')=='L':
+            huahen_chooseFlag = 'on'
+            huahen_amount = ii.get('amount')
+        elif ii.get('kindCode')=='MJ1':
+            fujiachesun_chooseFlag = 'on'
+            fujiachesun_amount = str(int(ii.get('deductibleRate'))/100)
+        elif ii.get('kindCode')=='MJ2':
+            fujiasanzhe_chooseFlag = 'on'
+            fujiasanzhe_amount = str(int(ii.get('deductibleRate'))/100)
+        elif ii.get('kindCode')=='MJ3':
+            fujiasiji_chooseFlag = 'on'
+            fujiasiji_amount = str(int(ii.get('deductibleRate'))/100)
+        elif ii.get('kindCode')=='MJ4':
+            fujiachengke_chooseFlag = 'on'
+            fujiachengke_amount = str(int(ii.get('deductibleRate'))/100)
+        elif ii.get('kindCode')=='BD':
+            fujia_jiejiari_chooseFlag = 'on'
+            fujia_jiejiari_amount = ii.get('amount')
+        elif ii.get('kindCode') == 'SY_FJ_YBW1':
+            ybw_sanzhe_chooseFlag = 'on'
+            ybw_sanzhe_amount = ii.get('amount')
+        elif ii.get('kindCode') == 'SY_FJ_YBW3':
+            ybw_siji_chooseFlag = 'on'
+            ybw_siji_amount = ii.get('amount')
+        elif ii.get('kindCode') == 'SY_FJ_YBW2':
+            ybw_ck_chooseFlag = 'on'
+            ybw_ck_amount = ii.get('unitAmount')
+
+
+
+
+    carinfo = tk_calculation(#token、车辆、人员信息
+                username,modelCName,engineNo,vin,licenseNo,seatCount,purchasePrice,
+                vehicleUse,enginedesc,limitLoad,completeKerbMass,energyType,cartype,
+                identifyNumber, uname, address,phone_number,
+                tb_identifyNumber, tb_uname, tb_address, tb_phone_number,
+                bb_identifyNumber, bb_uname, bb_address, bb_phone_number,
+                registerDate,issueDate,isTransfer,isTransferbi,
+                #交强险、商业险是否选择,起止日期信息
+                 jiaoqiang_chooseFlag,chesun_chooseFlag,jiaoqiang_startDate,jiaoqiang_endDate,chesun_startDate,
+                 chesun_endDate,shangye_chooseFlag,
+                 #三者责任险、价格,司机、乘客责任险、价格,划痕险、价格
+                 sanzhe_chooseFlag,sanzhe_amount,sjzeren_chooseFlag,sjzeren_amount,ckzeren_chooseFlag,ckzeren_amount,huahen_chooseFlag,huahen_amount,
+                 #附加险信息
+                 fujiachesun_chooseFlag,fujiachesun_amount ,fujiasanzhe_chooseFlag ,fujiasanzhe_amount ,
+                fujiasiji_chooseFlag,fujiasiji_amount ,fujiachengke_chooseFlag ,fujiachengke_amount ,
+                fujia_jiejiari_chooseFlag ,fujia_jiejiari_amount,
+                ybw_sanzhe_chooseFlag, ybw_sanzhe_amount, ybw_siji_chooseFlag, ybw_siji_amount, ybw_ck_chooseFlag, ybw_ck_amount,
+                #脱保车标识
+                # isOutOfInsurance,
+                #非车险信息
+                accidentalDriving
+
+                )
+
+    try:
+        ret = carinfo.main()
+        log_endtime = time.time()
+
+        get_bfjslogger(tk_bj_log, log_endtime, log_starttime, '泰康')
+        return ret, 200, {'Content-Type': 'application/json'}
+    except Exception as err:
+        log_endtime = time.time()
+        get_bfjslogger(tk_bj_log, log_endtime, log_starttime, '泰康')
+        get_errlogger(tk_bj_log, err, traceback.format_exc() + '-------------- \n')
+        return {'code': 400, 'message': '程序异常'}, 200, {'Content-Type': 'application/json'}
+
+@taikang.route('/tk/jiaofei', methods=['post'])
+def tk_jiaofei():
+    log_starttime = time.time()
+    plyappno = flask.request.json.get('plyappno')
+    Hebao = TK_hebao(plyappno)
+    try:
+        ret = Hebao.main()
+        log_endtime = time.time()
+        get_hblogger(tk_hb_log, log_endtime, log_starttime, '泰康')
+        return ret, 200, {'Content-Type': 'application/json'}
+    except Exception as err:
+        log_endtime = time.time()
+        get_bfjslogger(tk_hb_log, log_endtime, log_starttime, '泰康')
+        get_errlogger(tk_hb_log, err, traceback.format_exc() + '-------------- \n')
+        return {'code': 400, 'message': '程序异常'}, 200, {'Content-Type': 'application/json'}
+
+@taikang.route('/tk/yxsc',methods=['post'])
+def tk_yxsc():
+    # plyappno = flask.request.json.get('plyappno')
+    # photolist = flask.request.json.get('b64pho_list')
+    # ret=photo_up(plyappno,photolist).main()
+    ret ={
+            'code': 200,
+            'message': '影像上传成功'
+        }
+    return ret, 200, {'Content-Type': 'application/json'}
+
+
+@taikang.route('/tk/fcx',methods=['post'])
+def tk_get_fcx():
+    ret=get_feichexian()
+    return ret, 200, {'Content-Type': 'application/json'}
+
+
+
+@taikang.route('/tk/check',methods=['post'])
+def tk_check():
+    plyappno = flask.request.json.get('plyappno')
+    ret=tk_Check(plyappno).main()
+    return ret, 200, {'Content-Type': 'application/json'}
+
+@taikang.route('/tk/baodan',methods=['post'])
+def tk_baodan():
+    plyappno = flask.request.json.get('plyappno')
+    ret=get_baodan(plyappno).main()
+    return ret, 200, {'Content-Type': 'application/json'}
+

+ 7 - 1
logs/getlogs.py

@@ -69,4 +69,10 @@ ed_hb_log=Get_logs('E店核保','edian','ed_hb').main()
 
 
 ht_bj_log=Get_logs('华泰报价','huatai','ht_bfjs').main()
-ht_hb_log=Get_logs('华泰核保','huatai','ht_hb').main()
+ht_hb_log=Get_logs('华泰核保','huatai','ht_hb').main()
+
+
+tk_bj_log=Get_logs('泰康报价','taikang','tk_bfjs').main()
+tk_hb_log=Get_logs('泰康核保','taikang','tk_hb').main()
+
+

+ 0 - 0
logs/taikang/__init__.py


+ 88 - 0
logs/taikang/泰康报价.log

@@ -0,0 +1,88 @@
+2024-06-21 10:47:22,621 - getlogs.py - line:27 - INFO - 泰康保费计算共用时4.91s -9256
+2024-06-21 14:57:47,377 - getlogs.py - line:27 - INFO - 泰康保费计算共用时0.54s -10404
+2024-06-21 14:57:47,378 - getlogs.py - line:34 - ERROR - Error: Cannot find module 'crypto-js'
+Require stack:
+- E:\text\[stdin] -10404
+2024-06-21 14:57:47,378 - getlogs.py - line:35 - ERROR - Traceback (most recent call last):
+  File "E:\text\blueprint\tk_api.py", line 201, in tk_bfjs
+    ret = carinfo.main()
+  File "E:\text\spiders\taikang\baojia\tk_bfjs.py", line 1033, in main
+    self.get_carinfo()
+  File "E:\text\spiders\taikang\baojia\tk_bfjs.py", line 361, in get_carinfo
+    res=eval(self.get_decrypt(response.json().get('data')).replace('false','False').replace('true','True').replace('null','None'))
+  File "E:\text\spiders\taikang\baojia\tk_bfjs.py", line 209, in get_decrypt
+    de_str=execjs.compile(js_code).call("Decrypt",x)
+  File "E:\text\venv\lib\site-packages\execjs\_abstract_runtime_context.py", line 37, in call
+    return self._call(name, *args)
+  File "E:\text\venv\lib\site-packages\execjs\_external_runtime.py", line 92, in _call
+    return self._eval("{identifier}.apply(this, {args})".format(identifier=identifier, args=args))
+  File "E:\text\venv\lib\site-packages\execjs\_external_runtime.py", line 78, in _eval
+    return self.exec_(code)
+  File "E:\text\venv\lib\site-packages\execjs\_abstract_runtime_context.py", line 18, in exec_
+    return self._exec_(source)
+  File "E:\text\venv\lib\site-packages\execjs\_external_runtime.py", line 88, in _exec_
+    return self._extract_result(output)
+  File "E:\text\venv\lib\site-packages\execjs\_external_runtime.py", line 167, in _extract_result
+    raise ProgramError(value)
+execjs._exceptions.ProgramError: Error: Cannot find module 'crypto-js'
+Require stack:
+- E:\text\[stdin]
+-------------- 
+ -10404
+2024-06-21 14:58:38,114 - getlogs.py - line:27 - INFO - 泰康保费计算共用时7.28s -14144
+2024-06-21 14:58:38,116 - getlogs.py - line:34 - ERROR - Invalid input of type: 'dict'. Convert to a bytes, string, int or float first. -14144
+2024-06-21 14:58:38,116 - getlogs.py - line:35 - ERROR - Traceback (most recent call last):
+  File "E:\text\blueprint\tk_api.py", line 201, in tk_bfjs
+    ret = carinfo.main()
+  File "E:\text\spiders\taikang\baojia\tk_bfjs.py", line 1037, in main
+    return self.bfjs()
+  File "E:\text\spiders\taikang\baojia\tk_bfjs.py", line 877, in bfjs
+    redis_conn.hset('taikang_' + self.orderNo, 'headers', self.headers)
+  File "E:\text\venv\lib\site-packages\redis\commands\core.py", line 5019, in hset
+    return self.execute_command("HSET", name, *items)
+  File "E:\text\venv\lib\site-packages\redis\client.py", line 536, in execute_command
+    return conn.retry.call_with_retry(
+  File "E:\text\venv\lib\site-packages\redis\retry.py", line 46, in call_with_retry
+    return do()
+  File "E:\text\venv\lib\site-packages\redis\client.py", line 537, in <lambda>
+    lambda: self._send_command_parse_response(
+  File "E:\text\venv\lib\site-packages\redis\client.py", line 512, in _send_command_parse_response
+    conn.send_command(*args)
+  File "E:\text\venv\lib\site-packages\redis\connection.py", line 465, in send_command
+    self._command_packer.pack(*args),
+  File "E:\text\venv\lib\site-packages\redis\connection.py", line 96, in pack
+    for arg in map(self.encode, args):
+  File "E:\text\venv\lib\site-packages\redis\_parsers\encoders.py", line 29, in encode
+    raise DataError(
+redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float first.
+-------------- 
+ -14144
+2024-06-21 15:00:09,768 - getlogs.py - line:27 - INFO - 泰康保费计算共用时7.29s -12144
+2024-06-21 15:00:09,770 - getlogs.py - line:34 - ERROR - Invalid input of type: 'dict'. Convert to a bytes, string, int or float first. -12144
+2024-06-21 15:00:09,770 - getlogs.py - line:35 - ERROR - Traceback (most recent call last):
+  File "E:\text\blueprint\tk_api.py", line 201, in tk_bfjs
+    ret = carinfo.main()
+  File "E:\text\spiders\taikang\baojia\tk_bfjs.py", line 1038, in main
+    return self.bfjs()
+  File "E:\text\spiders\taikang\baojia\tk_bfjs.py", line 878, in bfjs
+    redis_conn.hset('taikang_' + self.orderNo, 'headers', self.headers)
+  File "E:\text\venv\lib\site-packages\redis\commands\core.py", line 5019, in hset
+    return self.execute_command("HSET", name, *items)
+  File "E:\text\venv\lib\site-packages\redis\client.py", line 536, in execute_command
+    return conn.retry.call_with_retry(
+  File "E:\text\venv\lib\site-packages\redis\retry.py", line 46, in call_with_retry
+    return do()
+  File "E:\text\venv\lib\site-packages\redis\client.py", line 537, in <lambda>
+    lambda: self._send_command_parse_response(
+  File "E:\text\venv\lib\site-packages\redis\client.py", line 512, in _send_command_parse_response
+    conn.send_command(*args)
+  File "E:\text\venv\lib\site-packages\redis\connection.py", line 465, in send_command
+    self._command_packer.pack(*args),
+  File "E:\text\venv\lib\site-packages\redis\connection.py", line 96, in pack
+    for arg in map(self.encode, args):
+  File "E:\text\venv\lib\site-packages\redis\_parsers\encoders.py", line 29, in encode
+    raise DataError(
+redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float first.
+-------------- 
+ -12144
+2024-06-21 15:03:21,807 - getlogs.py - line:27 - INFO - 泰康保费计算共用时8.45s -12120

+ 0 - 0
logs/taikang/泰康核保.log


+ 11 - 6
spiders/hengbang/baojia/hb_bfjs.py

@@ -12,7 +12,7 @@ from spiders.hengbang.guishu.hb_config import *
 from config import *
 class hb_calculation(object):
     def __init__(  # token、车辆、人员信息
-            self,username, modelCName, engineNo, vin, licenseNo,seatCount, purchasePrice,vehicleUse,limitLoad,completeKerbMass,cartype,energyType,
+            self,username, modelCName, engineNo, vin, licenseNo,seatCount, purchasePrice,vehicleUse,limitLoad,completeKerbMass,cartype,energyType,enginedesc,
             identifyNumber, uname, address, phone_number,
             tb_identifyNumber, tb_uname, tb_address, tb_phone_number,
             bb_identifyNumber, bb_uname, bb_address, bb_phone_number,
@@ -51,7 +51,7 @@ class hb_calculation(object):
         self.bb_phone_number = bb_phone_number
 
         self.energyType=energyType
-
+        self.enginedesc=enginedesc
 
 
         self.token=None
@@ -284,7 +284,7 @@ class hb_calculation(object):
         params = {
             "licenseNo": "",
             "frameno": self.vin,
-            "companyCode": ""
+            "companyCode": "0107050301"
         }
         response = requests.get(url, headers=self.headers, params=params)
 
@@ -305,6 +305,7 @@ class hb_calculation(object):
         }
         response = requests.get('https://car.hbins.com.cn/backstage/api/car-model/vague', params=params,
                                 headers=self.headers)
+
         if response.json().get('content'):
             cars_list = response.json().get('content')
             for i in cars_list:
@@ -323,7 +324,11 @@ class hb_calculation(object):
                 "frameno": self.vin
             }
             response = requests.get(url, headers=self.headers, params=params)
-            modelCodes=",".join(response.json().get('modelCodes'))
+            modelCodes=response.json().get('modelCodes')
+            if modelCodes:
+                modelCodes=",".join(response.json().get('modelCodes'))
+            else:
+                modelCodes = ""
             url = "https://car.hbins.com.cn/backstage/api/car-model/vague"
             params = {
                 "modelCName": "",
@@ -386,8 +391,8 @@ class hb_calculation(object):
             'seatCount': str(self.seat),
             'countrynature': '',
             'purchasePrice': str(int(self.carinfo.get('purchasePrice'))),
-            'exhaustscale': str(int(self.carinfo.get('exhaustScale'))) if str(self.carinfo.get('exhaustScale'))!='None' else '0',
-            'exhaustScale': str(int(self.carinfo.get('exhaustScale'))) if str(self.carinfo.get('exhaustScale')) != 'None' else '0',
+            'exhaustscale': str(int(float(self.enginedesc)*1000)) if self.enginedesc else '0',
+            'exhaustScale':  str(int(float(self.enginedesc)*1000)) if self.enginedesc else '0',
             'power': self.carinfo.get('power'),
             'tonCount': self.limitLoad,
             'completeKerbMass': self.completeKerbMass,

+ 5 - 1
spiders/huanong/guishu/mabiao.py

@@ -6849,7 +6849,11 @@ mabiao=[
 		}, {
 			'code': '430182',
 			'value': '宁乡市'
-		}]
+		}, {
+			'code': '430182',
+			'value': '宁乡县'
+		}
+		]
 	}, {
 		'code': '430200',
 		'value': '株洲市',

+ 1 - 1
spiders/huatai/baodan/ht_state.py

@@ -117,7 +117,7 @@ class ht_Check():
             businessno = "".join(re.findall(r'businessno="(.*?)"',response.text))
 
             redis_conn.hset('huatai_' + self.plyappno, 'JQ_Application',businessno)
-            redis_conn.hset('huatai_' + self.plyappno, 'SY_Application',)
+            redis_conn.hset('huatai_' + self.plyappno, 'SY_Application',"")
             return {
                 'code': 200,
                 'state': 1,

+ 130 - 4
spiders/huatai/baojia/ht_bfjs.py

@@ -580,7 +580,7 @@ class ht_calculation(object):
                 "cmd": "carquery"
             }
             data = {
-                "vehiclemodel": "",
+                "vehiclemodel": self.modelCName,
                 "motortypecode": "A0 客车",
                 "motorusagetypecode": "8A 家庭自用",
                 "EACSP_MODEL_CODE_QUERY_new": str(int(time.time() * 1000)),
@@ -589,6 +589,7 @@ class ht_calculation(object):
                 "engineno": self.engineNo,
                 "vin": self.vin,
                 "pageno": "1",
+                "vehicleregisterdate":self.registerDate,
                 "rowsperpage": "10",
                 "reformRisk": "1251",
                 "modelcodexh": modelcodexh,
@@ -606,8 +607,50 @@ class ht_calculation(object):
                     self.carinfo=carinfo
                     break
             if self.carinfo=='':
-                self.carinfo=res.get('datalist')[0]
-
+                if res.get('datalist'):
+                    self.carinfo=res.get('datalist')[0]
+                else:
+                    url = "http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do"
+                    headers = {
+                        "Accept": "application/json, text/javascript, */*; q=0.01",
+                        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
+                        "Cache-Control": "no-cache",
+                        "Connection": "keep-alive",
+                        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
+                        "Origin": "http://172.16.100.37:9999",
+                        "Pragma": "no-cache",
+                        "Referer": "http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do?cmd=startProcess",
+                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
+                        "X-Requested-With": "XMLHttpRequest"
+                    }
+                    params = {
+                        "cmd": "carquery"
+                    }
+                    data={
+                        "vehiclemodel": self.modelCName,
+                        "motortypecode": "A0 客车",
+                        "motorusagetypecode": "8A 家庭自用",
+                        "madefactory": "",
+                        "importflag": "",
+                        "displacement": "",
+                        "marketyear": "",
+                        "limitload": "",
+                        "EACSP_MODEL_CODE_QUERY_new": str(int(time.time() * 1000)),
+                        "EACSP_MODEL_CODE_QUERY_old": "",
+                        "pageno": 1,
+                        "rowsperpage": "10",
+                        "reformRisk": "1251",
+                        "modelcodexh": ""
+                    }
+                    data = self.encrypt(data)
+                    response = requests.post(url, headers=headers, cookies=self.cookies, params=params, data=data, verify=False)
+                    res = self.decrypt(response.json())
+                    for carinfo in res.get('datalist'):
+                        if carinfo.get('purchaseprice') == self.purchasePrice:
+                            self.carinfo = carinfo
+                            break
+                    if self.carinfo == '':
+                        self.carinfo = res.get('datalist')[0]
             #从多条车型选中其中一条
             aa=json.dumps(self.carinfo, separators=(',', ':'),ensure_ascii=False)
             aa=parse.quote(aa)
@@ -649,6 +692,88 @@ class ht_calculation(object):
                     break
             if self.carinfo=='':
                 self.carinfo=res.get('datalist')[0]
+
+        else:
+            url = "http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do"
+            headers = {
+                "Accept": "application/json, text/javascript, */*; q=0.01",
+                "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
+                "Cache-Control": "no-cache",
+                "Connection": "keep-alive",
+                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
+                "Origin": "http://172.16.100.37:9999",
+                "Pragma": "no-cache",
+                "Referer": "http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do?cmd=startProcess",
+                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
+                "X-Requested-With": "XMLHttpRequest"
+            }
+            params = {
+                "cmd": "carquery"
+            }
+            data = {
+                "vehiclemodel": self.modelCName,
+                "motortypecode": "A0 客车",
+                "motorusagetypecode": "8A 家庭自用",
+                "EACSP_MODEL_CODE_QUERY_new": str(int(time.time() * 1000)),
+                "EACSP_MODEL_CODE_QUERY_old": "",
+                "licenseplateno": self.licenseNo,
+                "engineno": self.engineNo,
+                "vin": self.vin,
+                "pageno": "1",
+                "vehicleregisterdate": self.registerDate,
+                "rowsperpage": "10",
+                "reformRisk": "1251",
+                # "modelcodexh": modelcodexh,
+                "checkno": "",
+                "modelflag": "0",
+                "checkcode": "",
+                "gdjgvehiclecheckflag": "",
+                "jLlxVehicleList": "{}"
+            }
+            data = self.encrypt(data)
+            response = requests.post(url, headers=headers, cookies=self.cookies, params=params, data=data, verify=False)
+            res = self.decrypt(response.json())
+            for carinfo in res.get('datalist'):
+                if carinfo.get('purchaseprice') == self.purchasePrice:
+                    self.carinfo = carinfo
+                    break
+            if self.carinfo == '':
+                self.carinfo = res.get('datalist')[0]
+
+            # 从多条车型选中其中一条
+            aa = json.dumps(self.carinfo, separators=(',', ':'), ensure_ascii=False)
+            aa = parse.quote(aa)
+            car_modelinfo = res.get('datalist2')[0]
+            bb = json.dumps(car_modelinfo, separators=(',', ':'), ensure_ascii=False)
+            bb = parse.quote(bb)
+            headers = {
+                "Accept": "application/json, text/javascript, */*; q=0.01",
+                "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
+                "Cache-Control": "no-cache",
+                "Connection": "keep-alive",
+                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
+                "Origin": "http://172.16.100.37:9999",
+                "Pragma": "no-cache",
+                "Referer": "http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do?cmd=startProcess",
+                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
+                "X-Requested-With": "XMLHttpRequest"
+            }
+            url = "http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do"
+            params = {
+                "cmd": "savecarquery"
+            }
+            data = {
+                "carmodelStr": aa,
+                "commonoutputStr": bb,
+                "transcodeStr": res.get('transcodeStr'),
+                "pmquerynoStr": "",
+                "vin": self.vin,
+                "modelcodexh": self.carinfo.get('modelcodexh'),
+                "VehicleStyleUniqueId": ""
+            }
+            response = requests.post(url, headers=headers, cookies=self.cookies, params=params, data=data, verify=False)
+
+
     def get_peopleinfo(self):
         headers = {
             "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
@@ -1381,7 +1506,8 @@ class ht_calculation(object):
                 'sy_startDate': self.chesun_startDate if self.shangye_chooseFlag == 'on' else '',
                 'sy_endDate': self.get_enddate(self.chesun_startDate) if self.shangye_chooseFlag == 'on' else '',
                 'other': {
-                    'mark': mark,
+                    'sy_mark': '',
+                    'jq_mark':mark+'类',
                     'jq_discount': '',
                     'sy_discount': '',
                     'isQuoteGreenWay': '',

+ 60 - 9
spiders/huatai/hebao/ht_hebao.py

@@ -22,28 +22,68 @@ class HT_hebao(object):
         self.vatci = str(redis_conn.hget('huatai_' + plyappno, 'vatci'), 'utf8')
         self.mark=str(redis_conn.hget('huatai_' + plyappno, 'mark'), 'utf8')
 
-        validDate=redis_conn.hget('huatai_' + plyappno, 'validDate')
+        self.validDate=''
+        self.expireDate=''
+        self.bb_validDate=''
+        self.bb_expireDate=''
+
+
+
+
+    def get_validDate(self):
+        age = self.get_age(self.peopleinfo.get('identifyNumber'))
+        age1=self.get_age(self.peopleinfo.get('bb_identifyNumber'))
+        if int(age)>=46:
+            default_validDate='2023-10-31'
+            default_expireDate='2999-12-31'
+        elif 26<=int(age)<=45:
+            default_validDate = '2023-10-31'
+            default_expireDate = '2043-10-31'
+        elif 16<=int(age)<=25:
+            default_validDate = '2023-10-31'
+            default_expireDate = '2033-10-31'
+        elif int(age) <=16  :
+            default_validDate = '2023-10-31'
+            default_expireDate = '2028-10-31'
+
+        if int(age1)>=46:
+            default_validDate1='2023-10-31'
+            default_expireDate1='2999-12-31'
+        elif 26<=int(age1)<=45:
+            default_validDate1 = '2023-10-31'
+            default_expireDate1 = '2043-10-31'
+        elif 16<=int(age1)<=25:
+            default_validDate1 = '2023-10-31'
+            default_expireDate1 = '2033-10-31'
+        elif int(age1) <=16  :
+            default_validDate1 = '2023-10-31'
+            default_expireDate1 = '2028-10-31'
+
+        validDate=redis_conn.hget('huatai_' + self.plyappno, 'validDate')
         if validDate:
             self.validDate = str(validDate, 'utf8')
         else:
-            self.validDate='2022-10-31'
-        expireDate=redis_conn.hget('huatai_' + plyappno, 'expireDate')
+            self.validDate=default_validDate
+        expireDate=redis_conn.hget('huatai_' + self.plyappno, 'expireDate')
         if expireDate:
             self.expireDate = str(expireDate, 'utf8')
         else:
-            self.expireDate='2030-10-31'
+            self.expireDate=default_expireDate
 
-        bb_validDate = redis_conn.hget('huatai_' + plyappno, 'bb_validDate')
+
+
+
+        bb_validDate = redis_conn.hget('huatai_' + self.plyappno, 'bb_validDate')
         if bb_validDate:
             self.bb_validDate = str(bb_validDate, 'utf8')
         else:
-            self.bb_validDate=self.validDate
+            self.bb_validDate=default_validDate1
 
-        bb_expireDate = redis_conn.hget('huatai_' + plyappno, 'bb_expireDate')
+        bb_expireDate = redis_conn.hget('huatai_' + self.plyappno, 'bb_expireDate')
         if bb_expireDate:
             self.bb_expireDate = str(bb_expireDate, 'utf8')
         else:
-            self.bb_expireDate = self.expireDate
+            self.bb_expireDate = default_expireDate1
 
         # self.bb_validDate = str(redis_conn.hget('huatai_' + plyappno, 'bb_validDate'), 'utf8')
         # self.bb_expireDate = str(redis_conn.hget('huatai_' + plyappno, 'bb_expireDate'), 'utf8')
@@ -796,9 +836,20 @@ class HT_hebao(object):
                 }
 
         else:
-            return response.json()
+            message=re.findall(r'infomsg":"(.*?)"',response.text)
+            if message:
+                return {
+                    'code':400,
+                    'message':"\n".join(message)
+                }
+            else:
+                return {
+                    'code': 400,
+                    'message': str(response.text)
+                }
 
     def main(self):
+        self.get_validDate()
         return self.thjf()
 
 

+ 13 - 9
spiders/huatai/yingxiang/ht_phoupload.py

@@ -95,18 +95,22 @@ class photo_up(object):
         response = requests.get(url, headers=headers, cookies=cookies, params=params, verify=False)
         self.updata_info =response.json()
     def ys_photo(self,x):
-        from PIL import Image
-        with open(images_path+'huatai/'+'zz.jpg','wb') as f:
-            f.write(base64.b64decode(x))
+        # from PIL import Image
+        # with open(images_path+'huatai/'+'zz.jpg','wb') as f:
+        #     f.write(base64.b64decode(x))
 
 
-        img = Image.open(images_path+'huatai/'+'zz.jpg').convert('RGB')
-        img.save(images_path+'huatai/'+'sb.jpg', 'JPEG', quality=20)
+        # img = Image.open(images_path+'huatai/'+'zz.jpg').convert('RGB')
+        # img.save(images_path+'huatai/'+'sb.jpg', 'JPEG', quality=20)
 
-        with open(images_path+'huatai/'+'sb.jpg','rb') as f:
-            x=f.read()
-        os.remove(images_path+'huatai/'+'sb.jpg')
-        return str(base64.b64encode(x))[:-1].replace("b'", "")
+        # with open(images_path+'huatai/'+'sb.jpg','rb') as f:
+        #     x=f.read()
+        # os.remove(images_path+'huatai/'+'sb.jpg')
+
+        # with open(images_path + 'huatai/' + 'zz.jpg', 'rb') as f:
+        #     x=f.read()
+        # return str(base64.b64encode(x))[:-1].replace("b'", "")
+        return x
 
 
 

+ 0 - 0
spiders/taikang/Login/__init__.py


+ 123 - 0
spiders/taikang/Login/tk_login.py

@@ -0,0 +1,123 @@
+import base64
+import json
+import ddddocr
+import requests
+import execjs
+from config import *
+class TK_login(object):
+    def __init__(self,uname,pwd):
+        self.uname=uname
+        self.pwd=pwd
+        self.tkCarRequestToken=''
+
+    def get_captchaImg(self):
+        headers = {
+            "Accept": "application/json, text/plain, */*",
+            "Accept-Language": "zh-CN,zh;q=0.9",
+            "Cache-Control": "no-cache",
+            "Connection": "keep-alive",
+            "Content-Type": "application/json",
+            "Origin": "https://car.tk.cn",
+            "Pragma": "no-cache",
+            "Referer": "https://car.tk.cn/offwebNew/",
+            "Sec-Fetch-Dest": "empty",
+            "Sec-Fetch-Mode": "cors",
+            "Sec-Fetch-Site": "same-origin",
+            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+            "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
+            "sec-ch-ua-mobile": "?0",
+            "sec-ch-ua-platform": "\"Windows\""
+        }
+        url = "https://car.tk.cn/carSelfService/rest/controller/identity"
+        data = {
+            "channelCode": "OffWeb"
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers, data=data)
+        self.tkCarRequestToken=response.json().get('data').get('tkCarRequestToken')
+
+        headers = {
+            "Accept": "application/json, text/plain, */*",
+            "Content-Type": "application/json",
+            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+            "tkCarRequestToken":self.tkCarRequestToken
+        }
+        url = "https://car.tk.cn/carSelfService/rest/tplatform/getCaptcha"
+        data = {}
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers, data=data)
+        base64_image=response.json().get('data').replace('data:image/png;base64,','')
+        # with open('123.jpg','wb') as f:
+        #     f.write(base64.b64decode(base64_image))
+        ocr = ddddocr.DdddOcr(beta=True)
+        check_code = ocr.classification(base64_image)
+        url = "https://car.tk.cn/carSelfService/rest/tplatform/checkCaptcha"
+        data = {
+            "captchaCode": check_code
+        }
+        data = json.dumps(data)
+        response = requests.post(url, headers=headers, data=data)
+        if response.json().get('status')=='1':
+            pass
+        else:
+            self.get_captchaImg()
+
+
+    def get_aesencrypt(self,x):
+        jscode=open(js_path+'taikang/AES_ECB.js','r',encoding='utf8').read()
+        en_str=execjs.compile(jscode).call('Encrypt',x)
+        return en_str
+
+
+    def login(self):
+        import requests
+        import json
+
+        headers = {
+            "Accept": "application/json, text/plain, */*",
+            "Content-Type": "application/json",
+            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+            "tkCarRequestToken": self.tkCarRequestToken
+        }
+        url = "https://car.tk.cn/carSelfService/rest/tplatform/login"
+        data = {
+            "userName": self.uname,
+            "channelCode": "OffWeb",
+            "password": self.get_aesencrypt(self.pwd)
+        }
+        data = json.dumps(data)
+        response = requests.post(url, headers=headers, data=data)
+        if response.json().get('status')=='0':
+            return {
+                'code':400,
+                'message':response.json().get('message')
+            }
+        elif response.json().get('status')=='1':
+            tplatformId=response.json().get('data').get('tplatformId')
+            tplatLoginKey=response.json().get('data').get('tplatLoginKey')
+            fromid=response.json().get('data').get('websysUserVo').get('fromid')
+
+            return {
+                'code': 200,
+                'message': '登录成功',
+                'token':self.tkCarRequestToken,
+                'tplatformId':tplatformId,
+                'tplatLoginKey':tplatLoginKey,
+                'fromid':fromid,
+            }
+
+
+    def main(self):
+        self.get_captchaImg()
+        return self.login()
+
+
+
+if __name__ == '__main__':
+
+
+    aaa = TK_login('Tgengchenjie', 'Gcj123456#')
+    cookies=aaa.main()
+    print(cookies)
+
+

+ 0 - 0
spiders/taikang/__init__.py


+ 0 - 0
spiders/taikang/baodan/__init__.py


+ 145 - 0
spiders/taikang/baodan/tk_bddownload.py

@@ -0,0 +1,145 @@
+import json
+import execjs
+import requests
+from spiders.huatai.guishu.ht_config import *
+from config import *
+import urllib.parse
+
+class get_baodan():
+    def __init__(self,plyappno):
+        self.plyappno = plyappno
+        self.username = str(redis_conn.hget('taikang_' + plyappno, 'username'), 'utf8')
+        self.licenseNo = str(redis_conn.hget('taikang_' + plyappno, 'licenseNo'), 'utf8')
+        self.orderId = ''
+        self.orderId_old = str(redis_conn.hget('taikang_' + plyappno, 'orderId'), 'utf8')
+        self.agentCode = ''
+        self.tplatformId = ''
+        self.fromid = ''
+        self.tplatLoginKey = ''
+        self.check_info = ''
+        self.JYX_Policy = str(redis_conn.hget('taikang_' + plyappno, 'JYX_Policy'), 'utf8')
+        self.inputDate= str(redis_conn.hget('taikang_' + plyappno, 'inputDate'), 'utf8')
+        self.subPolicyNoCi=str(redis_conn.hget('taikang_' + plyappno, 'subPolicyNoCi'), 'utf8')
+        self.subPolicyNoBi = str(redis_conn.hget('taikang_' + plyappno, 'subPolicyNoBi'), 'utf8')
+        self.fcx_subPolicyNo = str(redis_conn.hget('taikang_' + plyappno, 'fcx_subPolicyNo'), 'utf8')
+        self.fcx_application=str(redis_conn.hget('taikang_' + plyappno, 'fcx_application'), 'utf8')
+    # 检查登录状态
+    def check_login(self):
+            # redis取出token
+            self.token = str(redis_conn.hget('taikang_' + self.username, 'token'), 'utf8')
+            if self.token == '':
+                self.token = '用户名、密码错误'
+
+            else:
+                self.agentCode = str(redis_conn.hget('taikang_' + self.username, 'agentCode'), 'utf8')
+                self.tplatformId = str(redis_conn.hget('taikang_' + self.username, 'tplatformId'), 'utf8')
+                self.fromid = str(redis_conn.hget('taikang_' + self.username, 'fromid'), 'utf8')
+                self.tplatLoginKey = str(redis_conn.hget('taikang_' + self.username, 'tplatLoginKey'), 'utf8')
+
+                headers = {
+                    "Accept": "application/json, text/javascript, */*; q=0.01",
+                    "Content-Type": "application/json",
+                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+                    "tkCarRequestToken": self.token
+                }
+
+                url = "https://car.tk.cn/carSelfService/rest/controller/getOrderId"
+                data = {
+                    "channelCode": "OffWeb"
+                }
+                data = json.dumps(data, separators=(',', ':'))
+                response = requests.post(url, headers=headers, data=data)
+                if response.json().get('status') == '1':
+                    self.orderId = response.json().get('data').get('orderId')
+                    url = "https://car.tk.cn/carSelfService/rest/controller/identity"
+                    data = {
+                        "channelCode": "OffWeb",
+                        "orderId": self.orderId
+                    }
+                    data = json.dumps(data, separators=(',', ':'))
+                    response = requests.post(url, headers=headers, data=data)
+                    self.headers = {
+                        "Accept": "application/json, text/javascript, */*; q=0.01",
+                        "Content-Type": "application/json",
+                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+                        "tkCarRequestToken": response.json().get('data').get('tkCarRequestToken')
+                    }
+                else:
+                    get_userinfo(self.username)
+                    self.check_login()
+
+    def get_orderNo(self):
+        url = "https://car.tk.cn/carSelfService/rest/image/download/policy"
+        jqx_policy_url=''
+        syx_policy_url=''
+        jyx_info_list=[]
+        paytime=''
+
+        if self.subPolicyNoBi:
+            params = {
+                "channelCode": "OffWeb",
+                "inputDate": self.inputDate,
+                "subPolicyNo": self.subPolicyNoBi
+            }
+            response = requests.get(url, headers=self.headers, params=params)
+            syx_policy_url=response.json().get('data')
+        if self.subPolicyNoCi:
+            params = {
+                "channelCode": "OffWeb",
+                "inputDate": self.inputDate,
+                "subPolicyNo": self.subPolicyNoCi
+            }
+            response = requests.get(url, headers=self.headers, params=params)
+            jqx_policy_url=response.json().get('data')
+        if self.fcx_subPolicyNo:
+            params = {
+                "channelCode": "OffWeb",
+                "inputDate": self.inputDate,
+                "subPolicyNo": self.fcx_subPolicyNo
+            }
+            response = requests.get(url, headers=self.headers, params=params)
+            fcx_dowloadURL=response.json().get('data')
+            jyx_info_list.append(
+                {
+                    'jyx_policy_url': fcx_dowloadURL,
+                    "application": self.fcx_application
+                }
+            )
+        ret={
+            'code': 200,
+            'jqx_policy_url': jqx_policy_url,
+            'jqx_flag_url': '',
+            'syx_policy_url': syx_policy_url,
+            'message': '成功',
+            'paytime': paytime,
+            'jyx_info_list': jyx_info_list
+        }
+        return ret
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    def main(self):
+        self.check_login()
+
+        if self.token == '用户名、密码错误':
+            return {
+                'code': 400,
+                'message': '用户名、密码错误'
+            }
+        else:
+            return self.get_orderNo()
+
+if __name__ == '__main__':
+    zz=get_baodan('text').main()
+    print(zz)

+ 179 - 0
spiders/taikang/baodan/tk_state.py

@@ -0,0 +1,179 @@
+from datetime import datetime, timedelta
+import json
+import re
+
+import execjs
+import requests
+from spiders.taikang.guishu.tk_config import *
+from config import  *
+
+
+class tk_Check():
+    def __init__(self,plyappno):
+        self.plyappno = plyappno
+        self.username = str(redis_conn.hget('taikang_' + plyappno, 'username'), 'utf8')
+        self.licenseNo = str(redis_conn.hget('taikang_' + plyappno, 'licenseNo'), 'utf8')
+        self.orderId=''
+        self.orderId_old= str(redis_conn.hget('taikang_' + plyappno, 'orderId'), 'utf8')
+        self.agentCode = ''
+        self.tplatformId =  ''
+        self.fromid =  ''
+        self.tplatLoginKey =  ''
+        self.check_info=''
+        self.JYX_Policy= str(redis_conn.hget('taikang_' + plyappno, 'JYX_Policy'), 'utf8')
+    # 检查登录状态
+    def check_login(self):
+        # redis取出token
+        self.token = str(redis_conn.hget('taikang_' + self.username, 'token'), 'utf8')
+        if self.token == '':
+            self.token = '用户名、密码错误'
+
+        else:
+            self.agentCode = str(redis_conn.hget('taikang_' + self.username, 'agentCode'), 'utf8')
+            self.tplatformId = str(redis_conn.hget('taikang_' + self.username, 'tplatformId'), 'utf8')
+            self.fromid = str(redis_conn.hget('taikang_' + self.username, 'fromid'), 'utf8')
+            self.tplatLoginKey = str(redis_conn.hget('taikang_' + self.username, 'tplatLoginKey'), 'utf8')
+
+            headers = {
+                "Accept": "application/json, text/javascript, */*; q=0.01",
+                "Content-Type": "application/json",
+                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+                "tkCarRequestToken": self.token
+            }
+
+            url = "https://car.tk.cn/carSelfService/rest/controller/getOrderId"
+            data = {
+                "channelCode": "OffWeb"
+            }
+            data = json.dumps(data, separators=(',', ':'))
+            response = requests.post(url, headers=headers, data=data)
+            if response.json().get('status') == '1':
+                self.orderId = response.json().get('data').get('orderId')
+                url = "https://car.tk.cn/carSelfService/rest/controller/identity"
+                data = {
+                    "channelCode": "OffWeb",
+                    "orderId": self.orderId
+                }
+                data = json.dumps(data, separators=(',', ':'))
+                response = requests.post(url, headers=headers, data=data)
+                self.headers = {
+                    "Accept": "application/json, text/javascript, */*; q=0.01",
+                    "Content-Type": "application/json",
+                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+                    "tkCarRequestToken": response.json().get('data').get('tkCarRequestToken')
+                }
+            else:
+                get_userinfo(self.username)
+                self.check_login()
+
+
+
+
+    def get_State(self):
+        now = datetime.now()
+        findStartDate = str(now - timedelta(days=30))[0:10]
+
+        url = "https://car.tk.cn/carSelfService/rest/order/management/agent/completeAgent"
+        data = {
+            "fromId": self.fromid,
+            "channelCode": "OffWeb",
+            "pageNo": 0,
+            "pageSizePerPage": 15,
+            "tplatformId": self.tplatformId,
+            "subAccountFlag": "",
+            "findStartDate": findStartDate,
+            "findEndDate": str(datetime.today())[0:10],
+            "licenseNo": self.licenseNo,
+            "engineNo": "",
+            "frameNo": "",
+            "appliName": "",
+            "insuredName": "",
+            "fullProposalNo": "",
+            "comCodeList": [],
+            "oaId": ""
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=self.headers,  data=data)
+        data_list=response.json().get('data').get('list')
+        if data_list:
+            for zz in data_list:
+                if zz.get('orderId')==self.orderId_old:
+                    self.check_info=zz
+                    break
+            if self.check_info:
+                JQ_Application=self.check_info.get('jqpolicyNo')
+                SY_Application=self.check_info.get('policyNo')
+                inputDate=self.check_info.get('inputDate')
+                subPolicyNoCi = self.check_info.get('subPolicyNoCi')
+                if subPolicyNoCi==None:
+                    subPolicyNoCi=''
+                subPolicyNoBi = self.check_info.get('subPolicyNoBi')
+                if subPolicyNoBi == None:
+                    subPolicyNoBi = ''
+
+                if self.check_info.get('nonVehiclePaymentVos'):
+                    application=self.check_info.get('nonVehiclePaymentVos')[0].get('nonCarPolicyNo')
+                    fcx_subPolicyNo=self.check_info.get('nonVehiclePaymentVos')[0].get('subPolicyNoJcbEnc')
+                    fcx_list=[
+                        {
+                            'policy': self.JYX_Policy,
+                            'application': application
+                        }
+                    ]
+                else:
+                    fcx_list=[]
+                    fcx_subPolicyNo=''
+                    application=''
+                redis_conn.hset('taikang_' + self.plyappno, 'subPolicyNoCi', subPolicyNoCi)
+                redis_conn.hset('taikang_' + self.plyappno, 'subPolicyNoBi', subPolicyNoBi)
+                redis_conn.hset('taikang_' + self.plyappno, 'fcx_subPolicyNo', fcx_subPolicyNo)
+                redis_conn.hset('taikang_' + self.plyappno, 'inputDate', inputDate)
+                redis_conn.hset('taikang_' + self.plyappno, 'fcx_application', application)
+
+
+                return {
+                        'code':200,
+                        #保单号
+                        'JQ_Application':JQ_Application,
+                        'SY_Application': SY_Application,
+                        'drivingInsurances': fcx_list,
+                        #状态
+                        'state':1
+                    }
+
+            else:
+                return {
+                'code': 200,
+                'state': 0,
+                'drivingInsurances': [],
+                'SY_Application': '',
+                'JQ_Application': '',
+            }
+
+
+
+
+        else:
+            return {
+                'code': 200,
+                'state': 0,
+                'drivingInsurances': [],
+                'SY_Application': '',
+                'JQ_Application': '',
+            }
+
+
+    def main(self):
+        self.check_login()
+        if self.token!='用户名、密码错误':
+            return self.get_State()
+        else:
+            return {
+                'code':400,
+                'message':'用户名、密码错误'
+            }
+
+if __name__ == '__main__':
+    Get_state=tk_Check('text')
+    aa=Get_state.main()
+    print(aa)

+ 0 - 0
spiders/taikang/baojia/__init__.py


+ 1051 - 0
spiders/taikang/baojia/tk_bfjs.py

@@ -0,0 +1,1051 @@
+# *_* coding:utf-8 *_*
+import json
+import re
+import time
+import datetime
+from spiders.taikang.guishu.tk_config import *
+import execjs
+import requests
+from urllib import  parse
+from config import *
+
+
+class tk_calculation(object):
+    def __init__(  # token、车辆、人员信息
+            self,username, modelCName, engineNo, vin, licenseNo,seatCount, purchasePrice,vehicleUse,
+            enginedesc,limitLoad,completeKerbMass,energyType,cartype,
+
+            identifyNumber, uname, address, phone_number,
+            tb_identifyNumber, tb_uname, tb_address, tb_phone_number,
+            bb_identifyNumber, bb_uname, bb_address, bb_phone_number,
+            registerDate, issueDate, isTransfer,isTransferbi,
+            # 交强险、商业险是否选择,起止日期信息
+            jiaoqiang_chooseFlag, chesun_chooseFlag, jiaoqiang_startDate, jiaoqiang_endDate, chesun_startDate,
+            chesun_endDate, shangye_chooseFlag,
+            # # 三者责任险、价格,司机、乘客责任险、价格,划痕险、价格
+            sanzhe_chooseFlag, sanzhe_amount, sjzeren_chooseFlag, sjzeren_amount, ckzeren_chooseFlag, ckzeren_amount,
+            huahen_chooseFlag, huahen_amount,
+            # # 附加险信息
+            fujiachesun_chooseFlag, fujiachesun_amount, fujiasanzhe_chooseFlag, fujiasanzhe_amount,
+            fujiasiji_chooseFlag, fujiasiji_amount, fujiachengke_chooseFlag, fujiachengke_amount,
+            fujia_jiejiari_chooseFlag, fujia_jiejiari_amount,
+            ybw_sanzhe_chooseFlag, ybw_sanzhe_amount,
+            ybw_siji_chooseFlag, ybw_siji_amount, ybw_ck_chooseFlag, ybw_ck_amount,
+            #脱保车标识
+            # isOutOfInsurance,
+
+            accidentalDriving
+
+    ):
+        self.username=username
+        self.uname = uname
+        self.address = address
+        self.phone_number = phone_number
+        self.identifyNumber = str(identifyNumber)
+
+        self.tb_identifyNumber = str(tb_identifyNumber)
+        self.tb_uname = tb_uname
+        self.tb_address = tb_address
+        self.tb_phone_number = tb_phone_number
+
+        self.bb_identifyNumber = str(bb_identifyNumber)
+        self.bb_uname = bb_uname
+        self.bb_address = bb_address
+        self.bb_phone_number = bb_phone_number
+
+        self.vehicleUse=vehicleUse
+        self.usage=''
+        #非营业家庭自用小车
+        if self.vehicleUse=='05':
+            self.usage='374001'
+        #非营业货车
+        elif self.vehicleUse=='08':
+            self.usage='374006'
+        #营业货车
+        elif self.vehicleUse == '04':
+            self.usage = '374010'
+        self.energyType = energyType
+        if self.energyType=='1' or self.energyType=='2' or self.energyType=='3':
+            self.energyType='1'
+        else:
+            self.energyType='0'
+
+        self.actualvalue=''
+
+        self.token=''
+        self.headers =''
+        self.cookie=''
+
+        self.modelCName = modelCName
+        self.engineNo = engineNo
+        self.vin = vin
+        self.licenseNo = licenseNo
+        if enginedesc:
+
+            self.enginedesc=str(int(float(enginedesc)*1000))
+        else:
+            self.enginedesc ='0'
+        self.limitLoad=limitLoad
+        self.completeKerbMass=completeKerbMass
+        self.purchasePrice = purchasePrice
+        self.cartype=cartype
+        # 交强险是否过户
+        self.isTransfer = '0' if isTransfer==False else '1'
+        # 商业险是否过户
+        self.isTransferbi = '0' if isTransferbi==False else '1'
+
+        self.registerDate = registerDate
+        self.issueDate = issueDate
+
+        # 保险起止日期
+        self.jiaoqiang_chooseFlag = jiaoqiang_chooseFlag
+        self.chesun_chooseFlag = chesun_chooseFlag
+        self.shangye_chooseFlag = shangye_chooseFlag
+        self.jiaoqiang_startDate = jiaoqiang_startDate
+        self.jiaoqiang_endDate = jiaoqiang_endDate
+        self.chesun_startDate = chesun_startDate
+        self.chesun_endDate = chesun_endDate
+
+        # 商业险选择信息
+        self.sanzhe_chooseFlag = sanzhe_chooseFlag
+        self.sanzhe_amount = sanzhe_amount
+        self.sjzeren_chooseFlag = sjzeren_chooseFlag
+        self.sjzeren_amount = sjzeren_amount
+        self.ckzeren_chooseFlag = ckzeren_chooseFlag
+        self.ckzeren_amount = ckzeren_amount
+        self.huahen_chooseFlag = huahen_chooseFlag
+        self.huahen_amount = huahen_amount
+
+        # 附加险选择信息
+        self.fujiachesun_chooseFlag = fujiachesun_chooseFlag
+        self.fujiachesun_amount = fujiachesun_amount
+        self.fujiasanzhe_chooseFlag = fujiasanzhe_chooseFlag
+        self.fujiasanzhe_amount = fujiasanzhe_amount
+        self.fujiasiji_chooseFlag = fujiasiji_chooseFlag
+        self.fujiasiji_amount = fujiasiji_amount
+        self.fujiachengke_chooseFlag = fujiachengke_chooseFlag
+        self.fujiachengke_amount = fujiachengke_amount
+        self.fujia_jiejiari_chooseFlag = fujia_jiejiari_chooseFlag
+        self.fujia_jiejiari_amount = fujia_jiejiari_amount
+
+        # 医保外
+        self.ybw_sanzhe_chooseFlag = ybw_sanzhe_chooseFlag
+        self.ybw_sanzhe_amount = ybw_sanzhe_amount
+        self.ybw_siji_chooseFlag = ybw_siji_chooseFlag
+        self.ybw_siji_amount = ybw_siji_amount
+        self.ybw_ck_chooseFlag = ybw_ck_chooseFlag
+        self.ybw_ck_amount = ybw_ck_amount
+
+        #非车险信息
+        self.accidentalDriving=accidentalDriving
+        self.fcProductList=[]
+
+        #座位数
+        self.seat=seatCount
+
+        self.carinfo = ''
+        #险种价格
+        self.jq_price=0
+        self.sy_price = 0
+        self.ccs_price=0
+        self.cs_price=0
+        self.sz_price=0
+        self.sj_price=0
+        self.ck_price=0
+        self.ybw_sz=0
+        self.ybw_sj = 0
+        self.ybw_ck=0
+        self.huahen_price=0
+        self.all_price=0
+
+        self.fcx_price=0
+
+        self.gs_info=''
+        self.orderId=''
+        self.agentCode=''
+        self.userdata=''
+        self.areaInfoVo=''
+        self.carInfoVo=''
+        self.data=''
+        self.messageBZ=''
+        self.messageCI=''
+        self.cs_message=''
+        self.vehicleOwnerMessage=''
+    # 获取城市代码
+    # def get_citycode(self, addr):
+    #     city_list = []
+    #     for i in city_code:
+    #         for o in i.get('children'):
+    #             for p in o.get('children'):
+    #                 if p.get('areaName') in addr:
+    #                     province_code = i.get('areaCode')
+    #                     citycode = o.get('areaCode')
+    #                     county_code = p.get('areaCode')
+    #                     city_list = [province_code, citycode, county_code]
+    #                     return city_list
+    #     return city_list
+
+    def get_enddate(self,x):
+        x = x.split('-')
+        x[0] = str(int(x[0]) + 1)
+        x = "-".join(x)
+        try:
+            timeArray = time.strptime(x, '%Y-%m-%d %H:%M:%S')
+        except Exception as err:
+            if str(err) == 'day is out of range for month':
+                x = x.split(' ')
+                x[0] = x[0].split('-')
+                x[0][-1] = str(int(x[0][-1]) - 1)
+                x[0] = "-".join(x[0])
+                x = " ".join(x)
+                timeArray = time.strptime(x, '%Y-%m-%d %H:%M:%S')
+        timeStamp = int(time.mktime(timeArray)) - 1
+        time_local = time.localtime(timeStamp)
+        dt = time.strftime('%Y-%m-%d %H:%M:%S', time_local)
+        return dt
+
+    def get_decrypt(self,x):
+        js_code = open(js_path+'taikang/AES_ECB.js','r').read()
+        de_str=execjs.compile(js_code).call("Decrypt",x)
+        return de_str
+
+    def get_uuid(self):
+        js_code=open(js_path+'taikang/get_uuid.js','r').read()
+        return  execjs.compile(js_code).call('wA')
+
+    #检查登录状态
+    def check_login(self):
+        # redis取出token
+        self.token = str(redis_conn.hget('taikang_' + self.username, 'token'), 'utf8')
+        if self.token == '':
+            self.token = '用户名、密码错误'
+
+        else:
+            self.agentCode=str(redis_conn.hget('taikang_' + self.username, 'agentCode'), 'utf8')
+            self.tplatformId = str(redis_conn.hget('taikang_' + self.username, 'tplatformId'), 'utf8')
+            self.fromid = str(redis_conn.hget('taikang_' + self.username, 'fromid'), 'utf8')
+            self.tplatLoginKey= str(redis_conn.hget('taikang_' + self.username, 'tplatLoginKey'), 'utf8')
+
+
+
+
+
+            headers = {
+                "Accept": "application/json, text/javascript, */*; q=0.01",
+                "Content-Type": "application/json",
+                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+                "tkCarRequestToken": self.token
+            }
+
+            url = "https://car.tk.cn/carSelfService/rest/controller/getOrderId"
+            data = {
+                "channelCode": "OffWeb"
+            }
+            data = json.dumps(data, separators=(',', ':'))
+            response = requests.post(url, headers=headers,  data=data)
+            if response.json().get('status')=='1':
+                self.orderId=response.json().get('data').get('orderId')
+                url = "https://car.tk.cn/carSelfService/rest/controller/identity"
+                data = {
+                    "channelCode": "OffWeb",
+                    "orderId": self.orderId
+                }
+                data = json.dumps(data, separators=(',', ':'))
+                response = requests.post(url, headers=headers, data=data)
+                self. headers = {
+                "Accept": "application/json, text/javascript, */*; q=0.01",
+                "Content-Type": "application/json",
+                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
+                "tkCarRequestToken": response.json().get('data').get('tkCarRequestToken')
+            }
+            else:
+                get_userinfo(self.username)
+                self.check_login()
+
+
+    #获取归属信息
+    def get_guishu(self):
+        url = "https://car.tk.cn/carSelfService/rest/agent/query"
+        data = {
+            "fromId": "64827",
+            "tplatformId": self.tplatformId,
+            "agentCode": self.agentCode,
+            "agencyKeyword": "泰康人寿(个险)(64827)",
+            "lifeAgencyCode": "J",
+            "property": "2",
+            "orderID": self.orderId
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=self.headers, data=data)
+        self.gs_info=response.json().get('data')
+        # {
+        #     "agentName": "白爱珍",
+        #     "agentCode": "82004884",
+        #     "agentPhone": "13835109685",
+        #     "agencyName": "山西分公司",
+        #     "agencyCode": "R10",
+        #     "aracde": "115",
+        #     "status": "1",
+        #     "errorMessage": None,
+        #     "comCode": "R10115",
+        #     "fromID": "64827",
+        #     "intermediaryCode": None,
+        #     "intermediaryName": None
+        # }
+        url = "https://car.tk.cn/carSelfService/rest/area/user"
+        data = {
+            "tplatformId": self.tplatformId,
+            "agencyKeyword": "",
+            "lifeAgencyCode": "J",
+            "property": "2",
+            "orderID": self.orderId,
+            "fromId": "64827",
+            "agentCode": self.agentCode
+        }
+        data = json.dumps(data)
+        response = requests.post(url, headers=self.headers, data=data)
+        self.userdata=response.json().get('data')[0]
+        self.areaInfoVo={
+                "agent": {
+                    "comCode": "0114",
+                    "intermediaryName": "泰康人寿(个险)(64827)",
+                    "agentCode": self.agentCode,
+                    "agentName": self.gs_info.get('agentName'),
+                    "agencyName": self.gs_info.get('agencyName'),
+                    "agencyCode": self.gs_info.get('comCode'),
+                    "agentPhone": self.gs_info.get('agentPhone'),
+                    "status": self.gs_info.get('status'),
+                    "intermediaryCode": "000000000004",
+                    "fromID": "64827"
+                },
+                "channelCode": "OffWeb",
+                "orderID": self.orderId,
+                "bjFlag": 0,
+                "licenseNo":self.licenseNo,
+                "isNewCarWithoutLicense": 0,
+                "provinceName": self.userdata.get('provinceName'),
+                "provinceCode":  self.userdata.get('provinceCode'),
+                "cityName":  self.userdata.get('cityList')[0].get('cityName'),
+                "cityCode": self.userdata.get('cityList')[0].get('cityCode'),
+                "areaFlag": self.userdata.get('cityList')[0].get('cityCode'),
+                "comCode": self.userdata.get('cityList')[0].get('comCode'),
+                "renewalFlag": "",
+                "clientType": "",
+                "fromID": self.fromid ,
+                "formID": self.fromid ,
+                "tplatformId":self.tplatformId,
+                "leadsId": ""
+            }
+
+
+    #获取车辆信息
+    def get_carinfo(self):
+        url = "https://car.tk.cn/carSelfService/rest/car/modelinfo/query"
+        data = {
+            "orderID": self.orderId,
+            "channelCode": "OffWeb",
+            "carInfoVo": {
+                "isQueryCarByOCR": "3",
+                "carType": "A",
+                "vinNo": self.vin,
+                "operateFlag": "3"
+            },
+            "fromId": self.fromid,
+            "tplatformId": self.tplatformId,
+            "areaInfoVo": self.areaInfoVo,
+            "premiumTrialFlag": "0",
+            "tplatLoginKey": self.tplatLoginKey
+        }
+        data = json.dumps(data)
+        response = requests.post(url, headers=self.headers, data=data)
+        res=eval(self.get_decrypt(response.json().get('data')).replace('false','False').replace('true','True').replace('null','None'))
+        for i in res.get('data').get('carModel'):
+            if self.purchasePrice==i.get('vehicleJingyou').get('price').replace('.0',''):
+                self.carinfo=i
+                break
+        if self.carinfo:
+            pass
+        elif res.get('data').get('carModel') and self.carinfo=='':
+            self.carinfo=res.get('data').get('carModel')[0]
+
+    #
+    def get_next(self):
+        self.carInfoVo={
+                "isQueryCarByOCR": "3",
+                "operateFlag": "4",
+                "carCheckVo": {
+                    "checkCode": "",
+                    "pmQueryNo": "",
+                    "checkFlag": ""
+                },
+                #燃料类型
+                "fuelType": "0",
+                "carType": "A",
+                "carModel": [
+                    self.carinfo
+                ],
+                "useNatureCodeCode": "8A",
+                "modelName": self.modelCName,
+                "licenseNo": self.licenseNo,
+                "vinNo": self.vin,
+                "engineNo": self.engineNo,
+                "enrollDate": self.registerDate,
+                "billDate": "",
+                "carBookingTime": "",
+                "billNo": "",
+                "chgOwnerFlag": self.isTransfer,
+                "transferDate": "" if self.isTransfer=='0' else self.issueDate,
+                "selectedSeat": self.seat,
+                "licenseType": "02",
+                "licenseTypeChinese": "小型汽车号牌",
+                "carOwnerNature": "1",
+                #排量
+                "exhaustScale": self.enginedesc,
+                "seatFlag": 1
+            }
+        url = "https://car.tk.cn/carSelfService/rest/car/modelinfo/query"
+        data = {
+            "orderID": self.orderId,
+            "channelCode": "OffWeb",
+            "carInfoVo": self.carInfoVo,
+            "carOwnerVo": {
+                "carOwnerNature": "1",
+                "name": self.uname,
+                "id":self.identifyNumber,
+                "certificateType": "01"
+            },
+            "tplatformId": self.tplatformId,
+            "fromId": self.fromid,
+            "areaInfoVo": self.areaInfoVo,
+            "tplatLoginKey": self.tplatLoginKey
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=self.headers, data=data)
+
+        res = eval(self.get_decrypt(response.json().get('data')).replace('false', 'False').replace('true', 'True').replace('null', 'None'))
+        self.carInfoVo['carModel']=[res.get('data').get('carModel')[0]]
+        self.carinfo=res.get('data').get('carModel')[0]
+
+
+        check_carinfo=self.carInfoVo.copy()
+        del check_carinfo['isQueryCarByOCR']
+        del check_carinfo['operateFlag']
+        del check_carinfo['carCheckVo']
+        del check_carinfo['carOwnerNature']
+        check_carinfo['purchasePrice']=res.get('data').get('carModel')[0].get('vehicleJingyou').get('price').replace('.0','')
+        check_carinfo['brandName'] = res.get('data').get('carModel')[0].get('vehicleJingyou').get('vehicleName')
+        check_carinfo['tonnageFlag']='0'
+
+        url = "https://car.tk.cn/carSelfService/rest/car/modelinfo/checkVehicleType"
+        data = {
+            "carInfoVo": check_carinfo,
+            "channelCode": "OffWeb",
+            "orderId": self.orderId
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=self.headers, data=data)
+
+        if response.json().get('data')=='交管车辆类型校验成功':
+            kindLimitCode=''
+            if self.jiaoqiang_chooseFlag=='on' and  self.shangye_chooseFlag=='on':
+                pass
+            elif self.jiaoqiang_chooseFlag=='on' and self.shangye_chooseFlag!='on':
+                kindLimitCode='1'
+            elif self.jiaoqiang_chooseFlag != 'on' and self.shangye_chooseFlag == 'on':
+                kindLimitCode = '2'
+
+            url = "https://car.tk.cn/carSelfService/rest/save/basicInfo"
+            data = {
+                "channelCode": "OffWeb",
+                "orderID": self.orderId,
+                "renewalFlag": "",
+                "isJgFlag": "",
+                "carInfoVo": check_carinfo,
+                "carOwnerVo": {
+                    "carOwnerNature": "1",
+                    "birthDate": self.identifyNumber[6:10]+"-"+self.identifyNumber[10:12]+"-"+self.identifyNumber[12:14],
+                    "name": self.uname,
+                    "id": self.identifyNumber,
+                    "certificateType": "01",
+                    "serialno": "0",
+                    "sex": 1,
+                    "insuredAddress": ""
+                },
+                "otherInfo": {
+                    "isQueryVehicleFlag": False,
+                    "showEngineNoFlag": "1",
+                    "jyQueryFlag": False,
+                    "newCarFlag": "0",
+                    #
+                    "kindLimitCode": kindLimitCode,
+                    "retrospectId": self.get_uuid()
+                },
+                "insureInfo": {
+                    "appliInfo": {},
+                    "contacts": {},
+                    "insuredInfo": {}
+                },
+                "carTaxVo": {
+                    "isPayTax": "1"
+                },
+                "tplatformId": self.tplatformId,
+                "authFailContinueFlag": "",
+                "fromId": self.fromid,
+                "areaInfoVo": self.areaInfoVo,
+                "tplatLoginKey": self.tplatLoginKey
+            }
+            data = json.dumps(data, separators=(',', ':'))
+            response = requests.post(url, headers=self.headers, data=data)
+
+
+            url = "https://car.tk.cn/carSelfService/rest/precise/init"
+            data = {
+                "channelCode": "OffWeb",
+                "orderID": self.orderId,
+                "initFlag": "init",
+                "tplatformId": self.tplatformId,
+                "tplatLoginKey": self.tplatLoginKey
+            }
+            data = json.dumps(data, separators=(',', ':'))
+            response = requests.post(url, headers=self.headers, data=data)
+            self.check_vehicleOwnerMessage(response)
+
+        else:
+            print(response.text)
+
+    def check_vehicleOwnerMessage(self,response):
+        self.data = response.json().get('data')
+
+        self.messageBZ = response.json().get('data').get('other').get('messageBZ')
+        if self.messageBZ == None:
+            self.messageBZ = ''
+
+        self.messageCI = response.json().get('data').get('other').get('messageCI')
+        if self.messageCI == None:
+            self.messageCI = ''
+        if self.chesun_chooseFlag == 'on':
+            self.cs_message = response.json().get('data').get('other').get('notice')
+        self.vehicleOwnerMessage = "".join(re.findall(r'"vehicleOwnerMessage":"(.*?)"', response.text))
+
+        if self.vehicleOwnerMessage:
+            if '商业险:未传送车辆过户标志' in self.vehicleOwnerMessage:
+                if self.isTransferbi == '1':
+                    url = "https://car.tk.cn/carSelfService/rest/precise/init"
+                    data = {
+                        "channelCode": "OffWeb",
+                        "orderID": self.orderId,
+                        "initFlag": "init",
+                        "chgOwnerInfo": {
+                            "startDateBZ": "",
+                            "startDateCIP": "",
+                            "chgOwnerFlagBZ": "0",
+                            "chgOwnerFlagCIP": self.isTransferbi,
+                            "InstantInureFlagCI": "0",
+                            "InstantInureFlagBI": "0",
+                            "transferDate": self.issueDate
+                        }
+                    }
+                    data = json.dumps(data, separators=(',', ':'))
+                    response = requests.post(url, headers=self.headers, data=data)
+                    self.check_vehicleOwnerMessage(response)
+                    # self.data = response.json().get('data')
+                    # self.vehicleOwnerMessage = ''
+
+    def bfjs(self):
+        if self.messageBZ or self.messageCI or self.cs_message or self.vehicleOwnerMessage:
+            return  {
+                'code':400,
+                "message":self.messageBZ+'-----------'+self.messageCI+'-----------'+self.cs_message+'-----------'+self.vehicleOwnerMessage
+            }
+        else:
+            if self.shangye_chooseFlag!='on' and self.jiaoqiang_chooseFlag=='on':
+                self.data['driverAccidentVo']['isSelect']='0'
+                self.data['driverAccidentVo']['quantityCname'] = '不投保'
+                self.data['driverAccidentVo']['quantity'] = 0
+                self.data['other']['fromID'] = self.fromid
+                self.data['other']['channelCode'] = 'OffWeb'
+                self.data['other']['notice'] = ''
+                self.data['other']['messageBZ'] = ''
+                self.data['other']['messageCI'] = ''
+                self.data['chargingPost']=[]
+                self.data['riskType'] ='0808'
+                self.data['initFlag'] = 'quote'
+                self.data['orderID'] = self.orderId
+                self.data['carTaxInfo'] = { "taxFlag": "T"}
+                self.data['tplatformId'] = self.tplatformId
+                self.data['tplatLoginKey'] = self.tplatLoginKey
+            elif self.shangye_chooseFlag=='on' and self.jiaoqiang_chooseFlag!='on':
+                ciKindsVo_list=[]
+                for zz in self.data.get('ciKindsVo'):
+                    if zz.get('kindCName')=='车辆损失保险':
+                        zz['isSelect'] = '0'
+                        if self.chesun_chooseFlag=='on':
+                            zz['bjSelect']='0'
+                            zz['isSelect']='1'
+                        self.actualvalue=str(zz.get('quoteAmount'))
+                        zz['quoteAmountCN']=str(zz.get('quoteAmount'))+'0'
+                        zz['quoteAmount'] = str(zz.get('quoteAmount')) + '0'
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='第三者责任保险':
+                        zz['isSelect'] = '0'
+                        if self.sanzhe_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            zz['quoteAmount']=self.sanzhe_amount
+                            a=str(int(int(self.sanzhe_amount)/10000))+'万'
+                            zz['quoteAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='车上人员责任保险(司机)':
+                        zz['isSelect'] = '0'
+                        if self.sjzeren_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a=str(int(int(self.sjzeren_amount)/10000))+'万'
+                            zz['quoteAmount'] = self.sjzeren_amount
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.sjzeren_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='车上人员责任保险(乘客)':
+                        zz['isSelect'] = '0'
+                        if self.ckzeren_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a=str(int(int(self.sjzeren_amount)/10000))+'万'
+                            zz['quantity'] = str(int(self.seat)-1)
+                            zz['quoteAmount'] = str(int(self.sjzeren_amount)*(int(self.seat)-1))
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.sjzeren_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='车身划痕损失险':
+                        zz['isSelect'] = '0'
+                        if self.huahen_chooseFlag=='on':
+                            zz['bjSelect']='0'
+                            zz['isSelect']='1'
+                            zz['quoteAmount'] = self.huahen_amount
+                            zz['quoteAmountCN']=self.huahen_amount
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='附加医保外医疗费用责任险(三者)':
+                        zz['isSelect'] = '0'
+                        if self.ybw_sanzhe_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            zz['quoteAmount']=self.ybw_sanzhe_amount
+                            a=str(int(int(self.ybw_sanzhe_amount)/10000))+'万'
+                            zz['quoteAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='附加医保外医疗费用责任险(车上人员(司机))':
+                        zz['isSelect'] = '0'
+                        if self.ybw_siji_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a=str(int(int(self.ybw_siji_amount)/10000))+'万'
+                            zz['quoteAmount'] = self.ybw_siji_amount
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.ybw_siji_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='附加医保外医疗费用责任险(车上人员(乘客))':
+                        zz['isSelect'] = '0'
+                        if self.ybw_ck_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a=str(int(int(self.ybw_ck_amount)/10000))+'万'
+                            zz['quantity'] = str(int(self.seat)-1)
+                            zz['quoteAmount'] = str(int(self.ybw_ck_amount)*(int(self.seat)-1))
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.ybw_ck_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='道路救援服务特约条款':
+                        zz['isSelect'] = '0'
+                        if self.sanzhe_chooseFlag == 'on' or self.chesun_chooseFlag=='on':
+                            zz['isSelect'] = '1'
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName')=='代为送检服务特约条款':
+                        zz['isSelect'] = '0'
+                        if self.chesun_chooseFlag=='on':
+                            zz['isSelect'] = '1'
+                        ciKindsVo_list.append(zz)
+                    else :
+                        zz['isSelect'] = '0'
+                        zz['quoteAmountCN']='不投保'
+                        zz['bjSelect']='0'
+                        ciKindsVo_list.append(zz)
+                self.data['ciKindsVo']=ciKindsVo_list
+                self.data['driverAccidentVo']['isSelect'] = '0'
+                self.data['driverAccidentVo']['quantityCname'] = '不投保'
+                self.data['driverAccidentVo']['quantity'] = 0
+                self.data['other']['fromID'] = self.fromid
+                self.data['other']['channelCode'] = 'OffWeb'
+                self.data['other']['notice'] = ''
+                self.data['other']['messageBZ'] = ''
+                self.data['other']['messageCI'] = ''
+                self.data['chargingPost'] = []
+                self.data['riskType'] = '0808'
+                self.data['initFlag'] = 'quote'
+                self.data['orderID'] = self.orderId
+                self.data['carTaxInfo'] = {}
+                self.data['tplatformId'] = self.tplatformId
+                self.data['tplatLoginKey'] = self.tplatLoginKey
+            elif self.shangye_chooseFlag=='on' and self.jiaoqiang_chooseFlag=='on':
+                ciKindsVo_list = []
+                for zz in self.data.get('ciKindsVo'):
+                    if zz.get('kindCName') == '车辆损失保险':
+                        zz['isSelect'] = '0'
+                        if self.chesun_chooseFlag == 'on':
+                            zz['bjSelect'] = '0'
+                            zz['isSelect'] = '1'
+                        self.actualvalue = str(zz.get('quoteAmount'))
+                        zz['quoteAmountCN'] = str(zz.get('quoteAmount')) + '0'
+                        zz['quoteAmount'] = str(zz.get('quoteAmount')) + '0'
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '第三者责任保险':
+                        zz['isSelect'] = '0'
+                        if self.sanzhe_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            zz['quoteAmount'] = self.sanzhe_amount
+                            a = str(int(int(self.sanzhe_amount) / 10000)) + '万'
+                            zz['quoteAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '车上人员责任保险(司机)':
+                        zz['isSelect'] = '0'
+                        if self.sjzeren_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a = str(int(int(self.sjzeren_amount) / 10000)) + '万'
+                            zz['quoteAmount'] = self.sjzeren_amount
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.sjzeren_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '车上人员责任保险(乘客)':
+                        zz['isSelect'] = '0'
+                        if self.ckzeren_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a = str(int(int(self.sjzeren_amount) / 10000)) + '万'
+                            zz['quantity'] = str(int(self.seat) - 1)
+                            zz['quoteAmount'] = str(int(self.sjzeren_amount) * (int(self.seat) - 1))
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.sjzeren_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '车身划痕损失险':
+                        zz['isSelect'] = '0'
+                        if self.huahen_chooseFlag == 'on':
+                            zz['bjSelect'] = '0'
+                            zz['isSelect'] = '1'
+                            zz['quoteAmount'] = self.huahen_amount
+                            zz['quoteAmountCN'] = self.huahen_amount
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '附加医保外医疗费用责任险(三者)':
+                        zz['isSelect'] = '0'
+                        if self.ybw_sanzhe_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            zz['quoteAmount'] = self.ybw_sanzhe_amount
+                            a = str(int(int(self.ybw_sanzhe_amount) / 10000)) + '万'
+                            zz['quoteAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '附加医保外医疗费用责任险(车上人员(司机))':
+                        zz['isSelect'] = '0'
+                        if self.ybw_siji_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a = str(int(int(self.ybw_siji_amount) / 10000)) + '万'
+                            zz['quoteAmount'] = self.ybw_siji_amount
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.ybw_siji_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '附加医保外医疗费用责任险(车上人员(乘客))':
+                        zz['isSelect'] = '0'
+                        if self.ybw_ck_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                            zz['bjSelect'] = '0'
+                            a = str(int(int(self.ybw_ck_amount) / 10000)) + '万'
+                            zz['quantity'] = str(int(self.seat) - 1)
+                            zz['quoteAmount'] = str(int(self.ybw_ck_amount) * (int(self.seat) - 1))
+                            zz['quoteAmountCN'] = a
+                            zz['unitAmount'] = self.ybw_ck_amount
+                            zz['unitAmountCN'] = a
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '道路救援服务特约条款':
+                        zz['isSelect'] = '0'
+                        if self.sanzhe_chooseFlag == 'on' or self.chesun_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                        ciKindsVo_list.append(zz)
+                    elif zz.get('kindCName') == '代为送检服务特约条款':
+                        zz['isSelect'] = '0'
+                        if self.chesun_chooseFlag == 'on':
+                            zz['isSelect'] = '1'
+                        ciKindsVo_list.append(zz)
+                    else:
+                        zz['isSelect'] = '0'
+                        zz['quoteAmountCN'] = '不投保'
+                        zz['bjSelect'] = '0'
+                        ciKindsVo_list.append(zz)
+                self.data['ciKindsVo'] = ciKindsVo_list
+
+                self.data['driverAccidentVo']['isSelect'] = '0'
+                self.data['driverAccidentVo']['quantityCname'] = '不投保'
+                self.data['driverAccidentVo']['quantity'] = 0
+                self.data['other']['fromID'] = self.fromid
+                self.data['other']['channelCode'] = 'OffWeb'
+                self.data['other']['notice'] = ''
+                self.data['other']['messageBZ'] = ''
+                self.data['other']['messageCI'] = ''
+                self.data['chargingPost'] = []
+                self.data['riskType'] = '0808'
+                self.data['initFlag'] = 'quote'
+                self.data['orderID'] = self.orderId
+                self.data['carTaxInfo'] = {"taxFlag": "T"}
+                self.data['tplatformId'] = self.tplatformId
+                self.data['tplatLoginKey'] = self.tplatLoginKey
+            if self.accidentalDriving:
+                self.data['driverAccidentVo']['isSelect'] = '1'
+                self.data['driverAccidentVo']['selectPlanCode'] = self.accidentalDriving.get('planCode')
+            url = "https://car.tk.cn/carSelfService/rest/precise/init"
+
+            data = json.dumps(self.data, separators=(',', ':'))
+
+            response = requests.post(url, headers=self.headers, data=data)
+
+            self.quote()
+
+
+            mark=response.json().get('data').get('businessScore')
+            self.jq_price=response.json().get('data').get('premium').get('jqPremium')
+            self.ccs_price=response.json().get('data').get('premium').get('tax')
+            self.sy_price=response.json().get('data').get('premium').get('syPremium')
+            self.all_price=response.json().get('data').get('premium').get('countPremium')
+            if self.shangye_chooseFlag=='on':
+                for i in response.json().get('data').get('ciKindsVo'):
+                    if i.get('kindCName')=='车辆损失保险':
+                        self.cs_price=i.get('premium')
+                    elif i.get('kindCName')=='第三者责任保险':
+                        self.sz_price=i.get('premium')
+                    elif i.get('kindCName')=='车上人员责任保险(司机)':
+                        self.sj_price=i.get('premium')
+
+                    elif i.get('kindCName')=='车上人员责任保险(乘客)':
+                        self.ck_price=i.get('premium')
+                    elif i.get('kindCName')=='车身划痕损失险':
+                        self.huahen_price=i.get('premium')
+
+                    elif i.get('kindCName')=='附加医保外医疗费用责任险(三者)':
+                        self.ybw_sz=i.get('premium')
+                    elif i.get('kindCName')=='附加医保外医疗费用责任险(车上人员(司机))':
+                        self.ybw_sj=i.get('premium')
+                    elif i.get('kindCName')=='附加医保外医疗费用责任险(车上人员(乘客))':
+                        self.ybw_ck=i.get('premium')
+
+            carRenewalFlagCI=''
+            carRenewalFlagBI=''
+            jq_accident_list=''
+            sy_accident_list=''
+            self.jiaoqiang_startDate=response.json().get('data').get('date').get('initStartDateBZ')+':00'
+            self.chesun_startDate=response.json().get('data').get('date').get('initStartDateCI')+':00'
+            self.orderNo=self.orderId
+            fcx_list=[]
+            carInfo = {}
+            if self.accidentalDriving:
+                fcx_list.append({
+                    'price':   self.accidentalDriving.get('sumPremium'),
+                    'name':    self.accidentalDriving.get('planName'),
+                    'policy':    "",
+                })
+            # 车型名称
+            carInfo['modelcname'] = self.carinfo.get('modelName')
+            # 车型编码
+            carInfo['modelCode'] = self.carinfo.get('modelCode')
+            # 排量
+            carInfo['exhaustscale'] = self.carinfo.get('vehicleJingyou').get('displacement')
+            # 座位数
+            carInfo['seatCount'] = self.carinfo.get('vehicleJingyou').get('seatMin')
+            # 价格
+            carInfo['purchasePrice'] = self.carinfo.get('vehicleJingyou').get('price')
+            # 功率
+            carInfo['power'] = self.carinfo.get('vehicleJingyou').get('power')
+            # 年款
+            carInfo['caryear'] = self.carinfo.get('vehicleJingyou').get('marketDate')
+
+            redis_conn.hset('taikang_' + self.orderNo, 'licenseNo', self.licenseNo)
+            redis_conn.hset('taikang_' + self.orderNo, 'headers', self.headers)
+            redis_conn.hset('taikang_' + self.orderNo, 'orderId', self.orderId)
+            redis_conn.hset('taikang_' + self.orderNo, 'fromId', self.fromid)
+            redis_conn.hset('taikang_' + self.orderNo, 'username', self.username)
+            redis_conn.hset('taikang_' + self.orderNo, 'tplatformId', self.tplatformId)
+            redis_conn.hset('taikang_' + self.orderNo, 'tplatLoginKey', self.tplatLoginKey)
+
+            peopleinfo = {
+                'uname': self.uname,
+                'identifyNumber': self.identifyNumber,
+                'address': self.address,
+                'phone_number': self.phone_number,
+
+                'tb_uname': self.tb_uname,
+                'tb_identifyNumber': self.tb_identifyNumber,
+                'tb_address': self.tb_address,
+                'tb_phone_number': self.tb_phone_number,
+
+                'bb_uname': self.bb_uname,
+                'bb_identifyNumber': self.bb_identifyNumber,
+                'bb_address': self.bb_address,
+                'bb_phone_number': self.bb_phone_number,
+            }
+            redis_conn.hset('taikang_' + self.orderNo, 'peopleinfo', peopleinfo)
+
+            
+            
+            return {
+                'code': 200,
+                'INSURANCE_TYPE': {
+                    "A": str(self.cs_price),
+                    "A_amount": str(self.actualvalue),
+                    "B": str(self.sz_price),
+                    "D3": str(self.sj_price),
+                    "D4": str(self.ck_price),
+                    "L": str(self.huahen_price),
+                    "MJ1": '0',
+                    "MJ2": '0',
+                    "MJ3": '0',
+                    "MJ4": '0',
+                    "SY_FJ_YBW1": str(self.ybw_sz),
+                    "SY_FJ_YBW2": str(self.ybw_ck),
+                    "SY_FJ_YBW3": str(self.ybw_sj),
+                },
+                # 交强险价格
+                'forceCarInsureRisk': str(self.jq_price),
+                # 车船税
+                'carInsureShiptax': str(self.ccs_price),
+                # 商业险价格
+                'busiTotalPremium': str(self.sy_price),
+                # 总价
+                'carInsureMain': str(self.all_price),
+                # 订单号
+                'plyappno': self.orderNo,
+                'message': '报价成功',
+
+                'jq_startDate': self.jiaoqiang_startDate if self.jiaoqiang_chooseFlag == 'on' else '',
+                'jq_endDate': self.get_enddate(self.jiaoqiang_startDate) if self.jiaoqiang_chooseFlag == 'on' else '',
+                'sy_startDate': self.chesun_startDate if self.shangye_chooseFlag == 'on' else '',
+                'sy_endDate': self.get_enddate(self.chesun_startDate) if self.shangye_chooseFlag == 'on' else '',
+                'other': {
+                    'mark': mark,
+                    'jq_discount': '',
+                    'sy_discount': '',
+                    'isQuoteGreenWay': '',
+                    'info_list': [],
+                    'jq_renewalflag': carRenewalFlagCI,
+                    'sy_renewalflag': carRenewalFlagBI,
+                    'jq_accident': jq_accident_list,
+                    'sy_accident': sy_accident_list,
+                },
+                'jq_repeatinfo': '',
+                'sy_repeatinfo': '',
+                'drivingInsurances': fcx_list,
+                'carInfo': carInfo
+            }
+
+    def quote(self):
+        url = "https://car.tk.cn/carSelfService/rest/controller/identity"
+        data = {
+            "channelCode": "OffWeb"
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=self.headers, data=data)
+        self.headers['tkCarRequestToken']=response.json().get('data').get('tkCarRequestToken')
+
+
+        headers=self.headers.copy()
+        headers["carInsurOrderId"]=self.orderId
+        url = "https://car.tk.cn/carSelfService/rest/save/quote"
+        data = {
+            "orderID": self.orderId,
+            "channelCode": "OffWeb",
+            "fromID": self.fromid,
+            "quoteFlag": "5",
+            "tplatformId": self.tplatformId
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers, data=data)
+
+        url = "https://car.tk.cn/carSelfService/rest/float/notice/get"
+        data = {
+            "channelCode": "OffWeb",
+            "orderID": self.orderId
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers,  data=data)
+
+        url = "https://car.tk.cn/carSelfService/rest/init/quotation"
+        data = {
+            "channelCode": "OffWeb",
+            "orderID": self.orderId,
+            "initFlag": "2"
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers,  data=data)
+
+        url = "https://car.tk.cn/carSelfService/rest/init/proposal"
+        data = {
+            "orderId": self.orderId,
+            "channelCode": "OffWeb",
+            "tplatformId": self.tplatformId,
+            "tplatLoginKey": self.tplatLoginKey
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers, data=data)
+
+        url = "https://car.tk.cn/carSelfService/rest/engage/engageQuery"
+        data = {
+            "channelCode": "OffWeb",
+            "orderId": self.orderId,
+            "fromId": self.fromid,
+            "privy": {
+                "insuredFlag": "",
+                "insuredName": "",
+                "identifyType": "",
+                "identifyNumber": ""
+            }
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers, data=data)
+
+    def main(self):
+        self.check_login()
+        if self.token=='用户名、密码错误':
+            return {
+                'code':400,
+                'message':'用户名、密码错误'
+            }
+        else:
+            self.get_guishu()
+            if self.gs_info=='':
+                return {
+                    'code':400,
+                    'message':'归属信息录入错误'
+                }
+            self.get_carinfo()
+
+            if self.carinfo:
+                self.get_next()
+                return self.bfjs()
+                # return self.repeat()
+            else:
+                return {
+                    'code':400,
+                    'message':'车辆信息查询失败'
+                }
+
+
+
+
+
+
+
+

+ 0 - 0
spiders/taikang/guishu/__init__.py


+ 57 - 0
spiders/taikang/guishu/tk_config.py

@@ -0,0 +1,57 @@
+from  spiders.taikang.Login.tk_login import  TK_login
+from config import *
+
+def set_userinfo(userinfo):
+    uname=userinfo.get('username')
+    pwd = userinfo.get('pwd')
+    agentCode= userinfo.get('other').get('agentCode')
+
+    login = TK_login(uname, pwd).main()
+    if login.get('code')!=200:
+        redis_conn.hset('taikang_' + uname, 'username', uname)
+        redis_conn.hset('taikang_' + uname, 'pwd', '')
+        redis_conn.hset('taikang_' + uname, 'token', '')
+        
+
+
+        return login
+
+
+    else:
+        token=login.get('token')
+        tplatformId =login.get('tplatformId')
+        tplatLoginKey=login.get('tplatLoginKey')
+        fromid = login.get('fromid')
+        redis_conn.hset('taikang_' + uname, 'username', uname)
+        redis_conn.hset('taikang_' + uname, 'pwd', pwd)
+        redis_conn.hset('taikang_' + uname, 'token',token)
+        redis_conn.hset('taikang_' + uname, 'agentCode', agentCode)
+        redis_conn.hset('taikang_' + uname, 'tplatformId', tplatformId)
+        redis_conn.hset('taikang_' + uname, 'tplatLoginKey', tplatLoginKey)
+        redis_conn.hset('taikang_' + uname, 'fromid', fromid)
+
+def  get_userinfo(uname):
+
+    pwd=str(redis_conn.hget('taikang_'+uname,'pwd'),'utf8')
+    agentCode = str(redis_conn.hget('taikang_' + uname, 'agentCode'), 'utf8')
+
+
+    set_userinfo({
+        'username':uname,
+        'pwd':pwd,
+        'other':{
+            "agentCode":agentCode
+        }
+        })
+
+if __name__ == '__main__':
+    ret=set_userinfo(
+        {
+            "username": "Tgengchenjie",
+            "pwd": "Gcj123456#",
+            "other": {
+                'agentCode': 'R82004884'
+            }
+        }
+
+    )

+ 615 - 0
spiders/taikang/guishu/tk_feichexian.py

@@ -0,0 +1,615 @@
+from spiders.zhongan.guishu.za_config import redis_conn
+import requests
+import re
+
+def get_feichexian():
+    #kp_jtywx_v15
+    #kp_jtywx_v7
+    #kp_jtywx_v24
+
+
+
+    fcx_list=[
+				{
+					"itemKindList":[
+						{
+							"amount":1000000.0,
+							"amountCN":"100万元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"301",
+							"kindInd":"1",
+							"kindName":"身故保险责任和伤残保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":20000.0,
+							"amountCN":"2万元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"302",
+							"kindInd":"1",
+							"kindName":"医疗保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":200.0,
+							"amountCN":"200元/天/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"303",
+							"kindInd":"2",
+							"kindName":"附加住院津贴保险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":2000.0,
+							"amountCN":"2000元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"304",
+							"kindInd":"2",
+							"kindName":"附加医保外医疗费用补偿险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						}
+					],
+					"newEnergyItemKindList":[
+						{
+							"amount":1000000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"401",
+							"kindInd":"1",
+							"kindName":"身故保险责任和伤残保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":20000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"402",
+							"kindInd":"1",
+							"kindName":"医疗保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":200.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"403",
+							"kindInd":"2",
+							"kindName":"附加住院津贴保险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":2000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"404",
+							"kindInd":"2",
+							"kindName":"附加医保外医疗费用补偿险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						}
+					],
+					"planCode":"CARJCB0001",
+					"planName":"A款",
+					"sumAmount":"1022200",
+					"sumPremium":"328"
+				},
+				{
+					"itemKindList":[
+						{
+							"amount":800000.0,
+							"amountCN":"80万元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"301",
+							"kindInd":"1",
+							"kindName":"身故保险责任和伤残保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":20000.0,
+							"amountCN":"2万元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"302",
+							"kindInd":"1",
+							"kindName":"医疗保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":200.0,
+							"amountCN":"200元/天/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"303",
+							"kindInd":"2",
+							"kindName":"附加住院津贴保险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":2000.0,
+							"amountCN":"2000元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"304",
+							"kindInd":"2",
+							"kindName":"附加医保外医疗费用补偿险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						}
+					],
+					"newEnergyItemKindList":[
+						{
+							"amount":800000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"401",
+							"kindInd":"1",
+							"kindName":"身故保险责任和伤残保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":20000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"402",
+							"kindInd":"1",
+							"kindName":"医疗保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":200.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"403",
+							"kindInd":"2",
+							"kindName":"附加住院津贴保险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":2000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"404",
+							"kindInd":"2",
+							"kindName":"附加医保外医疗费用补偿险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						}
+					],
+					"planCode":"CARJCB0002",
+					"planName":"B款",
+					"sumAmount":"822200",
+					"sumPremium":"268"
+				},
+				{
+					"itemKindList":[
+						{
+							"amount":500000.0,
+							"amountCN":"50万元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"301",
+							"kindInd":"1",
+							"kindName":"身故保险责任和伤残保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":20000.0,
+							"amountCN":"2万元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"302",
+							"kindInd":"1",
+							"kindName":"医疗保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":200.0,
+							"amountCN":"200元/天/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"303",
+							"kindInd":"2",
+							"kindName":"附加住院津贴保险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":2000.0,
+							"amountCN":"2000元/车",
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"304",
+							"kindInd":"2",
+							"kindName":"附加医保外医疗费用补偿险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						}
+					],
+					"newEnergyItemKindList":[
+						{
+							"amount":500000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"401",
+							"kindInd":"1",
+							"kindName":"身故保险责任和伤残保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":20000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"402",
+							"kindInd":"1",
+							"kindName":"医疗保险责任",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":200.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"403",
+							"kindInd":"2",
+							"kindName":"附加住院津贴保险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						},
+						{
+							"amount":2000.0,
+							"deductibleAmount":0.0,
+							"deductibleRate":0.0,
+							"kindCode":"404",
+							"kindInd":"2",
+							"kindName":"附加医保外医疗费用补偿险",
+							"modeCode":0,
+							"premium":0.0,
+							"stantardPremium":0.0,
+							"unholidaySumInsured":0.0,
+							"unitType":"1"
+						}
+					],
+					"planCode":"CARJCB0003",
+					"planName":"C款",
+					"sumAmount":"522200",
+					"sumPremium":"198"
+				},
+				{
+					"itemKindList": [
+						{
+							"amount": 200000.0,
+							"amountCN": "20万元/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "301",
+							"kindInd": "1",
+							"kindName": "身故保险责任和伤残保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 10000.0,
+							"amountCN": "1万元/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "302",
+							"kindInd": "1",
+							"kindName": "医疗保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 200.0,
+							"amountCN": "200元/天/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "303",
+							"kindInd": "2",
+							"kindName": "附加住院津贴保险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 2000.0,
+							"amountCN": "2000元/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "304",
+							"kindInd": "2",
+							"kindName": "附加医保外医疗费用补偿险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						}
+					],
+					"newEnergyItemKindList": [
+						{
+							"amount": 200000.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "401",
+							"kindInd": "1",
+							"kindName": "身故保险责任和伤残保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 10000.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "402",
+							"kindInd": "1",
+							"kindName": "医疗保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 200.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "403",
+							"kindInd": "2",
+							"kindName": "附加住院津贴保险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 2000.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "404",
+							"kindInd": "2",
+							"kindName": "附加医保外医疗费用补偿险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						}
+					],
+					"planCode": "CARJCB0004",
+					"planName": "D款(单交)",
+					"sumAmount": "212200",
+					"sumPremium": "98"
+				},
+				{
+					"itemKindList": [
+						{
+							"amount": 100000.0,
+							"amountCN": "10万元/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "301",
+							"kindInd": "1",
+							"kindName": "身故保险责任和伤残保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 2000.0,
+							"amountCN": "2000元/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "302",
+							"kindInd": "1",
+							"kindName": "医疗保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 100.0,
+							"amountCN": "100元/天/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "303",
+							"kindInd": "2",
+							"kindName": "附加住院津贴保险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 1000.0,
+							"amountCN": "1000元/车",
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "304",
+							"kindInd": "2",
+							"kindName": "附加医保外医疗费用补偿险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						}
+					],
+					"newEnergyItemKindList": [
+						{
+							"amount": 100000.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "401",
+							"kindInd": "1",
+							"kindName": "身故保险责任和伤残保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 2000.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "402",
+							"kindInd": "1",
+							"kindName": "医疗保险责任",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 100.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "403",
+							"kindInd": "2",
+							"kindName": "附加住院津贴保险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						},
+						{
+							"amount": 1000.0,
+							"deductibleAmount": 0.0,
+							"deductibleRate": 0.0,
+							"kindCode": "404",
+							"kindInd": "2",
+							"kindName": "附加医保外医疗费用补偿险",
+							"modeCode": 0,
+							"premium": 0.0,
+							"stantardPremium": 0.0,
+							"unholidaySumInsured": 0.0,
+							"unitType": "1"
+						}
+					],
+					"planCode": "CARJCB0005",
+					"planName": "D款(单交)",
+					"sumAmount": "103100",
+					"sumPremium": "49"
+				}
+			]
+    return {
+        "code":200,
+        "overlayPlanList":fcx_list
+    }
+
+
+
+
+
+if __name__ == '__main__':
+    aa=get_feichexian()
+    print(aa)

+ 0 - 0
spiders/taikang/hebao/__init__.py


+ 187 - 0
spiders/taikang/hebao/tk_hebao.py

@@ -0,0 +1,187 @@
+import json
+import re
+
+import execjs
+from config import *
+from spiders.hengbang.guishu.hb_config import *
+import requests
+
+class TK_hebao(object):
+    def __init__(self,plyappno):
+        self.plyappno = plyappno
+        self.headers = eval(str(redis_conn.hget('taikang_' + self.plyappno, 'headers'), 'utf8'))
+        self.orderId = str(redis_conn.hget('taikang_' + self.plyappno, 'orderId'), 'utf8')
+        self.fromId = str(redis_conn.hget('taikang_' + self.plyappno, 'fromId'), 'utf8')
+        self.tplatformId= str(redis_conn.hget('taikang_' + self.plyappno, 'tplatformId'), 'utf8')
+        self.tplatLoginKey= str(redis_conn.hget('taikang_' + self.plyappno, 'tplatLoginKey'), 'utf8')
+        self.peopleinfo=eval(str(redis_conn.hget('taikang_' + self.plyappno, 'peopleinfo'), 'utf8'))
+        self.headers['carInsurOrderId']=self.orderId
+        self.insureInfo=''
+
+    def get_decrypt(self,x):
+        js_code = open(js_path+'taikang/AES_ECB.js','r').read()
+        de_str=execjs.compile(js_code).call("Decrypt",x)
+        return de_str
+    def get_sex(self,x):
+        if int(x[16]) % 2 == 0:
+            sex = 2
+        else:
+            sex = 1
+        return sex
+
+    def get_birthday(self,x):
+        return  x[6:10]+'-'+x[10:12]+'-'+x[12:14]
+
+    def thjf(self):
+        self.insureInfo={
+                "policyType": "1",
+                "appliInfo": {
+                    "insuredNature": "1",
+                    "birthday": self.get_birthday(self.peopleinfo.get('tb_identifyNumber')),
+                    "phoneNumber": self.peopleinfo.get('tb_phone_number'),
+                    "identifyNumber": self.peopleinfo.get('tb_identifyNumber'),
+                    "identifyType": "01",
+                    "appliName": self.peopleinfo.get('tb_uname'),
+                    "insuredAddress": self.peopleinfo.get('tb_address'),
+                    "isSelf": "1",
+                    "sex": self.get_sex(self.peopleinfo.get('tb_identifyNumber')),
+                    "email": "1@qq.com",
+                    "withOwner": 0 if self.peopleinfo.get('tb_identifyNumber')!=self.peopleinfo.get('identifyNumber') else 1,
+                    "invoiceFlag": "1",
+                    "invoiceType": "026",
+                    "taxpayerType": "0",
+                    "taxNumber": self.peopleinfo.get('tb_identifyNumber'),
+                    "taxPayer": self.peopleinfo.get('tb_uname'),
+                    "bank": "",
+                    "taxesPhone": "",
+                    "account": "",
+                    "taxRegistAddress": "",
+                    "serialno": 2
+                },
+                "insuredInfo": {
+                    "insuredAddress": self.peopleinfo.get('bb_address'),
+                    "insuredNature": "1",
+                    "birthday": self.get_birthday(self.peopleinfo.get('bb_identifyNumber')),
+                    "phoneNumber": self.peopleinfo.get('bb_phone_number'),
+                    "identifyNumber":self.peopleinfo.get('bb_identifyNumber'),
+                    "identifyType": "01",
+                    "insuredName": self.peopleinfo.get('bb_uname'),
+                    "sex":  self.get_sex(self.peopleinfo.get('bb_identifyNumber')),
+                    "email": "",
+                    "withOwner":  0 if self.peopleinfo.get('bb_identifyNumber')!=self.peopleinfo.get('identifyNumber') else 1,
+                    "withApplyer": 0,
+                    "serialno": 1,
+                    "isSelf": "1"
+                },
+                "contacts": {
+                    "name": "",
+                    "identifyType": "",
+                    "identifyNumber": "",
+                    "phoneNumber": ""
+                },
+                "carOwnerVo": {
+                    "insuredProvinceCode": "140000",
+                    "insuredAddress": "",
+                    "insuredProvinceCname": "山西省",
+                    "insuredCityCname": "太原市",
+                    "insuredCityCode": "140100",
+                    "phoneNo": self.peopleinfo.get('phone_number'),
+                },
+                "messageSendFlag": "1"
+            }
+        url = "https://car.tk.cn/carSelfService/rest/controller/entrance"
+        data = {
+            "leadsid": "",
+            "channelCode": "OffWeb",
+            "orderID": self.orderId,
+            "fromID": self.fromId,
+            "insureInfo": self.insureInfo,
+            "channelEngages": [],
+            "tplatformId": self.tplatformId,
+            "authFailContinueFlag": ""
+        }
+        data = json.dumps(data)
+        headers=self.headers.copy()
+        headers['actionType']='000012'
+        response = requests.post(url, headers=headers,  data=data)
+        if response.json().get('status')!='1':
+            return {
+                'code':400,
+                'message':response.json().get('message')
+            }
+        url = "https://car.tk.cn/carSelfService/rest/precise/init"
+        data = {
+            "orderID": self.orderId,
+            "channelCode": "OffWeb",
+            "insureInfo": self.insureInfo,
+            "quoteFlag": "4",
+            "initFlag": "vip_quote",
+            "tplatformId": self.tplatformId,
+            "tplatLoginKey": self.tplatLoginKey
+        }
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=self.headers,data=data)
+
+        url = "https://car.tk.cn/carSelfService/rest/controller/entrance"
+        data = {
+            "channelCode": "OffWeb",
+            "orderID": self.orderId,
+            "fromID": self.fromId,
+            "idcardOcrFlag": "0",
+            "readTime": "",
+            "channelEngages": [],
+            "collectFlag": "",
+            "leadsid": ""
+        }
+        headers['actionType']='000038'
+        data = json.dumps(data, separators=(',', ':'))
+        response = requests.post(url, headers=headers, data=data)
+        if response.json().get('data'):
+            res = eval(self.get_decrypt(response.json().get('data')).replace('false', 'False').replace('true', 'True').replace('null', 'None'))
+            #总订单号
+            Application=res.get('data').get('data').get('proposalNo')
+            JQ_Policy=res.get('data').get('data').get('proposalNoCI')
+            SY_Policy = res.get('data').get('data').get('proposalNoBI')
+            if res.get('data').get('data').get('carAccident'):
+                JYX_Policy=res.get('data').get('data').get('carAccident').get('proposalNo')
+            else:
+                JYX_Policy =''
+
+
+            url = "https://car.tk.cn/carSelfService/rest/pay/forward"
+            data = {
+                "channelCode": "OffWeb",
+                "tplatformId": self.tplatformId,
+                "proposalNo": Application
+            }
+            data = json.dumps(data, separators=(',', ':'))
+            response = requests.post(url, headers=self.headers,data=data)
+            pay_url=response.json().get('data').get('payForwardUrl')
+
+            redis_conn.hset('taikang_' + self.plyappno, 'JYX_Policy', JYX_Policy)
+            redis_conn.hset('taikang_' + self.plyappno, 'JQ_Policy',JQ_Policy)
+            redis_conn.hset('taikang_' + self.plyappno, 'SY_Policy', SY_Policy)
+            redis_conn.hset('taikang_' + self.plyappno, 'Application', Application)
+
+            return {
+                'code': 200,
+                'message': '成功',
+                'JQ_Policy':JQ_Policy if JQ_Policy!=None else '',
+                'JYX_Policy': JYX_Policy,
+                'SY_Policy':SY_Policy if SY_Policy!=None else '',
+                'pay_url': pay_url,
+                'Application': Application
+            }
+
+        else:
+            return {
+                'code': 400,
+                'message': response.text
+            }
+    def main(self):
+        return self.thjf()
+
+
+if __name__ == '__main__':
+    ret=TK_hebao('WBPC202406211021179590000').main()
+    print(ret)

+ 0 - 0
spiders/taikang/yingxiang/__init__.py


+ 123 - 0
spiders/taikang/yingxiang/tk_phoupload.py

@@ -0,0 +1,123 @@
+import json
+import os
+import re
+import random
+import time
+
+import execjs
+import redis
+import requests
+import base64
+from spiders.huatai.guishu.ht_config import *
+from config import *
+
+class photo_up(object):
+    def __init__(self,plyappno,b64pho_list):
+        pass
+        # self.orderNo = plyappno
+        # self.b64pho_list=b64pho_list
+        #
+        # self.headers=eval(str(redis_conn.hget('taikang_' + self.orderNo, 'headers'), 'utf8'))
+        # self.orderId=str(redis_conn.hget('taikang_' + self.orderNo, 'orderId'), 'utf8')
+        # self.fromId = str(redis_conn.hget('taikang_' + self.orderNo, 'fromId'), 'utf8')
+
+
+    def upload(self):
+        pass
+        # photo_list=[]
+        # for zz in self.b64pho_list:
+        #     if zz.get('imgtype')=='C01' or zz.get('imgtype')=='D01':
+        #         photo_list.append(zz.get('image'))
+        # if len(photo_list)==1:
+        #     photo_list.append(photo_list[0])
+        # url='https://car.tk.cn/carSelfService/rest/ocr/drivingLicense'
+        # data={
+        #   "ocrDataDto": {},
+        #   "extraInfo": {},
+        #   "frontCardCode": photo_list[0],
+        #   "frontImgType": ".jpg",
+        #   "backCardCode": photo_list[1],
+        #   "backImgType": ".jpg",
+        #   "channelCode": "OffWeb",
+        #   "orderId": self.orderId,
+        #   "fromId": self.fromId,
+        #   "comCode": "0114"
+        # }
+        # # print(data)
+        # # open('1.txt','w').write(str(data))
+        # response = requests.post(url, headers=self.headers, json=data)
+
+    def main(self):
+        return {
+            'code': 200,
+            'message': '影像上传成功'
+        }
+
+        # res=self.upload()
+        # if res==None:
+        #     return {
+        #         'code':200,
+        #         'message':'影像上传成功'
+        #     }
+
+
+
+
+if __name__ == '__main__':
+    aa = open('1.jpg', 'rb').read()
+    # bb = open('2.jpg', 'rb').read()
+    # cc = open('3.jpg', 'rb').read()
+    # dd = open('4.jpg', 'rb').read()
+    # ee = open('5.jpg', 'rb').read()
+    # ff = open('6.jpg', 'rb').read()
+
+
+    # cc = open('2.jpg', 'rb').read()
+    # dd = open('2.2.jpg', 'rb').read()
+    # cc = open('3333.jpg', 'rb').read()
+    # print(str(base64.b64encode(cc)).replace("b'","").replace("'",""))
+    zz = photo_up("WBPC202406201607482300000",
+                  [
+                      {
+                        'image': str(base64.b64encode(aa))[:-1].replace("b'",""),
+                        'imgtype': 'C01'
+                  }
+                      ,
+                      # {
+                      #     'image': str(base64.b64encode(bb))[:-1].replace("b'",""),
+                      #   'imgtype': 'D01'
+                      # }
+                      # ,
+                      # {
+                      #     'image': str(base64.b64encode(cc))[:-1].replace("b'", ""),
+                      #     'imgtype': 'C02'
+                      # }
+                      #
+                      # ,
+                      # {
+                      #     'image': str(base64.b64encode(dd))[:-1].replace("b'", ""),
+                      #     'imgtype': 'D02'
+                      # }
+                      # ,
+                      # {
+                      #     'image': str(base64.b64encode(ee))[:-1].replace("b'", "").replace("'", ""),
+                      #     'imgtype': 'C04'
+                      # }
+                      # ,
+                      # {
+                      #     'image': str(base64.b64encode(ff))[:-1].replace("b'", ""),
+                      #     'imgtype': 'D04'
+                      # }
+                      # ,
+                      # {
+                      #     'image': str(base64.b64encode(cc)).replace("b'", "").replace("'", ""),
+                      #     'imgtype': 'C02'
+                      # }
+
+
+
+                  ]
+                  ).main()
+
+
+    print(zz)

+ 72 - 15
spiders/taiping/baojia/tp_bfjs.py

@@ -65,7 +65,10 @@ class tp_calculation(object):
         self.vin = vin
         self.licenseNo = licenseNo
         self.enginedesc=enginedesc
-        self.limitLoad=limitLoad
+        if limitLoad:
+            self.limitLoad=limitLoad
+        else:
+            self.limitLoad = '0'
         self.completeKerbMass=completeKerbMass
         self.purchasePrice = purchasePrice
         # 交强险是否过户
@@ -242,6 +245,8 @@ class tp_calculation(object):
         self.carIdRenewalFlag=''
         #车辆历史ID
         self.carID=''
+        #纳税登记号
+        self.taxRegistryNumber=''
 
     def check_login(self):
         # redis取出token
@@ -536,7 +541,7 @@ class tp_calculation(object):
                         "compLevel": "0",
                         "serialNo": "",
                         "newCarFlag": "1",
-                        "doubleProtectFlag": "1",
+                        "doubleProtectFlag": "1" if self.jiaoqiang_chooseFlag=='on' and self.shangye_chooseFlag=='on' else '0',
                         "oano": "",
                         "poaSerialNo": "",
                         "isDangerBz": None,
@@ -709,7 +714,7 @@ class tp_calculation(object):
                       "governmentCityName": "",
                       "governmentCountyName": "",
                       "businessSource": self.solutionCode_res.get('businessSource'),
-                      "taxRegistryNumber": "91140100MA0GR71F7B",
+                      "taxRegistryNumber": "",
                       "modelNo": self.gsApplyInfoMainDtos_res.get('modelNo'),
                       "query": "",
                       "applySerialNo": 1,
@@ -722,7 +727,7 @@ class tp_calculation(object):
                       "compLevel": "0",
                       "serialNo": "",
                       "newCarFlag": "1",
-                      "doubleProtectFlag": "1",
+                      "doubleProtectFlag": "1" if self.jiaoqiang_chooseFlag=='on' and self.shangye_chooseFlag=='on' else '0',
                       "oano": "",
                       "poaSerialNo": "",
                       "isDangerBz": None,
@@ -1173,7 +1178,7 @@ class tp_calculation(object):
                       "licenseTypeCode":self.carinfo.get('licenseTypeCode'),
                       "powerTypeCode": "",
                       "powerType": "",
-                      "doubleProtectFlag": "1",
+                      "doubleProtectFlag": "1" if self.jiaoqiang_chooseFlag=='on' and self.shangye_chooseFlag=='on' else '0',
 
                       "taxVehicleCategory": self.carinfo.get('vehicleCategory'),
                       "countryNature": self.carinfo.get('countryNature'),
@@ -1328,7 +1333,7 @@ class tp_calculation(object):
                 "leaderName": "",
                 "leaderIdNo": "",
                 "leaderContact": "",
-                "leaderPCD": "150000",
+                "leaderPCD": "",
                 "leaderAddress": "",
                 "businessScope": "",
                 "businessDealerName": "",
@@ -1507,7 +1512,7 @@ class tp_calculation(object):
                         "shortRate": 100,
                         "discount": 100,
                         "adjustRate": 100,
-                        "noChange": True
+                        "noChange": False
                     }
                 )
             if self.ybw_sanzhe_chooseFlag=='on':
@@ -1548,7 +1553,7 @@ class tp_calculation(object):
                         "shortRate": 100,
                         "discount": 100,
                         "adjustRate": 100,
-                        "noChange": True,
+                        "noChange": False,
                         "quantity": 1,
                         "unitInsured": int(self.sjzeren_amount)
                     }
@@ -1593,7 +1598,7 @@ class tp_calculation(object):
                         "shortRate": 100,
                         "discount": 100,
                         "adjustRate": 100,
-                        "noChange": True,
+                        "noChange": False,
                         "quantity": int(self.seat)-1,
                         "unitInsured": int(self.ckzeren_amount)
                     }
@@ -1710,7 +1715,7 @@ class tp_calculation(object):
                         "shortRate": 100,
                         "discount": 100,
                         "adjustRate": 100,
-                        "noChange": True
+                        "noChange": False
                     }
                 )
             if self.ybw_sanzhe_chooseFlag=='on':
@@ -1755,7 +1760,7 @@ class tp_calculation(object):
                         "shortRate": 100,
                         "discount": 100,
                         "adjustRate": 100,
-                        "noChange": True,
+                        "noChange": False,
                         "quantity": 1,
                         "unitInsured": int(self.sjzeren_amount)
                     }
@@ -1804,7 +1809,7 @@ class tp_calculation(object):
                         "shortRate": 100,
                         "discount": 100,
                         "adjustRate": 100,
-                        "noChange": True,
+                        "noChange": False,
                         "quantity": int(self.seat)-1,
                         "unitInsured": int(self.ckzeren_amount)
                     }
@@ -1912,7 +1917,7 @@ class tp_calculation(object):
                 "relifReason": "0",
                 "freeRate": "",
                 "deductionDueType": "",
-                "taxRegistryNumber": "91140100MA0GR71F7B",
+                "taxRegistryNumber": "",
                 "taxCompancyCode": "",
                 "taxCompancyName": "",
                 "carFindDate": "",
@@ -1980,8 +1985,11 @@ class tp_calculation(object):
         }
         data = json.dumps(data)
         response = requests.post(url, headers=headers, cookies=self.get_ck(), data=data)
+        self.taxRegistryNumber="".join(re.findall(r'taxRegistryNumber":"(.*?)"',response.text))
+
         pfProposalCarShipTaxDto=response.json().get('data').get('pfProposalCarShipTaxDto')
-        self.pfProposalCarShipTaxDto={
+        if self.jiaoqiang_chooseFlag=='on':
+            self.pfProposalCarShipTaxDto={
               "taxpayerIdentifier":self.identifyNumber,
               "taxRelifFlag": pfProposalCarShipTaxDto.get('taxRelifFlag') if pfProposalCarShipTaxDto.get('taxRelifFlag') else '',
               "fuelType": pfProposalCarShipTaxDto.get('fuelType') if pfProposalCarShipTaxDto.get('fuelType') else '',
@@ -2004,7 +2012,7 @@ class tp_calculation(object):
               "relifReason": pfProposalCarShipTaxDto.get('relifReason') if pfProposalCarShipTaxDto.get('relifReason') else '',
               "freeRate": 0 if pfProposalCarShipTaxDto.get('freeRate')=='0.0' else pfProposalCarShipTaxDto.get('freeRate'),
               "deductionDueType": pfProposalCarShipTaxDto.get('deductionDueType') if pfProposalCarShipTaxDto.get('deductionDueType') else '',
-              "taxRegistryNumber": "91140100MA0GR71F7B",
+              "taxRegistryNumber": self.taxRegistryNumber,
               "taxCompancyCode":pfProposalCarShipTaxDto.get('taxCompancyCode') if pfProposalCarShipTaxDto.get('taxCompancyCode') else '',
               "taxCompancyName": pfProposalCarShipTaxDto.get('taxCompancyName') if pfProposalCarShipTaxDto.get('taxCompancyName') else '',
               "carFindDate": pfProposalCarShipTaxDto.get('carFindDate') if pfProposalCarShipTaxDto.get('carFindDate') else '',
@@ -2029,6 +2037,55 @@ class tp_calculation(object):
               "vehicleCategory": pfProposalCarShipTaxDto.get('vehicleCategory') if pfProposalCarShipTaxDto.get('vehicleCategory') else '',
               "certiType":  pfProposalCarShipTaxDto.get('certiType') if pfProposalCarShipTaxDto.get('certiType') else '',
             }
+        else:
+            self.pfProposalCarShipTaxDto = {
+                "taxpayerIdentifier": "",
+                "taxRelifFlag": "02",
+                "fuelType": "0",
+                "taxItemDetailCode": "",
+                "taxItemDetailName": "",
+                "calculateMode": "1",
+                "taxDueActual": "",
+                "refundTaxDue": "",
+                "sumRefundTax": "",
+                "calcTaxFlag": "",
+                "taxPaymentMark": "",
+                "previousPay": "",
+                "lateFee": "",
+                "taxPayerName": "",
+                "identifyType": "01",
+                "identifyNumber": "",
+                "paidFreeCertificate": "",
+                "taxDocumentDate": "",
+                "taxPaidAreaCode": "",
+                "relifReason": "0",
+                "freeRate": "",
+                "deductionDueType": "",
+                "taxRegistryNumber": '',
+                "taxCompancyCode": "",
+                "taxCompancyName": "",
+                "carFindDate": "",
+                "itemAddress": "",
+                "provinceCode": "",
+                "provinceName": "",
+                "cityCode": "",
+                "cityName": "",
+                "countyCode": "",
+                "countyName": "",
+                "detailedAddress": "",
+                "fuelTypeCST": "A",
+                "useNatureCode": "200",
+                "taxPayerPhoneNumber": "",
+                "taxStartDate": "",
+                "taxEndDate": "",
+                "newLicenseFlag": "1",
+                "payLastYear": "",
+                "payLastEndDate": "",
+                "sumPayTax": "",
+                "taxRelief": "",
+                "vehicleCategory": "K33",
+                "certiType": "01"
+              }
 
     #获取起保日期
     def get_startdate(self):

+ 4 - 0
spiders/taiping/guishu/mabiao.py

@@ -2420,6 +2420,10 @@ mabiao=[
 						"up": "140200",
 						"value": "140201",
 						"label": "市辖区"
+					},{
+						"up": "140200",
+						"value": "140201",
+						"label": "云冈区"
 					}, {
 						"up": "140200",
 						"value": "140202",

+ 10 - 12
spiders/zhongan/baojia/za_bfjs.py

@@ -214,21 +214,19 @@ class ZA_bfjs(object):
 			}
 
 			headers = {
-				"accept": "application/json, text/plain, */*",
-				"content-type": "application/x-www-form-urlencoded",
 				"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
 			}
-			url = "https://c.zhongan.com/open/bmw/query_controller/query_init_info.json"
-			data = {
+			url = "https://c.zhongan.com/open/common/init_data_controller/init_data.json"
+
+			params = {
+				"flag": "2,3,5",
 				"flowId": self.flowId,
-				"page": "/insureEntry",
-				"flag": "0",
+				"page": "%2FbaseInfo",
 				"i": "e",
-				"insurePlaceCode": self.city_code,
-				"thirdOrgCode": ""
+				"callback": "__jp2"
 			}
-			response = requests.post(url, headers=headers, cookies=self.cookies, data=data)
-			if '众安在线'  in response.text:
+			response = requests.post(url, headers=headers, cookies=self.cookies, params=params)
+			if 'extraUserId'  in response.text:
 				url = "https://c.zhongan.com/open/bmw/index_controller/cache_input_query.json"
 				data = {
 					"insurePlace": self.city_name,
@@ -1287,7 +1285,7 @@ class ZA_bfjs(object):
 			self.nonAutoInfo = [
 				{
 					# 驾意险固定参数
-					"productCode": "kp_jtywx_v24",
+					"productCode": "kp_jtywx_v15",
 					# 是否选择  0 不选,1 选
 					"insuredFlag": "1",
 					# 0-5  从左到右依次0-5
@@ -1298,7 +1296,7 @@ class ZA_bfjs(object):
 			self.nonAutoInfo = [
 				{
 					# 驾意险固定参数
-					"productCode": "kp_jtywx_v24",
+					"productCode": "kp_jtywx_v15",
 					# 是否选择  0 不选,1 选
 					"insuredFlag": "0",
 				},

+ 86 - 0
spiders/zhongan/guishu/za_feichexian.py

@@ -3,6 +3,12 @@ import requests
 import re
 
 def get_feichexian(username):
+    #kp_jtywx_v15
+    #kp_jtywx_v7
+    #kp_jtywx_v24
+
+
+
     fcx_list=[
         {
             "productCode":"kp_jtywx_v7",
@@ -448,6 +454,86 @@ def get_feichexian(username):
                     "amountTips": ""
                 }
             ]
+        },
+        {
+            "productCode": "kp_jtywx_v7",
+            "insuredFlag": "1",
+            "combination": "6",
+            "name": "标准版",
+            "liabilityList": [
+				    {
+						"sourceSystemCode": None,
+						"operatorName": None,
+						"operatorPhone": None,
+						"limit": 20,
+						"start": 0,
+						"id": 1159,
+						"productCode": "kp_jtywx_v24",
+						"liabilityType": 1,
+						"liabilityName": "意外身故残疾",
+						"liabilityLabel": "意外身故残疾",
+						"liabilityTips": "",
+						"liabilityDesc": "<p>被保险人驾驶或乘坐他人驾驶的非营运汽车,在车辆行驶过程中或为维护该车辆继续运行的加油、加水、换胎而临时停放过程中,遭受意外伤害,并因该意外伤害导致其身故或残疾的,保险人按照保险合同约定给付意外身故或意外残疾保险金。(本责任描述仅为简介,责任详情以保险条款为准)<br/></p>",
+						"amount": "150000",
+						"amountUnitType": 1,
+						"amountLabel": "15万/人",
+						"amountTips": ""
+					},
+					{
+						"sourceSystemCode": None,
+						"operatorName": None,
+						"operatorPhone": None,
+						"limit": 20,
+						"start": 0,
+						"id": 1012,
+						"productCode": "kp_jtywx_v24",
+						"liabilityType": 2,
+						"liabilityName": "意外医疗",
+						"liabilityLabel": "意外伤害医疗",
+						"liabilityTips": None,
+						"liabilityDesc": "在保险期间内,被保险人遭受主合同责任范围内的意外伤害,并在事故发生之日起181天内在中华人民共和国境内(不包括香港、澳门及台湾地区)的二级及二级以上公立医院或保险人认可的医疗机构进行治疗的,保险人对于被保险人在每次意外伤害事故中所支出的符合当地基本医疗保险主管部门规定范围内的、可报销的、必需且合理的医疗费用,保险人在扣除保险合同约定的免赔额后,按约定赔付比例给付意外医疗保险金。免赔额和给付比例由投保人和保险人在投保时约定,并在保险合同中载明。(本责任描述仅为简介,责任详情以保险条款为准)",
+						"amount": "10000",
+						"amountUnitType": 1,
+						"amountLabel": "1万/人",
+						"amountTips": None
+					},
+					{
+						"sourceSystemCode": None,
+						"operatorName": None,
+						"operatorPhone": None,
+						"limit": 20,
+						"start": 0,
+						"id": 1160,
+						"productCode": "kp_jtywx_v24",
+						"liabilityType": 3,
+						"liabilityName": "节假日意外身故残疾",
+						"liabilityLabel": "节假日意外身故残疾",
+						"liabilityTips": "",
+						"liabilityDesc": "<p>在保险期间内,被保险人在节假日期间遭受主险合同责任范围内的意外伤害事故,并自该意外伤害发生之日起180日(含第180日)内因该意外伤害直接导致其身故或伤残的,保险人在按照主险合同的约定给付意外身故保险金或意外伤残保险金后,再按本附加险约定的保险金额给付意外身故保险金或按主险合同的伤残给付比例乘以本附加险约定的保险金额给付意外伤残保险金。(本责任描述仅为简介,责任详情以保险条款为准)<br/></p>",
+						"amount": "150000",
+						"amountUnitType": 1,
+						"amountLabel": "15万/人",
+						"amountTips": ""
+					},
+					{
+						"sourceSystemCode": None,
+						"operatorName": None,
+						"operatorPhone": None,
+						"limit": 20,
+						"start": 0,
+						"id": 1024,
+						"productCode": "kp_jtywx_v24",
+						"liabilityType": 7,
+						"liabilityName": "意外救护车费用",
+						"liabilityLabel": "意外伤害救护车费用",
+						"liabilityTips": None,
+						"liabilityDesc": "在保险期间内,被保险人遭受意外伤害事故,并在事故发生之日起26小时内实际支出的、必需且合理的救护车费用,保险人在扣除保险合同约定的免赔额后,按约定的赔付比例给付救护车费用保险金,但以本保险合同载明的保险金额为限。(本责任描述仅为简介,责任详情以保险条款为准)",
+						"amount": "800",
+						"amountUnitType": 1,
+						"amountLabel": "800/人",
+						"amountTips": None
+					}
+				]
         }
     ]
     return {