Ver código fonte

手动停止驱动发送通知

AE86 2 anos atrás
pai
commit
f740eadc40

+ 14 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/BaseServiceImpl.java

@@ -5,6 +5,7 @@ import org.dbsyncer.parser.enums.MetaEnum;
 import org.dbsyncer.parser.enums.ModelEnum;
 import org.dbsyncer.parser.logger.LogService;
 import org.dbsyncer.parser.logger.LogType;
+import org.dbsyncer.parser.message.MessageService;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Meta;
@@ -20,6 +21,9 @@ public class BaseServiceImpl {
     @Autowired
     private LogService logService;
 
+    @Autowired
+    private MessageService messageService;
+
     /**
      * 驱动启停锁
      */
@@ -74,4 +78,14 @@ public class BaseServiceImpl {
         }
     }
 
+    /**
+     * 发送通知消息
+     *
+     * @param title
+     * @param content
+     */
+    protected void sendNotifyMessage(String title, String content) {
+        messageService.sendMessage(title, content);
+    }
+
 }

+ 4 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -145,6 +145,10 @@ public class MappingServiceImpl extends BaseServiceImpl implements MappingServic
             manager.close(mapping);
 
             log(LogType.MappingLog.STOP, mapping);
+
+            // 发送关闭驱动通知消息
+            String model = ModelEnum.getModelEnum(mapping.getModel()).getName();
+            sendNotifyMessage("停止驱动", String.format("手动停止驱动:%s(%s)", mapping.getName(), model));
         }
         return "驱动停止成功";
     }

+ 7 - 5
dbsyncer-common/src/main/java/org/dbsyncer/common/model/NotifyMessage.java

@@ -1,5 +1,7 @@
 package org.dbsyncer.common.model;
 
+import java.util.List;
+
 /**
  * 通知消息
  *
@@ -22,7 +24,7 @@ public class NotifyMessage {
     /**
      * 消息接收人
      */
