Esempio n. 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)
Esempio n. 2
0
class ConfigHttp:

    def __init__(self):
        self.host = localReadConfig.get_http("baseurl")
        self.port = localReadConfig.get_http("port")
        self.timeout = localReadConfig.get_http("timeout")
        self.logger = Logger("httpUtil.py").getlog()

    # defined http get method
    def get(self, url, param=None):
        new_url = self.host + ":" + self.port + "/" + url
        header = {'Content-Type': 'application/json'}
        try:
            if param != None:
                textmod = parse.urlencode(param)
                req = request.Request(url='%s%s%s' % (new_url, '?', textmod), headers=header)
                self.logger.debug('%s%s%s' % (new_url, '?', textmod))
            else:
                req = request.Request(url='%s' % (new_url), headers=header)
                self.logger.debug(new_url)
            res = request.urlopen(req)
            res = res.read()
            hjson = json.loads(res)
            self.logger.debug(json.dumps(hjson, indent=4))
            return hjson
        except TimeoutError:
            self.logger.error("Time out!")
            return None

    # defined http post method
    def post(self, url, param):
        data = json.dumps(param)
        data = bytes(data, "utf-8")
        new_url = self.host + ":" + self.port + "/" + url
        self.logger.info('post data: \n' + json.dumps(param, indent=4))
        try:
            headers = {'Content-Type': 'application/json'}
            req = request.Request(new_url, data, headers)
            response = request.urlopen(req)
            res = response.read()
            hjson = json.loads(res)
            self.logger.debug(json.dumps(hjson, indent=4))
        except Exception as err:
            print(err, "\n")
        return hjson
Esempio n. 3
0
def is_hn_renewal(session, licenseNo="", vinNo=""):
    log = Logger()
    try:
        url = "http://qcar.chinahuanong.com.cn/quotepriceasync/getOldPolicy.do"
        headers[
            'Content-Type'] = "application/x-www-form-urlencoded; charset=UTF-8"
        data = {"licenseNo": licenseNo, "vinNo": vinNo, "engineNo": ""}
        rsp = session.post(url=url, data=data, headers=headers)
        if u"发生异常" in rsp.text:
            return 0
        else:
            if len(rsp.json()) != 0:
                log.info(u"是华农续保用户")
                return rsp.json()
            else:
                return 0
    except Exception as e:
        log.error(e)
        return 0
Esempio n. 4
0
def _Get_RandomNum(session_req):
    log = Logger()
    try:
        millis = int(round(time.time() * 1000))
        url = "http://32.0.192.232:88/sinoiais/pages/login/RandomNumUtil.jsp?d={0}".format(
            str(millis))
        code_resp = session_req.get(url=url, headers=headers)
        # 验证码
        codestr = None
        if code_resp:
            code_base64 = base64.b64encode(code_resp.content)
            codestr = pic2Str(base64.b64decode(code_base64))
        if not codestr:
            log.info("获取验证码异常")

        log.info("codestr=%s" % codestr)
        return codestr
    except Exception as e:
        log.error(e)
        log.error(traceback.format_exc())
        return None
Esempio n. 5
0
def _checkLoginInfo(session_req, codestr):
    log = Logger()
    try:
        url = "http://32.0.192.232:88/sinoiais/checklogin/checkLoginInfo.do"
        headers['Content-Type'] = "application/x-www-form-urlencoded"
        data_1 = {
            "sysUserCode": "CJCXwm01",
            "sysPassWord": "******",
            "random": codestr
        }

        login_1_resp = session_req.post(url=url, data=data_1, headers=headers)
        if "success" in login_1_resp.text:
            log.info(u"登录成功")
            return 1
        elif "randomError" in login_1_resp.text:
            log.error(u"验证码错误")
            return 0
        else:
            return 2
    except Exception as e:
        log.error(u"登录失败")
        log.error(traceback.format_exc())
        return 2
Esempio n. 6
0
from common.log import Logger

logger = Logger(name='firms_fpb',
                config_path='/FiRMS/builder/config/log/logging.json',
                log_file="/FiRMS/builder/log/logfile")
#logger = Logger(name='firms_fpb', config_path='/FiRMS/builder/config/log/logging.json')
sys_logger = Logger(name='sys-logger',
                    config_path='/FiRMS/builder/config/log/logging.json')

logger.info('test')
sys_logger.info("test1")
Esempio n. 7
0
        #     dayGap = compare_time40(data['endDate'])
        #     if dayGap>40:
        #         log.error(u"上期保单截止时间超过四十天,大地不可询价。上期保单截止时间:%s" % data['endDate'])
        #         send_mq(client, dt['licenseNo'], "上期保单截止时间超过四十天,不可询价。上期保单截止时间:%s" % data['endDate'], "2", "5", sessionId, isPhone, groupId,insuranceTypeGroup)
        #         return u"上期保单截止时间超过四十天,大地不可询价。上期保单截止时间:%s" % data['endDate']
        #     elif dayGap<0:
        #         pass
        #     else:
        #         dt['endDate'] = datetime.strptime(data['endDate'], "%Y-%m-%d").date()

        #通过车架号获取校验码
        DVM_res = get_check_img(dt)
        DVM_res_items = jsonpath(DVM_res, "$.result.items")
        if DVM_res_items:
            if len(DVM_res_items) > 0:
                log.info(u"车架号 %s,请求车管所完成" % dt['vinNo'])
                dt['jsCheckCode'] = DVM_res_items[0][0].get(
                    'jsCheckCode', None)
                dt['jsCheckNo'] = DVM_res_items[0][0].get('jsCheckNo', None)
                #dt['checkAnswer'] = request_cicc.util.pic2Str(base64.b64decode(dt['jsCheckCode']))
                dt['checkAnswer'] = dama("3", dt['jsCheckCode'])
                log.info(dt['checkAnswer'])

                #上报打码结果获取车管所返回信息
                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'])
Esempio n. 8
0
    # Note the start time so as to calculate the time time taken by the script to execute
    start_time = time.time()

    parser = argparse.ArgumentParser()

    parser.add_argument("-i", "--input_file", required=True)
    parser.add_argument("-t", "--ticket_number", required=True)

    args = parser.parse_args()

    # Get the excel sheet from the command line
    input_file = args.input_file

    # Get the SR Number from the command line
    sr_number = args.ticket_number
    sys_logger.info('SR Number: {}'.format(sr_number))

    # Get the username
    username = getpass.getuser()

    #sys_logger.info ('Username: {}'.format(username))

    # Get current date
    today = str(date.today())
    (yy, mm, dd) = today.split('-')

    # Get timestamp
    curr_time = datetime.now().strftime("%H:%M:%S")
    curr_time = curr_time.replace(':', '')

    user_dir = sr_number + '__' + str(curr_time)
