Procházet zdrojové kódy

feat:添加渠道类型入库

荭琪枫 před 2 roky
rodič
revize
153d271414
27 změnil soubory, kde provedl 609 přidání a 38 odebrání
  1. 13 0
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/enums/ChannelEnum.java
  2. 27 0
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/event/MessageEvent.java
  3. 6 3
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/DingTalkEventListener.java
  4. 8 4
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/EmailEventListener.java
  5. 12 5
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/MessageEventListener.java
  6. 16 0
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/PhoneMessageEventListener.java
  7. 4 3
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/QyWechatEventListener.java
  8. 16 0
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/VoiceEventListener.java
  9. 1 0
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/model/EmailConfig.java
  10. 4 0
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/model/Message.java
  11. 0 12
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/notify/EventListener.java
  12. 8 7
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/notify/EventManager.java
  13. 11 4
      iot-common/iot-message-notify/src/main/java/cc/iotkit/message/service/MessageService.java
  14. 12 0
      iot-data/iot-data-service/src/main/java/cc/iotkit/data/IChannelConfigData.java
  15. 12 0
      iot-data/iot-data-service/src/main/java/cc/iotkit/data/IChannelData.java
  16. 11 0
      iot-data/iot-data-service/src/main/java/cc/iotkit/data/IChannelTemplateData.java
  17. 29 0
      iot-data/iot-model/src/main/java/cc/iotkit/model/notify/Channel.java
  18. 30 0
      iot-data/iot-model/src/main/java/cc/iotkit/model/notify/ChannelConfig.java
  19. 22 0
      iot-data/iot-model/src/main/java/cc/iotkit/model/notify/ChannelTemplate.java
  20. 12 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/ChannelRepository.java
  21. 20 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/ChannelMapper.java
  22. 28 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbChannel.java
  23. 54 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/ChannelConfigDataImpl.java
  24. 70 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/ChannelDataImpl.java
  25. 53 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/ChannelTemplateDataImpl.java
  26. 82 0
      iot-starter/src/main/java/cc/iotkit/manager/controller/NotifyController.java
  27. 48 0
      iot-starter/src/main/java/cc/iotkit/manager/service/NotifyService.java

+ 13 - 0
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/enums/ChannelEnum.java

@@ -0,0 +1,13 @@
+package cc.iotkit.message.enums;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 15:01
+ * description:
+ **/
+public enum ChannelEnum {
+    DingTalk,
+    QyWechat,
+    Email,
+    Phone;
+}

+ 27 - 0
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/event/MessageEvent.java

@@ -0,0 +1,27 @@
+package cc.iotkit.message.event;
+
+import cc.iotkit.message.model.Message;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 14:14
+ * description:
+ **/
+
+public class MessageEvent extends ApplicationEvent {
+    private Message message;
+
+    public MessageEvent(Message message) {
+        super(message);
+        this.message = message;
+    }
+
+    public Message getMessage() {
+        return message;
+    }
+
+    public void setMessage(Message message) {
+        this.message = message;
+    }
+}

+ 6 - 3
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/DingTalkEventListener.java

@@ -3,9 +3,10 @@ package cc.iotkit.message.listener;
 import cc.iotkit.message.config.VertxManager;
 import cc.iotkit.message.model.DingTalkMessage;
 import cc.iotkit.message.model.Message;
-import cc.iotkit.message.notify.EventListener;
 import io.vertx.ext.web.client.WebClient;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
 
 /**
  * author: 石恒
@@ -13,16 +14,18 @@ import lombok.extern.slf4j.Slf4j;
  * description:
  **/
 @Slf4j