-    private String receiver;
+    private List<String> receivers;
 
     public static NotifyMessage newBuilder() {
         return new NotifyMessage();
@@ -46,12 +48,12 @@ public class NotifyMessage {
         return this;
     }
 
-    public String getReceiver() {
-        return receiver;
+    public List<String> getReceivers() {
+        return receivers;
     }
 
-    public NotifyMessage setReceiver(String receiver) {
-        this.receiver = receiver;
+    public NotifyMessage setReceivers(List<String> receivers) {
+        this.receivers = receivers;
         return this;
     }
 }

+ 0 - 22
dbsyncer-manager/pom.xml

@@ -17,28 +17,6 @@
             <artifactId>dbsyncer-parser</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
-
-        <!-- Cache 缓存服务 -->
-        <dependency>
-            <groupId>org.ghi</groupId>
-            <artifactId>dbsyncer-cache</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-
-        <!-- Storage 存储服务 -->
-        <dependency>
-            <groupId>org.ghi</groupId>
-            <artifactId>dbsyncer-storage</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-
-        <!-- Plugin 插件服务 -->
-        <dependency>
-            <groupId>org.ghi</groupId>
-            <artifactId>dbsyncer-plugin</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-
     </dependencies>
 
 </project>

+ 12 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/message/MessageService.java

@@ -0,0 +1,12 @@
+package org.dbsyncer.parser.message;
+
+public interface MessageService {
+
+    /**
+     * 发送消息
+     *
+     * @param title
+     * @param content
+     */
+    void sendMessage(String title, String content);
+}

+ 85 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/message/MessageServiceImpl.java

@@ -0,0 +1,85 @@
+package org.dbsyncer.parser.message;
+
+import org.dbsyncer.cache.CacheService;
+import org.dbsyncer.common.model.NotifyMessage;
+import org.dbsyncer.common.model.Paging;
+import org.dbsyncer.common.spi.NotifyService;
+import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.parser.Parser;
+import org.dbsyncer.parser.model.UserConfig;
+import org.dbsyncer.storage.StorageService;
+import org.dbsyncer.storage.constant.ConfigConstant;
+import org.dbsyncer.storage.enums.StorageEnum;
+import org.dbsyncer.storage.query.Query;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Component
+public class MessageServiceImpl implements MessageService {
+
+    private String userConfigId;
+
+    @Autowired
+    private CacheService cacheService;
+
+    @Autowired
+    private NotifyService notifyService;
+
+    @Autowired
+    private StorageService storageService;
+
+    @Autowired
+    private Parser parser;
+
+    @Override
+    public void sendMessage(String title, String content) {
+        UserConfig userConfig = getUserConfig();
+        if (null == userConfig) {
+            return;
+        }
+
+        List<String> mails = new ArrayList<>();
+        userConfig.getUserInfoList().forEach(userInfo -> {
+            if (StringUtil.isNotBlank(userInfo.getMail())) {
+                Arrays.asList(StringUtil.split(userInfo.getMail(), ";")).forEach(mail -> mails.add(mail));
+            }
+        });
+        if (CollectionUtils.isEmpty(mails)) {
+            return;
+        }
+        notifyService.sendMessage(NotifyMessage.newBuilder().setTitle(title).setContent(content).setReceivers(mails));
+    }
+
+    private UserConfig getUserConfig() {
+        if (StringUtil.isNotBlank(userConfigId)) {
+            return cacheService.get(userConfigId, UserConfig.class);
+        }
+
+        UserConfig userConfig = null;
+        synchronized (this) {
+            Query query = new Query();
+            query.setType(StorageEnum.CONFIG);
+            query.addFilter(ConfigConstant.CONFIG_MODEL_TYPE, ConfigConstant.USER);
+            query.setPageNum(1);
+            query.setPageSize(1);
+            Paging paging = storageService.query(query);
+            List<Map> data = (List<Map>) paging.getData();
+            if (!CollectionUtils.isEmpty(data)) {
+                Iterator iterator = data.iterator();
+                if (iterator.hasNext()) {
+                    Map map = (Map) iterator.next();
+                    String json = (String) map.get(ConfigConstant.CONFIG_MODEL_JSON);
+                    userConfig = parser.parseObject(json, UserConfig.class);
+                    userConfigId = userConfig.getId();
+                }
+
+            }
+
+        }
+        return userConfig;
+    }
+
+}

+ 0 - 7
dbsyncer-plugin/pom.xml

@@ -11,13 +11,6 @@
     <artifactId>dbsyncer-plugin</artifactId>
 
     <dependencies>
-        <!-- Common 公共层 -->
-        <dependency>
-            <groupId>org.ghi</groupId>
-            <artifactId>dbsyncer-common</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-
         <!-- Connector 连接器 -->
         <dependency>
             <groupId>org.ghi</groupId>

+ 15 - 8
dbsyncer-plugin/src/main/java/org/dbsyncer/plugin/notify/MailNotifyService.java

@@ -1,10 +1,12 @@
 package org.dbsyncer.plugin.notify;
 
+import org.dbsyncer.common.config.AppConfig;
 import org.dbsyncer.common.model.NotifyMessage;
 import org.dbsyncer.common.spi.NotifyService;
 import org.dbsyncer.common.util.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
@@ -14,6 +16,8 @@ import javax.annotation.PostConstruct;
 import javax.mail.*;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Properties;
 
 /**
@@ -30,6 +34,9 @@ public class MailNotifyService implements NotifyService {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
+    @Autowired
+    private AppConfig appConfig;
+
     /**
      * 邮箱账户
      */
@@ -66,8 +73,8 @@ public class MailNotifyService implements NotifyService {
     public void sendMessage(NotifyMessage notifyMessage) {
         try {
             checkMail(notifyMessage);
-            String to = notifyMessage.getReceiver();
-            String title = notifyMessage.getTitle();
+            // 统一应用标题
+            String title = String.format("【%s通知】%s", appConfig.getName(), notifyMessage.getTitle());
             String content = notifyMessage.getContent();
 
             // 创建邮件消息
@@ -76,11 +83,11 @@ public class MailNotifyService implements NotifyService {
             message.setFrom(new InternetAddress(username));
 
             // 接收人
-            String[] receiverArray = StringUtil.split(to, ";");
-            int length = receiverArray.length;
-            InternetAddress[] addresses = new InternetAddress[length];
-            for (int i = 0; i < length; i++) {
-                addresses[i] = new InternetAddress(receiverArray[i]);
+            List<String> messageReceivers = notifyMessage.getReceivers();
+            int size = messageReceivers.size();
+            InternetAddress[] addresses = new InternetAddress[size];
+            for (int i = 0; i < size; i++) {
+                addresses[i] = new InternetAddress(messageReceivers.get(i));
             }
             message.setRecipients(Message.RecipientType.TO, addresses);
 
@@ -101,7 +108,7 @@ public class MailNotifyService implements NotifyService {
         Assert.notNull(notifyMessage, "通知请求不能为空");
         Assert.notNull(notifyMessage.getTitle(), "邮件主题不能为空");
         Assert.notNull(notifyMessage.getContent(), "邮件内容不能为空");
-        Assert.notNull(notifyMessage.getReceiver(), "邮件收件人不能为空");
+        Assert.notEmpty(notifyMessage.getReceivers(), "邮件收件人不能为空");
     }
 
     public void setUsername(String username) {

+ 0 - 7
dbsyncer-storage/pom.xml

@@ -11,13 +11,6 @@
     <artifactId>dbsyncer-storage</artifactId>
 
     <dependencies>
-        <!-- Common 公共层 -->
-        <dependency>
-            <groupId>org.ghi</groupId>
-            <artifactId>dbsyncer-common</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-        
         <!-- Cluster 集群服务 -->
         <dependency>
             <groupId>org.ghi</groupId>

+ 5 - 5
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/MappingController.java

@@ -70,7 +70,7 @@ public class MappingController extends BaseController {
 
     @PostMapping("/remove")
     @ResponseBody
-    public RestResult remove(HttpServletRequest request, @RequestParam(value = "id") String id) {
+    public RestResult remove(@RequestParam(value = "id") String id) {
         try {
             return RestResult.restSuccess(mappingService.remove(id));
         } catch (Exception e) {
@@ -81,7 +81,7 @@ public class MappingController extends BaseController {
 
     @PostMapping("/start")
     @ResponseBody
-    public RestResult start(HttpServletRequest request, @RequestParam(value = "id") String id) {
+    public RestResult start(@RequestParam(value = "id") String id) {
         try {
             return RestResult.restSuccess(mappingService.start(id));
         } catch (Exception e) {
@@ -92,7 +92,7 @@ public class MappingController extends BaseController {
 
     @PostMapping("/stop")
     @ResponseBody
-    public RestResult stop(HttpServletRequest request, @RequestParam(value = "id") String id) {
+    public RestResult stop(@RequestParam(value = "id") String id) {
         try {
             return RestResult.restSuccess(mappingService.stop(id));
         } catch (Exception e) {
@@ -103,7 +103,7 @@ public class MappingController extends BaseController {
 
     @GetMapping("/get")
     @ResponseBody
-    public RestResult get(HttpServletRequest request, @RequestParam(value = "id") String id) {
+    public RestResult get(@RequestParam(value = "id") String id) {
         try {
             return RestResult.restSuccess(mappingService.getMapping(id));
         } catch (Exception e) {
@@ -114,7 +114,7 @@ public class MappingController extends BaseController {
 
     @GetMapping("/getAll")
     @ResponseBody
-    public RestResult getAll(HttpServletRequest request) {
+    public RestResult getAll() {
         try {
             return RestResult.restSuccess(mappingService.getMappingAll());
         } catch (Exception e) {