def pre_process(input_file, sr_number, username, unix_proc_no, logfile):

    global logger
    log_json_path = LOG_CFG_PATH + '/logging.json'
    logger = Logger(name='firms_fpb',
                    config_path=log_json_path,
                    log_file=logfile)

    start_excel_time = time.time()
    logger.info('Pre Process Start Time: {}'.format(start_excel_time))

    # Convert the excel sheet to json
    logger.info('Convert excel to JSON')
    json_file = excel_to_json_convert(input_file, logfile)
    end_excel_time = time.time() - start_excel_time

    # Validate the json
    logger.info('Validating JSON')
    is_valid_json = validate_json(json_file, logfile)
    #exit(1)

    # If excel sheet is not valid
    if not is_valid_json:
        logger.error('Invalid excel sheet provided')
        print("Invalid excel sheet provided")
        exit(1)

    start_read_json_time = time.time()

    # Read the JSON data
    json_data = read_json_file(json_file)
    end_read_json_time = time.time() - start_excel_time
    print("Total Time Taken for reading json: ",
          time.strftime("%H:%M:%S", time.gmtime(end_read_json_time)))
    exit(1)

    start_prep_time = time.time()

    # Open the json file and create the data structure for storing into db
    (data_to_load, no_of_batches) = prepare_data(json_data, username,
                                                 sr_number, unix_proc_no)

    end_prep_time = time.time() - start_prep_time
    print("Total Time Taken for preparing data: ",
          time.strftime("%H:%M:%S", time.gmtime(end_prep_time)))

    # Create the insert query and put it here

    insert_query = "insert into incoming_request (sr_number,username,src_ip,dst_ip,port,protocol,id,src_ip_int,dst_ip_int,process_no,unix_process_no,inc_req_row_id,request_date) values (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13)"

    start_load_time = time.time()

    logger.info('Loading input data into incoming_request table')
    logger.info('Load start time: {}'.format(start_load_time))

    try:
        #print ("pre processing")
        is_loaded = load_data(data_to_load, insert_query)
    except Exception as e:
        logger.error('Failed to insert data for pre-processing', e)
        print(e)

    end_load_time = time.time()
    total_load_time = end_load_time - start_load_time

    logger.info('Load end time: {}'.format(end_load_time))

    #print("Total Time Taken for loading the data: ", time.strftime("%H:%M:%S", time.gmtime(total_load_time)))

    return no_of_batches
Esempio n. 10
0
def is_pingan_renwal(session, plateNumber, repet=0):
    log = Logger()

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

        if session == '' or session is None:
            login = Login()
            session = login.login()
        try:
            repet = 0
            user_data = is_renewal(session, plateNumber)
        except Exception as e:
            if repet == 0:
                user_data = is_renewal(session, plateNumber)
                repet += 1

        # 续保用户
        if isinstance(user_data, dict):
            icorepnbs_session = user_data['request']
            quick_resp = quickSearchVoucher(icorepnbs_session, user_data)
            # 如果商业险的结束时间为空那么取交强险的结束时间作为保险时间
            str_date = quick_resp['vehicleTarget']['firstRegisterDate']
            insuranceType = quick_resp['insuranceType']
            endDate = user_data.get("sy_insuranceEndTime", "").split(" ")[0]
            if endDate == "":
                endDate = user_data.get("jq_insuranceEndTime",
                                        "").split(" ")[0]

            out = {
                "licenseNo":
                user_data['vehicleLicenceCode'].replace('-', ''),
                "vinNo":
                user_data['vehicleFrameNo'],
                "endDate":
                endDate,
                "CCardDetail":
                quick_resp['extendInfo'].get("ownerVehicleTypeCode", ""),
                "brandName":
                quick_resp['vehicleTarget']['modifyAutoModelName'],
                "insuredName":
                user_data['ownerName'],
                "identifyNumber":
                quick_resp.get("insurantInfo", {}).get("certificateTypeNo",
                                                       ""),
                "CUsageCde":
                "",
                "NNewPurchaseValue":
                "",
                "insuredAddress":
                "",
                "mobile":
                "",
                "enrollDate":
                str_date.split(" ")
                [0],  # str_date[:4]+"-"+str_date[4:6]+"-"+str_date[6:],
                "engineNo":
                user_data['engineNo'],
                "CModelCde":
                user_data['makerModel'],
                "NSeatNum":
                quick_resp['vehicleTarget']['vehicleSeats'],
                "COMPANY_ID":
                "1",
                "insuranceType":
                insuranceType,
                "insuranceTime": {
                    'syEnd': user_data.get("sy_insuranceEndTime", ""),
                    'syStart': user_data.get("sy_insuranceBeginTime", ""),
                    'jqStart': user_data.get("jq_insuranceBeginTime", ""),
                    'jqEnd': user_data.get("jq_insuranceEndTime", "")
                }
            }
            return out
        else:
            log.info(u"未查询到续信息%s", plateNumber)
            return 0
    except Exception, e:
        log.error(e)
        log.error(traceback.format_exc())
        return 0
Esempio n. 11
0
interimNo = str(re9.json()['interimNo'])

#####获取车管所验证码
headers['Referer'] = 'http://www.epicc.com.cn/wap/carProposal/car/carInput2'
data2 = 'licenseNo=' + urllib.quote(
    licenseNo) + '&frameNo=' + rackNo + '&channelNo=2&sessionId=' + sessionid
re2 = s.post(
    url='http://www.epicc.com.cn/wap/carProposal/JSArea/obtainVerificationCode',
    data=data2)
body2 = re2.json()
code_msg = body2['message']
code_msg = eval(code_msg)
#log.info("code_msg=%s" % code_msg)
check_code = jsonpath.jsonpath(code_msg, '$.check_code')[0]

log.info("check_code=%s" % check_code)
fname = '../image/' + utils.getTimstamp() + '.jpg'
#log.info('code =%s'% check_code)
log.info('picnam =%s' % fname)
imagebse64.base642img(check_code, fname)
codestr = utils.pic2Str(fname)
log.info(u"验证码为=%s,文件名为=%s" % (codestr, fname))

#发送验证码
data3 = 'icationCode=' + codestr + '&channelNo=2&sessionId=' + sessionid
re3 = s.post(
    url='http://www.epicc.com.cn/wap/carProposal/JSArea/obtainVerifQueryCar',
    data=data3)
