def data_processing(data_for_processing, last_data_for_processing, org_id,
                    **kwargs):
    rm_repeat_sfd_data_list = []  # 用于临时存放已删除重复的字典数据
    last_rm_repeat_sfd_data_list = []  # 用于临时存放已删除重复的字典数据 上一天的 上一次的

    flmeter_no_set = set(
    )  # set是一个无序且不重复的元素集合-注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典
    for x in data_for_processing:
        flmeter_no_set.add(x['FLMETER_NO'])
    print('不同的表计号共有个数:', len(flmeter_no_set))  # 19

    print('根据表计号,进行数据的再次筛选,处理,写入数据库')
    print(
        '----------------------------------------------------------------------------------------'
    )

    # 根据表计号,进行数据的再次筛选,处理,写入数据库
    flmeter_no_set_copy = flmeter_no_set.copy()
    for fno in flmeter_no_set:
        print(fno)
        # 以下为处理逻辑
        # 首先根据表计号,在原字典数据【data_for_processing】中筛选出所有此表计的数据
        for xx in data_for_processing:
            if xx['FLMETER_NO'] == fno:
                rm_repeat_sfd_data_list.append(xx)
            # print(rm_repeat_sfd_data_list)

        # 在查询当天的上一天数据中 for循环
        for xx in last_data_for_processing:
            if xx['FLMETER_NO'] == fno:
                last_rm_repeat_sfd_data_list.append(xx)
            # print(rm_repeat_sfd_data_list)

        print("此查询区间,当前编号下总共抄表记录:", len(rm_repeat_sfd_data_list))
        print("此查询区间,上一天当前编号下总共抄表记录:", len(last_rm_repeat_sfd_data_list))

        # 此表计数据字典列表 排序 按照采集时间INSTANT_TIME排序 默认升序 如果要降序排序,可以指定reverse=True
        sorted_rm_repeat_sfd_data_list = sorted(
            rm_repeat_sfd_data_list,
            key=operator.itemgetter('INSTANT_TIME'),
            reverse=False)

        # 上一天总抄表记录 排序 按照采集时间INSTANT_TIME排序 默认升序 如果要降序排序,可以指定reverse=True
        last_sorted_rm_repeat_sfd_data_list = []
        if len(last_rm_repeat_sfd_data_list) > 0:
            last_sorted_rm_repeat_sfd_data_list = sorted(
                last_rm_repeat_sfd_data_list,
                key=operator.itemgetter('INSTANT_TIME'),
                reverse=False)

        # 排序完成之后,具体字段补充

        # 新建一个日报表类,用于接收收据
        rdm = ReportDailyModel()

        # 机构号
        rdm.srd_org_id = sorted_rm_repeat_sfd_data_list[0]['SFD_ORG_ID']

        # 记录id srd_id 移到line385

        # RTU编号
        rdm.rtu_no = sorted_rm_repeat_sfd_data_list[0]['RTU_NO']
        # 流量计编号
        rdm.flmeter_no = sorted_rm_repeat_sfd_data_list[0]['FLMETER_NO']
        # 客户编号
        rdm.customer_no = sorted_rm_repeat_sfd_data_list[0]['CUSTOMER_NO']

        # 得到当前时间datetime
        now_datetime = datetime.datetime.today()
        # print(now_datetime.year, now_datetime.month, now_datetime.day, now_datetime.hour, now_datetime.minute,now_datetime.second)  # 2019 3 8 12 52 10

        # 报表时间 年 月 日 时
        rdm.report_time = now_datetime

        # 将查询时间的年月日 分别赋值到对应字段
        # 处理年
        rdm.year = str(kwargs['query_datetime'].year)
        # 处理月
        # print(len(str(rdm.month)))
        # 如果月份小于10 补零 让9变为09月
        if len(str(kwargs['query_datetime'].month)) < 2:
            rdm.month = "0" + str(kwargs['query_datetime'].month)
        else:
            rdm.month = str(kwargs['query_datetime'].month)
        # 处理日
        # print(len(str(rdm.day)))
        # 如果日小于10 补零 让9变为09日
        if len(str(kwargs['query_datetime'].day)) < 2:
            rdm.day = "0" + str(kwargs['query_datetime'].day)
        else:
            rdm.day = str(kwargs['query_datetime'].day)

        # 处理小时 不处理了 togo
        # print(len(str(rdm.hour)))
        # 如果小时小于10 补零 让9变为09小时
        # if len(str(now_datetime.hour)) < 2:
        #     rdm.hour = "0" + str(now_datetime.hour)
        # else:
        #     rdm.hour = str(now_datetime.hour)

        # 记录ID-取自动递增流水号
        ssn_org_id = org_id  # 传入过来的org_id
        ssn_key_name = "SCADA_REPORT_DAILY"  # 如需修改为其他表的递增流水,请自行修改
        ok_srd_id = get_sys_serial_no(db, ssn_org_id, ssn_key_name, rdm.year,
                                      rdm.month)  # 导入获取流水号方法
        print(ok_srd_id)
        rdm.srd_id = ssn_org_id + rdm.year + rdm.month + ok_srd_id

        # 标况总量(期末数)
        rdm.std_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) -
            1]['STD_SUM']  # 默认升序,列表最后一个元素,值最大
        # 工况总量(期末数)
        rdm.work_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) -
            1]['WORK_SUM']  # 默认升序,列表最后一个元素,值最大
        # 标况流量(周期内平均值)
        rdm.std_flow = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "STD_FLOW")  # 使用周期内平均值计算方法 计算平均值
        # 工况流量(周期内平均值)
        rdm.work_flow = get_average_period(sorted_rm_repeat_sfd_data_list,
                                           "WORK_FLOW")
        # 温度(周期内平均值)
        rdm.temperature = get_average_period(sorted_rm_repeat_sfd_data_list,
                                             "TEMPERATURE")

        # 压力(周期内平均值)
        rdm.pressure = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "PRESSURE")
        # 单价(期末数)
        rdm.price = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['PRICE']
        # 周期内工况使用量(周期内期末数-期初数)
        max_work_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['WORK_SUM']
        min_work_sum = sorted_rm_repeat_sfd_data_list[0]['WORK_SUM']
        if max_work_sum is None:
            max_work_sum = str(0)
        if min_work_sum is None:
            min_work_sum = str(0)
        if len(last_rm_repeat_sfd_data_list) > 0:  # (本期期末数-上期期末数)
            last_max_work_sum = last_sorted_rm_repeat_sfd_data_list[
                len(last_rm_repeat_sfd_data_list) - 1]['WORK_SUM']
            if last_max_work_sum is None:
                last_max_work_sum = str(0)
            rdm.use_volume_work = str(
                round(float(max_work_sum) - float(last_max_work_sum), 2))
        else:  # (本周期内期末数-本周期内期初数)
            rdm.use_volume_work = str(
                round(float(max_work_sum) - float(min_work_sum), 2))
        if float(rdm.use_volume_work) < 0:  # 如果use_volume_work计算出来小于0,则直接置为0
            rdm.use_volume_work = str(0)
            print(rdm.flmeter_no, "☆ use_volume_work <0 置为0")

        # 周期内标况使用量(周期内期末数 - 期初数)
        max_std_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) -
            1]['SUM_TOTAL']  # 默认升序,列表最后一个元素,值最大
        min_std_sum = sorted_rm_repeat_sfd_data_list[0][
            'SUM_TOTAL']  # 默认升序,列表第一个元素,值最小
        if max_std_sum is None:
            max_std_sum = str(0)
        if min_std_sum is None:
            min_std_sum = str(0)
        if len(last_rm_repeat_sfd_data_list) > 0:  # (本期期末数-上期期末数)
            if last_sorted_rm_repeat_sfd_data_list[
                    len(last_rm_repeat_sfd_data_list) -
                    1]['SUM_TOTAL'] is None:
                last_sorted_rm_repeat_sfd_data_list[
                    len(last_rm_repeat_sfd_data_list) -
                    1]['SUM_TOTAL'] = str(0)
            rdm.use_volume_std = str(
                round(
                    float(max_std_sum) -
                    float(last_sorted_rm_repeat_sfd_data_list[
                        len(last_rm_repeat_sfd_data_list) - 1]['SUM_TOTAL']),
                    2))
        else:  # 周期内标况使用量(周期内期末数-期初数)
            rdm.use_volume_std = str(
                round(float(max_std_sum) - float(min_std_sum), 2))
        if float(rdm.use_volume_std) < 0:  # 如果use_volume_std计算出来小于0,则直接置为0
            rdm.use_volume_std = str(0)
            print(rdm.flmeter_no, "☆ use_volume_std <0 置为0")

        # 周期内使用额(单价(期末数)* 周期内标况使用量)结果四舍五入
        # print(rdm.use_volume_std,rdm.price)
        if rdm.price is None:
            rdm.price = str(0)
        rdm.use_money = str(
            round((float(rdm.use_volume_std) * float(rdm.price)), 2))

        # 总累积使用量(期末数)
        rdm.sum_total_volume = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['SUM_TOTAL']
        if rdm.sum_total_volume is None:
            rdm.sum_total_volume = str(0)
            print(rdm.flmeter_no, "☆ sum_total_volume is None 置为0")
        # 累购气量(期末数)
        rdm.total_buy_volume = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['TOTAL_BUY_VOLUME']
        # 累购金额(期末数)
        rdm.total_buy_money = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['TOTAL_BUY_MONEY']
        # 剩余金额(期末数)
        rdm.remain_money = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['REMAIN_MONEY']
        # 总累计使用金额(期末累购金额-期末剩余金额)
        if rdm.total_buy_money is None:  # total_buy_money为None的话 置为0查询计算
            rdm.total_buy_money = str(0)
        if rdm.remain_money is None:  # remain_money为None的话 置为0查询计算
            rdm.remain_money = str(0)
        rdm.sum_total_money = float(rdm.total_buy_money) - float(
            rdm.remain_money)
        if rdm.sum_total_money < 0:  # 如果sum_total_money计算出来小于0,则直接置为0
            rdm.sum_total_money = str(0)
            print(rdm.flmeter_no, "☆ sum_total_money <0 置为0")

        # 剩余数量(期末数)
        rdm.remain_volume = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['REMAIN_VOLUME']
        # 流量计(表)状态(期末数)
        rdm.fm_state = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['FM_STATE']
        # 表状态解析(按位解析)(期末数)
        rdm.fm_state_msg = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['FM_STATE_MSG']
        # RTU状态(期末数)
        rdm.rtu_state = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['RTU_STATE']
        # RTU状态解析(按字节解析)(期末数)
        rdm.rtu_state_msg = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['RTU_STATE_MSG']
        # 阀门控制器状态(期末数)
        rdm.valve_state = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['VALVE_STATE']
        # 阀门控制器状态解析(期末数)
        rdm.valve_state_msg = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['VALVE_STATE_MSG']
        # 供电电压(周期内平均值)
        rdm.power_voltage = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['POWER_VOLTAGE']

        # 电池电压(期末数)
        rdm.battery_voltage = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['BATTERY_VOLTAGE']
        # 电池电量(期末数)
        rdm.battery_level = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['BATTERY_LEVEL']
        # 入口压力(周期内平均值)
        rdm.press_in = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "PRESSURE")
        # 出口压力(周期内平均值)
        rdm.press_out = get_average_period(sorted_rm_repeat_sfd_data_list,
                                           "PRESSURE")
        # 入口温度(周期内平均值)
        rdm.temp_in = get_average_period(sorted_rm_repeat_sfd_data_list,
                                         "TEMPERATURE")

        # 出口温度(周期内平均值)
        rdm.temp_out = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "TEMPERATURE")
        # 信号强度(平均值)
        rdm.rssi = get_average_period(sorted_rm_repeat_sfd_data_list, "RSSI")
        # 删除标识符 1正常,9不正常已删除 默认置为1
        rdm.srd_status = "1"

        # print(sorted_rm_repeat_sfd_data_list)
        # print(len(sorted_rm_repeat_sfd_data_list), sorted_rm_repeat_sfd_data_list[0]['FLMETER_NO'], max_std_sum,min_std_sum, ok_std_sum)
        # print('----------------------------------------------------------------------------------------')

        # 写入数据库
        is_success = ok_processing_data_insert_into_oracle(
            rdm)  # 将完善好数据的日报表对象rdm传入
        print(
            '----------------------------------------------------------------------------------------'
        )

        # 处理数据完毕 清除临时使用数据
        flmeter_no_set_copy.remove(fno)
        rm_repeat_sfd_data_list.clear()
        last_rm_repeat_sfd_data_list.clear()
    pass
    return True
