Example #1
0
def _result_insert(fee_resp, renewal_data_dt):
    log = Logger()
    insureCarId = renewal_data_dt.get('insureCarId', '')
    CPlateNo = renewal_data_dt.get('plateNumber', '')
    client = renewal_data_dt.get('client', '')
    isPhone = renewal_data_dt['isPhone']
    sessionId = renewal_data_dt.get('sessionId', '')
    insuranceType = renewal_data_dt.get("insuranceType", {})
    if isinstance(insuranceType, list):
        insureTypeGroupId = insuranceType[0].get("insuranceTypeGroupId", "")
        insuranceTypeGroup = insuranceType[0].get("insuranceTypeGroup", "")
    else:
        insureTypeGroupId = insuranceType.get("insuranceTypeGroupId", "")
        insuranceTypeGroup = insuranceType.get("insuranceTypeGroup", "")
    if isinstance(fee_resp, dict):
        data = []
        data.append(fee_resp['c01beginTime'])
        data.append(fee_resp['c01endTime'])
        data.append(fee_resp['vehicleSeats'])
        data.append(insureTypeGroupId)
        data.append(insureCarId)
        data.append("1")
        # log.info("平安开始入库 %s" % CPlateNo)
        soupDb(fee_resp['fee'], data)
        log.info("平安入库成功 %s ", CPlateNo)
        send_mq(client, CPlateNo, "", "1", "1", sessionId, isPhone,
                insureTypeGroupId, insuranceTypeGroup)
    else:
        if isinstance(fee_resp, list):
            fee_resp = json.dumps(fee_resp, encoding=False)
            log.error(fee_resp)
        else:
            log.error(fee_resp)
            send_mq(client, CPlateNo, fee_resp, "2", "1", sessionId, isPhone,
                    insureTypeGroupId, insuranceTypeGroup)
Example #2
0
def startCicc(loginRes, data):
    session = loginRes[0]
    userId = loginRes[1]
    modelName = data['vehicleBrand'].encode('utf-8')
    chassisNo = data['vinNo'].encode('utf-8')
    motorNo = data['engineNo'].encode('utf-8')
    enrollDate = data['firstRegister'].encode('utf-8')
    licenseNo = data['plateNumber'].encode('utf-8')
    driverName = data['custName'].encode('utf-8')
    driverIDNumber = data['identitCard'].encode('utf-8')
    INSURE_CAR_ID = data['insureCarId']
    client = data['client']
    sessionId = data['sessionId']
    isPhone = data['isPhone']
    insuranceType = data['insuranceType']  #保险组合类型
    groupId = insuranceType['insuranceTypeGroupId']
    insuranceTypeGroup = insuranceType['insuranceTypeGroup']
    carModelRes = getCarModel.getCarModel(session, modelName, chassisNo,
                                          motorNo, enrollDate, licenseNo)
    carModelRes = carModelRes.replace('null', '""')
    carModelRes = carModelRes.replace("'", '"')
    carModelResJson = ast.literal_eval(carModelRes)
    jsCheckCode = carModelResJson['result']['items'][0]['jsCheckCode']
    # codeStr = request_cicc.util.pic2Str(base64.b64decode(jsCheckCode))
    jsCheckNo = carModelResJson['result']['items'][0]['jsCheckNo']
    carModel = getCarModel.selectMinPriceModel(carModelRes)
    vcodeRes = getCarModel.postSelectCarModel(session, modelName, chassisNo,
                                              motorNo, enrollDate, licenseNo,
                                              carModel, jsCheckCode, "1111",
                                              jsCheckNo)
    log.info(u"大地 ,%s,第一次上报验证码完成" % licenseNo)
    # codeStr = request_cicc.util.pic2Str(base64.b64decode(vcodeRes['result']['jsCheckCode']))
    codeStr = "1111"
    try:
        enrollDate = vcodeRes['result']['jsEnrollDate']
    except:
        enrollDate = data['firstRegister'].encode('utf-8')
    log.info(enrollDate)
    endDate = data.get('preInsureEndDate', '')
    priumeDic = calculatePost.calculatePremium(insuranceType, session, userId,
                                               driverName, driverIDNumber,
                                               licenseNo, chassisNo, motorNo,
                                               enrollDate, codeStr, modelName,
                                               carModel['replacementValue'],
                                               vcodeRes, endDate)
    log.info(u"大地 ,%s,第二次上报验证码完成" % licenseNo)
    result = priumeDic['result'][0]
    calculateErrMeg = result.get('insuranceApplication.calculateErrMeg', None)
    while calculateErrMeg is not None:
        endDate = ""
        if "车主名称与交管信息不一致" in calculateErrMeg:
            log.error(u"大地重复投保 %s ,返回信息 %s " % (licenseNo, calculateErrMeg))
            str2 = calculateErrMeg.split(":")
            str2 = str2[2].split(';')
            driverName = str2[0]
        if "保单发生重复投保" in calculateErrMeg:
            str1 = "\d{4}-\d{2}-\d{2}"
            datelist = re.findall(str1, calculateErrMeg, re.S)
            log.error(u"大地重复投保 %s ,返回信息 %s " % (licenseNo, calculateErrMeg))
            if len(datelist) == 2:
                endDate = compare_date(datelist[0], datelist[1])
        priumeDic = calculatePost.calculatePremium(
            insuranceType, session, userId, driverName, driverIDNumber,
            licenseNo, chassisNo, motorNo, enrollDate, codeStr, modelName,
            carModel['replacementValue'], vcodeRes, endDate)
        result = priumeDic['result'][0]
        calculateErrMeg = result.get('insuranceApplication.calculateErrMeg',
                                     None)
        if calculateErrMeg is not None:
            if (not "车主名称与交管信息不一致" in calculateErrMeg) and (
                    not "保单发生重复投保" in calculateErrMeg):
                send_mq(client, licenseNo, "车主名称与交管信息不一致 or 保单发生重复投保 ", "2",
                        "5", sessionId, isPhone, groupId, insuranceTypeGroup)
                log.error(u"%s %s" % (licenseNo, calculateErrMeg))
                break
    try:
        PremiumInfo = translate.getPriumeInf(priumeDic,
                                             vcodeRes['result']['seatCount'])
        send_mq(client, licenseNo, "", "1", "5", sessionId, isPhone, groupId,
                insuranceTypeGroup)
    except:
        print traceback.format_exc()
        out = priumeDic['result'][0].get(
            'insuranceApplication.calculateErrMeg', "")
        send_mq(client, licenseNo, out, "2", "5", sessionId, isPhone, groupId,
                insuranceTypeGroup)
        log.error(u"大地爬取失败 %s " % licenseNo)
        return out
    tomorrow = dtime.date.today() + dtime.timedelta(1)
    startDate = tomorrow.strftime("%Y-%m-%d")
    endDate = str(tomorrow.year + 1) + '-' + str(tomorrow.month) + '-' + str(
        tomorrow.day)
    data = [
        startDate, endDate, vcodeRes['result']['seatCount'], groupId,
        INSURE_CAR_ID, "5"
    ]
    #data=[开始时间,结束时间,座位数,组合id,车辆id,公司id]
    soupDb(PremiumInfo, data)
    log.info(u"大地入库成功 %s " % licenseNo)