body3 = re3.json()
body3 = ast.literal_eval(body3['message'])
code = body3['head']['errorCode']
Esempio n. 12
0
class Login(object):
    def __init__(self, username=None, password=None):
        self.log = Logger()
        self.session_req = requests.session()
        self.session_req.headers.update(se.headers)
        if username is None or password is None:
            self.username = se.login_username
            self.password = se.login_password

    # 刷新获取验证码
    def __refresh_code(self, reqsss):
        code_url = "https://icore-pts.pingan.com.cn/ebusiness/auto/rand-code-imgage.do" \
                   "?random=0.37327206414192915"
        code_resp = reqsss.get(url=code_url, headers=se.headers, verify=False)
        code_base64 = base64.b64encode(code_resp.content)
        codestr = dama("2", code_base64)
        self.log.info(u"平安登录验证码为%s", codestr)
        return codestr

    # 发送验证码
    def __validate_code(self, reqsss, codestr):
        set_code_url = "https://icore-pts.pingan.com.cn/ebusiness/auto/" \
                       "VerifyRandCodeController.do?randCode=" + codestr
        set_code_resp = reqsss.get(url=set_code_url,
                                   headers=se.headers,
                                   verify=False)
        set_code_result = set_code_resp.text
        if set_code_result == "true":
            self.log.info(u"平安验证码校验正确")
            return 1
        self.log.error(u"平安登录验证码错误")
        return 0

    def __use_login(self, reqsss):
        # 登录前置请求
        login_monitor_url = "https://icore-pts.pingan.com.cn/ebusiness/auto/monitor.do?" \
                            "type=insertLoginLog&flowid=&userId=STDJNDS-00001&_t=1487214110283"
        reqsss.post(url=login_monitor_url, headers=se.headers, verify=False)

    def __login(self, reqsss, codestr):
        login_url = 'https://icore-pts.pingan.com.cn/ebusiness/j_security_check'
        se.headers['Content-Type'] = "application/x-www-form-urlencoded"
        headers = se.headers
        login_data = "j_username="******"&j_password="******"&SMAUTHREASON=0&randCode=" + codestr
        req = reqsss.post(url=login_url,
                          data=login_data,
                          headers=headers,
                          verify=False)
        if req.url == u'https://icore-pts.pingan.com.cn/ebusiness/':
            self.log.info(u"平安登录成功")
            # 往redis中存储session
            set_session(self.session_req, "1")
            return self.session_req

        self.log.error(u"平安登录失败")
        self.log.error(req.text)
        return 0

    def login(self):
        try:
            # 刷新验证码
            codestr = self.__refresh_code(self.session_req)
            # 校验验证码
            count = 1
            validate_code_result = self.__validate_code(
                self.session_req, codestr)
            while validate_code_result == 0 and count < 4:
                codestr = self.__refresh_code(self.session_req)
                validate_code_result = self.__validate_code(
                    self.session_req, codestr)
                count += 1
            # 发送登录前置请求
            self.__use_login(self.session_req)
            out = self.__login(self.session_req, codestr)
            # self.auto_index_do(out)
            if out != 0:
                #self.auto_index_do(out)
                return out
        except Exception as error:
            self.log.info(error)
            # 获取保持连接的id

    def auto_index_do(self, session):
        '''
        :param session:登录后的session
        :return:flow_id
        '''
        index_url = "https://icore-pts.pingan.com.cn/ebusiness/auto/newness/index.do"
        index_rsp = session.get(url=index_url, verify=False)
        index_rsp_text = index_rsp.text
        flow_id = re.findall(r"<div id=\"main\" flowid=\"(.+?)\">",
                             index_rsp_text, re.S)[0]
        r = CRedis()
        r.set("pingan_keepid", flow_id)

    '''
Esempio n. 13
0
        plateNo_getSource(carInfo)
        # 爬取


def main():
    try:
        reactor.suggestThreadPoolSize(5)
        Consumer().runrealtime()

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


'''
#方法运行
threads = []
log.info(u"程序开始运行%s" % datetime.now())

for arg in xrange(10):
    th = threading.Thread(target=runrealtime)
    th.start()
    threads.append(th)
try:
    for th in threads:
        th.join()
except Exception,e:
    log.error(e)
    log.error(traceback.format_exc())
log.info(u"程序结束运行%s" % datetime.now())
Esempio n. 14
0
def validate_json(input_file, logfile):

    log_json_file = LOG_CFG_PATH + '/logging.json'
    global logger
    logger = Logger(name='firms_fpb',
                    config_path=log_json_file,
                    log_file=logfile)

    with open(input_file) as json_data:
        jsonData = json.load(json_data)

    # print the keys and values
    count = 0
    all_errors = OrderedDict()
    final_errors = ""

    for rec in jsonData:
        for key, value in rec.iteritems():
            line_number = str(rec['input_row_id'])

            #  Check 1 - Value should not be empty
            if key not in 'protocol' and not value:
                retVal = " Error : Record number :" + line_number + " Column " + key + " is empty \n"
                final_errors += retVal
                continue

            # Check 2 - Only ASCII characters allowed
            try:
                temp_val = str(value)
                temp_val.encode('ascii')
            except:
                retVal = "Error : Record number : " + line_number + " Column " + str(
                    key) + " has non ASCII character \n"
                final_errors += retVal
                continue

            # Check 3 - Valid values
            if key == 'source':
                retVal = is_valid_format(key, str(value))
            elif key == 'dest-port':
                retVal = is_valid_port_format(str(value))
            elif key == 'destination':
                retVal = is_valid_format(key, str(value))
            elif key == 'protocol':
                retVal = is_valid_protocol(str(value))
            elif key == 'input_row_id':
                retVal = "Check passed"

            if 'Error' in retVal:
                final_errors += "Record number: " + line_number + " " + str(
                    retVal) + "\n"

        count += 1

    logger.info('Total records {}'.format(count))
    print('Total records : ', count)

    # IF there are validation errors
    if final_errors:
        pattern = re.compile('(.*?).json')
        match = pattern.match(input_file)
        filename = match.group(1)
        new_filename = filename.replace("data", "out")

        curr_time = time.time()
        output_filename = new_filename + '__val__errors__' + str(
            curr_time) + '.' + 'txt'

        # Write to file
        try:
            with open(output_filename, 'w') as f:
                f.write(final_errors)
            print("Input file parsing errors generated at : ", output_filename)
            logger.info('Excel validation errors generated at : {}'.format(
                output_filename))
            print("\nExiting FiRMS Gen, failed to validate input file \n")
            exit(1)
        except Exception as e:
            print("Failed to create validation errors file", e)
            logger.error(
                'Failed to create validation errors file {}'.format(e))
            exit(1)

    return (count)
def excel_to_json_convert(input_file, logfile):

    log_json_file = LOG_CFG_PATH + '/logging.json'
    global logger
    logger = Logger(name='firms_fpb',
                    config_path=log_json_file,
                    log_file=logfile)

    # Open the workbook and select the first worksheet
    wb = xlrd.open_workbook(input_file)
    sh = wb.sheet_by_index(0)

    # List to hold dictionaries
    firewall_list = []

    column_names = sh.row_values(0)

    logger.info('Column Names in input excel {}'.format(column_names))

    col1 = column_names[0].lower()
    pattern = r'(^|[^\w]){}([^\w]|$)'.format(col1)
    src_matches = re.search(pattern, col1)

    if not src_matches:
        logger.info(
            'Input file is in invalid format, first column should denote Source'
        )
    #    print ("Input file is in invalid format, first column should denote Source")
    #    exit (1)

    col2 = column_names[1].lower()
    pattern = r'(^|[^\w]){}([^\w]|$)'.format(col2)
    ip_matches = re.search(pattern, col1)
    pattern = re.compile(r'(ip|subnet)')
    if not pattern.search(col2):
        logger.info(
            'Input file is in invalid format, second column should denote Source IP or Source Subnet'
        )
    #    print("Input file is in invalid format, second column should denote Source IP or Source Subnet")
    #    exit(1)

    col3 = column_names[2].lower()
    pattern = re.compile(r'(port)')
    if not pattern.search(col3):
        logger.info(
            'Input file is in invalid format, third column should denote port')
    #    print("Input file is in invalid format, third column should denote port")
    #    exit(1)

    col4 = column_names[3].lower()
    pattern = re.compile(r'(destination)')
    if not pattern.search(col4):
        logger.info(
            'Input file is in invalid format, fourth column should denote Destination'
        )
    #    print ("Input file is in invalid format, fourth column should denote Destination")
    #    exit(1)

    col5 = column_names[4].lower()
    pattern = re.compile(r'(ip|subnet)')
    if not pattern.search(col5):
        logger.info(
            'Input file is in invalid format, fifth column should denote Destination IP or Destination Subnet'
        )
    #    print ("Input file is in invalid format, fifth column should denote Destination IP or Destination Subnet")
    #    exit(1)

    isProtocol = False
    #print(len(column_names))
    if len(column_names) >= 6:
        #print('inside column_names')
        col6 = column_names[5].lower()
        if not re.match("protocol", col6):
            logger.info('Sixth column should be Protocol')
            print("Protocol column not provided, defaulting to TCP")
        else:
            isProtocol = True

    # Iterate through each row in worksheet and fetch values into dict
    for rownum in range(1, sh.nrows):

        firewall = OrderedDict()
        row_values = sh.row_values(rownum)

        firewall['source'] = row_values[1]

        dest_port = row_values[2]
        firewall['dest-port'] = dest_port

        firewall['destination'] = row_values[4]

        if isProtocol:
            if not row_values[5]:
                protocol = 'TCP'
            else:
                #print('insideeeee')
                protocol = row_values[5]
        else:
            #print('else block')
            protocol = 'TCP'
    #print('PROTOCOL')
    #print (protocol,row_values[5])
        firewall['protocol'] = protocol.upper()

        firewall['input_row_id'] = rownum
        firewall_list.append(firewall)

    # Serialize the list of dicts to JSON
    j = json.dumps(firewall_list)

    pattern = re.compile('(.*?).xls')
    match = pattern.match(input_file)
    filename = match.group(1)
    output_filename = filename + '.' + 'json'

    # Write to file
    with open(output_filename, 'w') as f:
        f.write(j)

    #print ("Generated output file is: ",output_filename)
    logger.info('Generated JSON file is {}'.format(output_filename))

    return (output_filename)
