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