def get(self, request): ''' 根据code获取该code的溢油随着时间的平均轨迹点 :param request: :return: ''' code = request.GET.get('code', None) # TODO:[-] 20-01-16 此处修改为直接读取nc文件,不读取数据库 track_list = [] msg = '' if code is not None: try: # track_list = OilspillingAvgModel.objects(code=code) # TODO:[*] 20-02-03 此处需要修改当请求进来 reader_func = create_reader('file') reader = reader_func(_ROOT_DIR, _RESULT_FILE) track_list = reader.read_avg_track('test') except KeyError: msg = '不存在的key索引/时间超出范围' except: msg = '其他错误' # TODO:[*] 20-01-17 此处注意一下,由于重新修改了序列化的原始data model 改为了mid model,mid model中缺少部分需要序列化的字段,序列化时会提示有错误,注意! json_data = OilspillingAvgModelSerializer(track_list, many=True).data return Response(json_data)
def get(self, request): ''' 根据指定 code 获取对应code对应的平均观测值的日期数组 :param request: :return: ''' code = request.GET.get('code', None) list_avg = [] if code is not None: reader_func = create_reader('file') reader = reader_func(_ROOT_DIR, _RESULT_FILE) list_avg = reader.read_date_range(code=code) # TODO:[-] 20-01-21 不再使用数据库的读取这种方式,放在OilDbReader中 # 根据time去重 # list_avg = OilspillingAvgModel.objects( # code=code).distinct(field='time') # if len(list_avg) > 0: # list_avg = list(set(list_avg)) # # 排序 # list_avg.sort() temp = StartEndDateMidModel(list_avg[0], list_avg[-1]) return Response(StartEndDateMidModelSerializer(temp).data) # return Response() return Response('未填code', status=200)
def handle_default(self, msg: Msg): ''' -3 存在读取获取每个时刻的均值 :param msg: :return: ''' # 获取目标路径 finial_file = msg.msg.other['finial_file'] # 使用xarray读取指定文件 # 直接调用 util.reader直接读取并写入数据库 reader_func = create_reader('file') reader = reader_func(NC_OPTIONS['_ROOT_DIR'], NC_OPTIONS['_RESULT_FILE']) track_list = reader.read_avg_track('test') # 存入msg中 msg.msg.other['track_list'] = track_list
def get(self, request): ''' 获取指定时间的散点总数 :param request: :return: ''' target_date_str = request.GET.get('date', None) code = request.GET.get('code', None) target_date = dateutil.parser.parse(target_date_str) if None in [target_date_str, code]: return Response() else: reader_func = create_reader('file') reader = reader_func(_ROOT_DIR, _RESULT_FILE) return Response(reader.read_track_count(target_date))
def handle_read_nc(self, event: Event, **kwargs): ''' -3 存在读取获取每个时刻的均值 :param msg: :return: ''' msg: Msg = kwargs.get('msg') # 获取目标路径 finial_file = msg.msg.other['finial_file'] # 使用xarray读取指定文件 # 直接调用 util.reader直接读取并写入数据库 reader_func = create_reader('file') reader = reader_func(msg.dir_path, msg.file_name) track_list = reader.read_avg_track('test') # 存入msg中 msg.msg.other['track_list'] = track_list
def get(self, request): ''' 根据指定的 date 获取该date的 所有溢油点 TODO:[*] 20-01-06 此处准备重写 若重写的话,不将oil对应的数据入库,数据库中只记录文件所在路径,直接读取文件获取对应的信息 :param request: :return: ''' # TODO:[*] 20-01-20 最新的设计想通过分批加载的方式解决加载较慢的问题 target_date_str = request.GET.get('date') code = request.GET.get('code', None) page_index = int( request.GET.get('pageindex', PAGINATION['DEFAULT_INDEX'])) page_count = int( request.GET.get('pagecount', PAGINATION['DEFAULT_COUNT'])) target_date_dt = dateutil.parser.parse(target_date_str) oil_track_list = [] json_data = None msg = 'no error' if code is not None: try: reader_func = create_reader('file') reader = reader_func(_ROOT_DIR, _RESULT_FILE) oil_track_list = reader.read_current_track( 'test', target_date_str, page_index=page_index, page_count=page_count) # oil_track_list = OilSpillingModel.objects( # code=code, time=target_date_dt) json_data = OilSpillingTrackModelSerializer(oil_track_list, many=True).data except KeyError: msg = '不存在的key索引/时间超出范围' except: msg = '其他错误' # return Response( # { # 'data': json_data, # 'error': msg # } # ) return Response(json_data)