def post_process(sr_number, username, unix_proc_no, input_file, new_dir_json,
                 new_dir_txt, logfile):

    global logger
    logger = Logger(name='firms_fpb',
                    config_path=log_json_file,
                    log_file=logfile)

    time_before_select = time.time()

    # Select the data from incoming_request table for passed unix PID
    select_query = "select route_issue,src_ip,dst_ip,port,protocol,src_firewall,src_zone,dst_zone,src_addr_book,src_addr_name,src_addr_nm_exists,dst_addr_book,dst_addr_name," \
                   "dst_addr_nm_exists,app_name,policy_exists,net_proto,app_name_exists,app_dst,dst_firewall,inc_req_row_id,src_ip_int,dst_ip_int,exception_msg,dst_firewall,policy_name," \
                   "src_zone_2,dst_zone_2,src_addr_book_2,src_addr_name_2,src_addr_nm_exists_2,dst_addr_book_2,dst_addr_name_2,dst_addr_nm_exists_2,app_name_2,app_name_exists_2,policy_exists_2,policy_name_2,src_subnet,dst_subnet" \
                   " from incoming_request where unix_process_no=:1"

    logger.info('Select Query {}'.format(select_query))
    bind_data = (unix_proc_no, )
    temp_data = extract_data(select_query, bind_data)

    data = []

    for record in temp_data:
        existing_record = list(record)

        # Append the record
        data.append(existing_record)

        # If Source Firewall is different than Destination Firewall then we need to split the record into two
        if record[5] != record[19] and record[0] != 'Y':
            #if record[15] != 'Y' record[25] != 'Y':
            if True:
                #logger.info ('Source firewall is different than Destination Firewall')
                new_record = list(record)
                # Routing issue is per record so change the routing issue flag to N so as to avoid getting it printed twice
                # in routing issues text file
                new_record[0] = "N"
                new_record[5] = record[24]
                new_record[6] = record[26]
                new_record[7] = record[27]
                new_record[8] = record[28]
                new_record[9] = record[29]
                new_record[10] = record[30]
                new_record[11] = record[31]
                new_record[12] = record[32]
                new_record[13] = record[33]
                new_record[14] = record[34]
                new_record[17] = record[35]
                new_record[15] = record[36]
                new_record[25] = record[37]
                data.append(new_record)

    #logger.info ('Data ready for post processing {}'. format (data))

    time_after_select = time.time()

    total_time_taken_select = time_after_select - time_before_select
    #print("Total Time Taken for data Extraction: ", time.strftime("%H:%M:%S", time.gmtime(total_time_taken_select)))

    all_policies = {}
    src_dst_port_dict = {}

    row_numbers = {}

    route_issues = []
    route_issue_count = 0

    existing_policies = []
    existing_pol_count = 0

    issue_record_count = 0
    counter = 0

    all_src_addr = OrderedDict()
    all_dst_addr = OrderedDict()
    all_apps = OrderedDict()

    # Loop through all the records
    for record in data:
        route_issue = record[0]
        src_ip = record[1]
        dst_ip = record[2]
        port = record[3]
        protocol = record[4]
        src_firewall = record[5]

        src_zone = record[6]
        dst_zone = record[7]

        src_addr_book = record[8]
        src_addr_name = record[9]
        src_addr_nm_exists = record[10]

        dst_addr_book = record[11]
        dst_addr_name = record[12]
        dst_addr_nm_exists = record[13]

        app_name = record[14]
        policy_exists = str(record[15])
        net_proto = record[16]
        app_name_exists = record[17]
        app_dest = record[18]

        dst_firewall = record[19]

        row_id = record[20]

        src_ip_int = str(record[21])
        dst_ip_int = str(record[22])

        route_exc_message = record[23]
        dst_firewall = record[24]

        existing_pol_name = record[25]
        src_zone_2 = record[26]
        dst_zone_2 = record[27]

        src_subnet_nw = record[38]
        dst_subnet_nw = record[39]

        total_rec_policies = 0

        # If there is a route issue then add the route details to the route_issues data structure
        if route_issue == 'Y':
            route_issues.append({
                'Source-IP': src_ip,
                'Destination-IP': dst_ip,
                'Port': port,
                'Source-Firewall': src_firewall,
                'Destination-Firewall': dst_firewall,
                'Routing-Issue-Reason': route_exc_message,
                'Source-Zone': src_zone,
                'Dest-Zone': dst_zone,
                'Source-Zone-2': src_zone_2,
                'Dest-Zone-2': dst_zone_2,
                'Input-Row-ID': row_id
            })
            route_issue_count += 1

        else:

            # First level of grouping of policies is done for SOURCE FIREWALL
            # So if all_policies doesnt already have source firewall as the key then add it here
            if src_firewall not in all_policies.keys():
                all_policies[src_firewall] = {
                    'new_src_cmd': {},
                    'new_dst_cmd': {},
                    'new_app_cmd': {}
                }
                src_dst_port_dict[src_firewall] = {}

            total_rec_policies += 1
            # Check if source address exists, if not create
            if src_addr_nm_exists == 'N' and 'N' in policy_exists:

                # IF src_ip_int exists then it means its IP then append /32, else use the subnet as is
                #if src_ip_int != 'None':
                if '/' not in src_ip:
                    src_subnet = src_ip + '/32'
                else:
                    # if src_subnet is not null (i.e. from network file if we get then use the same else use the one provided in input file)
                    if src_subnet_nw is None:
                        src_subnet = src_ip
                    else:
                        src_subnet = src_subnet_nw

                all_policies[src_firewall]['new_src_cmd'][src_addr_name] = {
                    'subnet': src_subnet,
                    'src_addr_book': src_addr_book,
                    'src_addr_name': src_addr_name
                }

            # Check if dest address exists, if not create
            if dst_addr_nm_exists == 'N' and 'N' in policy_exists:

                # IF dst_ip_int exists then it means its IP then append /32, else use the subnet as is
                #if dst_ip_int != 'None':
                if '/' not in dst_ip:
                    dst_subnet = dst_ip + '/32'
                else:
                    if dst_subnet_nw is None:
                        dst_subnet = dst_ip
                    else:
                        dst_subnet = dst_subnet_nw

                all_policies[src_firewall]['new_src_cmd'][dst_addr_name] = {
                    'subnet': dst_subnet,
                    'src_addr_book': dst_addr_book,
                    'src_addr_name': dst_addr_name
                }

            # Check if application exists or not
            # app_name_exists in the form of N,Y,N,N
            # app_name_list in the form of app1,app2,app3
            # app_dest_list in the form of port1,port2,port3
            app_exists_list = str(app_name_exists).split(",")
            app_name_list = str(app_name).split(",")
            app_dest_list = str(app_dest).split(",")

            i = 0
            while i < len(app_name_list):
                key = src_addr_name + '__' + dst_addr_name + '__' + app_name_list[
                    i]
                try:
                    if key in row_numbers.keys():
                        row_numbers[key] = str(
                            row_numbers[key]) + ',' + str(row_id)
                    else:
                        row_numbers[key] = row_id
                except Exception as e:
                    logger.error('Error occured in row numbers {}'.format(e))

                i += 1

            # Split the existing pol name column contents
            pol_name_list = str(existing_pol_name).split(",")
            port_list = str(port).split(";")

            i = 0
            # Need to check if there are multiple apps, there can be more than one app
            if len(app_exists_list) > 0 and 'N' in policy_exists:

                if 'new_app_cmd' not in all_policies[src_firewall].keys():
                    all_policies[src_firewall]['new_app_cmd'] = OrderedDict()

                while i < len(app_exists_list):
                    is_exists = app_exists_list[i]
                    if is_exists == 'N':
                        new_app_name = app_name_list[i]
                        new_app_dest = app_dest_list[i]
                        all_policies[src_firewall]['new_app_cmd'][
                            new_app_name] = {
                                'app_dest': new_app_dest,
                                'net_proto': net_proto
                            }

                    i += 1

            # Need to check for policy now
            policy_exists_list = str(policy_exists).split(",")

            if src_zone == None or dst_zone == None:
                logger.error(
                    'FiRMS engine couldnt process record number {}'.format(
                        row_id))
                print("FiRMS engine couldnt process record number ",
                      format(row_id))
                issue_record_count += 1
                continue

            # Make a unique key src_zone_dst_zone
            src_dst_key = src_zone + "_" + dst_zone

            i = 0

            # The input to this while loop is something of this form (Y,N,Y)
            while i < len(policy_exists_list):
                is_exist_policy = policy_exists_list[i]
                app = app_name_list[i]

                # Only if policy doesnt exists and a new one needs to be created
                if is_exist_policy == 'N':
                    # Second level of grouping is done by Source Zone and Destination Zone
                    # Check if we have already encountered this src_cone and dst_zone before, if not then add
                    key = src_addr_name + '__' + dst_addr_name + '__' + app
                    if src_dst_key not in all_policies[src_firewall].keys():
                        all_policies[src_firewall][src_dst_key] = {key: key}
                    else:
                        all_policies[src_firewall][src_dst_key][key] = key

                else:
                    # If we are here then that means the policy is already existing
                    # Add the existing policies
                    pol_name = pol_name_list[i]
                    existing_policies.append({
                        'Source-IP': src_ip,
                        'Destination-IP': dst_ip,
                        'Port': app_dest_list[i],
                        'Policy-Name': pol_name,
                        'Input-Row-ID': row_id,
                        'Firewall': src_firewall
                    })

                i += 1

    counter = 0

    new_policies = copy.deepcopy(all_policies)

    for each_fw in all_policies.keys():

        for each_zone in all_policies[each_fw].keys():

            # No action required if new_src_cmd or new_dst_cmd or new_app_cmd
            if each_zone == 'new_src_cmd':
                continue
            if each_zone == 'new_dst_cmd':
                continue
            if each_zone == 'new_app_cmd':
                continue

            new_policies[each_fw].pop(each_zone, None)

    for each_fw in all_policies.keys():

        for each_zone in all_policies[each_fw].keys():

            data = []

            # No action required if new_src_cmd or new_dst_cmd or new_app_cmd
            if each_zone == 'new_src_cmd':
                continue
            if each_zone == 'new_dst_cmd':
                continue
            if each_zone == 'new_app_cmd':
                continue

            # Create Data structure for group_data function
            for each_key in all_policies[each_fw][each_zone].keys():
                (src, dst, port) = each_key.split("__")
                temp_rec = {'src': [src], 'dst': [dst], 'app': [port]}
                data.append(temp_rec)

            grouped_data = club(data)

            new_policies[each_fw][each_zone] = grouped_data

    logger.info('Possible Red Flags {}'.format(route_issue_count))
    #sys_logger.info ('Possible Red Flags: {}'.format(route_issue_count))
    #sys_logger.info ('Policies recommended for: {}'.format(total_rec_policies))

    print("Possible Red Flags: ", route_issue_count)

    final_policies = create_policy(new_policies, sr_number, username,
                                   row_numbers)

    # Write new policies into text file
    policies_file = sr_number + "_policies"
    json_file = policies_file + ".json"
    json_new_pol_path = new_dir_json + json_file
    txt_new_pol_path = new_dir_txt + policies_file + '.txt'

    write_json_file(final_policies, json_new_pol_path)
    logger.info('JSON Policies file generated {}'.format(json_new_pol_path))
    convert_json_to_txt_policies(json_new_pol_path, txt_new_pol_path)
    #generate_sep_fw_pol ( json_new_pol_path, new_dir_txt )

    # Write red flags into text file
    route_issues_file = sr_number + "_red_flags"
    json_route_issue = route_issues_file + ".json"
    json_red_flag_path = new_dir_json + json_route_issue
    txt_red_flag_path = new_dir_txt + route_issues_file + '.txt'

    write_json_file(route_issues, json_red_flag_path)
    logger.info('JSON Red Flags file generated {}'.format(json_red_flag_path))
    convert_json_to_txt_issues(json_red_flag_path, txt_red_flag_path)

    # Write existing policies into text file
    existing_pol_file = sr_number + "_existing_policies"
    json_existing_pol = existing_pol_file + ".json"
    json_ex_pol_path = new_dir_json + json_existing_pol
    txt_ex_pol_path = new_dir_txt + existing_pol_file + '.txt'

    write_json_file(existing_policies, json_ex_pol_path)
    logger.info(
        'JSON Existing Policies file generated {}'.format(json_ex_pol_path))
    convert_json_to_existing_txt_policies(json_ex_pol_path, txt_ex_pol_path)

    return 1
