def __exec_step09_task(self, target_classify):
        try:
            daily_start_date = get_current_time()
            exec_temp_api_bill_sql_by_target(target_classify=target_classify,
                                             is_log=False)

            process_status = 'sucess'
            daily_end_date = get_current_time()
            step_number = '9'
            operate_desc = f'成功执行聚合临时表API表的目标分类为{target_classify}的SQL'
            orgin_source = 'kudu分析表/落地表'
            destin_source = '汇总API中间表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, target_classify,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)
        except Exception as e:
            log.error(f'* 第9步,执行SQL报错')
            print(e)
            process_status = 'false'
            daily_end_date = get_current_time()
            step_number = '9'
            operate_desc = ''
            orgin_source = 'kudu分析表/落地表'
            destin_source = '汇总API中间表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, target_classify,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)
    def __exec_step07_task(self, records, cost_project):
        daily_start_date = get_current_time()

        for record in records:
            unusual_shell = str(record[0])
            isalgorithm = str(record[1])
            unusual_id = str(record[2])

            try:
                # time.sleep(1)

                if isalgorithm == '1':
                    ### 执行 SQL ###
                    prod_execute_sql(conn_type=CONN_TYPE,
                                     sqltype='insert',
                                     sql=unusual_shell)
                    log.info(
                        f'* 第7步,成功执行 cost_project为 {cost_project}, unusual_id为 {unusual_id} 的SQL'
                    )
                elif isalgorithm == '2':
                    ### 执行算法 python 脚本  ###
                    exec(unusual_shell, globals())
                    log.info(
                        f'* 第7步,成功执行 cost_project为 {cost_project}, unusual_id为 {unusual_id} 的Python Shell'
                    )

                process_status = 'sucess'
                daily_end_date = get_current_time()
                step_number = '7'
                operate_desc = f'成功执行目标分类为 {cost_project} 的SQL'
                orgin_source = 'kudu分析表'
                destin_source = 'kudu落地表'
                importdate = get_yyyymmdd_date()
                insert_finance_data_process(process_status, cost_project,
                                            daily_start_date, daily_end_date,
                                            step_number, operate_desc,
                                            orgin_source, destin_source,
                                            importdate)
            except Exception as e:
                daily_source = 'SQL' if isalgorithm == '1' else 'Python Shell'
                log.error(
                    f'* 执行第7步,目标分类为 {cost_project} ,unusual_id为 {unusual_id} 的 {daily_source} 报错'
                )
                print(e)
                process_status = 'false'
                daily_end_date = get_current_time()
                step_number = '7'
                operate_desc = str(e)
                orgin_source = 'kudu分析表'
                destin_source = 'kudu落地表'
                importdate = get_yyyymmdd_date()
                insert_finance_data_process(process_status, cost_project,
                                            daily_start_date, daily_end_date,
                                            step_number, operate_desc,
                                            orgin_source, destin_source,
                                            importdate)
Example #3
0
def execute_py_shell(unusual_shell, unusual_id, mode='activate'):
    """
    执行检查点的 python shell 算法
    :param unusual_shell:
    :return:
    """

    try:
        # eval("print(1+2)")
        # exec('1/0')
        #log.info(unusual_shell)
        #exec("print('执行算法 shell 开始')")
        log.info('执行算法 shell 开始')

        daily_start_date = get_current_time()

        daily_id = insert_finance_shell_daily(
            daily_status='ok',
            daily_start_date=daily_start_date,
            daily_end_date='',
            unusual_point=unusual_id,
            daily_source='python shell',
            operate_desc=f'正在执行检查点{unusual_id}的Python Shell',
            unusual_infor='',
            task_status='doing',
            daily_type='稽查点')

        exec(unusual_shell, globals())

        #exec("print('执行算法 shell 结束')")
        log.info('执行算法 shell 结束')
        daily_end_date = get_current_time()
        operate_desc = f'成功执行检查点{unusual_id} 的Python Shell'
        update_finance_shell_daily(daily_id,
                                   daily_end_date,
                                   task_status='done',
                                   operate_desc=operate_desc)
    except BaseException as e:
        #log.info('***1111 execute_py_shell throw BaseException ---')
        # print(e)
        error_info = str(e)
        log.info(error_info)
        traceback.print_exc()

        daily_end_date = get_current_time()
        update_finance_shell_daily(daily_id,
                                   daily_end_date,
                                   task_status='error',
                                   operate_desc=error_info)

        raise RuntimeError(error_info)
    except SyntaxError as e2:
        log.info('***2222 execute_py_shell throw Exception ---')
        print(e2)
    def __exec_step08_task(self, records, target_classify):
        daily_start_date = get_current_time()

        try:
            for record in records:
                sql = str(record[0])
                order_number = str(record[1])

                prod_execute_sql(conn_type=CONN_TYPE,
                                 sqltype='insert',
                                 sql=sql)
                log.info(
                    f'* 第8步,成功执行序号为 {order_number} ,target_classify为 {target_classify} 的SQL'
                )

            process_status = 'sucess'
            daily_end_date = get_current_time()
            step_number = '8'
            operate_desc = f'成功执行绩效接口API表的目标分类为{target_classify}的SQL'
            orgin_source = 'kudu分析表/落地表'
            destin_source = '绩效API中间表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, target_classify,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)
        except Exception as e:
            log.error(
                f'* 执行第8步,序号为 {order_number} 的SQL报错,target_classify为 {target_classify} 的SQL'
            )
            # print(sql)
            print(e)
            process_status = 'false'
            daily_end_date = get_current_time()
            step_number = '8'
            operate_desc = str(e)
            orgin_source = 'kudu分析表/落地表'
            destin_source = '绩效API中间表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, target_classify,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)