def data_processing(data_for_processing):
    rm_repeat_sfd_data_list = []  # 用于临时存放已删除重复的字典数据

    flmeter_no_set = set(
    )  # set是一个无序且不重复的元素集合-注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典
    for x in data_for_processing:
        flmeter_no_set.add(x['FLMETER_NO'])
    print('不同的表计号共有个数:', len(flmeter_no_set))  # 19

    print('根据表计号,进行数据的再次筛选,处理,写入数据库')
    print(
        '----------------------------------------------------------------------------------------'
    )

    # 根据表计号,进行数据的再次筛选,处理,写入数据库
    flmeter_no_set_copy = flmeter_no_set.copy()
    for fno in flmeter_no_set:
        print(fno)
        # 以下为处理逻辑
        # 首先根据表计号,在原字典数据【data_for_processing】中筛选出所有此表计的数据
        for xx in data_for_processing:
            if xx['FLMETER_NO'] == fno:
                rm_repeat_sfd_data_list.append(xx)
            # print(rm_repeat_sfd_data_list)
        # print(len(rm_repeat_sfd_data_list))

        # 此表计数据字典列表 排序 按照采集时间INSTANT_TIME排序 默认升序 如果要降序排序,可以指定reverse=True
        sorted_rm_repeat_sfd_data_list = sorted(
            rm_repeat_sfd_data_list,
            key=operator.itemgetter('INSTANT_TIME'),
            reverse=False)

        # 排序完成之后,具体字段补充

        # 新建一个日报表类,用于接收收据
        rdm = ReportDailyModel()

        # 机构号
        rdm.srd_org_id = sorted_rm_repeat_sfd_data_list[0]['SFD_ORG_ID']
        # 记录ID-取自动递增流水号
        # rdm.srd_id = get_sys_serial_no_func()
        # RTU编号
        rdm.rtu_no = sorted_rm_repeat_sfd_data_list[0]['RTU_NO']
        # 流量计编号
        rdm.flmeter_no = sorted_rm_repeat_sfd_data_list[0]['FLMETER_NO']
        # 客户编号
        rdm.customer_no = sorted_rm_repeat_sfd_data_list[0]['CUSTOMER_NO']

        # 得到当前时间datetime
        now_datetime = datetime.datetime.today()
        # print(now_datetime.year, now_datetime.month, now_datetime.day, now_datetime.hour, now_datetime.minute,now_datetime.second)  # 2019 3 8 12 52 10

        # 报表时间 年 月 日 时
        rdm.report_time = now_datetime
        rdm.year = now_datetime.year
        rdm.month = now_datetime.month
        rdm.day = now_datetime.day
        rdm.hour = now_datetime.hour

        # 标况总量(期末数)
        rdm.std_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) -
            1]['STD_SUM']  # 默认升序,列表最后一个元素,值最大
        # 工况总量(期末数)
        rdm.work_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) -
            1]['WORK_SUM']  # 默认升序,列表最后一个元素,值最大
        # 标况流量(周期内平均值)
        rdm.std_flow = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "STD_FLOW")  # 使用周期内平均值计算方法 计算平均值
        # 工况流量(周期内平均值)
        rdm.work_flow = get_average_period(sorted_rm_repeat_sfd_data_list,
                                           "WORK_FLOW")
        # 温度(周期内平均值)
        rdm.temperature = get_average_period(sorted_rm_repeat_sfd_data_list,
                                             "TEMPERATURE")

        # 压力(周期内平均值)
        rdm.pressure = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "PRESSURE")
        # 单价(期末数)
        rdm.price = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['PRICE']
        # 周期内工况使用量(周期内期末数-期初数)
        max_work_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['WORK_SUM']
        min_work_sum = sorted_rm_repeat_sfd_data_list[0]['WORK_SUM']
        rdm.use_volume_work = int(max_work_sum) - int(min_work_sum)
        # 周期内标况使用量(周期内期末数 - 期初数)
        max_std_sum = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) -
            1]['STD_SUM']  # 默认升序,列表最后一个元素,值最大
        min_std_sum = sorted_rm_repeat_sfd_data_list[0][
            'STD_SUM']  # 默认升序,列表第一个元素,值最小
        rdm.use_volume_std = int(max_std_sum) - int(
            min_std_sum)  # 周期内标况使用量(周期内期末数-期初数)
        # 周期内使用额(单价(期末数)* 周期内标况使用量)结果四舍五入
        rdm.use_money = round((float(rdm.use_volume_std) * float(rdm.price)),
                              2)

        # 总累积使用量(期末数)
        rdm.sum_total_volume = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['SUM_TOTAL']
        # 累购气量(期末数)
        rdm.total_buy_volume = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['TOTAL_BUY_VOLUME']
        # 累购金额(期末数)
        rdm.total_buy_money = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['TOTAL_BUY_MONEY']
        # 剩余金额(期末数)
        rdm.remain_money = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['REMAIN_MONEY']
        # 总累计使用金额(期末累购金额-期末剩余金额)
        if rdm.total_buy_money is None:  # total_buy_money为None的话 置为0查询计算
            rdm.total_buy_money = 0
        rdm.sum_total_money = float(rdm.total_buy_money) - float(
            rdm.remain_money)
        if rdm.sum_total_money < 0:  # 如果sum_total_money计算出来小于0,则直接置为0
            rdm.sum_total_money = 0

        # 剩余数量(期末数)
        rdm.remain_volume = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['REMAIN_VOLUME']
        # 流量计状态(期末数)
        rdm.fm_state = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['FM_STATE']
        # RTU状态(期末数)
        rdm.rtu_state = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['RTU_STATE']
        # 阀门控制器状态(期末数)
        rdm.valve_state = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['VALVE_STATE']
        # 供电电压(周期内平均值)
        rdm.power_voltage = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['POWER_VOLTAGE']

        # 电池电压(期末数)
        rdm.battery_voltage = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['BATTERY_VOLTAGE']
        # 电池电量(期末数)
        rdm.battery_level = sorted_rm_repeat_sfd_data_list[
            len(sorted_rm_repeat_sfd_data_list) - 1]['BATTERY_LEVEL']
        # 入口压力(周期内平均值)
        rdm.press_in = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "PRESSURE")
        # 出口压力(周期内平均值)
        rdm.press_out = get_average_period(sorted_rm_repeat_sfd_data_list,
                                           "PRESSURE")
        # 入口温度(周期内平均值)
        rdm.temp_in = get_average_period(sorted_rm_repeat_sfd_data_list,
                                         "TEMPERATURE")

        # 出口温度(周期内平均值)
        rdm.temp_out = get_average_period(sorted_rm_repeat_sfd_data_list,
                                          "TEMPERATURE")
        # 信号强度(平均值)
        rdm.rssi = get_average_period(sorted_rm_repeat_sfd_data_list, "RSSI")
        # 删除标识符 1正常,9不正常已删除 默认置为1
        rdm.srd_status = "1"

        # print(sorted_rm_repeat_sfd_data_list)
        # print(len(sorted_rm_repeat_sfd_data_list), sorted_rm_repeat_sfd_data_list[0]['FLMETER_NO'], max_std_sum,min_std_sum, ok_std_sum)
        # print('----------------------------------------------------------------------------------------')

        # 写入数据库
        is_success = ok_processing_data_insert_into_oracle(
            rdm)  # 将完善好数据的日报表对象rdm传入
        print(
            '----------------------------------------------------------------------------------------'
        )

        # 处理数据完毕 清除临时使用数据
        flmeter_no_set_copy.remove(fno)
        rm_repeat_sfd_data_list.clear()
    pass
    return True