Esempio n. 17
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())
Esempio n. 18
0
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())
Esempio n. 19
0
class getmessage():
    def __init__(self, conrd):
        self.conrd = conrd
        self.log = Logger(logpath)
        self.havemids = []  # 存储已经核对的messageid

        #标准数据库实例化
        self.conn_standard = connDB(
            self.conrd.get('sMySQL', 'host'),
            self.conrd.getint('sMySQL', 'port'),
            self.conrd.get('sMySQL', 'user'),
            self.conrd.get('sMySQL', 'passwd'),
            self.conrd.get('sMySQL', 'dbname'),
            self.conrd.get('sMySQL', 'charset'),
            self.conrd.getint('sMySQL', 'read_timeout'))
        self.conns = self.conn_standard.connect()
        self.curs = self.conn_standard.getcursor(self.conns)

        #实际结果数据库实例化
        self.conn_reality = connDB(self.conrd.get('rMySQL', 'host'),
                                   self.conrd.getint('rMySQL', 'port'),
                                   self.conrd.get('rMySQL', 'user'),
                                   self.conrd.get('rMySQL', 'passwd'),
                                   self.conrd.get('rMySQL', 'dbname'),
                                   self.conrd.get('rMySQL', 'charset'),
                                   self.conrd.getint('rMySQL', 'read_timeout'))
        self.connr = self.conn_reality.connect()
        self.curr = self.conn_reality.getcursor(self.connr)

    def result(self, sqlRlt):
        result = {}
        for value in sqlRlt:
            result[value[0]] = value[1].split(',')
        return result

