예제 #1
0
파일: meter.py 프로젝트: 297jy/flowmeter
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)
예제 #2
0
파일: meter.py 프로젝트: 297jy/flowmeter
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)
예제 #3
0
파일: meter.py 프로젝트: 297jy/flowmeter
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)
예제 #4
0
파일: meter.py 프로젝트: 297jy/flowmeter
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
예제 #5
0
파일: meter.py 프로젝트: 297jy/flowmeter
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)
예제 #6
0
파일: meter.py 프로젝트: 297jy/flowmeter
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)