def exec_temp_performance_bill(performance_ids, is_log=True):
    try:
        daily_start_date = get_current_time()

        if is_log:
            daily_id = insert_finance_shell_daily(
                daily_status='ok',
                daily_start_date=daily_start_date,
                daily_end_date='',
                unusual_point='',
                daily_source='sql',
                operate_desc=f'doing',
                unusual_infor='',
                task_status='doing',
                daily_type='绩效')

        records = query_temp_performance_bill(performance_ids)
        # print(len(records), records)

        for idx, record in enumerate(records):
            performance_sql = record[0]
            # print(performance_sql)
            prod_execute_sql(conn_type=CONN_TYPE,
                             sqltype='insert',
                             sql=performance_sql)

        if is_log:
            operate_desc = f'成功执行绩效表中的SQL'
            daily_end_date = get_current_time()
            update_finance_shell_daily(daily_id,
                                       daily_end_date,
                                       task_status='done',
                                       operate_desc=operate_desc)
    except Exception as e:
        print(e)
        if is_log:
            error_info = str(e)
            daily_end_date = get_current_time()
            update_finance_shell_daily(daily_id,
                                       daily_end_date,
                                       task_status='error',
                                       operate_desc=error_info)

        raise RuntimeError(e)
    def __exec_step06_task(self, records, target_classify):
        try:
            daily_start_date = get_current_time()
            for idx, record in enumerate(records):
                sql = str(record[0])
                receipt_id = str(record[1])

                prod_execute_sql(conn_type=CONN_TYPE,
                                 sqltype='insert',
                                 sql=sql)
                log.info(
                    f'* 第6步,成功执行 target_classify为 {target_classify},receipt_id为 {receipt_id} 的SQL'
                )

            process_status = 'sucess'
            daily_end_date = get_current_time()
            step_number = '6'
            operate_desc = f'成功执行目标分类为{target_classify}的SQL'
            orgin_source = '发票信息hive表'
            destin_source = 'kudu分析表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, target_classify,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)
        except Exception as e:
            log.error(f'* 执行第6步,目标分类为{target_classify} ,序号为{receipt_id}的SQL报错')
            log.info(sql)
            print(e)

            process_status = 'false'
            daily_end_date = get_current_time()
            step_number = '6'
            operate_desc = str(e)
            orgin_source = '发票信息hive表'
            destin_source = 'kudu分析表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, target_classify,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)
Example #7
0
    def hello():
        result = {'report_service_status': HTTPStatus.OK}
        result['version'] = '1.0'
        result['time'] = get_current_time()
        status = HTTPStatus.INTERNAL_SERVER_ERROR if HTTPStatus.INTERNAL_SERVER_ERROR in result.values(
        ) else HTTPStatus.OK

        #log.info("*********** hello ***************")
        #print('time => ', get_current_time())

        return jsonify(result), status
