DataConnectorService.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. package com.server.dataSource;
  2. import com.dao.chart.ChartsConfigMapper;
  3. import com.dao.dataSource.DataConnectorMapper;
  4. import com.dao.user.UserMapper;
  5. import com.fasterxml.jackson.core.JsonProcessingException;
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import com.github.pagehelper.PageInfo;
  8. import com.model.bo.BaseToDataInfo;
  9. import com.model.bo.ColumnConfigAndSql;
  10. import com.model.bo.DatabaseConfig;
  11. import com.model.bo.GroupUpdateId;
  12. import com.model.po.BaseConfig;
  13. import com.model.po.DataConnector;
  14. import com.model.po.DataConnectorList;
  15. import com.model.pojo.RepCode;
  16. import com.model.pojo.RepEntity;
  17. import com.model.pojo.TestPage;
  18. import com.model.vo.configVo.ChangeOrderInfo;
  19. import com.model.vo.configVo.ColumnRenameInfo;
  20. import com.model.vo.configVo.DataConnectorInfo;
  21. import com.model.vo.configVo.GroupInfo;
  22. import com.model.vo.dataVo.ColumnValuesInfo;
  23. import com.server.chart.GetChartsDataUtilService;
  24. import com.server.strategy.StrategysService;
  25. import com.server.chart.ChartsUtilService;
  26. import com.config.BasesSource.DynamicDataSourceContextHolder;
  27. import com.util.GetTokenData;
  28. import com.util.ScreenUtil;
  29. import org.springframework.beans.BeanUtils;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Service;
  32. import java.util.ArrayList;
  33. import java.util.Iterator;
  34. import java.util.List;
  35. import java.util.Map;
  36. @Service
  37. public class DataConnectorService {
  38. @Autowired
  39. private DataConnectorMapper dataConnectorMapper;
  40. @Autowired
  41. ObjectMapper objectmapper;
  42. @Autowired
  43. ScreenUtil screenUtil;
  44. @Autowired
  45. StrategysService strategysService;
  46. @Autowired
  47. GetTokenData getTokenData;
  48. @Autowired
  49. UserMapper userMapper;
  50. @Autowired
  51. ChartsConfigMapper chartsConfigMapper;
  52. @Autowired
  53. ChartsUtilService chartsUtilService;
  54. @Autowired
  55. GetChartsDataUtilService getChartsDataUtilService;
  56. /*
  57. 保存数据源
  58. */
  59. public RepEntity setDataConnector(String token, DataConnectorInfo dataConnectorInfo){
  60. Map<String, String> resultMap = getTokenData.getTokenData(token);
  61. int id = Integer.parseInt(resultMap.get("id"));
  62. String userName = resultMap.get("name");
  63. if (dataConnectorInfo == null || "".equals(dataConnectorInfo)){
  64. return new RepEntity(RepCode.Null);
  65. }
  66. DataConnector dataConnector = new DataConnector();
  67. BeanUtils.copyProperties(dataConnectorInfo,dataConnector);
  68. //取出数据库连接ID
  69. DatabaseConfig dbConfig = dataConnectorInfo.getDbConfig();
  70. int dbConId = dbConfig.getId();
  71. String pw = dataConnectorMapper.getBasesById(dbConId);
  72. dbConfig.setPassWord(pw);
  73. // String tableName = SqlMatch.matchSql(dataConnector.getLoadObject());
  74. dataConnector.setTableName(dataConnector.getLoadObject());
  75. String columnConfig = null;
  76. String databaseConfig = null;
  77. String dataTag = null;
  78. try {
  79. columnConfig = objectmapper.writeValueAsString(dataConnectorInfo.getColumnConfig());
  80. } catch (JsonProcessingException e) {
  81. e.printStackTrace();
  82. }
  83. try {
  84. databaseConfig = objectmapper.writeValueAsString(dbConfig);
  85. } catch (JsonProcessingException e) {
  86. e.printStackTrace();
  87. }
  88. try {
  89. dataTag = objectmapper.writeValueAsString(dataConnectorInfo.getDataTag());
  90. } catch (JsonProcessingException e) {
  91. e.printStackTrace();
  92. }
  93. dataConnector.setColumnConfig(columnConfig);
  94. dataConnector.setDbConfig(databaseConfig);
  95. dataConnector.setDataTag(dataTag);
  96. if (dataConnector.getConnectorGroup() == 0){
  97. dataConnector.setConnectorGroup(-1);
  98. }
  99. if (dataConnectorInfo.getNote() == null || "".equals(dataConnectorInfo)){
  100. dataConnector.setNote("");
  101. }
  102. System.out.println(dataConnector);
  103. dataConnector.setCreateBy(userName);
  104. dataConnector.setCreateId(id);
  105. dataConnectorMapper.insertDataConnector(dataConnector);
  106. int dataId = dataConnector.getDataId();
  107. return new RepEntity(RepCode.success,dataId);
  108. }
  109. //查看数据源列表
  110. public RepEntity getListConnector(String token, TestPage testPage){
  111. Map<String, String> resultMap = getTokenData.getTokenData(token);
  112. String id = resultMap.get("id");
  113. System.out.println("id:" + id);
  114. List<DataConnectorList> listConnector = dataConnectorMapper.getDataConnectorList(Integer.parseInt(id), testPage.enablePaging());
  115. List<DataConnectorList> listConnectors = new ArrayList<>();
  116. Iterator isList = listConnector.iterator();
  117. while (isList.hasNext()){
  118. DataConnectorList dataConnectorList = (DataConnectorList) isList.next();
  119. System.out.println("ddddd:"+dataConnectorList);
  120. BaseConfig baseConfig = new BaseConfig();
  121. String dbConfig = dataConnectorList.getDbConfig();
  122. try {
  123. baseConfig = objectmapper.readValue(dbConfig, BaseConfig.class);
  124. } catch (Exception e) {
  125. e.printStackTrace();
  126. }
  127. baseConfig.setPassWord("");
  128. try{
  129. dbConfig = objectmapper.writeValueAsString(baseConfig);
  130. }catch (Exception e) {
  131. e.printStackTrace();
  132. }
  133. dataConnectorList.setDbConfig(dbConfig);
  134. listConnectors.add(dataConnectorList);
  135. }
  136. PageInfo<DataConnectorList> pageInfo = new PageInfo<>(listConnectors);
  137. return new RepEntity(RepCode.success, pageInfo);
  138. }
  139. /*
  140. 查看单个数据源配置
  141. */
  142. public RepEntity getConnector(int id){
  143. DataConnector dataConnector = dataConnectorMapper.getOneData(id);
  144. if (dataConnector == null){
  145. return new RepEntity(RepCode.DataNonExistent);
  146. }
  147. BaseConfig baseConfig = new BaseConfig();
  148. String dbConfig = dataConnector.getDbConfig();
  149. try {
  150. baseConfig = objectmapper.readValue(dbConfig, BaseConfig.class);
  151. } catch (Exception e) {
  152. e.printStackTrace();
  153. }
  154. baseConfig.setPassWord("");
  155. try{
  156. dbConfig = objectmapper.writeValueAsString(baseConfig);
  157. }catch (Exception e) {
  158. e.printStackTrace();
  159. }
  160. dataConnector.setDbConfig(dbConfig);
  161. System.out.println(dataConnector);
  162. return new RepEntity(RepCode.success, dataConnector);
  163. }
  164. /*
  165. 更新数据源配置
  166. */
  167. public RepEntity updateData(DataConnectorInfo dataConnectorInfo){
  168. if (dataConnectorInfo == null && "".equals(dataConnectorInfo)){
  169. return new RepEntity(RepCode.Null);
  170. }
  171. DataConnector dataConnector = new DataConnector();
  172. BeanUtils.copyProperties(dataConnectorInfo,dataConnector);
  173. //获取表名
  174. // String tableName = SqlMatch.matchSql(dataConnector.getLoadObject());
  175. dataConnector.setTableName(dataConnector.getLoadObject());
  176. List<ColumnRenameInfo> columnConfig = dataConnectorInfo.getColumnConfig();
  177. // DatabaseConfig dbConfig = dataConnectorInfo.getDbConfig();
  178. List<String> dataTag = dataConnectorInfo.getDataTag();
  179. String columnConfigJson = null;
  180. String dbConfigJson = null;
  181. String dataTagJson = null;
  182. if (!("".equals(columnConfig)) && columnConfig != null){
  183. try {
  184. columnConfigJson = objectmapper.writeValueAsString(columnConfig);
  185. } catch (JsonProcessingException e) {
  186. e.printStackTrace();
  187. }
  188. dataConnector.setColumnConfig(columnConfigJson);
  189. }
  190. dataConnector.setDbConfig(dbConfigJson);
  191. if (dataTag != null){
  192. try {
  193. dataTagJson = objectmapper.writeValueAsString(dataTag);
  194. } catch (JsonProcessingException e) {
  195. e.printStackTrace();
  196. }
  197. dataConnector.setDataTag(dataTagJson);
  198. }
  199. if (dataConnector.getConnectorGroup() == 0){
  200. dataConnector.setConnectorGroup(-1);
  201. }
  202. System.out.println(dataConnector);
  203. dataConnectorMapper.updateData(dataConnector);
  204. return new RepEntity(RepCode.success);
  205. }
  206. /*
  207. 转交数据源
  208. */
  209. public RepEntity changeOrder(ChangeOrderInfo changeOrderInfo, String token){
  210. Map<String, String> resMap = getTokenData.getTokenData(token);
  211. int userId = Integer.parseInt(resMap.get("id"));
  212. String name = userMapper.getName(changeOrderInfo.getUserId());
  213. int createId = dataConnectorMapper.getCreateIdById(changeOrderInfo.getId());
  214. if (createId != userId){
  215. return new RepEntity(RepCode.NoAuthority);
  216. }
  217. dataConnectorMapper.updataOrder(name, changeOrderInfo.getUserId(), changeOrderInfo.getId());
  218. return new RepEntity(RepCode.success);
  219. }
  220. /*
  221. 更新数据源分组
  222. */
  223. public RepEntity updateConfigGroup(GroupUpdateId groupUpdateId){
  224. int id = groupUpdateId.getId();
  225. int groupId = groupUpdateId.getGroupId();
  226. dataConnectorMapper.updateConfigGroup(id, groupId);
  227. return new RepEntity(RepCode.success);
  228. }
  229. /*
  230. 删除数据源
  231. */
  232. public RepEntity delDataConnector(List<Integer> idList){
  233. Iterator isList = idList.iterator();
  234. // while (isList.hasNext()){
  235. // int id = (int) isList.next();
  236. // List<String> chartName = dataConnectorMapper.getChartsName(id);
  237. // if (chartName.size() != 0){
  238. // return new RepEntity(RepCode.hasChartsUsing, chartName);
  239. // }
  240. // }
  241. dataConnectorMapper.deleteData(idList);
  242. return new RepEntity(RepCode.success);
  243. }
  244. /*
  245. 创建数据源分组
  246. */
  247. public RepEntity setDataConnectorGroup(GroupInfo groupInfo){
  248. if (groupInfo == null || "".equals(groupInfo)){
  249. return new RepEntity(RepCode.Null);
  250. }
  251. dataConnectorMapper.setConnectorGroup(groupInfo);
  252. int id = groupInfo.getId();
  253. return new RepEntity(RepCode.success, id);
  254. }
  255. /*
  256. 更新数据源分组
  257. */
  258. public RepEntity updataDataConnectorGroup(GroupInfo groupInfo){
  259. dataConnectorMapper.updataConnectorGroup(groupInfo);
  260. return new RepEntity(RepCode.success);
  261. }
  262. /*
  263. 批量更新数据源分组
  264. */
  265. public RepEntity updataConnectorGroups(List<GroupInfo> groupInfoList){
  266. Iterator isList = groupInfoList.iterator();
  267. GroupInfo groupInfo = new GroupInfo();
  268. while (isList.hasNext()){
  269. groupInfo = (GroupInfo) isList.next();
  270. dataConnectorMapper.updataConnectorGroup(groupInfo);
  271. }
  272. return new RepEntity(RepCode.success);
  273. }
  274. /*
  275. 删除数据源分组
  276. */
  277. public RepEntity delDataConnectorGroup(List<Integer> idList){
  278. List<Integer> integerList = idList;
  279. Iterator isList = integerList.iterator();
  280. while (isList.hasNext()){
  281. int id = (int) isList.next();
  282. List<String> groupName = dataConnectorMapper.getFatherId(id);
  283. if (groupName.size() != 0){
  284. return new RepEntity(RepCode.hasGroupUsing);
  285. }
  286. List<String> chartName = dataConnectorMapper.getConName(id);
  287. if (chartName.size() != 0){
  288. return new RepEntity(RepCode.hasConUsing);
  289. }
  290. }
  291. dataConnectorMapper.delConnectorGroup(idList);
  292. return new RepEntity(RepCode.success);
  293. }
  294. /*
  295. 查询数据源分组列表
  296. */
  297. public RepEntity getConnectorGroup(){
  298. return new RepEntity(RepCode.success, dataConnectorMapper.getConnectorGroup());
  299. }
  300. /*
  301. 查询数据源数据
  302. */
  303. public RepEntity getConnectorData(String token, BaseToDataInfo baseToDataInfo){
  304. int dataId = baseToDataInfo.getId();
  305. int baseId = getChartsDataUtilService.getBaseIdByConnect(dataId);
  306. System.out.println("切换数据库"+baseId);
  307. Map<String, String> resultMap = getTokenData.getTokenData(token);
  308. int id = Integer.parseInt(resultMap.get("id"));
  309. int createId = dataConnectorMapper.getCreateIdById(dataId);
  310. ColumnValuesInfo columnValuesInfo = new ColumnValuesInfo();
  311. ColumnConfigAndSql columnConfigAndSql = chartsConfigMapper.getConfigAndSql(dataId);
  312. String sql = columnConfigAndSql.getSql();
  313. String columnConfig = columnConfigAndSql.getColumnConfig();
  314. columnValuesInfo.setColumnConfig(columnConfig);
  315. String sqls = chartsUtilService.columnNameUtil(id, dataId, sql, true, 0, createId);
  316. try {
  317. if (!DynamicDataSourceContextHolder.isContainsDataSource(String.valueOf(baseId))) {
  318. //joinPoint.getSignature() :获取连接点的方法签名对象
  319. System.out.println("数据源 " + baseId + " 不存在使用默认的数据源 -> ");
  320. } else {
  321. System.out.println("使用数据源:" + baseId);
  322. DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(baseId));
  323. }
  324. List<Map<String, Object>> val = new ArrayList<>();
  325. if (id == createId) {
  326. val = dataConnectorMapper.getValues(sql, baseToDataInfo.getTestPage().enablePaging());
  327. } else {
  328. if ("".equals(sqls)) {
  329. return new RepEntity(RepCode.NoAuthority);
  330. }
  331. val = dataConnectorMapper.getValues(sql, baseToDataInfo.getTestPage().enablePaging());
  332. }
  333. PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(val);
  334. columnValuesInfo.setValues(pageInfo);
  335. } catch (Exception e) {
  336. e.printStackTrace();
  337. System.out.println("异常");
  338. return new RepEntity(RepCode.erro);
  339. } finally {
  340. System.out.println("关闭数据源");
  341. DynamicDataSourceContextHolder.clearDataSourceType();
  342. }
  343. return new RepEntity(RepCode.success, columnValuesInfo);
  344. }
  345. }