MappingServiceImpl.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package org.dbsyncer.biz.impl;
  2. import org.dbsyncer.biz.BizException;
  3. import org.dbsyncer.biz.MappingService;
  4. import org.dbsyncer.biz.checker.Checker;
  5. import org.dbsyncer.biz.vo.ConnectorVo;
  6. import org.dbsyncer.biz.vo.MappingVo;
  7. import org.dbsyncer.biz.vo.MetaVo;
  8. import org.dbsyncer.common.util.CollectionUtils;
  9. import org.dbsyncer.monitor.Monitor;
  10. import org.dbsyncer.parser.enums.ModelEnum;
  11. import org.dbsyncer.parser.model.*;
  12. import org.dbsyncer.storage.constant.ConfigConstant;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.util.Assert;
  19. import java.util.Comparator;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.stream.Collectors;
  23. /**
  24. * @author AE86
  25. * @version 1.0.0
  26. * @date 2019/10/17 23:20
  27. */
  28. @Service
  29. public class MappingServiceImpl extends BaseServiceImpl implements MappingService {
  30. private final Logger logger = LoggerFactory.getLogger(getClass());
  31. @Autowired
  32. private Monitor monitor;
  33. @Autowired
  34. private Checker mappingChecker;
  35. @Override
  36. public String add(Map<String, String> params) {
  37. ConfigModel model = mappingChecker.checkAddConfigModel(params);
  38. return manager.addMapping(model);
  39. }
  40. @Override
  41. public String edit(Map<String, String> params) {
  42. String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
  43. Mapping mapping = assertMappingExist(id);
  44. synchronized (LOCK) {
  45. assertRunning(mapping.getMetaId());
  46. ConfigModel model = mappingChecker.checkEditConfigModel(params);
  47. return manager.editMapping(model);
  48. }
  49. }
  50. @Override
  51. public String remove(String id) {
  52. Mapping mapping = assertMappingExist(id);
  53. synchronized (LOCK) {
  54. assertRunning(mapping.getMetaId());
  55. // 删除meta
  56. manager.removeMeta(mapping.getMetaId());
  57. // 删除tableGroup
  58. List<TableGroup> groupList = manager.getTableGroupAll(id);
  59. if (!CollectionUtils.isEmpty(groupList)) {
  60. groupList.forEach(t -> manager.removeTableGroup(t.getId()));
  61. }
  62. manager.removeMapping(id);
  63. }
  64. return "驱动删除成功";
  65. }
  66. @Override
  67. public MappingVo getMapping(String id) {
  68. Mapping mapping = manager.getMapping(id);
  69. return convertMapping2Vo(mapping);
  70. }
  71. @Override
  72. public List<MappingVo> getMappingAll() {
  73. List<MappingVo> list = manager.getMappingAll()
  74. .stream()
  75. .map(m -> convertMapping2Vo(m))
  76. .sorted(Comparator.comparing(MappingVo::getUpdateTime).reversed())
  77. .collect(Collectors.toList());
  78. return list;
  79. }
  80. @Override
  81. public String start(String id) {
  82. Mapping mapping = assertMappingExist(id);
  83. final String metaId = mapping.getMetaId();
  84. synchronized (LOCK) {
  85. assertRunning(metaId);
  86. // 清空同步记录
  87. Meta meta = manager.getMeta(metaId);
  88. meta.getFail().set(0);
  89. meta.getSuccess().set(0);
  90. manager.editMeta(meta);
  91. manager.start(mapping);
  92. }
  93. return "驱动启动成功";
  94. }
  95. @Override
  96. public String stop(String id) {
  97. Mapping mapping = assertMappingExist(id);
  98. synchronized (LOCK) {
  99. if (!isRunning(mapping.getMetaId())) {
  100. throw new BizException("驱动已停止.");
  101. }
  102. manager.close(mapping);
  103. }
  104. return "驱动停止成功";
  105. }
  106. @Override
  107. public List<MetaVo> getMetaAll() {
  108. List<MetaVo> list = manager.getMetaAll()
  109. .stream()
  110. .map(m -> convertMeta2Vo(m))
  111. .sorted(Comparator.comparing(MetaVo::getUpdateTime).reversed())
  112. .collect(Collectors.toList());
  113. return list;
  114. }
  115. private MappingVo convertMapping2Vo(Mapping mapping) {
  116. String model = mapping.getModel();
  117. Assert.notNull(mapping, "Mapping can not be null.");
  118. Connector s = manager.getConnector(mapping.getSourceConnectorId());
  119. Connector t = manager.getConnector(mapping.getTargetConnectorId());
  120. ConnectorVo sConn = new ConnectorVo(monitor.alive(s.getId()));
  121. BeanUtils.copyProperties(s, sConn);
  122. ConnectorVo tConn = new ConnectorVo(monitor.alive(t.getId()));
  123. BeanUtils.copyProperties(t, tConn);
  124. // 元信息
  125. Meta meta = manager.getMeta(mapping.getMetaId());
  126. Assert.notNull(meta, "Meta can not be null.");
  127. MetaVo metaVo = new MetaVo(ModelEnum.getModelEnum(model).getName());
  128. BeanUtils.copyProperties(meta, metaVo);
  129. MappingVo vo = new MappingVo(sConn, tConn, metaVo);
  130. BeanUtils.copyProperties(mapping, vo);
  131. return vo;
  132. }
  133. private MetaVo convertMeta2Vo(Meta meta) {
  134. Mapping mapping = manager.getMapping(meta.getMappingId());
  135. Assert.notNull(mapping, "驱动不存在.");
  136. ModelEnum modelEnum = ModelEnum.getModelEnum(mapping.getModel());
  137. MetaVo metaVo = new MetaVo(modelEnum.getName());
  138. BeanUtils.copyProperties(meta, metaVo);
  139. return metaVo;
  140. }
  141. /**
  142. * 检查是否存在驱动
  143. *
  144. * @param mappingId
  145. * @return
  146. */
  147. private Mapping assertMappingExist(String mappingId) {
  148. Mapping mapping = manager.getMapping(mappingId);
  149. Assert.notNull(mapping, "驱动不存在.");
  150. return mapping;
  151. }
  152. }