#获取标准数据库中的警示信息内容

    def getMessage_standard(self, sql, dbname, starttime, endtime):

        try:
            self.curs.execute(sql.format(dbname, starttime, endtime))
            rlt = self.curs.fetchall()
            return self.result(rlt)
        except Exception as error:
            self.log.error(error)

# 获取需验证引擎的数据库中的警示信息内容

    def getMessage_reality(self, sql, dbname, starttime, endtime):

        try:
            self.curr.execute(sql.format(dbname, starttime, endtime))
            rlt = self.curr.fetchall()
            return self.result(rlt)
        except Exception as error:
            self.log.error(error)

#比较两个数据库中的点评数据

    def compareMessage(self, message_s, message_r):
        samemessage = {}  #存储警示信息相同的数据
        standardHave = {}  #存储同一个处方或患者或就诊流水号,标准库里面有跑出警示信息,实际对照的库里面没有跑出警示信息
        realityHave = {}  #存储同一个处方或患者或就诊流水号,标准库里面没有跑出警示信息,实际对照的库里面有跑出警示信息

        for key, message in message_s.items():
            if message_r:
                if key in message_r:
                    if message_r[key] == message_s[key]:
                        samemessage[key] = message
                    elif message_r[key] != message_s[key]:
                        standardHave[key] = set(message_s[key]) - set(
                            message_r[key])
                        realityHave[key] = set(message_r[key]) - set(
                            message_s[key])
            else:
                self.log.info('message_r is null')
                break
        return samemessage, dict(standardHave), dict(realityHave)

#获取门诊的key_date

    def getoptKeyDate_s(self, dbname):
        self.sql = self.conrd.get('keydate', 'optalert')
        try:
            self.curs.execute(self.sql.format(dbname))
            self.date = self.curs.fetchall()
            self.starttime, self.endtime = self.date[4], self.date[11]
            return self.starttime[0], self.endtime[0]
        except Exception as error:
            self.log.error(error)

# 获取住院的key_date

    def getiptKeyDate_s(self, dbname):
        self.sql = self.conrd.get('keydate', 'iptalert')
        try:
            self.curs.execute(self.sql.format(dbname))
            self.date = self.curs.fetchall()
            self.starttime, self.endtime = self.date[4], self.date[11]
            return self.starttime[0], self.endtime[0]
        except Exception as error:
            self.log.error(error)

# 获取未跑出的警示信息的相关内容便于排查问题

    def messageContent_s(self, db_knowledge, db_dp, messageid, id, sql):
        self.sql = sql
        # print(self.sql.format(db_knowledge,db_dp,messageid,id))
        self.curs.execute(self.sql.format(db_knowledge, db_dp, messageid, id))
        sqlrlt = self.curs.fetchall()
        if sqlrlt:
            rlt = sqlrlt[0]
            return rlt

# 获取未跑出的警示信息的相关内容便于排查问题

    def messageContent_r(self, db_knowledge, db_dp, messageid, id, sql):
        self.sql = sql
        # print(self.sql.format(db_knowledge,db_dp,messageid,id))
        self.curr.execute(self.sql.format(db_knowledge, db_dp, messageid, id))
        sqlrlt = self.curr.fetchall()
        if sqlrlt:
            rlt = sqlrlt[0]
            return rlt

# 标准库里有跑出来,实际库里未跑出来的规则统计出来

    def messageContents_s(self, standardHave, db_knowledge, db_dp, sql, name):

        count = 1

        self.xlsx = xlsw('./result/{}_{}_s.xlsx'.format(curdate, name))
        for id, messageids in standardHave.items():
            if set(messageids) & set(self.havemids) == set(
                    messageids):  #如果messageid已经在其它处方或医嘱中验证过便跳出此次循环
                # print(messageids)
                continue
            for messageid in messageids:
                rlt = self.messageContent_s(db_knowledge, db_dp, messageid, id,
                                            sql)
                if rlt:
                    if messageid not in self.havemids:
                        self.xlsx.writeData(count, rlt)
                        # print(rlt)
                        self.havemids.append(messageid)
                        count += 1
                        # if count==30:break
            # if count==30:break
        self.xlsx.closeXlsx()

# 实际库里有跑出来,标准库里未跑出来的规则统计出来

    def messageContents_r(self, realityHave, db_knowledge, db_dp, sql, name):
        print("输出实际数据库跑出来的结果")
        count = 1
        havemids = []  #存储已经核对的messageid
        self.xlsx_r = xlsw('./result/{}_{}_r.xlsx'.format(curdate, name))
        for id, messageids in realityHave.items():
            if set(messageids) & set(havemids) == set(
                    messageids):  #如果messageid已经在其它处方或医嘱中验证过便跳出此次循环
                # print(messageids)
                continue
            for messageid in messageids:
                rlt = self.messageContent_r(db_knowledge, db_dp, messageid, id,
                                            sql)
                if rlt:
                    if messageid not in havemids:
                        self.xlsx_r.writeData(count, rlt)
                        havemids.append(messageid)
                        count += 1
                        # if count==30:break
            # if count==30:break
        self.xlsx_r.closeXlsx()

#获取知识建设库与点评库的messageid,公共的方法,代替以上备注的四个方法

    def messages_data(self, dbname, sqlname, field):
        self.sql = self.conrd.get(field, sqlname)
        self.curs.execute(self.sql.format(dbname))
        messages = self.curs.fetchall()
        return ([str(i[0]).strip() for i in messages])

#获取点评库中跑出警示信息的recipeid/eventno

    def getdpID(self, dbname, sqlname, messageid, field):
        self.sql = self.conrd.get(field, sqlname)
        # print(self.sql.format(dbname,messageid))
        self.curs.execute(self.sql.format(dbname, messageid))
        id = self.curs.fetchall()
        if id:
            return id[0][0]
        else:
            return None

