package com.server.chart; import com.dao.chart.ChartsConfigMapper; import com.dao.chart.ShowChartsMapper; import com.model.bo.*; import com.model.pojo.RepCode; import com.model.pojo.RepEntity; import com.model.vo.configVo.LineConfigInfo; import com.model.vo.dataVo.ChartsDataInfo; import com.config.BasesSource.DynamicDataSourceContextHolder; import com.util.CalculationJudgeUtil; import com.util.ScreenUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @Service public class ShowLineService { @Autowired ShowChartsMapper showChartsMapper; @Autowired TimeConverterUtil timeConverterUtil; @Autowired CalculationJudgeUtil calculationJudgeUtil; @Autowired ChartsConfigMapper chartsConfigMapper; @Autowired GetChartsDataUtilService getChartsDataUtilService; @Autowired ScreenUtil screenUtil; @Autowired ChartsUtilService chartsUtilService; /* Line数据展示 */ public RepEntity showLine(LineConfigInfo lineConfigInfo, String token, int dashId){ ChartsDataInfo chartsDataInfo = new ChartsDataInfo(); TimeReture timeReture = new TimeReture(); if (lineConfigInfo == null || "".equals(lineConfigInfo)){ return new RepEntity(RepCode.Null); } int id = lineConfigInfo.getId(); //获取列配置 ChartsColumnConfig chartsColumn = chartsConfigMapper.getChartsColumn(id); if (chartsColumn == null || "".equals(chartsColumn)){ return new RepEntity(RepCode.Null); } String style = chartsColumn.getChartStyle(); String config = chartsColumn.getChartConfig(); chartsDataInfo.setChartsColumnConfig(chartsColumn); String tableName = chartsUtilService.getSqlStr(token, id, dashId); if ("".equals(tableName)){ return new RepEntity(RepCode.NoAuthority); } int baseId = getChartsDataUtilService.getBaseId(id); try{ if (!DynamicDataSourceContextHolder.isContainsDataSource(String.valueOf(baseId))) { return new RepEntity(RepCode.DataSourceNull); } else { DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(baseId)); } String xColumn = lineConfigInfo.getxAxis().getColumnRename(); String yColumn = lineConfigInfo.getyAxis().getColumnRename(); String xAxisType = lineConfigInfo.getxAxis().getShowDataType(); List groupBy = lineConfigInfo.getGroups(); if (xColumn == null || "".equals(xColumn) || yColumn == null || "".equals(yColumn)){ return new RepEntity(RepCode.nullAxis); } String yType = lineConfigInfo.getyAxis().getShowDataType(); String yAxisType = calculationJudgeUtil.Judge(yType); List value = new ArrayList(); List serieses = new ArrayList(); //生成柱状图的系列 List xAxisData = new ArrayList(); //X轴自己用 //取筛选列表 List screens = lineConfigInfo.getFilters(); ScreenStr scr = new ScreenStr(); String screen = ""; //正常筛选条件 String screenToColumn = ""; //跟目标列相同的筛选条件 String screenToColumnS = ""; //跟目标列相同的筛选条件 if ("".equals(screens) || screens == null || screens.size() == 0){ screen = ""; }else { scr = screenUtil.screensUtil(screens, xColumn, xAxisType); screen = scr.getRet(); screenToColumn = scr.getWithColumnRet(); StringBuilder sb = new StringBuilder(screenToColumn); if (screenToColumn != null && !("".equals(screenToColumn))){ screenToColumnS = screenToColumn + " " + screen; //and screenToColumn = String.valueOf(sb .replace(1, 5, "where ")); screen = screenToColumn + " " + screen; //where } else { StringBuilder sb1 = new StringBuilder(screen); screenToColumnS = screen; screen = String.valueOf(sb1 .replace(1, 5, "where ")); } } //X轴 //判断是否为日期类型 timeReture = timeConverterUtil.timeConverter(xColumn, tableName, xAxisType, screen, 366); xAxisData = timeReture.getValues(); chartsDataInfo.setTooMany(timeReture.isOverdose()); if ("".equals(xAxisData) || xAxisData == null || xAxisData.size() == 0){ return new RepEntity(RepCode.Null); } //无分组时Y值 Iterator itX = xAxisData.iterator(); while (itX.hasNext()){ String xdata = (String)itX.next(); if (xdata == null || "".equals(xdata)){ continue; } double valueOne = 0; String valueOnes = null; // ("Y:"+ yColumn + "........x:" + xColumn + "........yAxistype:" + yAxisType + "...xtpye:+"+yAxisType+ " xdata:"+xdata); valueOnes = timeConverterUtil.getTimeValueConverter(yColumn, xColumn, tableName, yAxisType, xAxisType, xdata, screenToColumnS); // ("value:"+valueOnes); if (valueOnes == null || "".equals(valueOnes)){ valueOne = 0; }else { valueOne = Double.parseDouble(valueOnes); } LineSeriesMap lineSeriesMap = new LineSeriesMap(); lineSeriesMap.setValue(valueOne); lineSeriesMap.setDate(xdata); value.add(lineSeriesMap); } LineSeries series = new LineSeries(); // series.setName(yColumn); series.setMdata(value); serieses.add(series); //有分组 if (groupBy.size() != 0){ serieses.remove(0); Iterator itGroup = groupBy.iterator(); //分组数 //便利分组 while (itGroup.hasNext()){ String groupByName = (String) itGroup.next(); int counts = showChartsMapper.getGroupsCount(groupByName,tableName, screenToColumnS); if (counts > 366){ chartsDataInfo.setTooMany(true); } List groupsData = showChartsMapper.getGroups(groupByName,tableName, screenToColumnS, 366); //查询每个分组系列 Iterator itGroupsData = groupsData.iterator(); //每个分组得到得每个系列 while(itGroupsData.hasNext()){ String groupsName = (String)itGroupsData.next(); if ("".equals(groupsName) || groupsName == null){ continue; } List groupsValue = new ArrayList(); Iterator itXAxisData = xAxisData.iterator(); //每个系列对应X轴上的值 while (itXAxisData.hasNext()){ String xAxisDataOne = (String) itXAxisData.next(); if ("".equals(xAxisDataOne) || xAxisDataOne == null){ continue; } double groupsValueOne = 0; String groupsValueOnes = null; groupsValueOnes = timeConverterUtil.getGroupTimeConverter(yAxisType, yColumn, tableName, groupByName, xAxisType, groupsName, xColumn, xAxisDataOne, screenToColumnS); if ("".equals(groupsValueOnes) || groupsValueOnes == null){ groupsValueOne = 0; }else{ groupsValueOne = Double.parseDouble(groupsValueOnes); } LineSeriesMap lineSeriesMap = new LineSeriesMap(); lineSeriesMap.setDate(xAxisDataOne); lineSeriesMap.setValue(groupsValueOne); groupsValue.add(lineSeriesMap); } LineSeries lineSeries = new LineSeries(); lineSeries.setMdata(groupsValue); lineSeries.setName(groupsName); serieses.add(lineSeries); } } } chartsDataInfo.setSerieses(serieses); }catch (Exception e){ e.printStackTrace(); return new RepEntity(RepCode.erro); }finally { DynamicDataSourceContextHolder.clearDataSourceType(); } return new RepEntity(RepCode.success, chartsDataInfo); } }