Esempio n. 1
0
def runSession():
    try:
        print("run session start" + str(datetime.datetime.now()))
        loginpingan = Login()
        hn = Hn_Login()

        log1 = logincic()
        loginRes = login()
        pingan_session = loginpingan.login()
        ancheng = login_ancheng()
        hn_session = hn.hn_login()
        print("run session end " + str(datetime.datetime.now()))
    except Exception as e:
        print(e)
        print(traceback.format_exc())
Esempio n. 2
0
def getSession():
    sessiondt = get_session(["1", "4", "5", "12", "13"])
    pingansession = sessiondt[0]
    sessio4 = sessiondt[1]
    sessio5 = sessiondt[2]
    ancheng_session = sessiondt[3]
    hn_session = sessiondt[4]

    # 测试session是否有效
    if sessio4 is not None:
        CUST_DATA = 'plateNo=' + '' + '&frmNo=' + 'LBELMBKC2EY568468'
        getcodeinfo_url = 'http://carply.cic.cn/pcis/policy/universal/quickapp/actionservice.ai'
        getcodeinfo_data = 'ADAPTER_TYPE=JSON_TYPE&SERVICE_TYPE=ACTION_SERVIC&CODE_TYPE=CODE_TYPE&BEAN_HANDLE=baseAction&ACTION_HANDLE=perform&SERVICE_NAME=vhlPlatformCommonAction&SERVICE_MOTHOD=getJsCheckInfo&DW_DATA=%255B%255D&HELPCONTROLMETHOD=common&SCENE=UNDEFINED&BIZ_SYNCH_CONTINUE=false&CUST_DATA=' + CUST_DATA
        headers = se.headers
        headers['Content-Type'] = 'application/x-www-form-urlencoded'
        try:
            getcodeinforesp = sessio4.post(url=getcodeinfo_url,
                                           data=getcodeinfo_data,
                                           headers=headers)
        except Exception as e:
            print(e)
            sessio4 = logincic()
        print('curru_url = %s' % getcodeinforesp.url)
    else:
        sessio4 = logincic()

    if sessio5 is None:
        sessio5 = login()

    if pingansession is None:
        loginpingan = Login()
        pingansession = loginpingan.login()

    if ancheng_session is None:
        ancheng_session = login_ancheng()

    if hn_session is None:
        hn = Hn_Login()
        hn_session = hn.hn_login()
    return {
        '4': sessio4,
        '5': sessio5,
        "1": pingansession,
        "12": ancheng_session,
        "13": hn_session
    }