#实际数据库是否有跑出警示信息

    def getdbr_messageid(self, dbnamer_dp, dbnamer_k, dpid, longid, sqlname,
                         field):
        self.sql = self.conrd.get(field, sqlname)
        # print(self.sql)
        # print(self.sql.format(dbnamer_dp,dpid,dbnamer_k,longid))
        self.curr.execute(self.sql.format(dbnamer_dp, dpid, dbnamer_k, longid))
        id = self.curr.fetchall()
        if id:
            return str(id[0][0])
        else:
            return None

    def checkmessages(self, **kwargs):
        #标准知识库中所有规则的messageid
        self.knowledge_messages = self.messages_data(kwargs['dbnames_k'],
                                                     kwargs['sqlnameAll'],
                                                     kwargs['field1'])
        #标准点评库中门诊处方跑出来的所有messageid
        self.opt_messages = self.messages_data(kwargs['dbnames_dp'],
                                               kwargs['sqlnameOpt'],
                                               kwargs['field1'])
        #标准点评库中住院跑出来的所有messageid
        self.ipt_messages = self.messages_data(kwargs['dbnames_dp'],
                                               kwargs['sqlnameIpt'],
                                               kwargs['field1'])
        # 标准点评库中门诊患者跑出来的所有messageid
        self.optp_messages = self.messages_data(kwargs['dbnames_dp'],
                                                kwargs['sqlnameOpt_p'],
                                                kwargs['field1'])
        print(self.knowledge_messages)
        passmessages = []
        failmessages = []
        count_i, count_optr, count_optp = 1, 1, 1
        # self.xlsx = xlsw('./result/{}2.xlsx'.format(curdate))
        self.xlsx_ipt = xlsw('./result/{}_ipt.xlsx'.format(curdate))
        self.xlsx_optr = xlsw('./result/{}_optr.xlsx'.format(curdate))
        self.xlsx_optp = xlsw('./result/{}_optp.xlsx'.format(curdate))

        for messageid in self.knowledge_messages:
            if messageid in self.ipt_messages:
                self.id = self.getdpID(kwargs['dbnames_dp'], kwargs['eventno'],
                                       messageid, kwargs['field2'])
                self.rlt = self.getdbr_messageid(kwargs['dbnamer_dp'],
                                                 kwargs['dbnamer_k'], self.id,
                                                 messageid, kwargs['iptrlt'],
                                                 kwargs['field3'])
                if self.rlt and self.rlt == messageid:
                    passmessages.append(messageid)
                else:
                    self.sql = self.conrd.get("enginecontent", 'iptalert')
                    # print(self.id,self.sql)
                    result = self.messageContent(kwargs['dbnames_k'],
                                                 kwargs['dbnames_dp'],
                                                 messageid, self.id, self.sql)
                    # print(result)
                    self.xlsx_ipt.writeData(count_i, result)
                    count_i += 1
                    # if count==30:break

            elif messageid in self.opt_messages:
                self.id = self.getdpID(kwargs['dbnames_dp'],
                                       kwargs['recipeid'], messageid,
                                       kwargs['field2'])
                self.rlt = self.getdbr_messageid(kwargs['dbnamer_dp'],
                                                 kwargs['dbnamer_k'], self.id,
                                                 messageid, kwargs['optrlt'],
                                                 kwargs['field3'])
                if self.rlt and self.rlt == messageid:
                    passmessages.append(messageid)
                else:
                    self.sql = self.conrd.get("enginecontent", 'optalert')
                    result = self.messageContent(kwargs['dbnames_k'],
                                                 kwargs['dbnames_dp'],
                                                 messageid, self.id, self.sql)
                    self.xlsx_optr.writeData(count_optr, result)
                    count_optr += 1
                    # if count==23:break
            elif messageid in self.optp_messages:
                self.id = self.getdpID(kwargs['dbnames_dp'],
                                       kwargs['patinetid'], messageid,
                                       kwargs['field2'])
                self.rlt = self.getdbr_messageid(kwargs['dbnamer_dp'],
                                                 kwargs['dbnamer_k'], self.id,
                                                 messageid, kwargs['optrlt_p'],
                                                 kwargs['field3'])
                if self.rlt and self.rlt == messageid:
                    passmessages.append(messageid)

                else:

                    self.sql = self.conrd.get("enginecontent", 'optalert_p')
                    result = self.messageContent(kwargs['dbnames_k'],
                                                 kwargs['dbnames_dp'],
                                                 messageid, self.id, self.sql)
                    self.xlsx_optp.writeData(count_optp, result)
                    count_optp += 1
                    # if count == 10: break
            else:
                self.rlt = None
                failmessages.append(messageid)

        print(len(passmessages), passmessages)
        print(len(failmessages))
        self.xlsx_ipt.closeXlsx()
        self.xlsx_optr.closeXlsx()
        self.xlsx_optp.closeXlsx()
Esempio n. 20
0
def get_car_model1(session, carinfo, flag=0):
    licenseType = carinfo['licenseType']
    colorCode = carinfo['colorCode']
    netWeight = carinfo['netWeight']
    enrollDate = carinfo['enrollDate']
    seatCount = carinfo['seatCount']
    modelName = carinfo['modelName']
    exhaustScale = carinfo['exhaustScale']
    licenseNo = carinfo['licenseNo']
    haulage = carinfo['haulage']
    engineNo = carinfo['engineNo']
    vinNo = carinfo['vinNo']
    vehicleStyle = carinfo['vehicleStyle']
    remark = carinfo['remark']
    body = {
        "licenseType": licenseType,
        "colorCode": colorCode,
        "netWeight": netWeight,
        "carKindCodeNew": "",
        "modelAlias": "",
        "chgOwnerFlag": "0",
        "carChecker": "",
        "abnormalCarFlag": "0",
        "lastYearDamage": "",
        "carLicenceDate": "",
        "enrollDate": enrollDate,
        "seatCountOld": seatCount,
        "carCheckerReason": "000",
        "useNatureCode": "85",
        "certificateType": "",
        "fuelType": "0",
        "licenseNo": licenseNo,
        "modelName": modelName,
        "exhaustScale": exhaustScale,
        "transferDate": "",
        "specialCarFlag": "",
        "useNatureCodeNew": "N85",
        "carKindCode": "KA",
        "useYears": "0",
        "industryModelCode": "",
        "exhaustScaleOld": exhaustScale,
        "haulage": haulage,
        "engineNo": engineNo,
        "tradeName": "",
        "certificateNo": "",
        "ecdemicVehicleFlag": "0",
        "runAreaName": "中华人民共和国境内(不含港澳台)",
        "powerScale": "",
        "fixedLine": "",
        "vinNo": vinNo,
        "noticeType": "",
        "carKindCatalogCode": "",
        "sortCode": "",
        "noDamageYears": "0",
        "certificateDate": "",
        "carRegiste": "0",
        "runAreaCode": "11",
        "seatCount": seatCount,
        "purchasePriceOld": "",
        "isPrintModelAlias": "0",
        "carName": "",
        "tonCount": "",
        "vehicleDamaged": "1",
        "bookingTime": "",
        "runMiles": "45000",
        "loanVehicleFlag": "0",
        "noLicenseFlag": "0",
        "expecLossRatio": "",
        "isNewCarFlag": "0",
        "purchasePrice": "",
        "licenseColorCode": "01",
        "actualValue": "",
        "depreciation": "0.60",
        "tonCountOld": "",
        "carCheckTime": "",
        "vehicleStyle": vehicleStyle,
        "modelCode": "",
        "carCheckStatus": "1"
    }
    log = Logger()
    url = "http://qcar.chinahuanong.com.cn/quotepriceasync/carModelInquiry.do"
    headers[
        'Content-Type'] = "application/x-www-form-urlencoded; charset=UTF-8"
    #print(json.dumps(body, ensure_ascii=False))
    body = "car=" + urllib.quote(json.dumps(body)) + "&ptCode="
    # print(json.dumps(body,ensure_ascii=False))
    rsp = session.post(url=url, data=body, headers=headers)

    if "carModel" in rsp.text:
        log.info(u"查询出车辆信息")
        carModelList = rsp.json()['carModel']
        # print(json.dumps(carModelList,ensure_ascii=False))
        carModelList = sorted(
            carModelList, key=lambda x: float(x["vehicleJingyou"]["price"]))
        # print(json.dumps(carModelList, ensure_ascii=False))
        # print(carModelList)
        # print(carModelList[0])

        carModelbody['licenseType'] = licenseType
        carModelbody['colorCode'] = colorCode
        carModelbody['netWeight'] = netWeight
        modelAlias = carModelList[0].get("vehicleJingyou",
                                         {}).get("vehicleAlias", "")
        if modelAlias == "":
            modelAlias = carModelList[0].get("vehicleJingyou",
                                             {}).get("vehicleClassName", "")
        carModelbody['modelAlias'] = modelAlias
        carModelbody['enrollDate'] = enrollDate
        carModelbody['seatCountOld'] = seatCount
        carModelbody['seatCountOld'] = seatCount
        carModelbody['modelName'] = modelName
        carModelbody['licenseNo'] = licenseNo
        carModelbody['exhaustScale'] = exhaustScale
        carModelbody['carKindCode'] = carModelList[0]['vehicleJingyou'][
            'carKindCode']
        carModelbody['industryModelCode'] = carModelList[0][
            'industryModelCode']
        carModelbody['exhaustScaleOld'] = exhaustScale
        carModelbody['modelCodePlat'] = carModelList[0]['modelCode']
        carModelbody['engineNo'] = engineNo
        carModelbody['tradeName'] = carModelList[0]['vehicleJingyou'][
            'factoryName']
        carModelbody['brand'] = carModelList[0]['vehicleJingyou']['brandName']
        carModelbody['modelNamePlat'] = modelName
        carModelbody['vinNo'] = vinNo
        # carModelbody['carKindCatalogCode']=carKindCatalogCode
        carModelbody['purchasePriceOld'] = carModelList[0]['vehicleJingyou'][
            'price']
        carModelbody['netWeightOld'] = carModelList[0]['vehicleJingyou'][
            'fullWeight']
        carModelbody['deptName'] = carModelList[0]['vehicleJingyou'][
            'familyName']
        carModelbody['purchasePrice'] = carModelList[0]['vehicleJingyou'][
            'price']
        carModelbody['modelCode'] = carModelList[0]['modelCode']
        carModelbody['vehicleStyle'] = vehicleStyle

        body2 = "car=" + urllib.quote(
            json.dumps(carModelbody)) + "&ptCode=&startDate=" + getCuttime(
            ).split(" ")[0] + "+0%3A0%3A0"
        # print(json.dumps(body2, ensure_ascii=False))
        rsp2 = session.post(url=url, data=body2, headers=headers)
        if "carModel" in rsp2.text:
            carModelList2 = rsp2.json()['carModel']
            carModelList2 = sorted(
                carModelList2,
                key=lambda x: float(x["vehicleJingyou"]["price"]))
            return carModelList2[0]
        else:
            return carModelList[0]

    else:
        if flag == 0:
            log.error(u"通过中华联合去查询车辆信息")
            car_model = get_car_model(vinNo)
            if car_model != None:
                modelName = car_model['gCIndustryModelName']
                carinfo['modelName'] = modelName
                return get_car_model1(session, carinfo, flag=1)
        else:
            log.error(u"未查询到车辆信息")
            return 0
