package com.server; import com.dao.ChartsConfigMapper; import com.dao.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.util.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){ 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); if ("".equals(tableName)){ return new RepEntity(RepCode.NoAuthority); } int baseId = getChartsDataUtilService.getBaseId(id); System.out.println("切换数据库"+String.valueOf(baseId)); try{ if (!DynamicDataSourceContextHolder.isContainsDataSource(String.valueOf(baseId))) { //joinPoint.getSignature() :获取连接点的方法签名对象 System.out.println("数据源 " + String.valueOf(baseId) + " 不存在使用默认的数据源 -> "); } else { System.out.println("使用数据源:" + String.valueOf(baseId)); 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 screenStr = ""; 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))){ screenToColumn = String.valueOf(sb .replace(1, 5, "where ")); screen = screenToColumn + " " + screen; System.out.println("screen:" + screen); }else { StringBuilder sb1 = new StringBuilder(screen); screenStr = 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; // System.out.println("Y:"+ yColumn + "........x:" + xColumn + "........yAxistype:" + yAxisType + "...xtpye:+"+yAxisType+ " xdata:"+xdata); valueOnes = timeConverterUtil.getTimeValueConverter(yColumn, xColumn, tableName, yAxisType, xAxisType, xdata, screen); // System.out.println("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, screen); if (counts > 366){ chartsDataInfo.setTooMany(true); } List groupsData = showChartsMapper.getGroups(groupByName,tableName, screen, 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, screen); 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(); System.out.println("异常"); return new RepEntity(RepCode.erro); }finally { DynamicDataSourceContextHolder.clearDataSourceType(); } return new RepEntity(RepCode.success, chartsDataInfo); } }