ShowHistogramService.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package com.server;
  2. import com.dao.ChartsConfigMapper;
  3. import com.dao.ShowChartsMapper;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.model.bo.Screen;
  6. import com.model.bo.ScreenStr;
  7. import com.model.bo.Series;
  8. import com.model.pojo.RepCode;
  9. import com.model.pojo.RepEntity;
  10. import com.model.vo.configVo.HistogramConfigInfo;
  11. import com.model.vo.dataVo.ChartsDataInfo;
  12. import com.util.BasesSource.DynamicDataSourceContextHolder;
  13. import com.util.CalculationJudgeUtil;
  14. import com.util.ScreenUtil;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Repository;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.util.ArrayList;
  19. import java.util.Iterator;
  20. import java.util.List;
  21. @Repository
  22. public class ShowHistogramService {
  23. @Autowired
  24. ShowChartsMapper showChartsMapper;
  25. @Autowired
  26. TimeConverterUtil timeConverterUtil;
  27. @Autowired
  28. CalculationJudgeUtil calculationJudgeUtil;
  29. @Autowired
  30. ChartsConfigMapper chartsConfigMapper;
  31. @Autowired
  32. ObjectMapper objectMapper;
  33. @Autowired
  34. GetChartsDataUtilService getChartsDataUtilService;
  35. @Autowired
  36. ScreenUtil screenUtil;
  37. /*
  38. 柱状图数据展示
  39. */
  40. @Transactional
  41. public RepEntity showHistogram(HistogramConfigInfo histogramConfigInfo){
  42. ChartsDataInfo chartsDataInfo = new ChartsDataInfo();
  43. if (histogramConfigInfo == null || "".equals(histogramConfigInfo)){
  44. return new RepEntity(RepCode.Null);
  45. }
  46. //取表名
  47. int id = histogramConfigInfo.getId();
  48. String tableName = chartsConfigMapper.getTableName(id);
  49. if (tableName == null || "".equals(tableName)){
  50. return new RepEntity(RepCode.nullTableName);
  51. }
  52. String baseName = getChartsDataUtilService.getBaseName(id);
  53. System.out.println("切换数据库"+baseName);
  54. try{
  55. if (!DynamicDataSourceContextHolder.isContainsDataSource(baseName)) {
  56. //joinPoint.getSignature() :获取连接点的方法签名对象
  57. System.out.println("数据源 " + baseName + " 不存在使用默认的数据源 -> ");
  58. } else {
  59. System.out.println("使用数据源:" + baseName);
  60. DynamicDataSourceContextHolder.setDataSourceType(baseName);
  61. }
  62. String xColumn = histogramConfigInfo.getxAxis().getColumnRename();
  63. String yColumn = histogramConfigInfo.getyAxis().getColumnRename();
  64. String xColumnType = histogramConfigInfo.getxAxis().getColumnType();
  65. String xAxisType = histogramConfigInfo.getxAxis().getShowDataType();
  66. List<String> groupBy = histogramConfigInfo.getGroups();
  67. if (xColumn == null || "".equals(xColumn) || yColumn == null || "".equals(yColumn)){
  68. return new RepEntity(RepCode.nullAxis);
  69. }
  70. String yType = histogramConfigInfo.getyAxis().getShowDataType();
  71. String yAxisType = calculationJudgeUtil.Judge(yType);
  72. Series series = new Series();
  73. List<Double> value = new ArrayList<Double>();
  74. List<Series> serieses = new ArrayList<Series>(); //生成柱状图的系列
  75. List<String> xAxisData = new ArrayList<String>(); //X轴自己用
  76. List<String> xData = new ArrayList<String>(); //X轴前端用
  77. //取筛选列表
  78. List<Screen> screens = histogramConfigInfo.getFilters();
  79. ScreenStr scr = new ScreenStr();
  80. String screen = ""; //正常筛选条件
  81. String screenToColumn = ""; //跟目标列相同的筛选条件
  82. if ("".equals(screens) || screens == null || screens.size() == 0){
  83. screen = "";
  84. }else {
  85. scr = screenUtil.screensUtil(screens, xColumn, xColumnType);
  86. screen = scr.getRet();
  87. screenToColumn = scr.getWithColumnRet();
  88. StringBuilder sb = new StringBuilder(screenToColumn);
  89. System.out.println("sb:"+sb);
  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. screen = String.valueOf(sb1 .replace(1, 5, "where "));
  97. }
  98. }
  99. //X轴
  100. //判断是否为日期类型
  101. if ("time".equals(xColumnType)){
  102. xAxisData = timeConverterUtil.timeConverter(xColumn, tableName, xAxisType, screen);
  103. System.out.println("xA:" + xAxisData);
  104. xData = timeConverterUtil.toRespons(xAxisData,xAxisType );
  105. System.out.println("data:"+xAxisData);
  106. }else {
  107. xAxisData = showChartsMapper.getXAxis(xColumn, tableName, screen);
  108. }
  109. if ("".equals(xAxisData) || xAxisData == null || xAxisData.size() == 0){
  110. return new RepEntity(RepCode.Null);
  111. }
  112. if ("week".equals(xAxisType) || "month".equals(xAxisType) || "quarter".equals(xAxisType)){
  113. chartsDataInfo.setxAxis(xData);
  114. }else {
  115. chartsDataInfo.setxAxis(xAxisData);
  116. }
  117. //无分组时Y值
  118. Iterator itX = xAxisData.iterator();
  119. while (itX.hasNext()){
  120. String xdata = (String)itX.next();
  121. if (xdata == null || "".equals(xdata)){
  122. continue;
  123. }
  124. double valueOne = 0;
  125. String valueOnes = null;
  126. if ("time".equals(xColumnType)){
  127. valueOnes = timeConverterUtil.getTimeValueConverter(yColumn, xColumn, tableName, yAxisType, xAxisType, xdata);
  128. }else {
  129. valueOnes = showChartsMapper.getValues(yColumn, xColumn, tableName, yAxisType, xdata);
  130. }
  131. if (valueOnes == null || "".equals(valueOnes)){
  132. valueOne = 0;
  133. }else {
  134. valueOne = Double.parseDouble(valueOnes);
  135. }
  136. value.add(valueOne);
  137. }
  138. System.out.println(value);
  139. series.setName(xColumn);
  140. series.setValue(value);
  141. serieses.add(series);
  142. System.out.println(serieses);
  143. //有分组
  144. if (groupBy.size() != 0){
  145. serieses.remove(0);
  146. Iterator itGroup = groupBy.iterator(); //分组数
  147. //便利分组
  148. while (itGroup.hasNext()){
  149. String groupByName = (String) itGroup.next(); //每个分组的组名
  150. List<String> groupsData = showChartsMapper.getGroups(groupByName,tableName, screen); //查询每个分组系列
  151. System.out.println("groupdata:"+ groupsData.toString());
  152. Iterator itGroupsData = groupsData.iterator();
  153. //每个分组得到得每个系列
  154. while(itGroupsData.hasNext()){
  155. Series ne = new Series();
  156. String groupsName = (String)itGroupsData.next();
  157. if (groupsName == null || "".equals(groupsName)){
  158. continue;
  159. }
  160. ne.setName(groupsName);
  161. ne.setStack(groupByName);
  162. List<Double> groupsValue = new ArrayList<Double>();
  163. Iterator itXAxisData = xAxisData.iterator();
  164. //每个系列对应X轴上的值
  165. while (itXAxisData.hasNext()){
  166. String xAxisDataOne = (String) itXAxisData.next();
  167. if (xAxisDataOne == null || "".equals(xAxisDataOne)){
  168. continue;
  169. }
  170. double groupsValueOne = 0;
  171. String groupsValueOnes = null;
  172. if ("time".equals(xColumnType)){
  173. groupsValueOnes = timeConverterUtil.getGroupTimeConverter(yAxisType, yColumn, tableName, groupByName, xAxisType,
  174. groupsName, xColumn, xAxisDataOne);
  175. }else {
  176. groupsValueOnes = showChartsMapper.getGroupsValue(yAxisType, yColumn, tableName, groupByName, groupsName, xColumn, xAxisDataOne);
  177. }
  178. if ("".equals(groupsValueOnes) || groupsValueOnes == null){
  179. groupsValueOne = 0;
  180. }else{
  181. groupsValueOne = Double.parseDouble(groupsValueOnes);
  182. }
  183. groupsValue.add(groupsValueOne);
  184. }
  185. ne.setValue(groupsValue);
  186. System.out.println("值:"+ series);
  187. serieses.add(ne);
  188. }
  189. System.out.println(serieses);
  190. }
  191. }
  192. chartsDataInfo.setSerieses(serieses);
  193. }catch (Exception e){
  194. e.printStackTrace();
  195. System.out.println("异常");
  196. return new RepEntity(RepCode.erro);
  197. }finally {
  198. DynamicDataSourceContextHolder.clearDataSourceType();
  199. }
  200. return new RepEntity(RepCode.success, chartsDataInfo);
  201. }
  202. }