ShowLineService.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package com.server;
  2. import com.dao.ChartsConfigMapper;
  3. import com.dao.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.util.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){
  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);
  52. if ("".equals(tableName)){
  53. return new RepEntity(RepCode.NoAuthority);
  54. }
  55. int baseId = getChartsDataUtilService.getBaseId(id);
  56. System.out.println("切换数据库"+String.valueOf(baseId));
  57. try{
  58. if (!DynamicDataSourceContextHolder.isContainsDataSource(String.valueOf(baseId))) {
  59. //joinPoint.getSignature() :获取连接点的方法签名对象
  60. System.out.println("数据源 " + String.valueOf(baseId) + " 不存在使用默认的数据源 -> ");
  61. } else {
  62. System.out.println("使用数据源:" + String.valueOf(baseId));
  63. DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(baseId));
  64. }
  65. String xColumn = lineConfigInfo.getxAxis().getColumnRename();
  66. String yColumn = lineConfigInfo.getyAxis().getColumnRename();
  67. String xAxisType = lineConfigInfo.getxAxis().getShowDataType();
  68. List<String> groupBy = lineConfigInfo.getGroups();
  69. if (xColumn == null || "".equals(xColumn) || yColumn == null || "".equals(yColumn)){
  70. return new RepEntity(RepCode.nullAxis);
  71. }
  72. String yType = lineConfigInfo.getyAxis().getShowDataType();
  73. String yAxisType = calculationJudgeUtil.Judge(yType);
  74. List<LineSeriesMap> value = new ArrayList<LineSeriesMap>();
  75. List<LineSeries> serieses = new ArrayList<LineSeries>(); //生成柱状图的系列
  76. List<String> xAxisData = new ArrayList<String>(); //X轴自己用
  77. //取筛选列表
  78. List<Screen> screens = lineConfigInfo.getFilters();
  79. ScreenStr scr = new ScreenStr();
  80. String screen = "";
  81. String screenToColumn = "";
  82. String screenStr = "";
  83. if ("".equals(screens) || screens == null || screens.size() == 0){
  84. screen = "";
  85. }else {
  86. scr = screenUtil.screensUtil(screens, xColumn, xAxisType);
  87. screen = scr.getRet();
  88. screenToColumn = scr.getWithColumnRet();
  89. StringBuilder sb = new StringBuilder(screenToColumn);
  90. if (screenToColumn != null && !("".equals(screenToColumn))){
  91. screenToColumn = String.valueOf(sb .replace(1, 5, "where "));
  92. screen = screenToColumn + " " + screen;
  93. System.out.println("screen:" + screen);
  94. }else {
  95. StringBuilder sb1 = new StringBuilder(screen);
  96. screenStr = String.valueOf(sb1 .replace(1, 5, "where "));
  97. }
  98. }
  99. //X轴
  100. //判断是否为日期类型
  101. timeReture = timeConverterUtil.timeConverter(xColumn, tableName, xAxisType, screen, 366);
  102. xAxisData = timeReture.getValues();
  103. chartsDataInfo.setTooMany(timeReture.isOverdose());
  104. if ("".equals(xAxisData) || xAxisData == null || xAxisData.size() == 0){
  105. return new RepEntity(RepCode.Null);
  106. }
  107. //无分组时Y值
  108. Iterator itX = xAxisData.iterator();
  109. while (itX.hasNext()){
  110. String xdata = (String)itX.next();
  111. if (xdata == null || "".equals(xdata)){
  112. continue;
  113. }
  114. double valueOne = 0;
  115. String valueOnes = null;
  116. // System.out.println("Y:"+ yColumn + "........x:" + xColumn + "........yAxistype:" + yAxisType + "...xtpye:+"+yAxisType+ " xdata:"+xdata);
  117. valueOnes = timeConverterUtil.getTimeValueConverter(yColumn, xColumn, tableName, yAxisType, xAxisType, xdata, screen);
  118. // System.out.println("value:"+valueOnes);
  119. if (valueOnes == null || "".equals(valueOnes)){
  120. valueOne = 0;
  121. }else {
  122. valueOne = Double.parseDouble(valueOnes);
  123. }
  124. LineSeriesMap lineSeriesMap = new LineSeriesMap();
  125. lineSeriesMap.setValue(valueOne);
  126. lineSeriesMap.setDate(xdata);
  127. value.add(lineSeriesMap);
  128. }
  129. LineSeries series = new LineSeries();
  130. // series.setName(yColumn);
  131. series.setMdata(value);
  132. serieses.add(series);
  133. //有分组
  134. if (groupBy.size() != 0){
  135. serieses.remove(0);
  136. Iterator itGroup = groupBy.iterator(); //分组数
  137. //便利分组
  138. while (itGroup.hasNext()){
  139. String groupByName = (String) itGroup.next();
  140. int counts = showChartsMapper.getGroupsCount(groupByName,tableName, screen);
  141. if (counts > 366){
  142. chartsDataInfo.setTooMany(true);
  143. }
  144. List<String> groupsData = showChartsMapper.getGroups(groupByName,tableName, screen, 366); //查询每个分组系列
  145. Iterator itGroupsData = groupsData.iterator();
  146. //每个分组得到得每个系列
  147. while(itGroupsData.hasNext()){
  148. String groupsName = (String)itGroupsData.next();
  149. if ("".equals(groupsName) || groupsName == null){
  150. continue;
  151. }
  152. List<LineSeriesMap> groupsValue = new ArrayList<LineSeriesMap>();
  153. Iterator itXAxisData = xAxisData.iterator();
  154. //每个系列对应X轴上的值
  155. while (itXAxisData.hasNext()){
  156. String xAxisDataOne = (String) itXAxisData.next();
  157. if ("".equals(xAxisDataOne) || xAxisDataOne == null){
  158. continue;
  159. }
  160. double groupsValueOne = 0;
  161. String groupsValueOnes = null;
  162. groupsValueOnes = timeConverterUtil.getGroupTimeConverter(yAxisType, yColumn, tableName, groupByName, xAxisType,
  163. groupsName, xColumn, xAxisDataOne, screen);
  164. if ("".equals(groupsValueOnes) || groupsValueOnes == null){
  165. groupsValueOne = 0;
  166. }else{
  167. groupsValueOne = Double.parseDouble(groupsValueOnes);
  168. }
  169. LineSeriesMap lineSeriesMap = new LineSeriesMap();
  170. lineSeriesMap.setDate(xAxisDataOne);
  171. lineSeriesMap.setValue(groupsValueOne);
  172. groupsValue.add(lineSeriesMap);
  173. }
  174. LineSeries lineSeries = new LineSeries();
  175. lineSeries.setMdata(groupsValue);
  176. lineSeries.setName(groupsName);
  177. serieses.add(lineSeries);
  178. }
  179. }
  180. }
  181. chartsDataInfo.setSerieses(serieses);
  182. }catch (Exception e){
  183. e.printStackTrace();
  184. System.out.println("异常");
  185. return new RepEntity(RepCode.erro);
  186. }finally {
  187. DynamicDataSourceContextHolder.clearDataSourceType();
  188. }
  189. return new RepEntity(RepCode.success, chartsDataInfo);
  190. }
  191. }