ShowLineService.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. package com.server.chart;
  2. import com.dao.chart.ChartsConfigMapper;
  3. import com.dao.chart.ShowChartsMapper;
  4. import com.model.bo.*;
  5. import com.model.pojo.RepCode;
  6. import com.model.pojo.RepEntity;
  7. import com.model.vo.configVo.LineConfigInfo;
  8. import com.model.vo.dataVo.ChartsDataInfo;
  9. import com.config.BasesSource.DynamicDataSourceContextHolder;
  10. import com.util.CalculationJudgeUtil;
  11. import com.util.ScreenUtil;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import java.util.ArrayList;
  15. import java.util.Iterator;
  16. import java.util.List;
  17. @Service
  18. public class ShowLineService {
  19. @Autowired
  20. ShowChartsMapper showChartsMapper;
  21. @Autowired
  22. TimeConverterUtil timeConverterUtil;
  23. @Autowired
  24. CalculationJudgeUtil calculationJudgeUtil;
  25. @Autowired
  26. ChartsConfigMapper chartsConfigMapper;
  27. @Autowired
  28. GetChartsDataUtilService getChartsDataUtilService;
  29. @Autowired
  30. ScreenUtil screenUtil;
  31. @Autowired
  32. ChartsUtilService chartsUtilService;
  33. /*
  34. Line数据展示
  35. */
  36. public RepEntity showLine(LineConfigInfo lineConfigInfo, String token, int dashId){
  37. ChartsDataInfo chartsDataInfo = new ChartsDataInfo();
  38. TimeReture timeReture = new TimeReture();
  39. if (lineConfigInfo == null || "".equals(lineConfigInfo)){
  40. return new RepEntity(RepCode.Null);
  41. }
  42. int id = lineConfigInfo.getId();
  43. //获取列配置
  44. ChartsColumnConfig chartsColumn = chartsConfigMapper.getChartsColumn(id);
  45. if (chartsColumn == null || "".equals(chartsColumn)){
  46. return new RepEntity(RepCode.Null);
  47. }
  48. String style = chartsColumn.getChartStyle();
  49. String config = chartsColumn.getChartConfig();
  50. chartsDataInfo.setChartsColumnConfig(chartsColumn);
  51. String tableName = chartsUtilService.getSqlStr(token, id, dashId);
  52. if ("".equals(tableName)){
  53. return new RepEntity(RepCode.NoAuthority);
  54. }
  55. int baseId = getChartsDataUtilService.getBaseId(id);
  56. try{
  57. if (!DynamicDataSourceContextHolder.isContainsDataSource(String.valueOf(baseId))) {
  58. return new RepEntity(RepCode.DataSourceNull);
  59. } else {
  60. DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(baseId));
  61. }
  62. String xColumn = lineConfigInfo.getxAxis().getColumnRename();
  63. String yColumn = lineConfigInfo.getyAxis().getColumnRename();
  64. String xAxisType = lineConfigInfo.getxAxis().getShowDataType();
  65. List<String> groupBy = lineConfigInfo.getGroups();
  66. if (xColumn == null || "".equals(xColumn) || yColumn == null || "".equals(yColumn)){
  67. return new RepEntity(RepCode.nullAxis);
  68. }
  69. String yType = lineConfigInfo.getyAxis().getShowDataType();
  70. String yAxisType = calculationJudgeUtil.Judge(yType);
  71. List<LineSeriesMap> value = new ArrayList<LineSeriesMap>();
  72. List<LineSeries> serieses = new ArrayList<LineSeries>(); //生成柱状图的系列
  73. List<String> xAxisData = new ArrayList<String>(); //X轴自己用
  74. //取筛选列表
  75. List<Screen> screens = lineConfigInfo.getFilters();
  76. ScreenStr scr = new ScreenStr();
  77. String screen = ""; //正常筛选条件
  78. String screenToColumn = ""; //跟目标列相同的筛选条件
  79. String screenToColumnS = ""; //跟目标列相同的筛选条件
  80. if ("".equals(screens) || screens == null || screens.size() == 0){
  81. screen = "";
  82. }else {
  83. scr = screenUtil.screensUtil(screens, xColumn, xAxisType);
  84. screen = scr.getRet();
  85. screenToColumn = scr.getWithColumnRet();
  86. StringBuilder sb = new StringBuilder(screenToColumn);
  87. if (screenToColumn != null && !("".equals(screenToColumn))){
  88. screenToColumnS = screenToColumn + " " + screen; //and
  89. screenToColumn = String.valueOf(sb .replace(1, 5, "where "));
  90. screen = screenToColumn + " " + screen; //where
  91. } else {
  92. StringBuilder sb1 = new StringBuilder(screen);
  93. screenToColumnS = screen;
  94. screen = String.valueOf(sb1 .replace(1, 5, "where "));
  95. }
  96. }
  97. //X轴
  98. //判断是否为日期类型
  99. timeReture = timeConverterUtil.timeConverter(xColumn, tableName, xAxisType, screen, 366);
  100. xAxisData = timeReture.getValues();
  101. chartsDataInfo.setTooMany(timeReture.isOverdose());
  102. if ("".equals(xAxisData) || xAxisData == null || xAxisData.size() == 0){
  103. return new RepEntity(RepCode.Null);
  104. }
  105. //无分组时Y值
  106. Iterator itX = xAxisData.iterator();
  107. while (itX.hasNext()){
  108. String xdata = (String)itX.next();
  109. if (xdata == null || "".equals(xdata)){
  110. continue;
  111. }
  112. double valueOne = 0;
  113. String valueOnes = null;
  114. // ("Y:"+ yColumn + "........x:" + xColumn + "........yAxistype:" + yAxisType + "...xtpye:+"+yAxisType+ " xdata:"+xdata);
  115. valueOnes = timeConverterUtil.getTimeValueConverter(yColumn, xColumn, tableName, yAxisType, xAxisType, xdata, screenToColumnS);
  116. // ("value:"+valueOnes);
  117. if (valueOnes == null || "".equals(valueOnes)){
  118. valueOne = 0;
  119. }else {
  120. valueOne = Double.parseDouble(valueOnes);
  121. }
  122. LineSeriesMap lineSeriesMap = new LineSeriesMap();
  123. lineSeriesMap.setValue(valueOne);
  124. lineSeriesMap.setDate(xdata);
  125. value.add(lineSeriesMap);
  126. }
  127. LineSeries series = new LineSeries();
  128. // series.setName(yColumn);
  129. series.setMdata(value);
  130. serieses.add(series);
  131. //有分组
  132. if (groupBy.size() != 0){
  133. serieses.remove(0);
  134. Iterator itGroup = groupBy.iterator(); //分组数
  135. //便利分组
  136. while (itGroup.hasNext()){
  137. String groupByName = (String) itGroup.next();
  138. int counts = showChartsMapper.getGroupsCount(groupByName,tableName, screenToColumnS);
  139. if (counts > 366){
  140. chartsDataInfo.setTooMany(true);
  141. }
  142. List<String> groupsData = showChartsMapper.getGroups(groupByName,tableName, screenToColumnS, 366); //查询每个分组系列
  143. Iterator itGroupsData = groupsData.iterator();
  144. //每个分组得到得每个系列
  145. while(itGroupsData.hasNext()){
  146. String groupsName = (String)itGroupsData.next();
  147. if ("".equals(groupsName) || groupsName == null){
  148. continue;
  149. }
  150. List<LineSeriesMap> groupsValue = new ArrayList<LineSeriesMap>();
  151. Iterator itXAxisData = xAxisData.iterator();
  152. //每个系列对应X轴上的值
  153. while (itXAxisData.hasNext()){
  154. String xAxisDataOne = (String) itXAxisData.next();
  155. if ("".equals(xAxisDataOne) || xAxisDataOne == null){
  156. continue;
  157. }
  158. double groupsValueOne = 0;
  159. String groupsValueOnes = null;
  160. groupsValueOnes = timeConverterUtil.getGroupTimeConverter(yAxisType, yColumn, tableName, groupByName, xAxisType,
  161. groupsName, xColumn, xAxisDataOne, screenToColumnS);
  162. if ("".equals(groupsValueOnes) || groupsValueOnes == null){
  163. groupsValueOne = 0;
  164. }else{
  165. groupsValueOne = Double.parseDouble(groupsValueOnes);
  166. }
  167. LineSeriesMap lineSeriesMap = new LineSeriesMap();
  168. lineSeriesMap.setDate(xAxisDataOne);
  169. lineSeriesMap.setValue(groupsValueOne);
  170. groupsValue.add(lineSeriesMap);
  171. }
  172. LineSeries lineSeries = new LineSeries();
  173. lineSeries.setMdata(groupsValue);
  174. lineSeries.setName(groupsName);
  175. serieses.add(lineSeries);
  176. }
  177. }
  178. }
  179. chartsDataInfo.setSerieses(serieses);
  180. }catch (Exception e){
  181. e.printStackTrace();
  182. return new RepEntity(RepCode.erro);
  183. }finally {
  184. DynamicDataSourceContextHolder.clearDataSourceType();
  185. }
  186. return new RepEntity(RepCode.success, chartsDataInfo);
  187. }
  188. }