Esempio n. 3
0
def is_ancheng_renewal(session, plateNumber):
    try:
        # 获取CPlyNo, 判断有没有续保信息
        ret = get_xubao_1(session, plateNumber)

        if 'JSP Processing Error' in ret.text:
            session = login_ancheng()
            return is_ancheng_renewal(session, plateNumber)

        ra = "DATA:\['(.*?)'\]"
        rb = re.compile(ra)

        title_list = re.findall(rb, ret.content)

        html = title_list[0]

        # 没有续保信息返回0
        if "CPlyNo" not in html:
            log.info(u"未查询到续信息%s" % plateNumber)
            return 0

        soup = BeautifulSoup(html, 'html.parser')

        sy_premium, jq_premium = 0, 0
        syPlyNo, jqPlyNo = 0, 0
        try:
            premiums = soup.findAll("attribute", attrs={"name": "NPrm"})
            PlyNo = soup.findAll("attribute", attrs={"name": "CPlyNo"})

            premium_1 = float(premiums[0].get_text())
            premium_2 = float(premiums[1].get_text())

            if premium_1 > premium_2:
                syPlyNo = PlyNo[0].get_text()
                jqPlyNo = PlyNo[1].get_text()
            else:
                syPlyNo = PlyNo[1].get_text()
                jqPlyNo = PlyNo[0].get_text()

            sy_premium = max(premium_1, premium_2)
            jq_premium = min(premium_1, premium_2)

        except Exception as e:
            log.info('查询商业险和交强险出错 - {0}'.format(e))

        if not syPlyNo or not jqPlyNo:
            log.info('查询保单号出错')
            return

        # 获取续保信息
        ret = get_xubao_2(session, syPlyNo, jqPlyNo)

        response_body = json.loads(ret.content)

        fields = ["Insured.CInsuredNme", "Insured.CCertfCde", "Insured.CMobile", "Insured.CSuffixAddr", "Vhl.CFrmNo",
                  "Vhl.CPlateNo", "Vhl.CEngNo", "Vhl.CModelCde", "Vhl.CModelNme", "Vhl.CFstRegYm", "Vhl.NSeatNum",
                  "SY_Base.TInsrncEndTm", "SY_Base.TInsrncBgnTm", "JQ_Base.TInsrncEndTm", "JQ_Base.TInsrncBgnTm",
                  "Vhl.CRegVhlTyp"]

        Insured_DW = jsonpath.jsonpath(response_body, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.Insured_DW')]")[0]
        Insured_DW_dataObjVoList = jsonpath.jsonpath(Insured_DW, "$.dataObjVoList")
        dict_1 = Insured_DW_dataObjVoList[0][0]['attributeVoList']

        Vhl_DW = jsonpath.jsonpath(response_body, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.Vhl_DW')]")[0]
        Vhl_DW_dataObjVoList = jsonpath.jsonpath(Vhl_DW, "$.dataObjVoList")
        dict_2 = Vhl_DW_dataObjVoList[0][0]['attributeVoList']

        Base_DW = jsonpath.jsonpath(response_body, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.Base_DW')]")[0]
        Base_DW_dataObjVoList = jsonpath.jsonpath(Base_DW, "$.dataObjVoList")
        dict_3 = Base_DW_dataObjVoList[0][0]['attributeVoList']

        dict_4 = dict(dict_1, **dict_2)
        dict_5 = dict(dict_4, **dict_3)

        # print dict_5

        _data = {field: dict_5[field]['value'] for field in fields}

        VsTax_DW = jsonpath.jsonpath(response_body, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.VsTax_DW')]")[0]
        VsTax_DW_dataObjVoList = jsonpath.jsonpath(VsTax_DW, "$.dataObjVoList")
        dict_6 = VsTax_DW_dataObjVoList[0][0]['attributeVoList']

        VsTax_NAggTax = dict_6.get('VsTax.NTaxableAmt').get('value', 0)
        jq_premium += float(VsTax_NAggTax)

        nAggTax = '1' if VsTax_NAggTax else '0'

        # 获取险别
        Cvrg_DW = jsonpath.jsonpath(response_body, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.Cvrg_DW')]")[
            0]
        Cvrg_DW_dataObjVoList = jsonpath.jsonpath(Cvrg_DW, "$.dataObjVoList")

        attrs = Cvrg_DW_dataObjVoList[0]

        # print attrs

        insuranceType = {
            "otherHurtPremium": {
                "Amount": '0',
                "isCheck": "0"
            },
            "driverDutyPremium": {
                "Amount": "0",
                "isCheck": "0"
            },
            "passengerDutyPremium": {
                "Amount": '0',
                "isCheck": "0"
            },
            "carDamagePremium": "0",
            "carFireBrokenBenchMarkPremium": "0",
            "carTheftPremium": "0",
            "otherHurtBenchMarkPremium": "0",
            "carTheftBenchMarkPremium": "0",
            "engineWadingBenchMarkPremium": "0",
            "JqSumPremium": jq_premium,
            "carNickPremium": {
                "Amount": "0",
                "isCheck": "0"
            },
            "carDamageBenchMarkPremium": "0",
            "carNickBenchMarkPremium": "0",
            "engineWadingPremium": "0",
            "passengerBenchMarkPremium": "0",
            "SySumPremium": sy_premium,
            "driverDutyBenchMarkPremium": "0",
            "carFirePremium": "0",
            "glassBrokenPremium": "0",
            "compulsoryInsurance": "0",
            "nAggTax": nAggTax
        }

        for i, k in enumerate(attrs):
            num = int(k["attributeVoList"]["Cvrg.NSeqNo"]["value"])
            if num == 15:
                _otherHurtPremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 三者险
                otherHurtBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_otherHurtPremium) + u' 三者险')

                otherHurtPremium = {}
                otherHurtPremium['Amount'] = str(_otherHurtPremium)
                otherHurtPremium['isCheck'] = '1'

                insuranceType['otherHurtPremium'] = otherHurtPremium
                insuranceType['otherHurtBenchMarkPremium'] = '1' if otherHurtBenchMarkPremium == '345021001' else '0'

            elif num == 20:
                _carDamagePremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 车损险
                carDamageBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_carDamagePremium) + u' 车损险')

                carDamagePremium = '1'
                insuranceType['carDamagePremium'] = carDamagePremium
                insuranceType['carDamageBenchMarkPremium'] = '1' if carDamageBenchMarkPremium == '345021001' else '0'

            elif num == 13:
                _driverDutyPremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 车上人员险(司机)
                driverDutyBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_driverDutyPremium) + u' 车上人员险(司机)')

                driverDutyPremium = {}
                driverDutyPremium['Amount'] = _driverDutyPremium
                driverDutyPremium['isCheck'] = '1'

                insuranceType['driverDutyPremium'] = driverDutyPremium
                insuranceType['driverDutyBenchMarkPremium'] = '1' if driverDutyBenchMarkPremium == '345021001' else '0'

            elif num == 14:
                _passengerDutyPremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 车上人员险(乘客)
                passengerBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_passengerDutyPremium) + u' 车上人员险(乘客)')

                passengerDutyPremium = {}
                passengerDutyPremium['Amount'] = _passengerDutyPremium
                passengerDutyPremium['isCheck'] = '1'

                insuranceType['passengerDutyPremium'] = passengerDutyPremium
                insuranceType['passengerBenchMarkPremium'] = '1' if passengerBenchMarkPremium == '345021001' else '0'

            elif num == 18:
                _carTheftPremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 盗抢险
                carTheftBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_carTheftPremium) + u' 盗抢险')

                carTheftPremium = '1'
                insuranceType['carTheftPremium'] = carTheftPremium
                insuranceType['carTheftBenchMarkPremium'] = '1' if carTheftBenchMarkPremium == '345021001' else '0'

            elif num == 19:
                _carNickPremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 划痕险
                carNickBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_carNickPremium) + u' 划痕险')

                carNickPremium = {}
                carNickPremium['Amount'] = _carNickPremium
                carNickPremium['isCheck'] = '1'

                insuranceType['carNickPremium'] = carNickPremium
                insuranceType['carNickBenchMarkPremium'] = '1' if carNickBenchMarkPremium == '345021001' else '0'

            elif num == 8:
                _glassBrokenPremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 玻璃破碎险
                glassBrokenMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_glassBrokenPremium) + u' 玻璃破碎险')

                glassBrokenPremium = '1'
                insuranceType['glassBrokenPremium'] = glassBrokenPremium
                insuranceType['glassBrokenMarkPremium'] = '1' if glassBrokenMarkPremium == '345021001' else '0'

            elif num == 5:
                _carFirePremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 自燃险
                carFireBrokenBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_carFirePremium) + u' 自燃险')

                carFirePremium = '1'
                insuranceType['carFirePremium'] = carFirePremium
                insuranceType[
                    'carFireBrokenBenchMarkPremium'] = '1' if carFireBrokenBenchMarkPremium == '345021001' else '0'

            elif num == 10:
                _engineWadingPremium = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 涉水险
                engineWadingBenchMarkPremium = k["attributeVoList"]["Cvrg.CDductMrk"]["value"]
                log.info(str(_engineWadingPremium) + u' 涉水险')

                engineWadingPremium = '1'
                insuranceType['engineWadingPremium'] = engineWadingPremium
                insuranceType[
                    'engineWadingBenchMarkPremium'] = '1' if engineWadingBenchMarkPremium == '345021001' else '0'

            elif num == 1:
                _compulsory_insurance = float(k["attributeVoList"]["Cvrg.NAmt"]["value"])  # 交强险
                log.info(str(_compulsory_insurance) + u' 交强险')

                compulsoryInsurance = '1'
                insuranceType['compulsoryInsurance'] = compulsoryInsurance

        # print _data

        out = {
            'licenseNo': _data['Vhl.CPlateNo'],  # 车牌号
            'vinNo': _data['Vhl.CFrmNo'],  # 车架号
            'endDate': utils.getlatedate(-365, str_date=_data['SY_Base.TInsrncEndTm'][:10]),  # 保险结束期
            'CCardDetail': _data['Vhl.CRegVhlTyp'],  # 车辆类型
            'brandName': _data['Vhl.CModelNme'],  # 汽车名字
            'insuredName': _data['Insured.CInsuredNme'],  # 车主
            'identifyNumber': _data['Insured.CCertfCde'],  # 身份证号
            'mobile': _data['Insured.CMobile'],  # 手机号
            'insuredAddress': _data['Insured.CSuffixAddr'],  # 地址
            'CUsageCde': "",
            'NNewPurchaseValue': "",
            'enrollDate': _data['Vhl.CFstRegYm'],  # 初登日期
            'engineNo': _data['Vhl.CEngNo'],  # 发动机号
            'CModelCde': _data['Vhl.CModelCde'],
            'NSeatNum': _data['Vhl.NSeatNum'],  # 座位数
            'COMPANY_ID': "12",
            'insuranceType': insuranceType,
            'insuranceTime': {
                'syEnd': utils.getlatedate(-365, str_date=_data['SY_Base.TInsrncEndTm'][:10]) + ' 23:59:59',
                'syStart': utils.getlatedate(-365, str_date=_data['SY_Base.TInsrncBgnTm'][:10]) + ' 00:00:00',
                'jqStart': utils.getlatedate(-365, str_date=_data['JQ_Base.TInsrncBgnTm'][:10]) + ' 00:00:00',
                'jqEnd': utils.getlatedate(-365, str_date=_data['JQ_Base.TInsrncEndTm'][:10]) + ' 23:59:59'}
        }

        # print out
        return out
    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
        return 0
Esempio n. 4
0
            'engineNo': _data['Vhl.CEngNo'],  # 发动机号
            'CModelCde': _data['Vhl.CModelCde'],
            'NSeatNum': _data['Vhl.NSeatNum'],  # 座位数
            'COMPANY_ID': "12",
            'insuranceType': insuranceType,
            'insuranceTime': {
                'syEnd': utils.getlatedate(-365, str_date=_data['SY_Base.TInsrncEndTm'][:10]) + ' 23:59:59',
                'syStart': utils.getlatedate(-365, str_date=_data['SY_Base.TInsrncBgnTm'][:10]) + ' 00:00:00',
                'jqStart': utils.getlatedate(-365, str_date=_data['JQ_Base.TInsrncBgnTm'][:10]) + ' 00:00:00',
                'jqEnd': utils.getlatedate(-365, str_date=_data['JQ_Base.TInsrncEndTm'][:10]) + ' 23:59:59'}
        }

        # print out
        return out
    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
        return 0


if __name__ == "__main__":
    r = CRedis()
    sessBase = r.get('12_COMPANY')
    if not sessBase:
        session = login_ancheng()
    else:
        session = pickle.loads(codecs.decode(sessBase.encode(), "base64"))
    plateNumber = "苏JL5099"

    is_ancheng_renewal(session, plateNumber)
