def recharge_meter(meter_ids, money, user): """ 给仪表充值 :param money: 充值的数量 :param meter_ids: 充值的仪表id :param user: 当前登录的用户 :return: """ meter_infos = conf_meter_api.find_infos_by_meter_ids(meter_ids) for meter_info in meter_infos: log_dict = { "opr_user_id": user['id'], "meter_id": meter_info['meter_id'], 'opr_type': Operator.RECHARGE, 'val': money } # 保证原子性 with transaction.atomic(): log = conf_log_api.add_opr_log(log_dict) opr = Operator.create_recharge_opr(meter_info['dtu_no'], meter_info['address'], log.id, meter_info['meter_id'], money) app_opr_api.execute_remote_op(opr)
def reset_meter(meter_info, user): """ 重启仪表 :param meter_info: :param user: 当前登录的用户 :return: """ must_dict = { "meter_ids": ListCheck.check_is_int_list, } param_check( meter_info, must_dict, ) meter_infos = conf_meter_api.find_infos_by_meter_ids( meter_info['meter_ids']) for meter_info in meter_infos: log_dict = { "opr_user_id": user['id'], "meter_id": meter_info['meter_id'], 'opr_type': Operator.RESET, 'val': "" } # 保证原子性 with transaction.atomic(): log = conf_log_api.add_opr_log(log_dict) opr = Operator.create_reset_opr(meter_info['dtu_no'], meter_info['address'], log.id, meter_info['meter_id']) app_opr_api.execute_remote_op(opr)
def query_meter_data(meter_info, user, record_log=True): must_dict = { "meter_ids": ListCheck.check_is_int_list, } param_check(meter_info, must_dict) meter_infos = conf_meter_api.find_infos_by_meter_ids( meter_info['meter_ids']) for meter_info in meter_infos: dtu_no = meter_info['dtu_no'] log_dict = {} if record_log: log_dict = { "opr_user_id": user['id'], "meter_id": meter_info['meter_id'], 'opr_type': Operator.QUERY, 'val': "" } # 保证原子性 with transaction.atomic(): log_id = None if record_log: log = conf_log_api.add_opr_log(log_dict) log_id = log.id opr = Operator.create_query_opr(dtu_no, meter_info['address'], log_id, meter_info['meter_id']) app_opr_api.execute_remote_op(opr)
def generate_report_table(meter_ids): """ 生成报表 :return: """ meter_infos = conf_meter_api.find_infos_by_meter_ids(meter_ids) file_list = [] for meter_info in meter_infos: filename = 'DTU编号:{}-物理地址:{}-报表.html'.format(meter_info['dtu_no'], meter_info['address']) path = os.path.join(TMP_FILE_DIRECTORY_PATH, filename) file_list.append(path) core.draw_report(path, meter_info['meter_id']) zipfile = common_file_api.compress_file(file_list) return zipfile
def update_valve_state(meter_state_info, user): """ 更改阀门状态 :param user: 当前登录的用户 :param meter_state_info: :return: """ must_dict = { "meter_ids": ListCheck.check_is_int_list, "valve_state": int, } param_check( meter_state_info, must_dict, ) # 查找该流量计对应的阀门DTU meter_infos = conf_meter_api.find_infos_by_meter_ids( meter_state_info['meter_ids']) for meter_info in meter_infos: # 保证原子性 with transaction.atomic(): log_dict = { "opr_user_id": user['id'], "meter_id": meter_info['meter_id'], } if meter_state_info['valve_state'] == VALVE_STATE_OPEN: log_dict['opr_type'] = Operator.OPEN_VALVE log = conf_log_api.add_opr_log(log_dict) opr = Operator.create_open_valve_opr(meter_info['dtu_no'], meter_info['address'], log.id, meter_info['meter_id']) else: log_dict['opr_type'] = Operator.CLOSE_VALVE log = conf_log_api.add_opr_log(log_dict) opr = Operator.create_close_valve_opr(meter_info['dtu_no'], meter_info['address'], log.id, meter_info['meter_id']) app_opr_api.execute_remote_op(opr)
def update_recharge_state(meter_state_info, user): """ 更新仪表充值状态 :param user: 当前登录的用户 :param meter_state_info: :return: """ must_dict = { "meter_ids": ListCheck.check_is_int_list, "recharge_state": WhiteListCheck.check_recharge_state, } param_check( meter_state_info, must_dict, ) meter_infos = conf_meter_api.find_infos_by_meter_ids( meter_state_info['meter_ids']) for meter_info in meter_infos: # 保证原子性 with transaction.atomic(): log_dict = { "opr_user_id": user['id'], "meter_id": meter_info['meter_id'], } if meter_state_info['recharge_state'] == RECHARGE_STATE_OPEN: log_dict['opr_type'] = Operator.OPEN_RECHARGE log = conf_log_api.add_opr_log(log_dict) opr = Operator.create_open_recharge_opr( meter_info['dtu_no'], meter_info['address'], log.id, meter_info['meter_id']) else: log_dict['opr_type'] = Operator.CLOSE_RECHARGE log = conf_log_api.add_opr_log(log_dict) opr = Operator.create_close_recharge_opr( meter_info['dtu_no'], meter_info['address'], log.id, meter_info['meter_id']) app_opr_api.execute_remote_op(opr)