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)
        # print(len(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)

        # 将std_flow,work_flow,temperature,pressure 全部转为float,再继续操作,为后面数字排序做准备
        for xyz in rm_repeat_sfd_data_list:
            if xyz["STD_FLOW"] is None:
                xyz["STD_FLOW"] = float(0)
            else:
                xyz["STD_FLOW"] = float(xyz["STD_FLOW"])

            if xyz["WORK_FLOW"] is None:
                xyz["WORK_FLOW"] = float(0)
            else:
                xyz["WORK_FLOW"] = float(xyz["WORK_FLOW"])

            if xyz["TEMPERATURE"] is None:
                xyz["TEMPERATURE"] = float(0)
            else:
                xyz["TEMPERATURE"] = float(xyz["TEMPERATURE"])

            if  xyz["PRESSURE"] is None:
                xyz["PRESSURE"] = float(0)
            else:
                xyz["PRESSURE"] = float(xyz["PRESSURE"])

        # 查询当月的上一月数据中 将std_flow,work_flow,temperature,pressure 全部转为float,再继续操作,为后面数字排序做准备
        if len(last_rm_repeat_sfd_data_list) > 0:  # 如果大于0 进行以下操作
            for xyz in last_rm_repeat_sfd_data_list:
                if xyz["STD_FLOW"] is None:
                    xyz["STD_FLOW"] = float(0)
                else:
                    xyz["STD_FLOW"] = float(xyz["STD_FLOW"])

                if xyz["WORK_FLOW"] is None:
                    xyz["WORK_FLOW"] = float(0)
                else:
                    xyz["WORK_FLOW"] = float(xyz["WORK_FLOW"])

                if xyz["TEMPERATURE"] is None:
                    xyz["TEMPERATURE"] = float(0)
                else:
                    xyz["TEMPERATURE"] = float(xyz["TEMPERATURE"])

                if xyz["PRESSURE"] is None:
                    xyz["PRESSURE"] = float(0)
                else:
                    xyz["PRESSURE"] = float(xyz["PRESSURE"])
                # xyz["STD_FLOW"] = float(xyz["STD_FLOW"])
                # xyz["WORK_FLOW"] = float(xyz["WORK_FLOW"])
                # xyz["TEMPERATURE"] = float(xyz["TEMPERATURE"])
                # xyz["PRESSURE"] = float(xyz["PRESSURE"])

        # 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:  # 如果大于0 进行以下操作
            last_sorted_rm_repeat_sfd_data_list = sorted(last_rm_repeat_sfd_data_list, key=operator.itemgetter('INSTANT_TIME'), reverse=False)

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

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

        # 机构号
        rdm.srm_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)

        # 处理日 不处理了 togo
        # 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_MONTHLY"  # 如需修改为其他表的递增流水,请自行修改
        ok_srm_id = get_sys_serial_no(db, ssn_org_id, ssn_key_name, rdm.year, rdm.month)  # 导入获取流水号方法
        print(ok_srm_id)
        rdm.srm_id = ssn_org_id + rdm.year + rdm.month + ok_srm_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']  # 默认升序,列表最后一个元素,值最大

        # 通过标况流量 STD_FLOW 排序 默认升序 如果要降序排序,可以指定reverse=True
        sorted_rm_repeat_sfd_data_list_by_std_flow = sorted(rm_repeat_sfd_data_list, key=operator.itemgetter('STD_FLOW'), reverse=False)
        # 标况流量(周期内最大值)
        rdm.max_std_flow = str(sorted_rm_repeat_sfd_data_list_by_std_flow[len(sorted_rm_repeat_sfd_data_list_by_std_flow) - 1]['STD_FLOW'])
        # 标况流量(周期内最小值)
        rdm.min_std_flow = str(sorted_rm_repeat_sfd_data_list_by_std_flow[0]['STD_FLOW'])
        # 标况流量(周期内平均值)- rdm.std_flow
        rdm.avg_std_flow = get_average_period(sorted_rm_repeat_sfd_data_list, "STD_FLOW")  # 使用周期内平均值计算方法 计算平均值
        # 最大标况流量时间
        rdm.max_std_flow_time = sorted_rm_repeat_sfd_data_list_by_std_flow[len(sorted_rm_repeat_sfd_data_list_by_std_flow) - 1]['RECEIV_TIME']

        # 最小标况流量时间
        rdm.min_std_flow_time = sorted_rm_repeat_sfd_data_list_by_std_flow[0]['RECEIV_TIME']

        # 通过工况流量 WORK_FLOW 排序 默认升序 如果要降序排序,可以指定reverse=True
        sorted_rm_repeat_sfd_data_list_by_work_flow = sorted(rm_repeat_sfd_data_list, key=operator.itemgetter('WORK_FLOW'), reverse=False)
        # 工况流量(周期内最大值)
        rdm.max_work_flow = str(sorted_rm_repeat_sfd_data_list_by_work_flow[len(sorted_rm_repeat_sfd_data_list_by_work_flow) - 1]['WORK_FLOW'])
        # 工况流量(周期内最小值)
        rdm.min_work_flow = str(sorted_rm_repeat_sfd_data_list_by_work_flow[0]['WORK_FLOW'])
        # 工况流量(周期内平均值)-rdm.work_flow
        rdm.avg_work_flow = get_average_period(sorted_rm_repeat_sfd_data_list, "WORK_FLOW")
        # 最大工况流量时间
        rdm.max_work_flow_time = sorted_rm_repeat_sfd_data_list_by_work_flow[len(sorted_rm_repeat_sfd_data_list_by_work_flow) - 1]['RECEIV_TIME']

        # 最小工况流量时间
        rdm.min_work_flow_time = sorted_rm_repeat_sfd_data_list_by_work_flow[0]['RECEIV_TIME']

        # 通过温度 TEMPERATURE 排序 默认升序 如果要降序排序,可以指定reverse=True
        sorted_rm_repeat_sfd_data_list_by_temperature = sorted(rm_repeat_sfd_data_list,key=operator.itemgetter('TEMPERATURE'), reverse=False)
        # 温度(周期内最大值)
        rdm.max_temperature = str(sorted_rm_repeat_sfd_data_list_by_temperature[len(sorted_rm_repeat_sfd_data_list_by_temperature) - 1]['TEMPERATURE'])
        # 温度(周期内最小值)
        rdm.min_temperature = str(sorted_rm_repeat_sfd_data_list_by_temperature[0]['TEMPERATURE'])
        # 温度(周期内平均值)-rdm.temperature
        rdm.avg_temperature = get_average_period(sorted_rm_repeat_sfd_data_list, "TEMPERATURE")
        # 最高温度时间
        rdm.max_temp_time = sorted_rm_repeat_sfd_data_list_by_temperature[len(sorted_rm_repeat_sfd_data_list_by_temperature) - 1]['RECEIV_TIME']

        # 最低温度时间
        rdm.min_temp_time = sorted_rm_repeat_sfd_data_list_by_temperature[0]['RECEIV_TIME']

        # 通过温度 PRESSURE 排序 默认升序 如果要降序排序,可以指定reverse=True
        sorted_rm_repeat_sfd_data_list_by_pressure = sorted(rm_repeat_sfd_data_list,key=operator.itemgetter('PRESSURE'), reverse=False)

        # 压力(周期内最高值)
        rdm.max_press = str(sorted_rm_repeat_sfd_data_list_by_pressure[len(sorted_rm_repeat_sfd_data_list_by_pressure) - 1]['PRESSURE'])
        # 压力(周期内最低值)
        rdm.min_press = str(sorted_rm_repeat_sfd_data_list_by_pressure[0]['PRESSURE'])
        # 压力(周期内平均值)-rdm.pressure
        rdm.avg_press = get_average_period(sorted_rm_repeat_sfd_data_list, "PRESSURE")
        # 最高压力时间
        rdm.max_press_time = sorted_rm_repeat_sfd_data_list_by_pressure[len(sorted_rm_repeat_sfd_data_list_by_pressure) - 1]['RECEIV_TIME']

        # 最低压力时间
        rdm.min_press_time = sorted_rm_repeat_sfd_data_list_by_pressure[0]['RECEIV_TIME']

        # 单价(期末数)
        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")

        # 周期内使用额(单价(期末数)* 周期内标况使用量)结果四舍五入
        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.srm_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_for_monthly(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, org_id, flmeter_no, params_data, **kwargs):
    print(data_for_processing)
    # print(json.dumps(data_for_processing, cls=DateEncoder))  # cls=DateEncoder

    # 对sfd_lists进行空判断
    if len(data_for_processing) == 1:
        print(flmeter_no, "【", params_data[0]['minTime'], params_data[0]['maxTime'], "】", "内只有一条抄表数据,无法进行中心计费逻辑计算")
        return

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

    # 在sorted_sfd_data_list中[0]为之前的时间 [len(sorted_sfd_data_list) - 1]为之后的时间
    # 接下来开始数据处理 【SUM_TOTAL 控制器总累积量(卡控中存储累计用气量)】 标况使用量
    # 周期内标况使用量(之后的时间 - 之前的时间)
    # 周期内使用额(单价 * 周期内标况使用量)结果四舍五入
    after_time_sum_total = sorted_sfd_data_list[len(sorted_sfd_data_list) - 1]['SUM_TOTAL']
    before_time_sum_total = sorted_sfd_data_list[0]['SUM_TOTAL']
    after_time_sum_total = '1'
    # 首先判断after_time_sum_total与before_time_sum_total值是否相同
    if float(after_time_sum_total) == float(before_time_sum_total):
        print(flmeter_no, "【", params_data[0]['minTime'], params_data[0]['maxTime'], "】", "区间内的周期内标况使用量为零,未产生使用,无需进行中心计费计算")
        return

    # 再判断after_time_sum_total<before_time_sum_total是否为true 如果为true 则代表 之后时间的SUM_TOTAL小于之前时间的SUM_TOTAL,出现问题,请核查
    if float(after_time_sum_total) < float(before_time_sum_total):
        print(flmeter_no, "【", params_data[0]['minTime'], params_data[0]['maxTime'], "】", "之后时间的SUM_TOTAL小于之前时间的SUM_TOTAL,出现问题,请核查")
        return

    # 走到这里代表数据正常 可以进行真正的中心计费计算逻辑了
    # 通过流量计编号去取价格的逻辑 这里封装成方法
    price_no_temp = kwargs['price_no']  # 价格编号
    # 对price_no进行空判断
    if price_no_temp is None:
        print(org_id, flmeter_no, "无对应的价格编号")
        return
    # 能走到这里代表其对应的价格编号不为空 下面开始取具体使用的价格的逻辑
    real_price_temp = get_price_by_orgid_and_flmeter_no(org_id, flmeter_no, price_no_temp)

    # 判断real_price_temp是否为None 如果是代表查询无对应的PRICE_INFO
    if real_price_temp is None:
        print(flmeter_no + "查询无对应的PRICE_INFO或对应的PRICE_INFO里阶梯价格1与普通价格都没有值")
        return

    # 程序走到这里代表通过价格编号查到了其价格信息,并且返回了其具体使用的价格
    # print(real_price_temp)
    # 接下来 开始重头戏 算 结算金额(使用金额) = 周期内使用额(单价 * 周期内标况使用量)结果四舍五入
    # 结算金额 = 结算气量 * 单价
    billing_volume_temp = float(after_time_sum_total) - float(before_time_sum_total)  # 结算气量
    billing_money_temp = round((billing_volume_temp * real_price_temp), 2)  # 结算金额 = 结算气量 * 单价

    # 当前时间 现在时间
    now_datetime = datetime.datetime.today()

    # 更新FI_CHARGE_RECORD
    # 更新对应的FI_CHARGE_RECORD的中心计费的相关字段
    this_fi_charge_record_temp = kwargs['this_fi_charge_record']  # 获取当前操作表计的FI_CHARGE_RECORD对象信息
    # 主要是结算方数(本次)与结算余额(本次)写入上一次的结算方数与结算余额,之后结算方数(本次)与结算余额(本次)减去此次计算出的结算值,写入本次
    before_total_billing_volume = this_fi_charge_record_temp['TOTAL_BILLING_VOLUME']  # 本次累计结算方数(中心计费)
    before_last_total_billing_volume = this_fi_charge_record_temp['LAST_TOTAL_BILLING_VOLUME']  # 上次累计结算方数(中心计费)
    before_billing_remain_money = this_fi_charge_record_temp['BILLING_REMAIN_MONEY']  # 本次累计结算余额(中心计费)
    before_last_billing_remain_money = this_fi_charge_record_temp['LAST_BILLING_REMAIN_MONEY']  # 上次累计结算余额(中心计费)
    before_billing_time = this_fi_charge_record_temp['BILLING_TIME']  # 本次结算时间(中心计费)
    before_last_billing_time = this_fi_charge_record_temp['LAST_BILLING_TIME']  # 上次结算时间(中心计费)

    # 要传入数据库逻辑的数据
    db_total_billing_volume = float(before_total_billing_volume) - billing_volume_temp
    db_last_total_billing_volume = float(before_total_billing_volume)

    db_billing_remain_money = float(before_billing_remain_money) - billing_money_temp
    db_last_billing_remain_money = float(before_billing_remain_money)

    db_billing_time = str(params_data[0]['maxTime'])  # 跑此次脚本的时间区间的最大值就是本次的结算时间
    db_last_billing_time = str(before_billing_time)

    # 更新FI_CHARGE_RECORD
    update_fi_charge_record_for_center_billing(this_fi_charge_record_temp['RCR_ORG_ID'],
                                               this_fi_charge_record_temp['RCR_ID'], flmeter_no,
                                               str(db_total_billing_volume),
                                               str(db_last_total_billing_volume),
                                               str(db_billing_remain_money),
                                               str(db_last_billing_remain_money),
                                               db_billing_time,
                                               db_last_billing_time)

    # 准备 中心计费明细账FI_CENTER_BILLING_DETAIL 所有需要写入的字段
    # 机构号 流水号ID 客户编号 表计编号 价格编号 价格 结算气量 结算金额 余量 余额 计算报告,阶梯计费描述用 结算时间 累计结算方数(中心计费)上次累计结算方数(中心计费)删除状态: 1 未删除 9已删除
    # fi_center_billing_detail

    # 新增中心计费明细账 以下是准备所需字段的值

    # 当前时间 拆分年月
    # now_datetime = datetime.datetime.today()
    now_year = str(now_datetime.year)
    now_month = now_datetime.month
    # 如果月份小于10 补零 让9变为09月
    if len(str(now_month)) < 2:
        now_month = "0" + str(now_month)
    else:
        now_month = str(now_month)

    # 记录ID-取自动递增流水号
    ssn_org_id = org_id  # 传入过来的org_id
    ssn_key_name = "FI_CENTER_BILLING_DETAIL"  # 如需修改为其他表的递增流水,请自行修改
    ok_fcbd_id = get_sys_serial_no(db, ssn_org_id, ssn_key_name, now_year, now_month)  # 导入获取流水号方法
    # print(ok_fcbd_id)

    fcbd_org_id = org_id
    fcbd_id = ssn_org_id + now_year + now_month + ok_fcbd_id
    customer_no = kwargs['customer_no']
    meter_no = flmeter_no
    price_no = price_no_temp

    price = real_price_temp
    billing_volume = billing_volume_temp
    billing_money = billing_money_temp
    remain_volume = sorted_sfd_data_list[len(sorted_sfd_data_list) - 1]['REMAIN_VOLUME']  # 查询区间的sfd最后一条
    remain_money = sorted_sfd_data_list[len(sorted_sfd_data_list) - 1]['REMAIN_MONEY']  # 查询区间的sfd最后一条

    calc_msg = '结算气量' + str(billing_volume) + ' 单价:' + str(price) + ' 结算金额:' + str(billing_money_temp)
    billing_time = params_data[0]['maxTime']  # 跑此次脚本的时间区间的最大值就是本次的结算时间
    total_billing_volume = str(db_total_billing_volume)
    last_total_billing_volume = str(db_last_total_billing_volume)
    # 未完待续
    fcbd_status = '1'  # 默认为1 未删除状态

    # 新增add FI_CENTER_BILLING_DETAIL
    is_success = ok_processing_data_insert_into_oracle_for_fi_center_billing_detail(fcbd_org_id=fcbd_org_id,
                                                                                    fcbd_id=fcbd_id,
                                                                                    customer_no=customer_no,
                                                                                    meter_no=meter_no,
                                                                                    price_no=price_no,

                                                                                    price=price,
                                                                                    billing_volume=billing_volume,
                                                                                    billing_money=billing_money,
                                                                                    remain_volume=remain_volume,
                                                                                    remain_money=remain_money,

                                                                                    calc_msg=calc_msg,
                                                                                    billing_time=billing_time,
                                                                                    total_billing_volume=total_billing_volume,
                                                                                    last_total_billing_volume=last_total_billing_volume,
                                                                                    fcbd_status=fcbd_status)
    print('----------------------------------------------------------------------------------------')
    return True