-public class DingTalkEventListener implements EventListener {
+@Component
+public class DingTalkEventListener implements MessageEventListener {
     private String baseUrl = "https://oapi.dingtalk.com/robot/send?access_token=%s";
 
     @Override
+    @EventListener(condition = "message.channel()='DingTalk'")
     public void doEvent(Message message) {
         WebClient client = WebClient.create(VertxManager.INSTANCE.getVertx());
         String url = String.format(baseUrl, message.getKey());
         DingTalkMessage qyWechatMessage = DingTalkMessage.builder()
                 .msgtype("text")
-                .text(DingTalkMessage.MessageContent.builder().content(message.getContent()).build())
+                .text(DingTalkMessage.MessageContent.builder().content(getContent(message)).build())
                 .build();
         client.post(url).sendJson(qyWechatMessage)
                 .onSuccess(response -> log.info("Received response with status code" + response.statusCode()))

+ 8 - 4
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/EmailEventListener.java

@@ -2,10 +2,11 @@ package cc.iotkit.message.listener;
 
 import cc.iotkit.message.model.EmailConfig;
 import cc.iotkit.message.model.Message;
-import cc.iotkit.message.notify.EventListener;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
 import org.springframework.mail.javamail.JavaMailSenderImpl;
 import org.springframework.mail.javamail.MimeMessageHelper;
+import org.springframework.stereotype.Component;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
@@ -17,9 +18,11 @@ import java.util.Properties;
  * description:
  **/
 @Slf4j
-public class EmailEventListener implements EventListener {
+@Component
+public class EmailEventListener implements MessageEventListener {
 
     @Override
+    @EventListener(condition = "message.channel()='Email'")
     public void doEvent(Message message) {
         EmailConfig emailConfig = new EmailConfig();
         JavaMailSenderImpl jms = new JavaMailSenderImpl();
@@ -28,10 +31,11 @@ public class EmailEventListener implements EventListener {
         jms.setPassword(emailConfig.getPassWord());
         jms.setDefaultEncoding("utf-8");
         Properties p = new Properties();
-        p.setProperty("mail.smtp.auth", "true");
+        p.setProperty("mail.smtp.auth", String.valueOf(null == emailConfig.getSmtpAuth() || emailConfig.getSmtpAuth()));
         jms.setJavaMailProperties(p);
         MimeMessage mimeMessage = jms.createMimeMessage();
         try {
+            String content = getContent(message);
             MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
             //收件人
             String[] split = emailConfig.getTo().split(",");
@@ -39,7 +43,7 @@ public class EmailEventListener implements EventListener {
             //标题
             messageHelper.setSubject(emailConfig.getTitle());
             //内容
-            messageHelper.setText(emailConfig.getContent(), true);
+            messageHelper.setText(content, true);
             //发件人
             messageHelper.setFrom(emailConfig.getFrom());
             jms.send(mimeMessage);

+ 12 - 5
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/MessageEventListener.java

@@ -1,17 +1,24 @@
 package cc.iotkit.message.listener;
 
 import cc.iotkit.message.model.Message;
-import cc.iotkit.message.notify.EventListener;
+
+import java.util.Map;
 
 /**
  * author: 石恒
- * date: 2023-05-08 15:09
+ * date: 2023-05-08 15:08
  * description:
  **/
-public class MessageEventListener implements EventListener {
+public interface MessageEventListener {
 
-    @Override
-    public void doEvent(Message message) {
+    void doEvent(Message message);
 
+    default String getContent(Message message) {
+        String content = message.getContent();
+        Map<String, String> param = message.getParam();
+        for (String key : param.keySet()) {
+            content = content.replaceAll("${" + key + "}", param.get(key));
+        }
+        return content;
     }
 }

+ 16 - 0
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/PhoneMessageEventListener.java

@@ -0,0 +1,16 @@
+package cc.iotkit.message.listener;
+
+import cc.iotkit.message.model.Message;
+
+/**
+ * author: 石恒
+ * date: 2023-05-08 15:09
+ * description:
+ **/
+public class PhoneMessageEventListener implements MessageEventListener {
+
+    @Override
+    public void doEvent(Message message) {
+
+    }
+}

+ 4 - 3
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/QyWechatEventListener.java

@@ -3,9 +3,9 @@ package cc.iotkit.message.listener;
 import cc.iotkit.message.config.VertxManager;
 import cc.iotkit.message.model.Message;
 import cc.iotkit.message.model.QyWechatMessage;
-import cc.iotkit.message.notify.EventListener;
 import io.vertx.ext.web.client.WebClient;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
 
 /**
@@ -15,17 +15,18 @@ import org.springframework.stereotype.Component;
  **/
 @Slf4j
 @Component
-public class QyWechatEventListener implements EventListener {
+public class QyWechatEventListener implements MessageEventListener {
 
     private String baseUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=%s";
 
     @Override
+    @EventListener(condition = "message.channel()='QyWechat'")
     public void doEvent(Message message) {
         WebClient client = WebClient.create(VertxManager.INSTANCE.getVertx());
         String url = String.format(baseUrl, message.getKey());
         QyWechatMessage qyWechatMessage = QyWechatMessage.builder()
                 .msgtype("text")
-                .text(QyWechatMessage.MessageContent.builder().content(message.getContent()).build())
+                .text(QyWechatMessage.MessageContent.builder().content(getContent(message)).build())
                 .build();
         client.post(url).sendJson(qyWechatMessage)
                 .onSuccess(response -> log.info("Received response with status code" + response.statusCode()))

+ 16 - 0
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/listener/VoiceEventListener.java

@@ -0,0 +1,16 @@
+package cc.iotkit.message.listener;
+
+import cc.iotkit.message.model.Message;
+
+/**
+ * author: 石恒
+ * date: 2023-05-08 15:09
+ * description:
+ **/
+public class VoiceEventListener implements MessageEventListener {
+
+    @Override
+    public void doEvent(Message message) {
+
+    }
+}

+ 1 - 0
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/model/EmailConfig.java

@@ -18,4 +18,5 @@ public class EmailConfig implements Serializable {
     private String to;
     private String title;
     private String content;
+    private Boolean smtpAuth;
 }

+ 4 - 0
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/model/Message.java

@@ -2,6 +2,8 @@ package cc.iotkit.message.model;
 
 import lombok.Data;
 
+import java.util.Map;
+
 /**
  * author: 石恒
  * date: 2023-05-08 15:15
@@ -11,5 +13,7 @@ import lombok.Data;
 public class Message {
     private String key;
     private String content;
+    private Map<String, String> param;
     private Long channelId;
+    private String channel;
 }

+ 0 - 12
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/notify/EventListener.java

@@ -1,12 +0,0 @@
-package cc.iotkit.message.notify;
-
-import cc.iotkit.message.model.Message;
-
-/**
- * author: 石恒
- * date: 2023-05-08 15:08
- * description:
- **/
-public interface EventListener {
-    void doEvent(Message message);
-}

+ 8 - 7
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/notify/EventManager.java

@@ -1,5 +1,6 @@
 package cc.iotkit.message.notify;
 
+import cc.iotkit.message.listener.MessageEventListener;
 import cc.iotkit.message.model.Message;
 
 import java.util.HashMap;
@@ -13,21 +14,21 @@ import java.util.Map;
  **/
 public class EventManager {
 
-    Map<Enum<EventType>, List<EventListener>> listeners = new HashMap<>();
+    Map<Enum<EventType>, List<MessageEventListener>> listeners = new HashMap<>();
 
-    public void subscribe(Enum<EventType> eventType, EventListener listener) {
-        List<EventListener> users = listeners.get(eventType);
+    public void subscribe(Enum<EventType> eventType, MessageEventListener listener) {
+        List<MessageEventListener> users = listeners.get(eventType);
         users.add(listener);
     }
 
-    public void unsubscribe(Enum<EventType> eventType, EventListener listener) {
-        List<EventListener> users = listeners.get(eventType);
+    public void unsubscribe(Enum<EventType> eventType, MessageEventListener listener) {
+        List<MessageEventListener> users = listeners.get(eventType);
         users.remove(listener);
     }
 
     public void notify(Enum<EventType> eventType, Message result) {
-        List<EventListener> users = listeners.get(eventType);
-        for (EventListener listener : users) {
+        List<MessageEventListener> users = listeners.get(eventType);
+        for (MessageEventListener listener : users) {
             listener.doEvent(result);
         }
     }

+ 11 - 4
iot-common/iot-message-notify/src/main/java/cc/iotkit/message/service/MessageService.java

@@ -1,6 +1,10 @@
 package cc.iotkit.message.service;
 
-import cc.iotkit.message.notify.EventManager;
+import cc.iotkit.message.event.MessageEvent;
+import cc.iotkit.message.model.Message;
+import org.springframework.context.ApplicationEventPublisher;
+
+import javax.annotation.Resource;
 
 /**
  * author: 石恒
@@ -8,9 +12,12 @@ import cc.iotkit.message.notify.EventManager;
  * description:
  **/
 public class MessageService {
+    @Resource
+    private ApplicationEventPublisher applicationEventPublisher;
 
-    public static void main(String[] args) {
-        EventManager em = new EventManager();
-        em.notify();
+    public void sendMessage() {
+        Message message = new Message();
+        applicationEventPublisher.publishEvent(new MessageEvent(message));
     }
+
 }

+ 12 - 0
iot-data/iot-data-service/src/main/java/cc/iotkit/data/IChannelConfigData.java

@@ -0,0 +1,12 @@
+package cc.iotkit.data;
+
+import cc.iotkit.model.notify.Channel;
+import cc.iotkit.model.notify.ChannelConfig;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:15
+ * description:
+ **/
+public interface IChannelConfigData extends ICommonData<ChannelConfig, String> {
+}

+ 12 - 0
iot-data/iot-data-service/src/main/java/cc/iotkit/data/IChannelData.java

@@ -0,0 +1,12 @@
+package cc.iotkit.data;
+
+import cc.iotkit.model.notify.Channel;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:15
+ * description:
+ **/
+public interface IChannelData extends ICommonData<Channel, String> {
+
+}

+ 11 - 0
iot-data/iot-data-service/src/main/java/cc/iotkit/data/IChannelTemplateData.java

@@ -0,0 +1,11 @@
+package cc.iotkit.data;
+
+import cc.iotkit.model.notify.ChannelTemplate;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:15
+ * description:
+ **/
+public interface IChannelTemplateData extends ICommonData<ChannelTemplate, String> {
+}

+ 29 - 0
iot-data/iot-model/src/main/java/cc/iotkit/model/notify/Channel.java

@@ -0,0 +1,29 @@
+package cc.iotkit.model.notify;
+
+import cc.iotkit.model.Id;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 16:30
+ * description:
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Channel implements Id<String> {
+
+    private String id;
+
+    private String code;
+
+    private String title;
+
+    private String icon;
+
+    private Long createAt;
+}

+ 30 - 0
iot-data/iot-model/src/main/java/cc/iotkit/model/notify/ChannelConfig.java

@@ -0,0 +1,30 @@
+package cc.iotkit.model.notify;
+
+import cc.iotkit.model.Id;
+import cc.iotkit.model.Owned;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 16:30
+ * description:
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ChannelConfig implements Id<String> {
+
+    private String id;
+
+    private String channelId;
+
+    private String title;
+
+    private String param;
+
+    private Long createAt;
+}

+ 22 - 0
iot-data/iot-model/src/main/java/cc/iotkit/model/notify/ChannelTemplate.java

@@ -0,0 +1,22 @@
+package cc.iotkit.model.notify;
+
+import cc.iotkit.model.Id;
+import cc.iotkit.model.Owned;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 16:30
+ * description:
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ChannelTemplate implements Id<String> {
+
+    private String id;
+}

+ 12 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/ChannelRepository.java

@@ -0,0 +1,12 @@
+package cc.iotkit.data.dao;
+
+import cc.iotkit.data.model.TbChannel;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:51
+ * description:
+ **/
+public interface ChannelRepository extends JpaRepository<TbChannel, String> {
+}

+ 20 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/ChannelMapper.java

@@ -0,0 +1,20 @@
+package cc.iotkit.data.model;
+
+import cc.iotkit.model.notify.Channel;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 18:04
+ * description:
+ **/
+@Mapper
+public interface ChannelMapper {
+
+    ChannelMapper M = Mappers.getMapper(ChannelMapper.class);
+
+    Channel toDto(TbChannel vo);
+
+    TbChannel toVo(Channel dto);
+}

+ 28 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbChannel.java

@@ -0,0 +1,28 @@
+package cc.iotkit.data.model;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:53
+ * description:
+ **/
+@Data
+@Entity
+@Table(name = "channel")
+public class TbChannel {
+    @Id
+    private String id;
+
+    private String code;
+
+    private String title;
+
+    private String icon;
+
+    private Long createAt;
+}

+ 54 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/ChannelConfigDataImpl.java

@@ -0,0 +1,54 @@
+package cc.iotkit.data.service;
+
+import cc.iotkit.data.IChannelConfigData;
+import cc.iotkit.model.Paging;
+import cc.iotkit.model.notify.ChannelConfig;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:43
+ * description:
+ **/
+@Primary
+@Service
+public class ChannelConfigDataImpl implements IChannelConfigData {
+
+    @Override
+    public ChannelConfig findById(String s) {
+        return null;
+    }
+
+    @Override
+    public ChannelConfig save(ChannelConfig data) {
+        return null;
+    }
+
+    @Override
+    public ChannelConfig add(ChannelConfig data) {
+        return null;
+    }
+
+    @Override
+    public void deleteById(String s) {
+
+    }
+
+    @Override
+    public long count() {
+        return 0;
+    }
+
+    @Override
+    public List<ChannelConfig> findAll() {
+        return null;
+    }
+
+    @Override
+    public Paging<ChannelConfig> findAll(int page, int size) {
+        return null;
+    }
+}

+ 70 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/ChannelDataImpl.java

@@ -0,0 +1,70 @@
+package cc.iotkit.data.service;
+
+import cc.iotkit.data.IChannelData;
+import cc.iotkit.data.dao.ChannelRepository;
+import cc.iotkit.data.model.ChannelMapper;
+import cc.iotkit.data.model.TbChannel;
+import cc.iotkit.model.Paging;
+import cc.iotkit.model.notify.Channel;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:44
+ * description:
+ **/
+@Primary
+@Service
+public class ChannelDataImpl implements IChannelData {
+
+    @Resource
+    private ChannelRepository channelRepository;
+
+    @Override
+    public Channel findById(String s) {
+        return null;
+    }
+
+    @Override
+    public Channel save(Channel data) {
+        return null;
+    }
+
+    @Override
+    public Channel add(Channel data) {
+        return null;
+    }
+
+    @Override
+    public void deleteById(String s) {
+
+    }
+
+    @Override
+    public long count() {
+        return 0;
+    }
+
+    @Override
+    public List<Channel> findAll() {
+        return null;
+    }
+
+    @Override
+    public Paging<Channel> findAll(int page, int size) {
+        Page<TbChannel> tbDeviceConfigs = channelRepository.findAll(Pageable.ofSize(size).withPage(page - 1));
+        return new Paging<>(
+                tbDeviceConfigs.getTotalElements(),
+                tbDeviceConfigs.getContent()
+                        .stream().map(ChannelMapper.M::toDto)
+                        .collect(Collectors.toList())
+        );
+    }
+}

+ 53 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/ChannelTemplateDataImpl.java

@@ -0,0 +1,53 @@
+package cc.iotkit.data.service;
+
+import cc.iotkit.data.IChannelTemplateData;
+import cc.iotkit.model.Paging;
+import cc.iotkit.model.notify.ChannelTemplate;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 17:45
+ * description:
+ **/
+@Primary
+@Service
+public class ChannelTemplateDataImpl implements IChannelTemplateData {
+    @Override
+    public ChannelTemplate findById(String s) {
+        return null;
+    }
+
+    @Override
+    public ChannelTemplate save(ChannelTemplate data) {
+        return null;
+    }
+
+    @Override
+    public ChannelTemplate add(ChannelTemplate data) {
+        return null;
+    }
+
+    @Override
+    public void deleteById(String s) {
+
+    }
+
+    @Override
+    public long count() {
+        return 0;
+    }
+
+    @Override
+    public List<ChannelTemplate> findAll() {
+        return null;
+    }
+
+    @Override
+    public Paging<ChannelTemplate> findAll(int page, int size) {
+        return null;
+    }
+}

+ 82 - 0
iot-starter/src/main/java/cc/iotkit/manager/controller/NotifyController.java

@@ -0,0 +1,82 @@
+package cc.iotkit.manager.controller;
+
+import cc.iotkit.manager.service.NotifyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 15:17
+ * description:
+ **/
+@Api(tags = {"消息通知"})
+@Slf4j
+@RestController
+@RequestMapping("/notify")
+public class NotifyController {
+
+    @Resource
+    private NotifyService notifyService;
+
+    @ApiOperation("获取通道类型列表")
+    @PostMapping("/channel/getList")
+    public void getChannelList() {
+    }
+
+    @ApiOperation("获取通道配置列表")
+    @PostMapping("/channel/config/getList")
+    public void getChannelConfigList() {
+    }
+
+    @ApiOperation("新增通道配置")
+    @PostMapping("/channel/config/add")
+    public void addChannelConfig() {
+    }
+
+    @ApiOperation("根据ID获取通道配置")
+    @PostMapping("/channel/config/getById")
+    public void getChannelConfigById() {
+    }
+
+    @ApiOperation("修改通道配置")
+    @PostMapping("/channel/config/updateById")
+    public void updateChannelConfigById() {
+    }
+
+    @ApiOperation("删除通道配置")
+    @PostMapping("/channel/config/delById")
+    public void delChannelConfigById() {
+    }
+
+    @ApiOperation("获取通道模板列表")
+    @PostMapping("/channel/template/getList")
+    public void getChannelTemplateList() {
+    }
+
+    @ApiOperation("新增通道模板")
+    @PostMapping("/channel/template/add")
+    public void addChannelTemplate() {
+    }
+
+    @ApiOperation("根据ID获取通道模板")
+    @PostMapping("/channel/template/getById")
+    public void getChannelTemplateById() {
+    }
+
+    @ApiOperation("修改通道模板")
+    @PostMapping("/channel/template/updateById")
+    public void updateChannelTemplateById() {
+    }
+
+    @ApiOperation("删除通道模板")
+    @PostMapping("/channel/template/delById")
+    public void delChannelTemplateById() {
+    }
+
+}

+ 48 - 0
iot-starter/src/main/java/cc/iotkit/manager/service/NotifyService.java

@@ -0,0 +1,48 @@
+package cc.iotkit.manager.service;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * author: 石恒
+ * date: 2023-05-11 15:21
+ * description:
+ **/
+@Slf4j
+@Service
+public class NotifyService {
+
+    public void getChannelList() {
+    }
+
+    public void getChannelConfigList() {
+
+    }
+
+    public void addChannelConfig() {
+    }
+
+    public void getChannelConfigById() {
+    }
+
+    public void updateChannelConfigById() {
+    }
+
+    public void delChannelConfigById() {
+    }
+
+    public void getChannelTemplateList() {
+    }
+
+    public void addChannelTemplate() {
+    }
+
+    public void getChannelTemplateById() {
+    }
+
+    public void updateChannelTemplateById() {
+    }
+
+    public void delChannelTemplateById() {
+    }
+}