def get_premium(session, data):
    if not session:
        session = login_ancheng()

    if not session:
        log.info(u'安诚登录失败')
        return

    searchVin = data['vinNo']
    insureCarId = data['insureCarId']
    isPhone = data['isPhone']
    sessionId = data['sessionId']
    client = data['client']
    CPlateNo = data['plateNumber']

    insuranceType = data.get("insuranceType", {})
    insuranceType_list = []
    if isinstance(insuranceType, list):
        insuranceType_list = insuranceType
    else:
        insuranceType_list.append(insuranceType)

    insuranceTypeGroupId = insuranceType_list[0].get("insuranceTypeGroupId",
                                                     "")
    insuranceTypeGroup = insuranceType_list[0].get("insuranceTypeGroup", "")

    try:
        insuranceTime = data.get("insuranceTime", None)
        if insuranceTime:
            jqStart = insuranceTime.get("jqStart")
            syStart = insuranceTime.get("syStart")
        else:
            jqStart, syStart = utils.getlatedate(1), utils.getlatedate(1)

        # 查询redis中是否有信息
        r = CRedis()
        car_info = r.get_vin(searchVin, "12")
        if not car_info:
            car_info = query_car_info(session, data, syStart, CPlateNo,
                                      searchVin)
        else:
            car_info = eval(car_info)

        if not car_info:
            log.error(u'查询车辆信息失败')
            send_mq(client, CPlateNo, "查询车辆信息失败", "2", "12", sessionId,
                    isPhone, insuranceTypeGroupId, insuranceTypeGroup)
            return

        for insuranceType in insuranceType_list:

            # 车辆信息中塞入 licenseType
            car_info['licenseType'] = data.get("licenseType", "02")
            DW_DATA, Base_CProdNo, Vhl_NNewPurchaseValue = get_premium_request(
                session, jqStart, syStart, CPlateNo, searchVin, insuranceType,
                car_info)

            ret = get_premium_data(session, DW_DATA)
            ratio, jq_ratio = '0', '0'
            try:
                if '计算完毕' not in ret.json(
                )['RESULT_MSG'] and '重复投保' in ret.json()['RESULT_MSG']:
                    log.info(u'重复投保,重新获取终保日期')

                    sy_end_date, jq_end_date, = None, None
                    if Base_CProdNo == "0336" or Base_CProdNo == "0335":
                        if '计算完毕' not in ret.json(
                        )['RESULT_MSG'] and '商业' in ret.json()['RESULT_MSG']:

                            ra = "\\\\n终保日期:(.+?)\\\\n"
                            rb = re.compile(ra)
                            rc = re.findall(rb, ret.content)
                            if rc and 'null' not in rc:
                                sy_end_date = rc[0][:4] + '-' + rc[0][
                                    4:6] + '-' + rc[0][6:8]

                                log.info(u'商业险终保日期 - {0}'.format(sy_end_date))

                    if Base_CProdNo == "0330":
                        ra = "\d{4}-\d{2}-\d{2}"
                        rb = re.compile(ra)

                        rc = re.findall(rb, ret.json()['RESULT_MSG'])
                        if rc and 'null' not in rc:

                            if len(rc) == 2:
                                jq_end_date = rc[1] if rc[1] > rc[0] else rc[0]
                            else:
                                jq_end_date = rc[0]

                                log.info(u'交强险终保日期 - {0}'.format(jq_end_date))

                    if Base_CProdNo == "0336_0330" or Base_CProdNo == "0335_0330":

                        if '计算完毕' not in ret.json(
                        )['RESULT_MSG'] and '商业' in ret.json()['RESULT_MSG']:

                            ra = "\\\\n终保日期:(.+?)\\\\n"
                            rb = re.compile(ra)
                            rc = re.findall(rb, ret.content)
                            if rc and 'null' not in rc:
                                end_date = rc[0][:4] + '-' + rc[0][
                                    4:6] + '-' + rc[0][6:8]

                                if 'E51' in ret.json()['RESULT_MSG']:
                                    jq_end_date = end_date
                                    log.info(
                                        u'交强险终保日期 - {0}'.format(jq_end_date))
                                else:
                                    sy_end_date = end_date
                                    log.info(
                                        u'商业险终保日期 - {0}'.format(sy_end_date))

                        elif '计算完毕' not in ret.json(
                        )['RESULT_MSG'] and '商业' not in ret.json(
                        )['RESULT_MSG']:
                            ra = "\d{4}-\d{2}-\d{2}"
                            rb = re.compile(ra)

                            rc = re.findall(rb, ret.json()['RESULT_MSG'])
                            if rc and 'null' not in rc:

                                if len(rc) == 2:
                                    end_date = rc[1] if rc[1] > rc[0] else rc[0]
                                else:
                                    end_date = rc[0]

                                if 'E51' in ret.json()['RESULT_MSG']:
                                    jq_end_date = end_date
                                    log.info(
                                        u'交强险终保日期 - {0}'.format(jq_end_date))
                                else:
                                    sy_end_date = end_date
                                    log.info(
                                        u'商业险终保日期 - {0}'.format(sy_end_date))

                    if sy_end_date or jq_end_date:

                        if jq_end_date:
                            jqStart = jq_end_date
                        if sy_end_date:
                            syStart = sy_end_date

                        # car_info['endDate'] = endDate
                        # 当是重复投保,取终保日期重新发送获取保费请求
                        DW_DATA, Base_CProdNo, Vhl_NNewPurchaseValue = get_premium_request(
                            session, jqStart, syStart, CPlateNo, searchVin,
                            insuranceType, car_info)
                        ret = get_premium_data(session, DW_DATA)

                        # 将交强险的终保日期替换后还是重复投保
                        if '终保日期' in ret.json(
                        )['RESULT_MSG'] and '重复投保' in ret.json()['RESULT_MSG']:
                            log.info(u'将交强险的终保日期替换后还是重复投保')
                            if '商业' in json.dumps(ret.json(),
                                                  ensure_ascii=False):

                                ra = "\\\\n终保日期:(.+?)\\\\n"
                                rb = re.compile(ra)
                                rc = re.findall(rb, ret.content)
                                if rc and 'null' not in rc:
                                    sy_end_date = rc[0][:4] + '-' + rc[0][
                                        4:6] + '-' + rc[0][6:8]

                                    log.info(
                                        u'商业险终保日期 - {0}'.format(sy_end_date))

                                if sy_end_date:
                                    syStart = sy_end_date
                                    DW_DATA, Base_CProdNo, Vhl_NNewPurchaseValue = get_premium_request(
                                        session, jqStart, syStart, CPlateNo,
                                        searchVin, insuranceType, car_info)
                                    ret = get_premium_data(session, DW_DATA)

                        if '计算完毕' not in ret.json(
                        )['RESULT_MSG'] and '重复投保' in ret.json()['RESULT_MSG']:
                            log.info(u'重复投保,获取终保日期还是重复投保')
                            send_mq(client, CPlateNo, "重复投保,获取终保日期还是重复投保", "2",
                                    "12", sessionId, isPhone,
                                    insuranceTypeGroupId, insuranceTypeGroup)
                            return

                    else:
                        log.info(u'重复投保,无法获取终保日期,程序结束')
                        send_mq(client, CPlateNo, "重复投保,无法获取终保日期", "2", "12",
                                sessionId, isPhone, insuranceTypeGroupId,
                                insuranceTypeGroup)
                        return

                if len(ret.json()['WEB_DATA']) > 0:
                    response_body_1 = json.loads(ret.text)
                    PrmCoef_DW = \
                        jsonpath.jsonpath(response_body_1, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.PrmCoef_DW')]")[0]
                    PrmCoef_DW_dataObjVoList = jsonpath.jsonpath(
                        PrmCoef_DW, "$.dataObjVoList")
                    PrmCoef_DW_dict = PrmCoef_DW_dataObjVoList[0][0][
                        'attributeVoList']

                    SY_PrmCoef_NResvNum1, PrmCoef_NTrafficVi = None, None
                    if PrmCoef_DW_dict["SY_PrmCoef.NResvNum1"]["value"]:
                        SY_PrmCoef_NResvNum1 = float(
                            PrmCoef_DW_dict["SY_PrmCoef.NResvNum1"]
                            ["value"])  # 无忧赔款优待系数

                    if PrmCoef_DW_dict["PrmCoef.NTrafficVi"]["value"]:
                        PrmCoef_NTrafficVi = float(
                            PrmCoef_DW_dict["PrmCoef.NTrafficVi"]
                            ["value"])  # 交通违法调整系数

                    if SY_PrmCoef_NResvNum1 and PrmCoef_NTrafficVi:
                        PrmCoef_NExpectTotal = float(
                            SY_PrmCoef_NResvNum1) * float(
                                PrmCoef_NTrafficVi) * 0.85 * 0.85  # 整单期望折扣

                        # 带上整单期望折扣重新发送请求
                        DW_DATA, Base_CProdNo, Vhl_NNewPurchaseValue = get_premium_request(
                            session,
                            jqStart,
                            syStart,
                            CPlateNo,
                            searchVin,
                            insuranceType,
                            car_info,
                            PrmCoef_NExpectTotal=str(PrmCoef_NExpectTotal))
                        ret = get_premium_data(session, DW_DATA)
                    VsTax_NAggTax = None
                    if len(ret.json()['WEB_DATA']) > 0:

                        response_body_2 = json.loads(ret.text)

                        PrmCoef_DW = \
                            jsonpath.jsonpath(response_body_2, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.PrmCoef_DW')]")[0]
                        PrmCoef_DW_dataObjVoList = jsonpath.jsonpath(
                            PrmCoef_DW, "$.dataObjVoList")
                        PrmCoef_DW_dict = PrmCoef_DW_dataObjVoList[0][0][
                            'attributeVoList']

                        # 获取商业险系数

                        if PrmCoef_DW_dict["SY_PrmCoef.NTotDisc"]["value"]:
                            ratio = float(
                                PrmCoef_DW_dict["SY_PrmCoef.NTotDisc"]
                                ["value"])  # 商业险系数
                        if PrmCoef_DW_dict["JQ_PrmCoef.NTotDisc"]["value"]:
                            jq_ratio = float(
                                PrmCoef_DW_dict["JQ_PrmCoef.NTotDisc"]
                                ["value"]) / 100  # 交强险系数

                        VsTax_DW = \
                            jsonpath.jsonpath(response_body_2, "$.WEB_DATA[?(@.dwName=='prodDef.vhl.VsTax_DW')]")[0]
                        VsTax_DW_dataObjVoList = jsonpath.jsonpath(
                            VsTax_DW, "$.dataObjVoList")
                        if VsTax_DW_dataObjVoList[0]:
                            VsTax_DW_dict = VsTax_DW_dataObjVoList[0][0][
                                'attributeVoList']

                            VsTax_NAggTax = float(
                                VsTax_DW_dict["VsTax.NAggTax"]["value"])  # 车船税
                            log.info('车船税 - {0}'.format(VsTax_NAggTax))

                        Cvrg_DW = jsonpath.jsonpath(
                            response_body_2,
                            "$.WEB_DATA[?(@.dwName=='prodDef.vhl.Cvrg_DW')]"
                        )[0]
                        Cvrg_DW_dataObjVoList = jsonpath.jsonpath(
                            Cvrg_DW, "$.dataObjVoList")

                        attrs = Cvrg_DW_dataObjVoList[0]

                    else:
                        msg = ret.json()['RESULT_MSG'].replace("\n", "")

                        if '期望折扣' in msg:

                            ra = "[0-9]*\.?[0-9]+"
                            rb = re.compile(ra)

                            msg_list = re.findall(rb, msg)

                            PrmCoef_NExpectTotal = float(msg_list[0])
                            # 返回期望折扣错误重新发送请求
                            DW_DATA, Base_CProdNo, Vhl_NNewPurchaseValue = get_premium_request(
                                session,
                                jqStart,
                                syStart,
                                CPlateNo,
                                searchVin,
                                insuranceType,
                                car_info,
                                PrmCoef_NExpectTotal=str(PrmCoef_NExpectTotal))
                            ret = get_premium_data(session, DW_DATA)
                            if len(ret.json()['WEB_DATA']) > 0:
                                response_body_2 = json.loads(ret.text)

                                PrmCoef_DW = \
                                    jsonpath.jsonpath(response_body_2,
                                                      "$.WEB_DATA[?(@.dwName=='prodDef.vhl.PrmCoef_DW')]")[0]
                                PrmCoef_DW_dataObjVoList = jsonpath.jsonpath(
                                    PrmCoef_DW, "$.dataObjVoList")
                                PrmCoef_DW_dict = PrmCoef_DW_dataObjVoList[0][
                                    0]['attributeVoList']

                                # 获取商业险系数
                                if PrmCoef_DW_dict["SY_PrmCoef.NTotDisc"][
                                        "value"]:
                                    ratio = float(
                                        PrmCoef_DW_dict["SY_PrmCoef.NTotDisc"]
                                        ["value"])  # 商业险系数
                                if PrmCoef_DW_dict["JQ_PrmCoef.NTotDisc"][
                                        "value"]:
                                    jq_ratio = float(
                                        PrmCoef_DW_dict["JQ_PrmCoef.NTotDisc"]
                                        ["value"]) / 100  # 交强险系数

                                VsTax_DW = \
                                    jsonpath.jsonpath(response_body_2,
                                                      "$.WEB_DATA[?(@.dwName=='prodDef.vhl.VsTax_DW')]")[0]
                                VsTax_DW_dataObjVoList = jsonpath.jsonpath(
                                    VsTax_DW, "$.dataObjVoList")

                                if VsTax_DW_dataObjVoList[0]:
                                    VsTax_DW_dict = VsTax_DW_dataObjVoList[0][
                                        0]['attributeVoList']

                                    VsTax_NAggTax = float(
                                        VsTax_DW_dict["VsTax.NAggTax"]
                                        ["value"])  # 车船税
                                    log.info('车船税 - {0}'.format(VsTax_NAggTax))

                                Cvrg_DW = \
                                    jsonpath.jsonpath(response_body_2,
                                                      "$.WEB_DATA[?(@.dwName=='prodDef.vhl.Cvrg_DW')]")[
                                        0]
                                Cvrg_DW_dataObjVoList = jsonpath.jsonpath(
                                    Cvrg_DW, "$.dataObjVoList")

                                attrs = Cvrg_DW_dataObjVoList[0]

                            else:
                                msg = ret.json()['RESULT_MSG'].replace(
                                    "\n", "")
                                if '无法加载模板缓存' in msg:
                                    log.info(u'无法加载模板缓存, 重新请求')
                                    return get_premium(session, data)
                                log.error(msg)
                                send_mq(client, CPlateNo, msg, "2", "12",
                                        sessionId, isPhone,
                                        insuranceTypeGroupId,
                                        insuranceTypeGroup)
                                return

                        else:
                            if '无法加载模板缓存' in msg:
                                log.info(u'无法加载模板缓存, 重新请求')
                                return get_premium(session, data)
                            log.error(msg)
                            send_mq(client, CPlateNo, msg, "2", "12",
                                    sessionId, isPhone, insuranceTypeGroupId,
                                    insuranceTypeGroup)
                            return
                else:
                    msg = ret.json()['RESULT_MSG'].replace("\n", "")
                    if '无法加载模板缓存' in msg:
                        log.info(u'无法加载模板缓存, 重新请求')
                        return get_premium(session, data)
                    log.error(msg)
                    send_mq(client, CPlateNo, msg, "2", "12", sessionId,
                            isPhone, insuranceTypeGroupId, insuranceTypeGroup)
                    return

            except Exception as e:
                log.error(e)
                log.error(traceback.format_exc())
                send_mq(client, CPlateNo, "未知异常", "2", "12", sessionId,
                        isPhone, insuranceTypeGroupId, insuranceTypeGroup)
                return

            Premium = {}
            MarkPremium = {}
            hebao_premium = {}
            total_money = 0
            total_mark_money = 0

            # 计算保费
            for i, k in enumerate(attrs):
                num = int(k["attributeVoList"]["Cvrg.NSeqNo"]["value"])
                if num == 15:
                    # otherHurtPremium = float(k["attributeVoList"]["Cvrg.NBefPrm"]["value"]) * ratio  # 三者险
                    otherHurtPremium = float(
                        k["attributeVoList"]["Cvrg.NCalcAnnPrm"]
                        ["value"])  # 三者险
                    total_money += otherHurtPremium
                    log.info(str(otherHurtPremium) + u' 三者险')
                    Premium['otherHurtPremium'] = round(otherHurtPremium, 2)
                    hebao_premium['otherHurtPremium'] = otherHurtPremium

                    otherHurtBenchMarkPremium = otherHurtPremium * 0.15  # 三者险不计免赔
                    total_mark_money += otherHurtBenchMarkPremium
                    MarkPremium['otherHurtBenchMarkPremium'] = round(
                        otherHurtBenchMarkPremium, 2)

                elif num == 20:
                    # carDamagePremium = float(k["attributeVoList"]["Cvrg.NBefPrm"]["value"]) * ratio  # 车损险应缴保费
                    carDamagePremium = float(
                        k["attributeVoList"]["Cvrg.NCalcAnnPrm"]
                        ["value"])  # 车损险应缴保费
                    total_money += carDamagePremium
                    log.info(str(carDamagePremium) + u' 车损险应缴保费')
                    Premium['carDamagePremium'] = round(carDamagePremium, 2)
                    hebao_premium['carDamagePremium'] = carDamagePremium

                    carDamageBenchMarkPremium = carDamagePremium * 0.15  # 车损险不计免赔
                    total_mark_money += carDamageBenchMarkPremium
                    MarkPremium['carDamageBenchMarkPremium'] = round(
                        carDamageBenchMarkPremium, 2)

                elif num == 13:
                    driverDutyPremium = float(
                        k["attributeVoList"]["Cvrg.NBefPrm"]
                        ["value"]) * ratio  # 车上人员险(司机)
                    total_money += driverDutyPremium
                    log.info(str(driverDutyPremium) + u' 车上人员险(司机)')
                    Premium['driverDutyPremium'] = round(driverDutyPremium, 2)
                    hebao_premium['driverDutyPremium'] = driverDutyPremium

                    driverDutyBenchMarkPremium = driverDutyPremium * 0.15  # 车上人员险(司机)不计免赔
                    total_mark_money += driverDutyBenchMarkPremium
                    MarkPremium['driverDutyBenchMarkPremium'] = round(
                        driverDutyBenchMarkPremium, 2)

                elif num == 14:
                    passengerDutyPremium = float(
                        k["attributeVoList"]["Cvrg.NBefPrm"]
                        ["value"]) * ratio  # 车上人员险(乘客)
                    total_money += passengerDutyPremium
                    log.info(str(passengerDutyPremium) + u' 车上人员险(乘客)')
                    Premium['passengerDutyPremium'] = round(
                        passengerDutyPremium, 2)
                    hebao_premium[
                        'passengerDutyPremium'] = passengerDutyPremium

                    passengerBenchMarkPremium = passengerDutyPremium * 0.15  # 车上人员险(乘客)不计免赔
                    total_mark_money += passengerBenchMarkPremium
                    MarkPremium['passengerBenchMarkPremium'] = round(
                        passengerBenchMarkPremium, 2)

                elif num == 18:
                    carTheftPremium = float(
                        k["attributeVoList"]["Cvrg.NBefPrm"]
                        ["value"]) * ratio  # 盗抢险
                    total_money += carTheftPremium
                    log.info(str(carTheftPremium) + u' 盗抢险')
                    Premium['carTheftPremium'] = round(carTheftPremium, 2)
                    hebao_premium['carTheftPremium'] = carTheftPremium

                    carTheftBenchMarkPremium = carTheftPremium * 0.20  # 盗抢险不计免赔
                    total_mark_money += carTheftBenchMarkPremium
                    MarkPremium['carTheftBenchMarkPremium'] = round(
                        carTheftBenchMarkPremium, 2)

                elif num == 19:
                    carNickPremium = float(k["attributeVoList"]["Cvrg.NBefPrm"]
                                           ["value"]) * ratio  # 划痕险
                    total_money += carNickPremium
                    log.info(str(carNickPremium) + u' 划痕险')
                    Premium['carNickPremium'] = round(carNickPremium, 2)
                    hebao_premium['carNickPremium'] = carNickPremium

                    carNickBenchMarkPremium = carNickPremium * 0.15  # 划痕险不计免赔
                    total_mark_money += carNickBenchMarkPremium
                    MarkPremium['carNickBenchMarkPremium'] = round(
                        carNickBenchMarkPremium, 2)

                elif num == 8:
                    glassBrokenPremium = float(
                        k["attributeVoList"]["Cvrg.NBefPrm"]
                        ["value"]) * ratio  # 玻璃破碎险
                    total_money += glassBrokenPremium
                    log.info(str(glassBrokenPremium) + u' 玻璃破碎险')
                    Premium['glassBrokenPremium'] = round(
                        glassBrokenPremium, 2)
                    hebao_premium['glassBrokenPremium'] = glassBrokenPremium

                    glassBrokenMarkPremium = glassBrokenPremium * 0.20  # 玻璃破碎险不计免赔
                    total_mark_money += glassBrokenMarkPremium
                    MarkPremium['glassBrokenMarkPremium'] = round(
                        glassBrokenMarkPremium, 2)

                elif num == 5:
                    carFirePremium = float(k["attributeVoList"]["Cvrg.NBefPrm"]
                                           ["value"]) * ratio  # 自燃险
                    total_money += carFirePremium
                    log.info(str(carFirePremium) + u' 自燃险')
                    Premium['carFirePremium'] = round(carFirePremium, 2)
                    hebao_premium['carFirePremium'] = carFirePremium

                    carFireMarkPremium = carFirePremium * 0.20  # 自燃险不计免赔
                    total_mark_money += carFireMarkPremium
                    MarkPremium['carFireMarkPremium'] = round(
                        carFireMarkPremium, 2)

                elif num == 10:
                    engineWadingPremium = float(
                        k["attributeVoList"]["Cvrg.NBefPrm"]
                        ["value"]) * ratio  # 涉水险
                    total_money += engineWadingPremium
                    log.info(str(engineWadingPremium) + u' 涉水险')
                    Premium['engineWadingPremium'] = round(
                        engineWadingPremium, 2)
                    hebao_premium['engineWadingPremium'] = engineWadingPremium

                    engineWadingMarkPremium = engineWadingPremium * 0.15  # 涉水险不计免赔
                    total_mark_money += engineWadingMarkPremium
                    MarkPremium['engineWadingMarkPremium'] = round(
                        engineWadingMarkPremium, 2)

                elif num == 1:
                    compulsory_insurance = float(
                        k["attributeVoList"]["Cvrg.NBefPrm"]
                        ["value"]) * jq_ratio  # 交强险
                    log.info(str(compulsory_insurance) + u' 交强险')
                    Premium['compulsory_insurance'] = round(
                        compulsory_insurance, 2)
                    hebao_premium[
                        'compulsory_insurance'] = compulsory_insurance

                if VsTax_NAggTax:
                    Premium['NAggTax'] = round(VsTax_NAggTax, 2)
                    hebao_premium['NAggTax'] = VsTax_NAggTax

            total_premium = total_money + total_mark_money

            log.info(u'商业险应缴保费总额 - {0}'.format(total_money))
            log.info(u'应缴保费不计免赔总额 - {0}'.format(total_mark_money))
            log.info(u'应缴保费总额 - {0}'.format(total_premium))

            # hebao_premium = Premium
            hebao_premium['total_mark_premium'] = total_mark_money
            hebao_premium['total_premium'] = total_premium

            BaoE = {}

            _driverDutyPremium = insuranceType.get("driverDutyPremium", None)
            _carDamagePremium = insuranceType.get("carDamagePremium", "0")
            _otherHurtPremium = insuranceType.get("otherHurtPremium", None)
            _passengerDutyPremium = insuranceType.get("passengerDutyPremium",
                                                      None)
            _carTheftPremium = insuranceType.get("carTheftPremium", "0")
            _carFireBrokenBenchMarkPremium = insuranceType.get(
                "carFirePremium", "0")
            _engineWadingBenchMarkPremium = insuranceType.get(
                "engineWadingPremium", "0")
            _carNickPremium = insuranceType.get("carNickPremium", None)  # 划痕险

            Vhl_NNewPurchaseValue = car_info['Vhl_NNewPurchaseValue']
            seats = car_info.get('seats', 5)

            otherHurtBaoE = float(
                _otherHurtPremium.get("Amount")) if _otherHurtPremium and int(
                    _otherHurtPremium.get("isCheck"), 0) and int(
                        _otherHurtPremium.get("Amount"), 0) else None  # 三者险保额
            if otherHurtBaoE:
                BaoE['otherHurtBaoE'] = round(otherHurtBaoE, 2)

            carDamageBaoE = float(Vhl_NNewPurchaseValue) if int(
                _carDamagePremium) else None  # 车损险保额
            if carDamageBaoE:
                BaoE['carDamageBaoE'] = round(carDamageBaoE, 2)

            driverDutyBaoE = float(
                _driverDutyPremium.get("Amount")
            ) if _driverDutyPremium and int(
                _driverDutyPremium.get("isCheck"), 0) and int(
                    _driverDutyPremium.get("Amount"), 0) else None  # 驾驶人责任险
            if driverDutyBaoE:
                BaoE['driverDutyBaoE'] = round(driverDutyBaoE, 2)

            passengerDutyBaoE = float(_passengerDutyPremium.get("Amount")) * (
                seats - 1) if _passengerDutyPremium and int(
                    _passengerDutyPremium.get("isCheck"), 0) and int(
                        _passengerDutyPremium.get("Amount"),
                        0) else None  # 乘客责任险
            if passengerDutyBaoE:
                BaoE['passengerDutyBaoe'] = round(passengerDutyBaoE, 2)

            carTheftBaoE = float(Vhl_NNewPurchaseValue) if int(
                _carTheftPremium) else None  # 车盗险保额
            if carTheftBaoE:
                BaoE['carTheftBaoE'] = round(carTheftBaoE, 2)

            carNickBaoE = float(
                _carNickPremium.get("Amount")) if _carNickPremium and int(
                    _carNickPremium.get("isCheck"), 0) and int(
                        _carNickPremium.get("Amount"), 0) else None  # 划痕险保额
            if carNickBaoE:
                BaoE['carNickBaoE'] = round(carNickBaoE, 2)

            engineWadingBaoE = float(Vhl_NNewPurchaseValue) if int(
                _engineWadingBenchMarkPremium) else None  # 涉水险保额
            if engineWadingBaoE:
                BaoE['engineWadingBaoE'] = round(engineWadingBaoE, 2)

            carFireBaoE = float(Vhl_NNewPurchaseValue) if int(
                _carFireBrokenBenchMarkPremium) else None  # 自燃险保额
            if carFireBaoE:
                BaoE['carFireBaoE'] = round(carFireBaoE, 2)

            disCount = {"sy_disCount": ratio, "jq_disCount": jq_ratio}

            PremiumInfo = [Premium, BaoE, MarkPremium, disCount]

            log.info(PremiumInfo)

            soupDb(PremiumInfo, [
                utils.getlatedate(1) + ' 00:00:00',
                utils.getlatedate(365) + " 23:59:59", seats,
                insuranceTypeGroupId, insureCarId, "12"
            ])

            send_mq(client, CPlateNo, "", "1", "12", sessionId, isPhone,
                    insuranceTypeGroupId, insuranceTypeGroup)
            log.info(u"安城入库成功:%s|%s" % (CPlateNo, searchVin))

            if HEBAO_KEY and car_info.get("licenseType", "02") != "02":
                r = CRedis()
                try:
                    DW_DATA, Base_CProdNo, Vhl_NNewPurchaseValue = get_premium_request(
                        session,
                        jqStart,
                        syStart,
                        CPlateNo,
                        searchVin,
                        insuranceType,
                        car_info,
                        hebao_premium=hebao_premium)

                    ret = save_premium(session, DW_DATA)

                    WEB_DATA = ret.json()['WEB_DATA']

                    sy_appno, jq_appno = '', ''
                    for data in WEB_DATA:
                        if data['dataObjVoList']:
                            if 'SY_Base.CAppNo' in data['dataObjVoList'][0][
                                    'attributeVoList']:
                                sy_appno = data['dataObjVoList'][0][
                                    'attributeVoList']['SY_Base.CAppNo'][
                                        'value']
                            if 'JQ_Base.CAppNo' in data['dataObjVoList'][0][
                                    'attributeVoList']:
                                jq_appno = data['dataObjVoList'][0][
                                    'attributeVoList']['JQ_Base.CAppNo'][
                                        'value']

                    if sy_appno:
                        log.info(u'商业险投保单号 - {0}'.format(sy_appno))
                        ret = he_bao2(session, sy_appno)
                        RESULT_TYPE = ret.json()["RESULT_TYPE"]
                        RESULT_MSG = ret.json()["RESULT_MSG"].replace("\n", "")
                        log.info(u'核保状态 - {0} - {1}'.format(
                            RESULT_TYPE, RESULT_MSG))

                        SY_PremiumInfo = PremiumInfo
                        if 'compulsory_insurance' in SY_PremiumInfo[0]:
                            SY_PremiumInfo[0].pop('compulsory_insurance')
                        if 'jq_disCount' in SY_PremiumInfo[3]:
                            SY_PremiumInfo[3].pop('jq_disCount')

                        if RESULT_TYPE == "SUCCESS":
                            data = {
                                'appNo':
                                sy_appno,
                                'PremiumInfo':
                                SY_PremiumInfo,
                                'insuranceType':
                                insuranceType,
                                'create_date':
                                time.strftime('%Y-%m-%d %X',
                                              time.localtime(time.time())),
                                'companyId':
                                '12',
                                'Status_Code':
                                '0',
                                'CPlateNo':
                                CPlateNo,
                                'sessionId':
                                sessionId,
                                'isphone':
                                isPhone
                            }

                            mg_insert('hebaoinfo', data)
                            r.set_appno(sy_appno, '12')
                            log.info(u'商业险投保单号 - {0} - 入库成功'.format(sy_appno))
                            send_mq(client,
                                    CPlateNo,
                                    "",
                                    "1",
                                    "12",
                                    sessionId,
                                    isPhone,
                                    insuranceTypeGroupId,
                                    insuranceTypeGroup,
                                    licenseType=car_info.get(
                                        "VEHICLE_TYPE", '02'),
                                    vehicle_style=car_info.get(
                                        "VEHICLE_STYLE", "K33"))
                        else:
                            send_mq(client,
                                    CPlateNo,
                                    "",
                                    "2",
                                    "12",
                                    sessionId,
                                    isPhone,
                                    insuranceTypeGroupId,
                                    insuranceTypeGroup,
                                    licenseType=car_info.get(
                                        "VEHICLE_TYPE", '02'),
                                    vehicle_style=car_info.get(
                                        "VEHICLE_STYLE", "K33"))

                    if jq_appno:
                        log.info(u'交强险投保单号 - {0}'.format(jq_appno))
                        ret = he_bao2(session, jq_appno)
                        RESULT_TYPE = ret.json()["RESULT_TYPE"]
                        RESULT_MSG = ret.json()["RESULT_MSG"].replace("\n", "")
                        log.info(u'核保状态 - {0} - {1}'.format(
                            RESULT_TYPE, RESULT_MSG))

                        JQ_PremiumInfo = [{
                            'compulsory_insurance':
                            compulsory_insurance
                        }, {}, {}, {
                            'jq_disCount': jq_ratio
                        }]

                        if RESULT_TYPE == "SUCCESS":
                            data = {
                                'appNo':
                                jq_appno,
                                'PremiumInfo':
                                JQ_PremiumInfo,
                                'insuranceType':
                                insuranceType,
                                'create_date':
                                time.strftime('%Y-%m-%d %X',
                                              time.localtime(time.time())),
                                'companyId':
                                '12',
                                'Status_Code':
                                '0',
                                'CPlateNo':
                                CPlateNo,
                                'sessionId':
                                sessionId,
                                'isphone':
                                isPhone
                            }

                            mg_insert('hebaoinfo', data)
                            log.info(u'交强险投保单号 - {0} - 入库成功'.format(jq_appno))

                    else:
                        send_mq(client,
                                CPlateNo,
                                "",
                                "2",
                                "12",
                                sessionId,
                                isPhone,
                                insuranceTypeGroupId,
                                insuranceTypeGroup,
                                licenseType=car_info.get("VEHICLE_TYPE", '02'),
                                vehicle_style=car_info.get(
                                    "VEHICLE_STYLE", "K33"))

                except Exception as e:
                    log.error(e)
                    log.error(traceback.format_exc())
        return

    except Exception as e:
        log.error(traceback.format_exc())
        send_mq(client, CPlateNo, "未知异常", "2", "12", sessionId, isPhone,
                insuranceTypeGroupId, insuranceTypeGroup)
        return 0
Esempio n. 6
0
def query_car_info(session, data, syStart, CPlateNo, searchVin):
    try:
        ret = query_car(session, CPlateNo, searchVin)

        if '车辆识别失败' in ret.text or not ret.text:

            # 交管车型查询
            try:
                result = None
                for i in range(5):
                    result = get_car(session, CPlateNo, searchVin)
                    if '录入的校验码有误' not in result.text:
                        break
                    if i == 4 and '录入的校验码有误' in result.text:
                        log.info('验证码5次识别失败')
                        return 0

                if '交管车辆查询校验信息不存在' in result.text:
                    log.info('{0},{1} - 交管车辆查询校验信息不存在'.format(
                        CPlateNo, searchVin))
                    return 0

                ra = "DATA:\['(.*?)'\]"
                rb = re.compile(ra)

                title_list = re.findall(rb, result.text)
                if not title_list:
                    log.info('{0},{1} - 交管车辆查询校验信息不存在'.format(
                        CPlateNo, searchVin))
                    return 0
                html = title_list[0]
                soup = BeautifulSoup(html, 'html.parser')
                a = soup.find('dataobj', attrs={"status": "UNCHANGED"})
                soup = BeautifulSoup(str(a), 'html.parser')
            except Exception as e:
                log.error(e)
                log.error(traceback.format_exc())
                return 0

            VEHICLE_MODEL = soup.find("attribute",
                                      attrs={
                                          "name": "VEHICLE_MODEL"
                                      }).get_text()  # 车辆型号

            VEHICLE_MODEL = VEHICLE_MODEL[:-1] + VEHICLE_MODEL[-1:].lower()

            ret = query_car_model(session, VEHICLE_MODEL)

            if '车辆识别失败' in ret.text or not ret.text:
                log.info(u'{0},{1} - 车辆识别失败'.format(CPlateNo, searchVin))
                return 0

        ra = "DATA:\['(.*?)'\]"
        rb = re.compile(ra)

        title_list = re.findall(rb, ret.text)
        if not title_list:
            session = login_ancheng()
            from request_ancheng.request_premium import get_premium
            return get_premium(session, data)

        html = title_list[0]
        soup = BeautifulSoup(html, 'html.parser')
        a = soup.find_all('dataobj', attrs={"status": "UNCHANGED"})
        a = list(a)

        c = sorted(a,
                   key=lambda x: int(
                       BeautifulSoup(str(x), 'html.parser').find(
                           "attribute", attrs={
                               "name": "VehiclePrice"
                           }).get_text()),
                   reverse=False)

        if not c:
            return 0

        d = c[0]
        car_value = int(
            BeautifulSoup(str(d), 'html.parser').find("attribute",
                                                      attrs={
                                                          "name":
                                                          "VehiclePrice"
                                                      }).get_text())
        log.info(u'车辆价格 - {0}'.format(car_value))

        soup = BeautifulSoup(str(d), 'html.parser')
    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
        return 0

    Vhl_CBrandNme = soup.find("attribute", attrs={
        "name": "BrandName"
    }).get_text()  # 品牌
    Cmodel_Code = soup.find("attribute", attrs={
        "name": "VehicleId"
    }).get_text()[:10]  # PK

    log.info(u'车型编码 - {0}'.format(Cmodel_Code))

    Vhl_NResvNum2 = soup.find("attribute", attrs={
        "name": "VehiclePrice"
    }).get_text()  # 车辆价格
    Vhl_CProdPlace = soup.find("attribute", attrs={
        "name": "VehicleType"
    }).get_text()  # 种类
    NewVehicleClass = soup.find("attribute", attrs={
        "name": "NewVehicleClass"
    }).get_text()  # 车辆种类 牵引车 等
    seat_01 = int(
        soup.find("attribute", attrs={
            "name": "VehicleSeat"
        }).get_text())  # 座位数
    Vhl_CModelNme = soup.find("attribute", attrs={
        "name": "VehicleName"
    }).get_text()  # 车型名称

    Vhl_CGroupNme = soup.find("attribute", attrs={
        "name": "GroupName"
    }).get_text()  # 车组名称

    code = unicode(CPlateNo)[1]

    Base_CAreaFlag = city_map.get(code, '320100')
    Base_CCountyCde = city_map_2.get(code, '320101')

    Vhl_CProdPlace = "0" if Vhl_CProdPlace == "国产" else "1"

    try:
        ret = get_vehcle_code(session, Cmodel_Code)

        ra = "###(.+?)###"
        rb = re.compile(ra)

        Vehcle_Code = re.findall(rb, ret.text)[0]

        if Vehcle_Code == 'null':
            log.info(u'无法获取行业车型编码')
            return 0

    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
        return 0

    # 交管车型查询
    try:
        result = None
        for i in range(5):
            result = get_car(session, CPlateNo, searchVin)
            if not '录入的校验码有误' in result.text:
                break
            if i == 4 and '录入的校验码有误' in result.text:
                log.info(u'验证码5次识别失败')
                return 0

        if '交管车辆查询校验信息不存在' in result.text:
            log.info(u'{0},{1} - 交管车辆查询校验信息不存在'.format(CPlateNo, searchVin))
            return 0

        ra = "DATA:\['(.*?)'\]"
        rb = re.compile(ra)

        title_list = re.findall(rb, result.text)
        html = title_list[0]
        soup = BeautifulSoup(html, 'html.parser')
        a = soup.find('dataobj', attrs={"status": "UNCHANGED"})
        soup = BeautifulSoup(str(a), 'html.parser')
    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
        return 0

    Applicant_CAppNme = soup.find("attribute", attrs={
        "name": "OWNER"
    }).get_text()  # 车主
    Insured_CInsuredNme = Applicant_CAppNme

    Applicant_CAppNme = unicode(Applicant_CAppNme)
    if len(Applicant_CAppNme) >= 5:
        Applicant_CAppNme = '测试单位'
        Applicant_CClntMrk = '3'
        Insured_CClntMrk = '3'
    else:
        Applicant_CAppNme = "测试个人"
        Applicant_CClntMrk = '1'
        Insured_CClntMrk = '1'

    Vhl_CFstRegYm = soup.find("attribute",
                              attrs={
                                  "name": "VEHICLE_REGISTER_DATE"
                              }).get_text()  # 初登日期
    Vhl_CRegVhlTyp = soup.find("attribute", attrs={
        "name": "VEHICLE_STYLE"
    }).get_text()  # 交管车辆种类
    LIMIT_LOAD_PERSON = soup.find("attribute",
                                  attrs={
                                      "name": "LIMIT_LOAD_PERSON"
                                  }).get_text()  # 座位数
    DISPLACEMENT = soup.find("attribute", attrs={
        "name": "DISPLACEMENT"
    }).get_text()  # 排量
    VEHICLE_TYPE = soup.find("attribute", attrs={
        "name": "VEHICLE_TYPE"
    }).get_text()  # 号牌种类 01 大型汽车 02 小型汽车 15 挂车
    SY_Vhl_TTransferDate = soup.find("attribute",
                                     attrs={
                                         "name": "TRANSFER_DATE"
                                     }).get_text()  # 过户日期
    PM_USE_TYPE = soup.find("attribute", attrs={
        "name": "PM_USE_TYPE"
    }).get_text()  # 使用性质 F商业 A家用
    VEHICLE_STYLE = soup.find("attribute", attrs={
        "name": "VEHICLE_STYLE"
    }).get_text()  # 车辆类型 K31 K33 、Q11货车
    HAULAGE = soup.find("attribute", attrs={
        "name": "HAULAGE"
    }).get_text()  # 牵引质量 牵引车
    LIMIT_LOAD = soup.find("attribute", attrs={
        "name": "LIMIT_LOAD"
    }).get_text()  # 核定载质量
    VEHICLE_CATEGORY = soup.find("attribute",
                                 attrs={
                                     "name": "VEHICLE_CATEGORY"
                                 }).get_text()  # 平台车辆种类(编码)
    Vhl_NPoWeight = soup.find("attribute", attrs={
        "name": "WHOLE_WEIGHT"
    }).get_text()  # 整备质量

    SY_Vhl_CVhlTransFlag = '0'
    JQ_Vhl_CVhlTransFlag = '0'

    if SY_Vhl_TTransferDate:
        SY_Vhl_CVhlTransFlag = '1'
        JQ_Vhl_CVhlTransFlag = '1'

    DISPLACEMENT = float(DISPLACEMENT) / 1000

    Vhl_NDisplacement = str(DISPLACEMENT)  # 排量

    WHOLE_WEIGHT = float(
        soup.find("attribute", attrs={
            "name": "WHOLE_WEIGHT"
        }).get_text())
    WHOLE_WEIGHT = float(WHOLE_WEIGHT) / 1000

    VsTax_NCurbWt = str(WHOLE_WEIGHT)  # 整备质量

    seats = int(LIMIT_LOAD_PERSON)
    # 车管所查询出的座位数为0 使用车辆信息中的座位数
    if seat_01 != "" and LIMIT_LOAD_PERSON == "0":
        seats = int(seat_01)

    Vhl_CFstRegYm = Vhl_CFstRegYm[:4] + '-' + Vhl_CFstRegYm[
        4:6] + '-' + Vhl_CFstRegYm[6:]
    Vhl_CEngNo = soup.find("attribute", attrs={
        "name": "ENGINE_NO"
    }).get_text()  # 发动机号

    _VEHICLE_REGISTER_DATE = soup.find("attribute",
                                       attrs={
                                           "name": "VEHICLE_REGISTER_DATE"
                                       }).get_text()  # 车辆注册时间
    VEHICLE_REGISTER_DATE = _VEHICLE_REGISTER_DATE[:4] + '-' + _VEHICLE_REGISTER_DATE[
        4:6] + '-' + _VEHICLE_REGISTER_DATE[6:]

    car_info = {}

    car_info['Vhl_CBrandNme'] = Vhl_CBrandNme
    car_info['Vhl_NResvNum2'] = Vhl_NResvNum2
    car_info['Vhl_CProdPlace'] = Vhl_CProdPlace
    car_info['Applicant_CAppNme'] = Applicant_CAppNme
    car_info['Vhl_CFstRegYm'] = Vhl_CFstRegYm
    car_info['Vhl_CRegVhlTyp'] = Vhl_CRegVhlTyp
    car_info['seats'] = seats
    car_info['Vhl_CEngNo'] = Vhl_CEngNo
    car_info['VEHICLE_REGISTER_DATE'] = VEHICLE_REGISTER_DATE
    car_info['Vehcle_Code'] = Vehcle_Code
    car_info['Cmodel_Code'] = Cmodel_Code
    car_info['Vhl_NDisplacement'] = Vhl_NDisplacement
    car_info['VsTax_NCurbWt'] = VsTax_NCurbWt
    car_info['VEHICLE_TYPE'] = VEHICLE_TYPE
    car_info['VEHICLE_CATEGORY'] = VEHICLE_CATEGORY
    car_info['PM_USE_TYPE'] = PM_USE_TYPE
    car_info['VEHICLE_STYLE'] = VEHICLE_STYLE
    car_info['HAULAGE'] = HAULAGE
    car_info['LIMIT_LOAD'] = LIMIT_LOAD
    car_info['SY_Vhl_CVhlTransFlag'] = SY_Vhl_CVhlTransFlag
    car_info['JQ_Vhl_CVhlTransFlag'] = JQ_Vhl_CVhlTransFlag
    car_info['SY_Vhl_TTransferDate'] = SY_Vhl_TTransferDate
    car_info['NewVehicleClass'] = NewVehicleClass
    car_info['Vhl_CModelNme'] = Vhl_CModelNme
    car_info['CPlateNo'] = CPlateNo
    car_info['Vhl_CGroupNme'] = Vhl_CGroupNme
    car_info['Insured_CInsuredNme'] = Insured_CInsuredNme
    car_info['Vhl_NPoWeight'] = Vhl_NPoWeight

    car_info['Base_CAreaFlag'] = Base_CAreaFlag
    car_info['Base_CCountyCde'] = Base_CCountyCde
    car_info['Applicant_CClntMrk'] = Applicant_CClntMrk
    car_info['Insured_CClntMrk'] = Insured_CClntMrk

    car_class_dict = get_car_class(car_info)
    if not car_class_dict:
        return None

    car_info['SY_Vhl_CBizMrk'] = car_class_dict['SY_Vhl_CBizMrk']
    car_info['JQ_Vhl_CBizMrk'] = car_class_dict['JQ_Vhl_CBizMrk']
    car_info['SY_Vhl_CUsageCde'] = car_class_dict['SY_Vhl_CUsageCde']
    car_info['JQ_Vhl_CUsageCde'] = car_class_dict['JQ_Vhl_CUsageCde']
    car_info['SY_Vhl_CVhlTyp'] = car_class_dict['SY_Vhl_CVhlTyp']
    car_info['JQ_Vhl_CVhlTyp'] = car_class_dict['JQ_Vhl_CVhlTyp']
    car_info['Vhl_NTonage'] = car_class_dict['Vhl_NTonage']
    car_info['is_tezhongche'] = car_class_dict['is_tezhongche']
    car_info['is_guache'] = car_class_dict['is_guache']
    car_info['SY_Vhl_CMonDespRate'] = car_class_dict['SY_Vhl_CMonDespRate']

    # 查询保额
    Vhl_NNewPurchaseValue = get_Vhl_NNewPurchaseValue(
        syStart, Vhl_CFstRegYm, car_class_dict['SY_Vhl_CMonDespRate'],
        Vhl_NResvNum2)

    log.info('保额 - {0}'.format(Vhl_NNewPurchaseValue))

    car_info['Vhl_NNewPurchaseValue'] = Vhl_NNewPurchaseValue
    r = CRedis()
    r.set_vin(searchVin, "12", json.dumps(car_info, ensure_ascii=False))

    return car_info