def genWidgetImageData(req_data, hk): """ 生成返回前端数据 """ logger.debug("function genWidgetImageData() is called") st = SqlExecutorMgr.stRestore(hk) # 地图先特殊对待 if 'china_map' == req_data.get(u'graph') or \ 'world_map' == req_data.get(u'graph'): data = formatData('', '', '', '', req_data.get(u'graph')) return {u'type': 'map', u'data': data} shape_list, shape_in_use = judgeWhichShapes(req_data) shape_in_use = req_data.get(u'graph', u'bar') # 获取画出图形所必须相关数据 factors_lists_dict = classifyFactors(req_data) sql_obj = transReqDataToSqlObj(req_data, st) result = st.conn.execute(sql_obj).fetchall() data_from_db = cleanDataFromDb(result) strf_data_from_db = strfDataAfterFetchDb(data_from_db) echart_data = formatData(strf_data_from_db, factors_lists_dict['msu'], \ factors_lists_dict['msn'], factors_lists_dict['group'], \ shape_in_use) return {u'type': shape_in_use, u'data': echart_data}
def produce(self, req): """ 生成数据,对外接口 """ shape = req.get(Protocol.Graph) echart = EChartManager().get_echart(shape) self.setDecorator(echart) self.fh = FactorHandler(req) # 验证是否符合去查询的要求 ok, msg = ValidModule.makeValidator(shape).ifValid(self.fh) if not ok: return {'msg': msg} part_dict = self.fh.mapToSqlPart() sql_obj = self.st.getSwither().makeSelectSql(**part_dict) data_db = self.st.execute(sql_obj).fetchall() clean_data_db = cleanDataFromDb(data_db) strf_data_db = strfDataAfterFetchDb(clean_data_db) result = self.decorate( strf_data_db, self.fh.selects ) return {'type': shape, 'figure': result}
def reqTimelyData(request, wi_id): ''' 获取及时的新数据 ''' hk = request.session.get('hk') st = SqlExecutorMgr.stRestore(hk) widget_model = WidgetModel.objects.get(pk = wi_id) if not widget_model.m_if_update: return MyHttpJsonResponse({'succ': False}) req_data = widget_model.restoreReqDataDict() factors_lists_dict = classifyFactors(req_data) # 看看用户选择的轴上面的项,有没有涉及到DateTime类型 # 如果没有,那么就是整体刷新; 如果有,那么来逐步更新 time_factor = filterDateTimeColumn(factors_lists_dict['msn'], st) if time_factor: update_way = 'add' origin_sql_obj = transReqDataToSqlObj(req_data, st) time_column_obj = st.sql_relation.getColumnObj(time_factor) # 分查询条件里面,有没有聚合运算 #if hasAggreate(): if False: sql_obj = select([]).over(f()).order_by() origin_sql_obj.over(f()).order_by(time_column_obj) else: sql_obj = origin_sql_obj.order_by(time_column_obj) factor_dict = dict(zip(EXPRESS_FACTOR_KEYS_TUPLE, ( \ time_factor.getProperty(Protocol.Table) , time_factor.getProperty(Protocol.Attr) , time_factor.getProperty(Protocol.Kind) , 'max' ))) latest_time_obj = st.makeSelectSql([FactorFactory.make(**factor_dict)]) sql_obj = origin_sql_obj.where(time_column_obj == latest_time_obj) data_from_db = st.execute(sql_obj).fetchall() str_data = strfDataAfterFetchDb(data_from_db) data = EChartManager().get_echart(widget_model.m_graph) \ .makeAddData( \ str_data \ , len(factors_lists_dict['msu']) \ , len(factors_lists_dict['msn']) \ , len(factors_lists_dict['group']) \ ) else: update_way = 'all' data = genWidgetImageData(req_data, hk) return MyHttpJsonResponse({'succ': True, 'way': update_way, 'data': data})