Esempio n. 21
0
class Email:
    def __init__(self):
        global host, user, password, port, sender, title, content
        host = localReadConfig.get_email("mail_host")
        user = localReadConfig.get_email("mail_user")
        password = localReadConfig.get_email("mail_pass")
        port = localReadConfig.get_email("mail_port")
        sender = localReadConfig.get_email("sender")
        title = localReadConfig.get_email("subject")
        content = localReadConfig.get_email("content")
        self.value = localReadConfig.get_email("receiver")
        self.receiver = []
        # get receiver list
        for n in str(self.value).split("/"):
            self.receiver.append(n)
        # defined email subject
        date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        self.subject = title + " " + date
        self.logger = Logger("emaliUtil.py").logger
        self.msg = MIMEMultipart('mixed')

    def config_header(self):
        self.msg['subject'] = self.subject
        self.msg['from'] = sender
        self.msg['to'] = ";".join(self.receiver)

    def config_content(self):
        content_plain = MIMEText(content, 'plain', 'utf-8')
        self.msg.attach(content_plain)

    def config_htmlcontent(self):
        content_plain = MIMEText(content, 'html', 'utf-8')
        self.msg.attach(content_plain)

    def config_html(self):
        proDir = os.path.split(os.path.realpath(__file__))[0]
        b = proDir.split("\\")[:-1]
        currentPath = "\\".join(b)
        f = open(currentPath + "\\" + '/result.html', 'r', encoding='utf-8')
        payload = f.read()
        text_html = MIMEText(payload, 'html', 'utf-8')
        text_html["Content-Disposition"] = 'attachment; filename="result.html"'
        self.msg.attach(text_html)

    def config_file(self):
        # if the file content is not null, then config the email file
        if self.check_file():

            reportpath = self.log.get_result_path()
            zippath = os.path.join(readConfig.proDir, "result", "test.zip")
            # zip file
            files = glob.glob(reportpath + '\*')
            f = zipfile.ZipFile(zippath, 'w', zipfile.ZIP_DEFLATED)
            for file in files:
                f.write(file)
            f.close()

            reportfile = open(zippath, 'rb').read()
            filehtml = MIMEText(reportfile, 'base64', 'utf-8')
            filehtml['Content-Type'] = 'application/octet-stream'
            filehtml['Content-Disposition'] = 'attachment; filename="test.zip"'
            self.msg.attach(filehtml)

    def check_file(self):
        reportpath = self.log.get_report_path()
        if os.path.isfile(reportpath) and not os.stat(reportpath) == 0:
            return True
        else:
            return False

    def send_email(self):
        self.config_header()
        # self.config_content()
        self.config_html()
        self.config_htmlcontent()
        # self.config_file()
        try:
            smtp = smtplib.SMTP()
            smtp.connect(host)
            smtp.login(user, password)
            smtp.sendmail(sender, self.receiver, self.msg.as_string())
            smtp.quit()
            self.logger.info("The test report has send to developer by email.")
        except Exception as ex:
            self.logger.error(str(ex))
Esempio n. 22
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)
Esempio n. 23
0
class Request:
    def __init__(self, host):
        self.host = host
        self.Log = Logger()

    def request(self, url, data, type):
        url = self.host + url
        if type.upper() == "GET":
            try:
                self.Log.info("正在进GET:【%s】接口" % url)
                req = requests.get(url, params=data)
                result = req.json()
                status_code = req.status_code
            except Exception as e:
                self.Log.error(e)
            else:
                if status_code == 200:
                    self.Log.info("请求完成【status:%s】" % status_code)
                else:
                    self.Log.error("请求出错【status:%s】" % status_code)
                return result
        elif type.upper() == "POST":
            try:
                self.Log.info("正在进POST:【%s】接口" % url)
                req = requests.post(url, data=data)
                result = req.json()
                status_code = req(url, data)
            except Exception as e:
                self.Log.error(e)
            else:
                if status_code == 200:
                    self.Log.info("请求完成【status:%s】" % status_code)
                else:
                    self.Log.error("请求出错【status:%s】" % status_code)
                return result
        else:
            self.Log.error("请求类型错误")
        self.Log.close()

    def requests(self, url, data, type):
        url = self.host + url
        if type.upper() == "GET":
            try:
                self.Log.info("正在进GET:【%s】接口" % url)
                req = requests.get(url, params=data)
                result = req.text
                status_code = req.status_code
            except Exception as e:
                self.Log.error(e)
            else:
                if status_code == 200:
                    self.Log.info("请求完成【status:%s】" % status_code)
                else:
                    self.Log.error("请求出错【status:%s】" % status_code)
                return result
        elif type.upper() == "POST":
            try:
                self.Log.info("正在进POST:【%s】接口" % url)
                result = requests.post(url, data=data).json()
                status_code = requests.post(url, data)
            except Exception as e:
                self.Log.error(e)
            else:
                if status_code == 200:
                    self.Log.info("请求完成【status:%s】" % status_code)
                else:
                    self.Log.error("请求出错【status:%s】" % status_code)
                return result
        else:
            self.Log.error("请求类型错误")
        self.Log.close()
Esempio n. 24
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)