# if __name__=="__main__":
#     startCicc()
def is_renwal_all(data,client=None):
    # base64strdt = get_session(['2'])
    # if len(base64strdt) != 0:
    #     sessiondt = getSession(base64strdt)
    #     epiccsession = sessiondt['2']
    epiccsession =""
    plateNumber=data['plateNumber']
    if len(plateNumber)!=7:
        log.error(u'plateNumber len != 7')
        return
    insureCarId=data['insureCarId']
    sessionId=data['sessionId']
    isPhone=data['isPhone']
    insuranceType=data.get("insuranceType","")
    insuranceTypeGroupId=insuranceType.get("insuranceTypeGroupId","9999")
    insuranceTypeGroup = insuranceType.get("insuranceTypeGroup","0")
    if data.get('preInsureEndDate',"")!="":
        dayGap = compare_time40(data['preInsureEndDate'])
        if dayGap>40:
            log.info(u'续保超过了40天不可以续保')
            send_mq(client, plateNumber, "续保超过了40天不可以询价", "2", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
            return
        #如果是续保用户
    if data.get("vinNo","") !="":
        try:
            errMsg = standard_main(data,data['preInsureEndDate'])
            if errMsg is None:
                send_mq(client, plateNumber, "", "1", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
                return
            else:
                log.error(u"查询失败,%s" % errMsg)
                send_mq(client, plateNumber, errMsg, "2", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
                return
        except:
            log.error(traceback.format_exc())
            send_mq(client, plateNumber, '未知错误', "2", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
            return
    try:
        epicc_out=check(plateNumber)
    except:
        log.error(traceback.format_exc())
        send_mq(client, plateNumber, '未知错误', "2", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
        return
    if epicc_out==0:
        res = query_user_renewal(plateNumber)
        if res==0:
            time.sleep(5)
            res = query_user_renewal(plateNumber)
        if res == 0:
        # 通过行业协会进行查询
            res = query_user_permium_time(plateNumber)
            if res != 0:
                res['insuredAddress'] = ""
                res['mobile'] = ""
        if res == 0 and data.get("vinNo","") =="":
            log.error(u"续保查不到车辆,需要补全信息")
            # send_complete_flag(client, plateNumber, "0", isPhone, sessionId)
            return
        else:
            if res!=0:
                data['vinNo'] = res['vinNo']
        errMsg = standard_main(data,data['preInsureEndDate'])
        if errMsg is None:
            send_mq(client, plateNumber, "", "1", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
        else:
            log.error(u"查询失败,%s" % errMsg)
            send_mq(client, plateNumber, errMsg, "2", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
        log.info("plateNumber %s = 0" % plateNumber)
    else:
        dayGap = compare_time40(epicc_out['endDate'])

        if dayGap < 0:
            epicc_out['endDate'] = ""
        elif dayGap>40:
            log.info(u'续保超过了40天不可以续保')
            send_mq(client, plateNumber, "续保超过了40天不可以询价", "2", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
            return
        #是续保用户发送队列
        # send_complete_flag(client,plateNumber,"1",isPhone,sessionId,epicc_out)
        log.info("plateNumber %s = 1" % plateNumber)
        data['vinNo'] = epicc_out['vinNo']
        errMsg = standard_main(data,data['preInsureEndDate'])
        if errMsg is None:
            send_mq(client, plateNumber, "", "1", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
        else:
            log.error(u"查询失败,%s" % errMsg)
            send_mq(client, plateNumber, errMsg, "2", "2", sessionId, isPhone, insuranceTypeGroupId, insuranceTypeGroup)
Example #4
0
def flow_main(loginRes, data):
    try:
        req_session = loginRes[0]
        userId = loginRes[1]
        redis_dt = r.get_vin(data['vinNo'], "5")
        if redis_dt is not None:
            try:
                log.info(u"%s,可以从redis中获取信息" % data['vinNo'])
                dt = eval(redis_dt)
                #log.info(dt)
                dt['insuranceType'] = data['insuranceType']
                dt['req_session'] = req_session
                log.info(dt['endDate'])
                dt['endDate'] = datetime.strptime(dt['endDate'],
                                                  "%Y-%m-%d").date()
                client = data['client']
                sessionId = data['sessionId']
                isPhone = data['isPhone']
                insuranceType = dt['insuranceType']  # 保险组合类型
                if isinstance(insuranceType, list):
                    insuranceTypes = insuranceType
                    for insuranceType in insuranceTypes:
                        try:
                            dt['insuranceType'] = insuranceType
                            groupId = insuranceType['insuranceTypeGroupId']
                            insuranceTypeGroup = insuranceType[
                                'insuranceTypeGroup']
                            INSURE_CAR_ID = data['insureCarId']
                            premuim_dic = calculate_premium(dt)
                            premuim_result = jsonpath(premuim_dic, "$.result")
                            if premuim_result:
                                calculateErrMeg = premuim_result[0][0].get(
                                    'insuranceApplication.calculateErrMeg',
                                    None)
                                if calculateErrMeg is not None:
                                    send_mq(client, dt['licenseNo'],
                                            calculateErrMeg, "2", "5",
                                            sessionId, isPhone, groupId,
                                            insuranceTypeGroup)
                                    return calculateErrMeg
                            PremiumInfo = translate.getPriumeInf(
                                premuim_dic, dt['insuranceType'])
                            dataDic = {
                                'startData':
                                str(dt['endDate']),
                                'endData':
                                str(
                                    datetime.strptime(
                                        (str(dt['endDate'].year + 1) + '-' +
                                         str(dt['endDate'].month) + '-' +
                                         str(dt['endDate'].day)),
                                        "%Y-%m-%d").date())
                            }
                            data = [
                                dataDic['startData'], dataDic['endData'],
                                dt['seatCount'], groupId, INSURE_CAR_ID, "5"
                            ]
                            soupDb(PremiumInfo, data)
                            log.info(u"大地入库成功,%s" % dt['licenseNo'])
                            send_mq(client, dt['licenseNo'], "", "1", "5",
                                    sessionId, isPhone, groupId,
                                    insuranceTypeGroup)
                        except Exception, e:
                            log.info(u"%s,根据redis获取的信息查询保费时报正在重试正常流程" %
                                     data['vinNo'])
                            log.error(traceback.format_exc())
                            return
                    return u"大地入库成功,%s" % dt['licenseNo']
                groupId = insuranceType['insuranceTypeGroupId']
                insuranceTypeGroup = insuranceType['insuranceTypeGroup']
                INSURE_CAR_ID = data['insureCarId']
                premuim_dic = calculate_premium(dt)
                premuim_result = jsonpath(premuim_dic, "$.result")
                if premuim_result:
                    calculateErrMeg = premuim_result[0][0].get(
                        'insuranceApplication.calculateErrMeg', None)
                    if calculateErrMeg is not None:
                        send_mq(client, dt['licenseNo'], calculateErrMeg, "2",
                                "5", sessionId, isPhone, groupId,
                                insuranceTypeGroup)
                        return calculateErrMeg
                PremiumInfo = translate.getPriumeInf(premuim_dic,
                                                     dt['insuranceType'])
                dataDic = {
                    'startData':
                    str(dt['endDate']),
                    'endData':
                    str(
                        datetime.strptime((str(dt['endDate'].year + 1) + '-' +
                                           str(dt['endDate'].month) + '-' +
                                           str(dt['endDate'].day)),
                                          "%Y-%m-%d").date())
                }
                data = [
                    dataDic['startData'], dataDic['endData'], dt['seatCount'],
                    groupId, INSURE_CAR_ID, "5"
                ]
                soupDb(PremiumInfo, data)
                log.info(u"大地入库成功,%s" % dt['licenseNo'])
                send_mq(client, dt['licenseNo'], "", "1", "5", sessionId,
                        isPhone, groupId, insuranceTypeGroup)
                return u"大地入库成功,%s" % dt['licenseNo']
            except Exception, e:
                log.info(u"%s,根据redis获取的信息查询保费时报正在重试正常流程" % data['vinNo'])
                log.error(traceback.format_exc())
Example #5
0
                #上报打码结果获取车管所返回信息
                post_checkAnswer_res = post_checkAnswer(dt)
                post_checkAnswer_res_items = jsonpath(post_checkAnswer_res,
                                                      "$.result.items")
                count = 0

                log.info(u"上报验证码完成")
                log.info(dt['vinNo'])
                #检验返回信息中是否有校验码错误信息,校验码错误会自动重发5次
                while post_checkAnswer_res['err'] is not None:
                    log.info(post_checkAnswer_res['err'])
                    if count > 3:
                        log.error(u"打码失败")
                        send_mq(client, dt['licenseNo'], "打码失败", "2", "5",
                                sessionId, isPhone, groupId,
                                insuranceTypeGroup)
                        return "打码失败"
                    #
                    # if (post_checkAnswer_res['err'] is None) and (post_checkAnswer_res_items[0][0].get('replacementValue') is None):
                    #     log.info(u"大地无法通过车架号获取车辆型号,正在调用中华联合接口重新尝试获取车辆型号")
                    #
                    #     car_model = get_car_model(dt['vinNo'])
                    #     gCIndustryModelName = car_model['gCIndustryModelName']
                    #     dt['gCIndustryModelName'] = gCIndustryModelName
                    #     post_checkAnswer_res = post_checkAnswer(dt)
                    #     post_checkAnswer_res_items = jsonpath(post_checkAnswer_res, "$.result.items")
                    #     count = count + 1
                    #     break
                    elif '校验码有误' in post_checkAnswer_res.get('err', '没有错误信息'):
                        dt['cacheableFlag'] = 0
Example #6
0
def pingan_request(session, renewal_data_dt):
    '''
    :param session:
    :param dt:
    :return:
    '''
    log = Logger()
    try:
        alldata = {}
        # insureCarId = renewal_data_dt.get('insureCarId', '')
        CPlateNo = renewal_data_dt.get('plateNumber', '')
        searchVin = renewal_data_dt.get('vinNo', '')
        client = renewal_data_dt.get('client', '')
        isPhone = renewal_data_dt['isPhone']
        sessionId = renewal_data_dt.get('sessionId', '')
        #endDate = renewal_data_dt.get('endDate', '')
        insuranceType = renewal_data_dt.get("insuranceType", {})
        if isinstance(insuranceType, list):
            insureTypeGroupId = insuranceType[0].get("insuranceTypeGroupId",
                                                     "")
            insuranceTypeGroup = insuranceType[0].get("insuranceTypeGroup", "")
        else:
            insureTypeGroupId = insuranceType.get("insuranceTypeGroupId", "")
            insuranceTypeGroup = insuranceType.get("insuranceTypeGroup", "")
        '''
        if endDate != "":
            min_time = compare_time40(endDate)
            if min_time > config.days:
                log.error("平安保险查询在40天内的 保险结束时间为 %s", endDate)
                send_mq(client, CPlateNo, "平安保险查询在40天内的 保险结束时间为 %s" % endDate, "2", "1", sessionId, isPhone,
                        insureTypeGroupId, insuranceTypeGroup)
                return "平安保险查询在40天内的 保险结束时间为 %s" % endDate
            if min_time < 0:
                endDate = getlatedate(1)
        '''
        if not isinstance(insuranceType, list):
            # 使用redis缓存进行查询
            re_out = get_pingan_redis_body(session, renewal_data_dt)
            if re_out == 1:
                return

        if '-' not in CPlateNo:
            plateNumber = CPlateNo[:2] + "-" + CPlateNo[2:]

        if session == '' or session is None:
            login = Login()
            session = login.login()

        # 判断是否为续保用户 直接从续保信息中取用户信息 然后交换域名跳转的session
        user_data = is_renewal(session, plateNumber=plateNumber)
        if isinstance(user_data, dict):

            sy_insuranceEndTime = user_data.get("sy_insuranceEndTime", "")
            jq_insuranceEndTime = user_data.get("jq_insuranceEndTime", "")
            if sy_insuranceEndTime == "" and jq_insuranceEndTime != "":
                sy_insuranceEndTime = jq_insuranceEndTime
            if sy_insuranceEndTime != "" and jq_insuranceEndTime == "":
                jq_insuranceEndTime = sy_insuranceEndTime

            icorepnbs_session = user_data['request']
            quick_resp = quickSearchVoucher(icorepnbs_session, user_data)

            # 获取车管所信息
            session = quick_resp['request']
            vehicleFrameNo = quick_resp['vehicleTarget']['vehicleFrameNo']

            queryDMVehicleInfoConfirm_json = queryDMVehicleInfoConfirm(
                session, vehicleFrameNo, carMark="")
            if not isinstance(queryDMVehicleInfoConfirm_json, dict):
                send_mq(client, CPlateNo, queryDMVehicleInfoConfirm_json, "2",
                        "1", sessionId, isPhone, insureTypeGroupId,
                        insuranceTypeGroup)
                return
            # 查询车辆具体型号
            model = query_carmodel(session, vehicleFrameNo)
            if model == 0:
                model = queryAutoModelType(
                    session, queryDMVehicleInfoConfirm_json['vehicleModel'])
            # 型号最后一位小写
            if model == 0:
                model = queryAutoModelType(
                    session,
                    queryDMVehicleInfoConfirm_json['vehicleModel'][0:-1] +
                    queryDMVehicleInfoConfirm_json['vehicleModel'][-1].lower())
                log.info(model)
            alldata['sy_insuranceEndTime'] = sy_insuranceEndTime
            alldata['jq_insuranceEndTime'] = jq_insuranceEndTime

            alldata['insurantInfo'] = quick_resp['insurantInfo']
            alldata['vehicleTarget'] = quick_resp['vehicleTarget']
            alldata['autoModelType'] = quick_resp['autoModelType']
            alldata['DMVehicleInfo'] = queryDMVehicleInfoConfirm_json
            alldata['model'] = model
            alldata["insuranceType"] = insuranceType

            if isinstance(insuranceType, list):
                for itype in insuranceType:
                    alldata['insuranceType'] = itype
                    fee_resp = get_fee(session, alldata)
                    _result_insert(fee_resp, renewal_data_dt)
            else:
                fee_resp = get_fee(session, alldata)
                _result_insert(fee_resp, renewal_data_dt)
        else:
            if searchVin != "":

                sy_insuranceEndTime = renewal_data_dt.get("insuranceTime",
                                                          {}).get(
                                                              "syStart",
                                                              getlatedate(1))
                jq_insuranceEndTime = renewal_data_dt.get("insuranceTime",
                                                          {}).get(
                                                              "jqStart",
                                                              getlatedate(1))
                session = user_data
                vehicleFrameNo = searchVin
                # 使用redis缓存进行查询
                re_out = get_pingan_redis_body(session, renewal_data_dt)
                if re_out == 1:
                    return
                # 请求车管所
                queryDMVehicleInfoConfirm_json = queryDMVehicleInfoConfirm(
                    session, vehicleFrameNo, carMark="")
                # log.info(json.dumps(queryDMVehicleInfoConfirm_json,ensure_ascii=False))
                if not isinstance(queryDMVehicleInfoConfirm_json, dict):
                    send_mq(client, CPlateNo, queryDMVehicleInfoConfirm_json,
                            "2", "1", sessionId, isPhone, insureTypeGroupId,
                            insuranceTypeGroup)
                    return
                # 通过车架号查询车辆类型
                model = query_carmodel(session, vehicleFrameNo)
                # 通过车辆编码查询车辆类型
                if model == 0:
                    model = queryAutoModelType(
                        session,
                        queryDMVehicleInfoConfirm_json['vehicleModel'])
                # 型号最后一位小写
                if model == 0:
                    log.info(u"通过最后一位字母小写查询")
                    model = queryAutoModelType(
                        session,
                        queryDMVehicleInfoConfirm_json['vehicleModel'][0:-1] +
                        queryDMVehicleInfoConfirm_json['vehicleModel']
                        [-1].lower())
                    # log.info(model)
                # 编码查询不到使用续保信息中的车辆名字进行查询
                if model == 0 and renewal_data_dt.get("vehicleBrand",
                                                      "") != "":
                    model = queryAutoModelType(session,
                                               renewal_data_dt['vehicleBrand'])
                alldata['DMVehicleInfo'] = queryDMVehicleInfoConfirm_json
                alldata['model'] = model
                alldata['sy_insuranceEndTime'] = sy_insuranceEndTime
                alldata['jq_insuranceEndTime'] = jq_insuranceEndTime
                alldata["insuranceType"] = insuranceType
                if isinstance(insuranceType, list):
                    for itype in insuranceType:
                        alldata['insuranceType'] = itype
                        fee_resp = get_fee(session, alldata)
                        _result_insert(fee_resp, renewal_data_dt)
                else:
                    fee_resp = get_fee(session, alldata)
                    _result_insert(fee_resp, renewal_data_dt)
    except Exception, e:
        log.error(e)
        log.error(traceback.format_exc())
        send_mq(client, CPlateNo, "%s 未知错误" % CPlateNo, "2", "1", sessionId,
                isPhone, insureTypeGroupId, insuranceTypeGroup)
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
def get_pingan_redis_body(sessionoop, dtjson):
    try:
        searchVin = dtjson.get("vinNo", "")
        if searchVin == "":
            return 0
        r = CRedis()
        alldata = r.get_vin(searchVin, "1")
        if alldata is None:
            return 0
        # 发送请求 切换域名session
        log.info(u"从redis中查询出信息")
        toibcswriter_url = "https://icore-pts.pingan.com.cn/ebusiness/auto/newness/toibcswriter.do?transmitId=apply"
        headers = se.headers
        headers[
            'Referer'] = "https://icore-pts.pingan.com.cn/ebusiness/frames/main_02.jsp"
        toibcswriter_resp = sessionoop.get(url=toibcswriter_url,
                                           headers=headers,
                                           verify=False)
        toibcswriter_body = toibcswriter_resp.text
        dt_toibcswriter = parse_toibcswriter(toibcswriter_body)
        cypherText = dt_toibcswriter['cypherText']
        timestamp = dt_toibcswriter['timestamp']

        # 切换域名请求 获取cookies 为下面使用

        icorepnbs_request = requests.session()
        icorepnbs_request.headers.update(se.headers)
        systemTransfer_url = "https://icorepnbs.pingan.com.cn/icore_pnbs/do/usermanage/systemTransfer"
        systemTransfer_data = {
            "channelSourceCode": "G",
            "partnerWorkNetCode": "",
            "operablePartnerWorknetList": "210697215001",
            "agentCode": "10690047",
            "BrandDetailName": "",
            "umCode": "STDJNDS-00001",
            "businessSourceDetailCode": "3",
            "saleAgentName": "耿越",
            "transitSystemSource": "ICORE-PTS",
            "saleAgentCode": "2100003024",
            "cypherText": cypherText,
            "isUseCyberArk": "Y",
            "channelSourceDetailCode": "F",
            "dealerCodes": "",
            "userName": "******",
            "businessCertificateNumText": "",
            "timestamp": timestamp,
            "transferId": "apply",
            "brokerCode": "",
            "dataSource": "ICORE-PTS",
            "departmentCode": "21069",
            "brandDetail": "",
            "businessSourceCode": "2",
            "agentSalerNameText": "",
            "relationQueryFlag": "Y",
            "departmentCodeList": "",
            "systemId": "ICORE-PTS",
            "partnerType": "0",
            "empBusinessCertificateNumText": ""
        }

        headers = se.headers
        headers[
            'Referer'] = "https://icore-pts.pingan.com.cn/ebusiness/auto/newness/toibcswriter.do?transmitId=apply"
        headers['Content-Type'] = "application/x-www-form-urlencoded"
        headers['Cache-Control'] = "max-age=0"
        icorepnbs_request.post(url=systemTransfer_url,
                               data=systemTransfer_data,
                               headers=headers,
                               verify=False)

        insuranceType = dtjson.get("insuranceType", {})
        insuranceTypeGroupId = insuranceType.get("insuranceTypeGroupId", "")
        insuranceTypeGroup = insuranceType.get("insuranceTypeGroup", "")
        insureCarId = dtjson['insureCarId']
        CPlateNo = dtjson.get("plateNumber", "")
        client = dtjson['client']
        sessionId = dtjson['sessionId']
        isPhone = dtjson['isPhone']

        alldata = eval(alldata)
        alldata['insuranceType'] = insuranceType
        fee_resp = get_fee(icorepnbs_request, alldata)
        if isinstance(fee_resp, dict):
            data = []
            data.append(fee_resp['c01beginTime'])
            data.append(fee_resp['c01endTime'])
            data.append(fee_resp['vehicleSeats'])
            data.append(insuranceTypeGroupId)
            data.append(insureCarId)
            data.append("1")
            log.info("平安开始入库 %s", CPlateNo)
            soupDb(fee_resp['fee'], data)
            log.info("平安入库成功 %s ", CPlateNo)
            send_mq(client, CPlateNo, "", "1", "1", sessionId, isPhone,
                    insuranceTypeGroupId, insuranceTypeGroup)
            return 1

        if isinstance(fee_resp, list):
            fee_resp = json.dumps(fee_resp, encoding=False)
            log.error(fee_resp)
            return 0

        log.error(fee_resp)
        # send_mq(client,CPlateNo,fee_resp,"2","1",sessionId,isPhone,insuranceTypeGroupId,insuranceTypeGroup)
        return 0
    except Exception as e:
        log.error(traceback.format_exc())
        log.error(e)
        return 0
def xd_request_premium(renewal_data_dt):
    try:
        alldata = {}
        # licenseNoBC = '苏EE9N06'.encode('gbk')
        # FrameNo = 'LSVAG2186B2299594'  # 车架号
        insureCarId = renewal_data_dt.get('insureCarId', '')

        CPlateNo = renewal_data_dt.get('plateNumber', '')
        licenseNoBC = CPlateNo.encode('gbk')
        searchVin = renewal_data_dt.get('vinNo', '')
        FrameNo = searchVin
        client = renewal_data_dt.get('client', '')
        isPhone = renewal_data_dt['isPhone']
        sessionId = renewal_data_dt.get('sessionId', '')
        insuranceType = renewal_data_dt.get("insuranceType", {})
        if isinstance(insuranceType, list):
            insureTypeGroupId = insuranceType[0].get("insuranceTypeGroupId",
                                                     "")
            insuranceTypeGroup = insuranceType[0].get("insuranceTypeGroup", "")
        else:
            insureTypeGroupId = insuranceType.get("insuranceTypeGroupId", "")
            insuranceTypeGroup = insuranceType.get("insuranceTypeGroup", "")

        permium_dict = {}
        # session = get_session("14")
        # if session is None:
        session = xd_login()
        sy_insuranceEndTime = renewal_data_dt.get("insuranceTime", {}).get(
            "syStart", getlatedate(1))
        jq_insuranceEndTime = renewal_data_dt.get("insuranceTime", {}).get(
            "jqStart", getlatedate(1))

        permium_dict['insuranceType'] = insuranceType
        permium_dict['jq_insuranceEndTime'] = jq_insuranceEndTime
        permium_dict['sy_insuranceEndTime'] = sy_insuranceEndTime

        # vin查询
        car_vin_ret = get_car_vin(licenseNoBC, FrameNo, session)
        carVinInfo = parse_vin_car(car_vin_ret)
        if not isinstance(carVinInfo, dict):
            send_mq(client, CPlateNo, "获取车辆型号失败", "2", "14", sessionId,
                    isPhone, insureTypeGroupId, insuranceTypeGroup)
            return
        permium_dict['carVinInfo'] = carVinInfo

        # 获取车管所信息
        vehicle = get_car_info(licenseNoBC, FrameNo, session)
        if not isinstance(vehicle, dict):
            send_mq(client, CPlateNo, "获取车管所信息失败%s" % licenseNoBC, "2", "14",
                    sessionId, isPhone, insureTypeGroupId, insuranceTypeGroup)
            return
        permium_dict['vehicle'] = vehicle
        # 判断车辆种类
        syName = carVinInfo['syName']
        mainCarKindCodeBC = get_main_cartype(carVinInfo['brandNameBC'])
        # 如果带挂 说明是挂车
        if "挂" in CPlateNo:
            mainCarKindCodeBC = "G"
        if mainCarKindCodeBC == "BG":
            mainCarKindCodeBC = "H"
        if mainCarKindCodeBC is None:
            # 非客车
            # 如果还是None 取车辆名称型号 判断特种车
            mainCarKindCodeBC = get_specical_car_type(
                carVinInfo['brandNameBC'])
            if isinstance(mainCarKindCodeBC, dict):
                if mainCarKindCodeBC['type'] == "货车":
                    mainCarKindCodeBC = "H"
                elif mainCarKindCodeBC['type'] == "挂车":
                    mainCarKindCodeBC = "G"
        if mainCarKindCodeBC is None:
            # 如果还是None 取vin查询返回的商业险名称
            if "吨" in syName:
                mainCarKindCodeBC = "H"
            if "特" in syName:
                if "一" in syName:
                    mainCarKindCodeBC = "T1"
                elif "二" in syName:
                    mainCarKindCodeBC = "T2"
                elif "三" in syName:
                    mainCarKindCodeBC = "T3"
                elif "四" in syName:
                    mainCarKindCodeBC = "T4"
                else:
                    mainCarKindCodeBC = "H"
            else:
                mainCarKindCodeBC = "A"
        permium_dict['carVinInfo']['mainCarKindCodeBC'] = mainCarKindCodeBC
        if mainCarKindCodeBC == "A":
            # 如果大类是客车 那么子类也为客车,使用性质为家庭自用carKindCodeBC
            permium_dict['carVinInfo']['mainCarKindCodeBC'] = "A0"  # 种类为A0
            permium_dict['carVinInfo']['useNatureCodeBC'] = "8A"
        if mainCarKindCodeBC == "G":
            #
            permium_dict['carVinInfo']['mainCarKindCodeBC'] = "G0"  #
            permium_dict['carVinInfo']['useNatureCodeBC'] = "9D"
        if mainCarKindCodeBC == "H":
            if "XXY" in carVinInfo['brandNameBC']:
                # 厢式货车
                permium_dict['carVinInfo']['carKindCodeBC'] = "H3"
            elif get_main_cartype(carVinInfo['brandNameBC']) == "BG":
                permium_dict['carVinInfo']['carKindCodeBC'] = "H5"  #
            else:
                permium_dict['carVinInfo']['carKindCodeBC'] = "H0"  #
            # 使用性质
            permium_dict['carVinInfo']['useNatureCodeBC'] = "9D"

        # carTypeCodeBC判断车辆类型
        carTypeCodeBC = "1"
        myCarTypeCodeBC = "1"
        if len(syName) != 0:
            codelist = get_car_type(syName)
            carTypeCodeBC = codelist[2]
            myCarTypeCodeBC = codelist[3]
        permium_dict['vehicle']['carTypeCodeBC'] = carTypeCodeBC
        permium_dict['vehicle']['myCarTypeCodeBC'] = myCarTypeCodeBC
        # 判断交强险与商业险选项
        # 获取车辆实际价格以及纯风险保费
        actualValue = get_car_value(permium_dict, session, sy_insuranceEndTime)
        if not isinstance(actualValue, dict):
            send_mq(client, CPlateNo, "获取车辆协商价格以及纯风险保费失败%s" % licenseNoBC, "2",
                    "14", sessionId, isPhone, insureTypeGroupId,
                    insuranceTypeGroup)
            return
        permium_dict['actualValue'] = actualValue
        # 计算车辆实际使用年限
        userYear = calc_user_years(sy_insuranceEndTime,
                                   vehicle['enrollDateBC'])
        permium_dict['actualValue']['useYears'] = userYear
        chose_flag = choose_jq_sy(permium_dict['insuranceType'])
        JQ = {}
        if chose_flag == "2" or chose_flag == "3":
            # 只选了交强险
            JQ = get_jq_data(session, permium_dict)
            if not isinstance(JQ, dict):
                send_mq(client, CPlateNo, "交强险重复投保%s" % licenseNoBC, "2", "14",
                        sessionId, isPhone, insureTypeGroupId,
                        insuranceTypeGroup)
                return
            permium_dict['JQ'] = JQ
            if chose_flag == "2":
                jq_insert = [{
                    "compulsory_insurance": JQ['compulsory_insurance'],
                    "NAggTax": JQ['NAggTax']
                }, {}, {}, {
                    "jq_disCount": JQ['jq_disCount']
                }]
                soupDb(jq_insert, [
                    getlatedate(1) + ' 00:00:00',
                    getlatedate(365) + " 23:59:59", vehicle['seatCountBC'],
                    insureTypeGroupId, insureCarId, "14"
                ])
                # 发送成功队列
                send_mq(client, CPlateNo, "", "1", "14", sessionId, isPhone,
                        insureTypeGroupId, insuranceTypeGroup)
                log.info(u"信达入库成功:%s|%s" % (CPlateNo, searchVin))
                return

        if chose_flag == "1" or chose_flag == "3":

            # 请求系数以及等
            SubmitBI = get_InputSubmitBI(session, permium_dict)
            if not isinstance(SubmitBI, dict):
                send_mq(client, CPlateNo, SubmitBI, "2", "14", sessionId,
                        isPhone, insureTypeGroupId, insuranceTypeGroup)
                return
            permium_dict['SubmitBI'] = SubmitBI

            Rules = get_ValidateRulesBI(session, permium_dict)
            if not isinstance(Rules, dict):
                send_mq(client, CPlateNo, SubmitBI, "2", "14", sessionId,
                        isPhone, insureTypeGroupId, insuranceTypeGroup)
                return
            permium_dict['Rules'] = Rules

            # 计算修改费率
            get_bi_rate(permium_dict)
            # 请求保费请求 查询码
            premium_data = get_premium_data(session, permium_dict)
            permium_dict['premium'] = premium_data

            SY = xd_parse_get_premuim(permium_dict)
            permium_dict['sy_premuim'] = SY
            # 发送保单暂存
            permium_dict['tempSaveFlag'] = "1"
            tmp_out = get_save_tmp_premium(session, permium_dict)
            if not isinstance(tmp_out, dict):
                send_mq(client, CPlateNo, tmp_out, "2", "14", sessionId,
                        isPhone, insureTypeGroupId, insuranceTypeGroup)
                return
            permium_dict['tmpBICI'] = tmp_out
            permium_dict['tempSaveFlag'] = "0"
            riskLevelFlag = get_riskLevelFlag(session, permium_dict)
            if not isinstance(riskLevelFlag, dict):
                send_mq(client, CPlateNo, riskLevelFlag, "2", "14", sessionId,
                        isPhone, insureTypeGroupId, insuranceTypeGroup)
                return
            permium_dict['riskLevel'] = riskLevelFlag

            sav_premium(session, permium_dict)
            #
            if chose_flag == "1":
                soupDb(SY, [
                    getlatedate(1) + ' 00:00:00',
                    getlatedate(365) + " 23:59:59", vehicle['seatCountBC'],
                    insureTypeGroupId, insureCarId, "14"
                ])
                send_mq(client, CPlateNo, "", "1", "14", sessionId, isPhone,
                        insureTypeGroupId, insuranceTypeGroup)
                log.info(u"信达入库成功:%s|%s" % (CPlateNo, searchVin))
                return
            elif chose_flag == "3":
                # 交强险加商业险 入库返回
                SY[0]['compulsory_insurance'] = JQ['compulsory_insurance']
                SY[0]['NAggTax'] = JQ['NAggTax']
                SY[3]['jq_disCount'] = JQ['jq_disCount']
                log.info(SY)
                soupDb(SY, [
                    getlatedate(1) + ' 00:00:00',
                    getlatedate(365) + " 23:59:59", vehicle['seatCountBC'],
                    insureTypeGroupId, insureCarId, "14"
                ])
                send_mq(client, CPlateNo, "", "1", "14", sessionId, isPhone,
                        insureTypeGroupId, insuranceTypeGroup)
                log.info(u"信达入库成功:%s|%s" % (CPlateNo, searchVin))

    except Exception as e:
        import traceback
        log.error(traceback.format_exc())
        log.error(e)
        send_mq(client, CPlateNo, "未知异常 %s " % e, "2", "14", sessionId,
                isPhone, insureTypeGroupId, insuranceTypeGroup)
        return 0
def getSource(dt):
    log = Logger()
    try:
        sessiondt = ""
        companyId = dt.get('companyId', [])
        # sessiondt = getSession()
        # requestcic = sessiondt['4']
        # loginRes = sessiondt['5']
        # pingansession = sessiondt['1']
        # ancheng_session = sessiondt['12']
        # hn_session = sessiondt['13']

        requestcic = None
        loginRes = None
        pingansession = None
        ancheng_session = None
        hn_session = None

        plateNumber = dt['plateNumber']
        insureCarId = dt['insureCarId']
        sessionId = dt['sessionId']
        isPhone = dt['isPhone']
        client = dt['client']
        insuranceType = dt['insuranceType']
        insureTypeGroupId = insuranceType.get("insuranceTypeGroupId", "")
        insuranceTypeGroup = insuranceType.get("insuranceTypeGroup", "")
        carInfo = query_user_renewal(plateNumber)
        jq_sy_out = {}
        if carInfo == 0:
            carInfo = query_user_permium_time(plateNumber)
            if carInfo != 0:
                jq_sy_out = jq_sy_time(carInfo)
                log.info(json.dumps(jq_sy_out, ensure_ascii=False))
        else:
            jq_sy_out = jq_sy_time(carInfo)
            log.info(json.dumps(jq_sy_out, ensure_ascii=False))

        if jq_sy_out.get("code", "0") == "1000":
            dt['insuranceTime'] = jq_sy_out
        elif jq_sy_out.get("code", "0") == "1001" or jq_sy_out.get(
                "code", "0") == "1002":
            cmp_id = '|'.join(
                str(i)
                for i in companyId) if len(companyId) != 0 else "1|2|4|5|12|13"
            send_mq(client, plateNumber, jq_sy_out["msg"], "2", cmp_id,
                    sessionId, isPhone, insureTypeGroupId, insuranceTypeGroup)
            return
        else:
            dt['insuranceTime'] = {
                "code": "1003",
                "msg": "数据库中未查询到信息自动生成当前时间",
                "syStart": getlatedate(1),
                "jqStart": getlatedate(1)
            }

        # 货车暂时只爬取人保的保费
        licenseType = dt.get('licenseType', "02")
        if licenseType == "01" and companyId and '12' not in companyId:
            log.info(u"货车暂时只爬取人保的保费")
            send_mq(client, plateNumber, "货车暂时只爬取人保的保费", "2", "2|4|5|12|13",
                    sessionId, isPhone, insureTypeGroupId, insuranceTypeGroup)
            return

        vinNo = dt.get('vinNo', '')
        insureCarId = dt.get('insureCarId', '')
        if vinNo == '' or insureCarId == '':
            return
        dt['endDate'] = dt.get("preInsureEndDate", "")

        if dt.get('identitCard', '') == '':
            dt['identitCard'] = '320123199106102810'
        dt['insuranceType'] = dt.get("insuranceType", "")

        log.info(u"程序开始运行%s" % datetime.datetime.now())
        try:

            g_list = []
            if not companyId:
                g1 = gevent.spawn(getData, requestcic, dt)
                g2 = gevent.spawn(flow_main, loginRes, dt)
                g3 = gevent.spawn(pingan_request, pingansession, dt)
                g4 = gevent.spawn(get_premium, ancheng_session, dt)
                g5 = gevent.spawn(hn_request, hn_session, dt)
                gevent.joinall([g1, g2, g3, g4, g5])

            if companyId and '4' in companyId:
                g1 = gevent.spawn(getData_CPlateNo, requestcic, dt)
                g_list.append(g1)

            if companyId and '5' in companyId:
                g2 = gevent.spawn(flow_main, loginRes, dt)
                g_list.append(g2)

            if companyId and '1' in companyId:
                g3 = gevent.spawn(pingan_request, pingansession, dt)
                g_list.append(g3)

            if companyId and '12' in companyId:
                g4 = gevent.spawn(get_premium, ancheng_session, dt)
                g_list.append(g4)

            if companyId and '13' in companyId:
                g5 = gevent.spawn(hn_request, hn_session, dt)
                g_list.append(g5)

            if g_list:
                gevent.joinall(g_list)

            print u"程序结束运行%s" % datetime.datetime.now()

        except Exception, e:
            log.error(e)
            log.error(traceback.format_exc())

    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
def plateNo_getSource(dt):
    log = Logger()
    try:
        requestcic = dt['4']
        loginRes = dt['5']
        pingansession = dt['1']
        ancheng_session = dt['12']
        hn_session = dt['13']
        companyId = dt.get('companyId', [])
        plateNumber = dt['licenseNo']
        sessionId = dt['sessionId']
        isPhone = dt['isPhone']
        insuranceType = dt['insuranceType']
        insureTypeGroupId = insuranceType.get("insuranceTypeGroupId", "")
        insuranceTypeGroup = insuranceType.get("insuranceTypeGroup", "")
        cdt = {}
        cdt['identitCard'] = dt['identifyNumber']
        cdt['custName'] = dt['insuredName']
        cdt['plateNumber'] = plateNumber
        cdt['vinNo'] = dt['vinNo']
        cdt['engineNo'] = dt['engineNo']
        cdt['insureCarId'] = dt['insureCarId']
        cdt['cityCode'] = get_citycode(dt['licenseNo'])
        cdt['endDate'] = dt['endDate']
        cdt['firstRegister'] = dt['enrollDate']
        cdt['vehicleBrand'] = dt['brandName']
        cdt['NSeatNum'] = dt.get('NSeatNum', 999)
        cdt['client'] = dt['client']
        client = cdt['client']
        cdt['sessionId'] = sessionId
        cdt['isPhone'] = isPhone
        cdt['insuranceType'] = insuranceType
        cdt['insuranceTime'] = dt.get("insuranceTime", {})
        cdt['licenseType'] = dt.get("licenseType", "02")
        # print(cdt)
        jq_sy_out = jq_sy_time(cdt)
        log.info(json.dumps(jq_sy_out, ensure_ascii=False))
        # print(cdt)
        if jq_sy_out.get("code", "0") == "1000":
            cdt['insuranceTime'] = jq_sy_out
        elif jq_sy_out.get("code", "0") == "1001" or jq_sy_out.get(
                "code", "0") == "1002":
            cmp_id = '|'.join(
                str(i)
                for i in companyId) if len(companyId) != 0 else "1|2|4|5|12|13"
            send_mq(client, plateNumber, jq_sy_out["msg"], "2", cmp_id,
                    sessionId, isPhone, insureTypeGroupId, insuranceTypeGroup)
            return

        # 货车暂时只爬取人保的保费
        licenseType = dt.get('licenseType', "02")
        if licenseType == "01" and companyId and '12' not in companyId:
            log.info(u"货车暂时只爬取人保的保费")
            send_mq(client, plateNumber, "货车暂时只爬取人保的保费", "2", "2|4|5|12|13",
                    sessionId, isPhone, insureTypeGroupId, insuranceTypeGroup)
            return
        log.info(u"程序开始运行%s" % datetime.datetime.now())
        try:
            #get_premium(ancheng_session, cdt)
            # getData_CPlateNo(requestcic,cdt)
            #return
            g_list = []
            if not companyId:
                g1 = gevent.spawn(getData_CPlateNo, requestcic, cdt)
                g2 = gevent.spawn(flow_main, loginRes, cdt)
                g3 = gevent.spawn(pingan_request, pingansession, cdt)
                g4 = gevent.spawn(get_premium, ancheng_session, cdt)
                g5 = gevent.spawn(hn_request, hn_session, cdt)
                gevent.joinall([g1, g2, g3, g4, g5])

            if companyId and '4' in companyId:
                g1 = gevent.spawn(getData_CPlateNo, requestcic, cdt)
                g_list.append(g1)

            if companyId and '5' in companyId:
                g2 = gevent.spawn(flow_main, loginRes, cdt)
                g_list.append(g2)

            if companyId and '1' in companyId:
                g3 = gevent.spawn(pingan_request, pingansession, cdt)
                g_list.append(g3)

            if companyId and '12' in companyId:
                g4 = gevent.spawn(get_premium, ancheng_session, cdt)
                g_list.append(g4)

            if companyId and '13' in companyId:
                g5 = gevent.spawn(hn_request, hn_session, cdt)
                g_list.append(g5)

            if g_list:
                gevent.joinall(g_list)

            print u"程序结束运行%s" % datetime.datetime.now()

        except Exception, e:
            log.error(e)
            log.error(traceback.format_exc())

    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
    log.info(u"程序结束运行%s" % datetime.datetime.now())
Example #12
0
def standard_main(renewal_data_dt, endDate=""):
    try:
        r = redisUtil.CRedis()

        log.error("start")
        srssion = get_session('2')
        sessBase = srssion
        req_session = pickle.loads(codecs.decode(sessBase.encode(), "base64"))
        req_session.mount('https://', MyAdapter())
        insuranceTypeList = ""
        insure_id = renewal_data_dt['insureCarId']
        client = renewal_data_dt.get('client', None)
        if isinstance(renewal_data_dt['insuranceType'], dict):
            insuranceType = renewal_data_dt['insuranceType']
            group_id = insuranceType['insuranceTypeGroupId']

        elif isinstance(renewal_data_dt['insuranceType'], list):
            insuranceTypeList = renewal_data_dt['insuranceType']
            insuranceType = insuranceTypeList[0]
            group_id = insuranceType['insuranceTypeGroupId']

        redis_dt = r.get_vin(renewal_data_dt['vinNo'], "2")
        if redis_dt is not None:
            try:
                log.info(u'人保可以从redis中获取信息')
                dt = eval(redis_dt)
                get_checkcode_url = "http://10.134.136.112:8000/prpall/business/" \
                                    "queryVehiclePMCheck.do?comCode=32012105&frameNo=" \
                                    + dt['vinNo'] + "&licenseNo="
                req_session.post(url=get_checkcode_url, verify=False).json()

                if insuranceTypeList == "":
                    price_res = caclPremium(dt, insuranceType, req_session)
                    if price_res['data'][0].get('errMessage') is not None:
                        log.error(price_res['data'][0].get('errMessage'))
                    log.error(u"开始解析保费信息")
                    PremiumInfo = readJson(
                        price_res['data'][0]['biInsuredemandVoList'][0]
                        ['prpCitemKinds'],
                        price_res['data'][0].get('ciInsureVOList', None))
                    if PremiumInfo:
                        log.info(PremiumInfo)
                        # data=[开始时间,结束时间,座位数,组合id,车辆id,公司id]
                        data_list = [
                            dt['ciStartDate'], dt['ciEndDate'],
                            dt['seatCount'], group_id, insure_id, '2'
                        ]
                        soupDb(PremiumInfo, data_list)
                        log.info(u'人保入库成功')
                        return None
                    else:
                        log.error(u"未知错误")
                        return price_res['data'][0].get('errMessage', '未知错误')
                else:
                    for insuranceType in insuranceTypeList:
                        try:

                            insure_id = renewal_data_dt['insureCarId']
                            group_id = insuranceType['insuranceTypeGroupId']
                            price_res = caclPremium(dt, insuranceType,
                                                    req_session)
                            if price_res['data'][0].get(
                                    'errMessage') is not None:
                                log.error(
                                    price_res['data'][0].get('errMessage'))
                            log.error(u"开始解析保费信息")

                            PremiumInfo = readJson(
                                price_res['data'][0]['biInsuredemandVoList'][0]
                                ['prpCitemKinds'], price_res['data'][0].get(
                                    'ciInsureVOList', None))
                            if PremiumInfo:
                                log.info(PremiumInfo)
                                # data=[开始时间,结束时间,座位数,组合id,车辆id,公司id]
                                data_list = [
                                    dt['ciStartDate'], dt['ciEndDate'],
                                    dt['seatCount'], group_id, insure_id, '2'
                                ]
                                soupDb(PremiumInfo, data_list)
                                log.info(u'人保入库成功')
                                send_mq(
                                    client, dt['licenseNo'], "", "1", "2",
                                    renewal_data_dt['sessionId'],
                                    renewal_data_dt['isPhone'],
                                    insuranceType.get("insuranceTypeGroupId",
                                                      "9999"),
                                    insuranceType.get("insuranceTypeGroup",
                                                      "0"))
                                # return None
                            else:
                                log.error(u"未知错误")
                                log.info(u"开始发送消息")
                                send_mq(
                                    client, dt['licenseNo'],
                                    price_res['data'][0].get(
                                        'errMessage', '未知错误'), "2", "2",
                                    renewal_data_dt['sessionId'],
                                    renewal_data_dt['isPhone'],
                                    insuranceType.get("insuranceTypeGroupId",
                                                      "9999"),
                                    insuranceType.get("insuranceTypeGroup",
                                                      "0"))
                        except Exception, e:
                            log.error(traceback.format_exc())
                            send_mq(
                                client, dt['licenseNo'], "未知错误", "2", "2",
                                renewal_data_dt['sessionId'],
                                renewal_data_dt['isPhone'],
                                insuranceType.get("insuranceTypeGroupId",
                                                  "9999"),
                                insuranceType.get("insuranceTypeGroup", "0"))
                    return None
            except:
                log.error(traceback.format_exc())
                if client is not None:
                    log.info(u"开始发送消息")
                    send_mq(client, dt['licenseNo'], "未知错误", "2", "2",
                            renewal_data_dt['sessionId'],
                            renewal_data_dt['isPhone'],
                            insuranceType.get("insuranceTypeGroupId", "9999"),
                            insuranceType.get("insuranceTypeGroup", "0"))
                return "未知错误"

        dt = dt_init()
        licenseType = renewal_data_dt.get('licenseType', "02")
        if licenseType == '01':
            dt['licenseType'] = licenseType
            dt['LicenseTypeDes'] = "大型汽车号牌"
            dt['licenseColorCode'] = "04"
            dt['LicenseColorCodeDes'] = "黄"
            dt['carKindCode'] = "B01"
            dt['CarKindCodeDes'] = "货车"
            dt['useNatureCode'] = "120"
            dt['clauseType'] = "F43"
            dt['tonCount'] = '10000'
        elif licenseType == "02":
            dt['licenseType'] = licenseType
            dt['LicenseTypeDes'] = "小型汽车号牌"
            dt['licenseColorCode'] = "01"
            dt['LicenseColorCodeDes'] = "蓝"
            dt['carKindCode'] = "A01"
            dt['CarKindCodeDes'] = "客车"
            dt['useNatureCode'] = "211"
            dt['clauseType'] = "F42"
            dt['tonCount'] = "0"

        sy_jq_date = jq_sy_time(renewal_data_dt)
        syStart = sy_jq_date.get('syStart', timeUtil.getlatedate(1))
        jqStart = sy_jq_date.get('jqStart', timeUtil.getlatedate(1))
        dt['ciStartDate'] = syStart
        endDate = datetime.datetime.strptime(syStart, "%Y-%m-%d").date()
        dt['ciEndDate'] = str(
            datetime.datetime.strptime((str(endDate.year + 1) + '-' +
                                        str(endDate.month) + '-' +
                                        str(endDate.day)), "%Y-%m-%d").date() +
            datetime.timedelta(-1))
        dt['syStart'] = syStart
        dt['syEnd'] = str(
            datetime.datetime.strptime((str(endDate.year + 1) + '-' +
                                        str(endDate.month) + '-' +
                                        str(endDate.day)), "%Y-%m-%d").date() +
            datetime.timedelta(-1))
        dt['jqStart'] = jqStart
        jqEndDate = datetime.datetime.strptime(jqStart, "%Y-%m-%d").date()
        dt['jqEnd'] = str(
            datetime.datetime.strptime(
                (str(jqEndDate.year + 1) + '-' + str(jqEndDate.month) + '-' +
                 str(jqEndDate.day)), "%Y-%m-%d").date() +
            datetime.timedelta(-1))

        # if endDate == "":
        #     tomorrow = datetime.date.today() + datetime.timedelta(1)
        #     today = datetime.date.today()
        #     dt['ciStartDate'] = str(tomorrow)
        #     dt['ciEndDate'] = str(
        #         datetime.datetime.strptime((str(today.year + 1) + '-' + str(today.month) + '-' + str(today.day)),
        #                                    "%Y-%m-%d").date())
        # else:
        #     endDate = datetime.datetime.strptime(endDate, "%Y-%m-%d").date()
        #     dt['ciStartDate'] = str(endDate)
        #     endDate = datetime.datetime.strptime(
        #         (str(endDate.year + 1) + '-' + str(endDate.month) + '-' + str(endDate.day)),
        #         "%Y-%m-%d").date() + datetime.timedelta(-1)
        #     dt['ciEndDate'] = str(endDate)
        dt['vinNo'] = renewal_data_dt.get('vinNo', '')
        dt['licenseNo'] = renewal_data_dt.get('plateNumber', '')
        get_checkcode_url = "http://10.134.136.112:8000/prpall/business/queryVehiclePMCheck.do?comCode=32012105&frameNo=" + \
                            dt['vinNo'] + "&licenseNo="
        get_checkcode_res = req_session.post(url=get_checkcode_url,
                                             verify=False).json()
        checkcode_res = jsonpath(get_checkcode_res, "$.data")
        dt['checkNo'] = checkcode_res[0][0]['checkNo']
        dt['checkCode'] = checkcode_res[0][0]['checkCode']
        # dt['checkAnswer'] = request_cicc.util.pic2Str(base64.b64decode(dt['checkCode']))
        dt['checkAnswer'] = dama("3", dt['checkCode'])
        post_checkcode_url = "http://10.134.136.112:8000/prpall/business/queryVehiclePMConfirm.do?comCode=32012105&checkNo=" + \
                             dt['checkNo'] + "&checkCode=" + dt['checkAnswer']
        post_checkcode_res = req_session.post(url=post_checkcode_url,
                                              verify=False).json()
        post_checkcode_res = jsonpath(post_checkcode_res, "$.data")
        log.info(u'开始打码')
        count = 0
        log.info(post_checkcode_res[0][0].get('errMessage', ''))
        while post_checkcode_res[0][0].get('errMessage', '') is not None:
            if '未匹配到交管车辆信息' in post_checkcode_res[0][0].get('errMessage', ''):
                log.error("未匹配到交管车辆信息")
                # 返回错误信息
                if client is not None:
                    log.info(u"开始发送消息")
                    send_mq(client, dt['licenseNo'],
                            post_checkcode_res[0][0].get('errMessage', ''),
                            "2", "2", renewal_data_dt['sessionId'],
                            renewal_data_dt['isPhone'],
                            insuranceType.get("insuranceTypeGroupId", "9999"),
                            insuranceType.get("insuranceTypeGroup", "0"))
                return post_checkcode_res[0][0].get('errMessage', '')
            if '录入的校验码有误' in post_checkcode_res[0][0].get('errMessage', ''):
                dama("99", dt['checkCode'])
                log.error(u"验证码有误,错误的验证码为,%s" % dt['checkAnswer'])
                get_checkcode_url = "http://10.134.136.112:8000/prpall/business/queryVehiclePMCheck.do?comCode=32012105&frameNo=" + \
                                    dt['vinNo'] + "&licenseNo="
                get_checkcode_res = req_session.post(url=get_checkcode_url,
                                                     verify=False).json()
                checkcode_res = jsonpath(get_checkcode_res, "$.data")
                dt['checkNo'] = checkcode_res[0][0]['checkNo']
                dt['checkCode'] = checkcode_res[0][0]['checkCode']
                # dt['checkAnswer'] = request_cicc.util.pic2Str(base64.b64decode(dt['checkCode']))
                dt['checkAnswer'] = dama("3", dt['checkCode'])
                post_checkcode_url = "http://10.134.136.112:8000/prpall/business/queryVehiclePMConfirm.do?comCode=32012105&checkNo=" + \
                                     dt['checkNo'] + "&checkCode=" + dt['checkAnswer']
                post_checkcode_res = req_session.post(url=post_checkcode_url,
                                                      verify=False).json()
                post_checkcode_res = jsonpath(post_checkcode_res, "$.data")
            if count > 4:
                # 验证码重发超限
                if client is not None:
                    log.info(u"开始发送消息")
                    send_mq(client, dt['licenseNo'], "查询失败,稍后重试", "2", "2",
                            renewal_data_dt['sessionId'],
                            renewal_data_dt['isPhone'],
                            insuranceType.get("insuranceTypeGroupId", "9999"),
                            insuranceType.get("insuranceTypeGroup", "0"))
                return "查询失败,稍后重试"
            count = count + 1

        if post_checkcode_res[0][0].get('errMessage', '') is None:
            log.info(u'打码成功')
            dt['modelCode'] = post_checkcode_res[0][0]['modelCode']
            car_info_url = "http://10.134.136.112:8000/prpall/vehicle/vehicleQuery.do?brandName=" + dt[
                'modelCode'] + "&modelCode="
            car_info_res = req_session.post(url=car_info_url,
                                            verify=False).json()
            car_info_list = jsonpath(car_info_res, "$.data")
            if car_info_list:
                if len(car_info_list[0]) == 0:
                    log.info(u"正在重新尝试获取车辆型号")
                    dt['modelCode'] = dt['modelCode'][:-1] + dt['modelCode'][
                        -1].lower()
                    log.info(dt['modelCode'])
                    car_info_url = "http://10.134.136.112:8000/prpall/vehicle/vehicleQuery.do?brandName=" + dt[
                        'modelCode'] + "&modelCode="
                    car_info_res = req_session.post(url=car_info_url,
                                                    verify=False).json()
                    car_info_list = jsonpath(car_info_res, "$.data")

                    # cic_car_info = get_car_model(dt['vinNo'])
                    # if cic_car_info is not None:
                    #     dt['gCIndustryModelName'] = cic_car_info['gCIndustryModelName']
                    #     car_info_url = "http://10.134.136.112:8000/prpall/vehicle/vehicleQuery.do?brandName=" + dt['gCIndustryModelName'] + "&modelCode="
                    #     car_info_res = req_session.post(url=car_info_url, verify=False).json()
                    #     car_info_list = jsonpath(car_info_res, "$.data")

                if len(car_info_list[0]) > 0:
                    log.info(u'获取车型成功,正在选取最低价车型')
                    car_info_list = car_info_list[0]
                    car_info_list.sort(key=lambda obj: obj.get('priceT'))
                    car_info = car_info_list[0]

                    if post_checkcode_res[0][0].get('enrollDate',
                                                    None) is not None:
                        dt['enrollDate'] = str(
                            time.strftime(
                                "%Y-%m-%d",
                                time.localtime(
                                    int(post_checkcode_res[0][0]['enrollDate']
                                        ['time']) / 1000)))
                    dt['licenseNo'] = post_checkcode_res[0][0]['id'][
                        'licenseNo']
                    dt['pmCarOwner'] = post_checkcode_res[0][0]['carOwner']
                    if licenseType == '01':
                        dt['exhaustScale'] = post_checkcode_res[0][0][
                            'displacement']
                        dt['carLotEquQuality'] = float(
                            car_info['vehicleQuality']) * 1000
                        if post_checkcode_res[0][0].get('tonCount',
                                                        '0') == '0':
                            dt['tonCount'] = post_checkcode_res[0][0].get(
                                'tonCount', '0')
                        else:
                            dt['tonCount'] = post_checkcode_res[0][0].get(
                                'haulage', '0')
                    else:
                        dt['exhaustScale'] = car_info['vehicleExhaust']
                    dt['engineNo'] = post_checkcode_res[0][0]['engineNo']
                    dt['brandName'] = car_info['vehicleName']
                    dt['purchasePriceOld'] = str(car_info['priceTr'])
                    log.info(u'新车购置价格是:%s' % dt['purchasePriceOld'])
                    dt['frameNo'] = dt['vinNo']
                    dt['modelCode'] = car_info['vehicleId']
                    dt['seatCount'] = car_info['vehicleSeat']
                    useYears = calc_user_years(dt['syStart'], dt['enrollDate'])
                    dt['prpCitemCar_useYears'] = useYears
                    acl_price = caclAcl(dt, req_session)
                    dt['aclPrice'] = acl_price
                    price_res = caclPremium(dt, insuranceType, req_session)

                    log.info(price_res['data'][0].get('errMessage'))
                    while price_res['data'][0].get('errMessage') is not None:

                        if '重复投保' in price_res['data'][0].get('errMessage'):
                            str1 = "\d{4}-\d{2}-\d{2}"
                            datelist = re.findall(
                                str1, price_res['data'][0]['errMessage'], re.S)
                            if len(datelist) == 2:
                                endDate = compare_date(datelist[0],
                                                       datelist[1])
                                dayGap = compare_time40(str(endDate))
                                if dayGap >= 40:
                                    log.error(u"重复投保,上期保单超过40天")
                                    if client is not None:
                                        log.info(u"开始发送消息")
                                        send_mq(
                                            client, dt['licenseNo'],
                                            price_res['data'][0]['errMessage'],
                                            "2", "2",
                                            renewal_data_dt['sessionId'],
                                            renewal_data_dt['isPhone'],
                                            insuranceType.get(
                                                "insuranceTypeGroupId",
                                                "9999"),
                                            insuranceType.get(
                                                "insuranceTypeGroup", "0"))
                                    return price_res['data'][0]['errMessage']
                                else:
                                    dt['syStart'] = dt['jqStart'] = str(
                                        endDate)
                                    endDate = datetime.datetime.strptime(
                                        (str(endDate.year + 1) + '-' +
                                         str(endDate.month) + '-' +
                                         str(endDate.day)), "%Y-%m-%d").date(
                                         ) + datetime.timedelta(-1)
                                    dt['syEnd'] = dt['jqEnd'] = str(endDate)
                                    useYears = calc_user_years(
                                        dt['syStart'], dt['enrollDate'])
                                    dt['prpCitemCar_useYears'] = useYears
                                    acl_price = caclAcl(dt, req_session)
                                    dt['aclPrice'] = acl_price
                                    price_res = caclPremium(
                                        dt, insuranceType, req_session)
                            else:
                                log.error(u"重复投保")
                                if client is not None:
                                    log.info(u"开始发送消息")
                                    send_mq(
                                        client, dt['licenseNo'],
                                        price_res['data'][0]['errMessage'],
                                        "2", "2", renewal_data_dt['sessionId'],
                                        renewal_data_dt['isPhone'],
                                        insuranceType.get(
                                            "insuranceTypeGroupId", "9999"),
                                        insuranceType.get(
                                            "insuranceTypeGroup", "0"))
                                return price_res['data'][0]['errMessage']

                    log.info(price_res['data'][0]['biInsuredemandVoList']
                             [0].get('ciInsureDemandRepets'))
                    if len(price_res['data'][0]['biInsuredemandVoList'][0].get(
                            'ciInsureDemandRepets')) > 0:
                        endDate = datetime.datetime.strptime(
                            time.strftime(
                                "%Y-%m-%d",
                                time.localtime(
                                    int(price_res['data'][0]
                                        ['biInsuredemandVoList'][0].get(
                                            'ciInsureDemandRepets')[0]
                                        ['endDate']['time'] / 1000))),
                            "%Y-%m-%d").date()
                        print endDate, type(endDate)
                        dayGap = compare_time40(str(endDate))
                        if dayGap >= 40:
                            log.error(u"重复投保,上期保单超过40天")
                            if client is not None:
                                log.info(u"开始发送消息")
                                send_mq(
                                    client, dt['licenseNo'],
                                    price_res['data'][0]['errMessage'], "2",
                                    "2", renewal_data_dt['sessionId'],
                                    renewal_data_dt['isPhone'],
                                    insuranceType.get("insuranceTypeGroupId",
                                                      "9999"),
                                    insuranceType.get("insuranceTypeGroup",
                                                      "0"))
                            return price_res['data'][0]['errMessage']
                        else:
                            dt['syStart'] = dt['jqStart'] = str(endDate)
                            endDate = datetime.datetime.strptime(
                                (str(endDate.year + 1) + '-' +
                                 str(endDate.month) + '-' + str(endDate.day)),
                                "%Y-%m-%d").date() + datetime.timedelta(-1)
                            dt['syEnd'] = dt['jqEnd'] = str(endDate)
                            useYears = calc_user_years(dt['syStart'],
                                                       dt['enrollDate'])

                            dt['prpCitemCar_useYears'] = useYears
                            acl_price = caclAcl(dt, req_session)
                            dt['aclPrice'] = acl_price
                            price_res = caclPremium(dt, insuranceType,
                                                    req_session)
                    log.error(u"开始解析保费信息")
                    PremiumInfo = readJson(
                        price_res['data'][0]['biInsuredemandVoList'][0]
                        ['prpCitemKinds'],
                        price_res['data'][0].get('ciInsureVOList', None))
                    if PremiumInfo:
                        log.info(PremiumInfo)
                        # data=[开始时间,结束时间,座位数,组合id,车辆id,公司id]
                        data_list = [
                            dt['ciStartDate'], dt['ciEndDate'],
                            dt['seatCount'], group_id, insure_id, '2'
                        ]
                        soupDb(PremiumInfo, data_list)
                        dt['ciEndDate'] = str(dt['ciEndDate'])
                        r.set_vin(dt['vinNo'], "2",
                                  json.dumps(dt, ensure_ascii=False))
                        log.info(u'人保入库成功')
                        if insuranceTypeList != "":
                            insuranceTypeList = insuranceTypeList[1:]
                            for insuranceType in insuranceTypeList:
                                try:
                                    insure_id = renewal_data_dt['insureCarId']
                                    group_id = insuranceType[
                                        'insuranceTypeGroupId']
                                    price_res = caclPremium(
                                        dt, insuranceType, req_session)
                                    if price_res['data'][0].get(
                                            'errMessage') is not None:
                                        log.error(price_res['data'][0].get(
                                            'errMessage'))
                                    log.error(u"开始解析保费信息")
                                    PremiumInfo = readJson(
                                        price_res['data'][0]
                                        ['biInsuredemandVoList'][0]
                                        ['prpCitemKinds'],
                                        price_res['data'][0].get(
                                            'ciInsureVOList', None))
                                    if PremiumInfo:
                                        log.info(PremiumInfo)
                                        # data=[开始时间,结束时间,座位数,组合id,车辆id,公司id]
                                        data_list = [
                                            dt['ciStartDate'], dt['ciEndDate'],
                                            dt['seatCount'], group_id,
                                            insure_id, '2'
                                        ]
                                        soupDb(PremiumInfo, data_list)
                                        log.info(u'人保入库成功')
                                        log.info(u"开始发送消息")
                                        send_mq(
                                            client, dt['licenseNo'], "", "1",
                                            "2", renewal_data_dt['sessionId'],
                                            renewal_data_dt['isPhone'],
                                            insuranceType.get(
                                                "insuranceTypeGroupId",
                                                "9999"),
                                            insuranceType.get(
                                                "insuranceTypeGroup", "0"))
                                        # return None
                                    else:
                                        log.error(u"未知错误")
                                        log.info(u"开始发送消息")
                                        send_mq(
                                            client, dt['licenseNo'],
                                            price_res['data'][0].get(
                                                'errMessage', '未知错误'), "2",
                                            "2", renewal_data_dt['sessionId'],
                                            renewal_data_dt['isPhone'],
                                            insuranceType.get(
                                                "insuranceTypeGroupId",
                                                "9999"),
                                            insuranceType.get(
                                                "insuranceTypeGroup", "0"))
                                except Exception, e:
                                    log.error(traceback.format_exc())
                                    log.info(u"开始发送消息")
                                    send_mq(
                                        client, dt['licenseNo'], "未知错误", "2",
                                        "2", renewal_data_dt['sessionId'],
                                        renewal_data_dt['isPhone'],
                                        insuranceType.get(
                                            "insuranceTypeGroupId", "9999"),
                                        insuranceType.get(
                                            "insuranceTypeGroup", "0"))
                        return None
                    else:
                        return "未知错误"
                else:
                    log.error(u'无法获取车型')
                    if client is not None:
                        send_mq(
                            client, dt['licenseNo'], '无法获取车型', "2", "2",
                            renewal_data_dt['sessionId'],
                            renewal_data_dt['isPhone'],
                            insuranceType.get("insuranceTypeGroupId", "9999"),
                            insuranceType.get("insuranceTypeGroup", "0"))
                    return ('无法获取车型')
    except Exception, e:
        log.error(traceback.format_exc())
        if client is not None:
            send_mq(client, dt['licenseNo'], '未知错误', "2", "2",
                    renewal_data_dt['sessionId'], renewal_data_dt['isPhone'],
                    insuranceType.get("insuranceTypeGroupId", "9999"),
                    insuranceType.get("insuranceTypeGroup", "0"))
        return "未知错误"
Example #13
0
def hn_request(session, renewal_data_dt):
    log = Logger()
    try:

        alldata = {}
        insureCarId = renewal_data_dt.get('insureCarId', '')
        CPlateNo = renewal_data_dt.get('plateNumber', '')
        searchVin = renewal_data_dt.get('vinNo', '')
        client = renewal_data_dt.get('client', '')
        isPhone = renewal_data_dt['isPhone']
        sessionId = renewal_data_dt.get('sessionId', '')
        endDate = renewal_data_dt.get('endDate', '')
        insuranceType = renewal_data_dt.get("insuranceType", {})
        if isinstance(insuranceType, list):
            insureTypeGroupId = insuranceType[0].get("insuranceTypeGroupId", "")
            insuranceTypeGroup = insuranceType[0].get("insuranceTypeGroup", "")
        else:
            insureTypeGroupId = insuranceType.get("insuranceTypeGroupId", "")
            insuranceTypeGroup = insuranceType.get("insuranceTypeGroup", "")
            redisbody = r.get_vin(searchVin, "13")
            if redisbody != None:
                log.info(u"华农从缓存中查询出信息%s" , searchVin)
                try:
                    redisbody = json.loads(redisbody)
                    kinds = get_hn_insurance_type(insuranceType, float(redisbody['car']['actualValueOld']),
                                                  redisbody['vehicleJingyou']['seat'],
                                                  redisbody['car']['purchasePriceOld'])
                    redisbody['kinds'] = kinds
                    if insuranceType.get("compulsoryInsurance","1") == "0":
                        redisbody["tax"]={}
                    premium = get_hn_premium(session, body_org=redisbody)
                    _result_insert(premium, renewal_data_dt)
                    return
                except Exception as e:
                    log.error(e)
                    log.error(traceback.format_exc())
        '''
        if endDate != "":
            min_time = compare_time40(endDate)
            if min_time > config.days:
                log.error("华农保险查询在40天内的 保险结束时间为 %s" % endDate)
                send_mq(client, CPlateNo, "华农保险查询在40天内的 保险结束时间为 %s" % endDate, "2", "13", sessionId, isPhone,
                        insureTypeGroupId, insuranceTypeGroup)
                return "华农保险查询在40天内的 保险结束时间为 %s" % endDate
        '''

        # 获取车管所信息
        carInfo = get_carInof(session, searchVin)

        if not isinstance(carInfo, dict):
            log.error(u"获取车管所信息失败")
            send_mq(client, CPlateNo, "%s 获取车管所信息失败" % CPlateNo, "2", "13", sessionId, isPhone, insureTypeGroupId,
                    insuranceTypeGroup)
            return
        # 获取车辆型号信息
        vehicleJingyou = get_car_model1(session, carInfo)
        if not isinstance(vehicleJingyou, dict):
            log.error(u"获取车辆信息失败")
            send_mq(client, CPlateNo, "%s 获取车辆信息失败" % CPlateNo, "2", "13", sessionId, isPhone, insureTypeGroupId,
                    insuranceTypeGroup)
            return
        alldata = {}
        alldata['car'] = carInfo
        alldata['vehicleJingyou'] = vehicleJingyou['vehicleJingyou']
        vehicleJingyou.pop('vehicleJingyou')
        alldata['other'] = vehicleJingyou
        alldata['carInfo'] = renewal_data_dt
        premium = get_hn_premium(session, alldata=alldata)
        _result_insert(premium, renewal_data_dt)

    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
        send_mq(client, CPlateNo, "%s 未知错误" % CPlateNo, "2", "13", sessionId, isPhone, insureTypeGroupId,
                insuranceTypeGroup)