fine_monitor.py 3.23 KB
Newer Older
wang.wenrong's avatar
wang.wenrong committed
1
from pot_libs.sanic_api import summary
wang.wenrong's avatar
wang.wenrong committed
2
from pot_libs.logger import log
wang.wenrong's avatar
wang.wenrong committed
3
from unify_api.modules.anshiu.dao.fine_monitor_dao import get_mtid_by_pid_dao
wang.wenrong's avatar
wang.wenrong committed
4 5 6
from unify_api.utils import time_format
from unify_api.modules.anshiu.components.fine_monitor_cps import (
    FineMonitorChartReq, FineMonitorInfoReq, FineMonitorChartResp,
wang.wenrong's avatar
wang.wenrong committed
7
    FineMonitorInfoResp
wang.wenrong's avatar
wang.wenrong committed
8 9
)
from unify_api.modules.anshiu.procedures.fine_monitor_pds import (
wang.wenrong's avatar
wang.wenrong committed
10
    get_mtid_by_location_ids
wang.wenrong's avatar
wang.wenrong committed
11 12
)
from unify_api.modules.anshiu.service.fine_monitor_serv import (
wang.wenrong's avatar
wang.wenrong committed
13 14
    get_adio_chart_data, get_point_chart_data,
    electric_index_list_service
wang.wenrong's avatar
wang.wenrong committed
15 16 17 18 19 20 21 22 23 24 25 26
)


@summary("精细监测-五个图表")
async def post_fine_monitor_chart(request,
                                  body: FineMonitorChartReq) -> FineMonitorChartResp:
    try:
        date_start = body.start
        date_end = body.end
        # 起始时间转化为时间戳
        start_timestamp = time_format.get_date_timestamp(date_start)
        end_timestamp = time_format.get_date_timestamp(date_end)
wang.wenrong's avatar
wang.wenrong committed
27

wang.wenrong's avatar
wang.wenrong committed
28 29 30 31 32 33 34 35 36 37 38 39 40
        # 计算间隔与坐标点
        intervel, slots = time_format.time_pick_transf(date_start, date_end)
        # 获取监测点
        point_id = body.pid
        if not point_id or point_id <= 0:
            raise Exception('point_error point_id:{}'.format(point_id))
        # 获取location点
        location_group = body.location_ids
        if not location_group:
            raise Exception('in_groups is NULL, no location_id')
    except Exception as e:
        log.error('get_fine_monitor_chart_error ' + str(e))
        return FineMonitorChartResp.param_error()
wang.wenrong's avatar
wang.wenrong committed
41

wang.wenrong's avatar
wang.wenrong committed
42 43
    # 获取location表的信息
    try:
wang.wenrong's avatar
wang.wenrong committed
44
        location_info = await get_mtid_by_location_ids(location_group)
wang.wenrong's avatar
wang.wenrong committed
45 46 47
    except Exception as e:
        log.error('get_fine_monitor_chart_error ' + e)
        return FineMonitorChartResp.db_error()
wang.wenrong's avatar
wang.wenrong committed
48

wang.wenrong's avatar
wang.wenrong committed
49 50
    # 获取温度及漏电流数据
    temperature_list, residual_currents_list = await get_adio_chart_data(
wang.wenrong's avatar
wang.wenrong committed
51
        location_group, location_info, date_start, date_end,
wang.wenrong's avatar
wang.wenrong committed
52
        intervel, slots)
wang.wenrong's avatar
wang.wenrong committed
53

wang.wenrong's avatar
wang.wenrong committed
54
    # 电力数据 power_list、电流曲线、电压曲线
wang.wenrong's avatar
wang.wenrong committed
55 56 57 58 59 60
    power_list, i_list, v_list, ctnum = await get_point_chart_data(
        point_id,
        date_start,
        date_end,
        intervel,
        slots)
wang.wenrong's avatar
wang.wenrong committed
61 62 63 64 65
    # 获取温度与漏电流的曲线数据
    # 获取用电数据
    return FineMonitorChartResp(time_slots=slots,
                                temperature=temperature_list,
                                residual_current=residual_currents_list,
wang.wenrong's avatar
wang.wenrong committed
66 67
                                power=power_list, i=i_list, v=v_list,
                                ctnum=ctnum)
wang.wenrong's avatar
wang.wenrong committed
68 69


wang.wenrong's avatar
wang.wenrong committed
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
@summary("精细监测-指标统计")
async def post_fine_monitor_info(request,
                                 body: FineMonitorInfoReq) -> FineMonitorInfoResp:
    mtid = await get_mtid_by_pid_dao(body.pid)
    mtid = mtid["mtid"]
    # 1,获取参数
    start_time = body.start
    end_time = body.end
    # 2,获取信息
    ctnum, general_param, electric_quality, safe_param = await \
        electric_index_list_service(mtid, start_time, end_time)
    if ctnum == -1:
        raise Exception("监测点出错")
    # 3,返回信息
    info_list = []
    info_list.extend(general_param)
    info_list.extend(safe_param)
    return FineMonitorInfoResp(info_list=info_list)