Example #8
0
    def check_execute_step05(self):
        """
        判断流程表中已经执行了第5步
        :return:
        """

        try:
            columns_ls = [
                'process_id', 'process_status', 'daily_start_date',
                'daily_end_date', 'step_number', 'operate_desc',
                'orgin_source', 'destin_source', 'importdate'
            ]
            columns_str = ",".join(columns_ls)

            t = get_current_time()
            data = t.split(' ')
            year_month_day = str(data[0]).replace('-', '')

            # year_month_day = '20220118'

            sel_sql = f"""
            select {columns_str} FROM 01_datamart_layer_007_h_cw_df.finance_data_process WHERE ( from_unixtime(unix_timestamp(to_date(importdate),'yyyy-MM-dd'),'yyyyMMdd') = '{year_month_day}' OR importdate = '{year_month_day}' ) AND 
            process_status = 'sucess'  ORDER BY step_number ASC
            """
            log.info(sel_sql)
            records = prod_execute_sql(conn_type=CONN_TYPE,
                                       sqltype='select',
                                       sql=sel_sql)

            is_execute_step05 = False
            is_excute_step6789 = False
            if len(records) > 0:
                for record in records:
                    # print(record)

                    step_number = str(record[4])
                    if step_number == '5':
                        is_execute_step05 = True

                    if step_number in ['6', '7', '8', '9']:
                        is_excute_step6789 = True

            else:
                log.info('*** 没有查询数据 ***')

            # 执行了前5步,但是没有执行过 6,7,8,9步,就开始执行任务
            if is_execute_step05 and not is_excute_step6789:
                self.task()
            else:
                log.info('*** 不执行第6,7,8,9 步的任务 ***')

        except Exception as e:
            print(e)
Example #9
0
def execute_kudu_sql(unusual_shell, unusual_id):
    try:
        daily_start_date = get_current_time()
        #print('*** begin execute_kudu_sql ')
        #log.info(unusual_shell)

        daily_id = insert_finance_shell_daily(
            daily_status='ok',
            daily_start_date=daily_start_date,
            daily_end_date='',
            unusual_point=unusual_id,
            daily_source='sql',
            operate_desc=f'正在执行检查点{unusual_id}的SQL',
            unusual_infor='',
            task_status='doing',
            daily_type='稽查点')

        prod_execute_sql(conn_type=CONN_TYPE,
                         sqltype='insert',
                         sql=unusual_shell)
        daily_end_date = get_current_time()
        operate_desc = f'成功执行检查点{unusual_id}的SQL'
        #print('*** end execute_kudu_sql ***')

        daily_end_date = get_current_time()
        update_finance_shell_daily(daily_id,
                                   daily_end_date,
                                   task_status='done',
                                   operate_desc=operate_desc)
    except Exception as e:
        print(e)

        error_info = str(e)
        daily_end_date = get_current_time()
        update_finance_shell_daily(daily_id,
                                   daily_end_date,
                                   task_status='error',
                                   operate_desc=error_info)
        raise RuntimeError(error_info)
Example #10
0
    def show_time(self, text='task'):
        # t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        t = get_current_time()
        data = t.split(' ')
        hour_minute = data[1].split(':')
        hour = hour_minute[0]
        minute = hour_minute[1]

        # print('hour_minute=> ', hour_minute)
        # print('hour=> ', hour)
        # print('minute=> ', minute)

        log.info('*' * 30)
        log.info('*** {} ---> {}'.format(text, t))
        log.info('*' * 30)
        print()
Example #11
0
def exec_temp_api_bill_sql_by_target(target_classify, is_log=True):
    """
    执行临时表API表,
    :param target_classify : 目标分类,主要包括:差旅费、会议费、办公费、车辆使用费
    :return:
    """

    try:
        log.info(
            f'*** exec_temp_api_bill_sql_by_target, 执行 {target_classify} 的绩效SQL ***'
        )
        sql = f"""
            select tem_api_id,target_classify,api_sql  from  01_datamart_layer_007_h_cw_df.temp_api_bill
            where target_classify="{target_classify}" order by order_number asc
            """
        temp_api_sql_records = prod_execute_sql(conn_type=CONN_TYPE,
                                                sqltype='select',
                                                sql=sql)
        #log.info(f'需要执行 {len(temp_api_sql_records)} 条SQL')
        if is_log:
            daily_start_date = get_current_time()
            daily_id = insert_finance_shell_daily(
                daily_status='ok',
                daily_start_date=daily_start_date,
                daily_end_date='',
                unusual_point='',
                daily_source='sql',
                operate_desc=f'正在执行临时表API中类型为{target_classify}的SQL',
                unusual_infor='',
                task_status='doing',
                daily_type='数据处理')

        for idx, record in enumerate(temp_api_sql_records):
            tem_api_id = str(record[0])
            api_sql = str(record[2])
            # log.info(api_sql)
            prod_execute_sql(conn_type=CONN_TYPE,
                             sqltype='insert',
                             sql=api_sql)
            log.info(
                f'target_classify={target_classify},执行成功tem_api_id为 {tem_api_id} 的临时表的SQL,共有{len(temp_api_sql_records)}条SQL'
            )

        if is_log:
            operate_desc = f'成功执行临时表API中类型为{target_classify}的SQL'
            daily_end_date = get_current_time()
            update_finance_shell_daily(daily_id,
                                       daily_end_date,
                                       task_status='done',
                                       operate_desc=operate_desc)
    except Exception as e:
        log.error(
            f'执行失败,target_classify={target_classify},tem_api_id为 {tem_api_id} 的临时表的SQL '
        )
        #print(e)
        if is_log:
            error_info = str(e)
            daily_end_date = get_current_time()
            update_finance_shell_daily(daily_id,
                                       daily_end_date,
                                       task_status='error',
                                       operate_desc=error_info)
        raise RuntimeError(e)
Example #12
0
    def exec_step07(self):
        """
        执行第7步
        7、稽查点sql将数据写到kudu落地表(脚本)
        :return:
        """

        travel_fee = '差旅费'
        meeting_fee = '会议费'
        office_fee = '办公费'
        car_fee = '车辆使用费'

        daily_start_date = get_current_time()

        try:
            travel_records = query_finance_unusual(cost_project=travel_fee)
        except Exception as e:
            log.error(f'* 执行第7步,查询目标分类为 {travel_fee} 的SQL报错')
            print(e)
            process_status = 'false'
            daily_end_date = get_current_time()
            step_number = '7'
            operate_desc = str(e)
            orgin_source = 'kudu分析表'
            destin_source = 'kudu落地表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, travel_fee,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)

        try:
            meeting_records = query_finance_unusual(cost_project=meeting_fee)
        except Exception as e:
            log.error(f'* 执行第7步,查询目标分类为 {travel_fee} 的SQL报错')
            print(e)
            process_status = 'false'
            daily_end_date = get_current_time()
            step_number = '7'
            operate_desc = str(e)
            orgin_source = 'kudu分析表'
            destin_source = 'kudu落地表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, travel_fee,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)

        try:
            office_records = query_finance_unusual(cost_project=office_fee)
        except Exception as e:
            log.error(f'* 执行第7步,查询目标分类为 {travel_fee} 的SQL报错')
            print(e)
            process_status = 'false'
            daily_end_date = get_current_time()
            step_number = '7'
            operate_desc = str(e)
            orgin_source = 'kudu分析表'
            destin_source = 'kudu落地表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, travel_fee,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)

        try:
            car_records = query_finance_unusual(cost_project=car_fee)
        except Exception as e:
            log.error(f'* 执行第7步,查询目标分类为 {travel_fee} 的SQL报错')
            print(e)
            process_status = 'false'
            daily_end_date = get_current_time()
            step_number = '7'
            operate_desc = str(e)
            orgin_source = 'kudu分析表'
            destin_source = 'kudu落地表'
            importdate = get_yyyymmdd_date()
            insert_finance_data_process(process_status, travel_fee,
                                        daily_start_date, daily_end_date,
                                        step_number, operate_desc,
                                        orgin_source, destin_source,
                                        importdate)

        threadPool = ThreadPoolExecutor(max_workers=4,
                                        thread_name_prefix="thr")
        all_task = []
        task1 = threadPool.submit(self.__exec_step07_task, travel_records,
                                  travel_fee)
        task2 = threadPool.submit(self.__exec_step07_task, meeting_records,
                                  meeting_fee)
        task3 = threadPool.submit(self.__exec_step07_task, office_records,
                                  office_fee)
        task4 = threadPool.submit(self.__exec_step07_task, car_records,
                                  car_fee)
        all_task.append(task1)
        all_task.append(task2)
        all_task.append(task3)
        all_task.append(task4)

        wait(all_task, return_when=ALL_COMPLETED)
        threadPool.shutdown(wait=True)