Quellcode durchsuchen

NotifyReceiver 添加一个 setdefault 字段, 只有一个 NotifyReceiver 可接收通知, 其他的 setdefault 字段均为 false

reghao vor 1 Jahr
Ursprung
Commit
151dc58ff7

+ 27 - 3
web/src/main/java/cn/reghao/devops/web/admin/sys/controller/ReceiverController.java

@@ -37,13 +37,20 @@ public class ReceiverController {
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @PostMapping(value = "/save", produces = MediaType.APPLICATION_JSON_VALUE)
     public String saveReceiver(@Validated NotifyReceiver notifyReceiver) {
-        String type = notifyReceiver.getType();
-        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByType(type);
+        String name = notifyReceiver.getName();
+        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByName(name);
         if (notifyReceiver1 != null) {
-            String errMsg = String.format("NotifyType %s already exist", type);
+            String errMsg = String.format("NotifyReceiver %s exist", name);
             return WebResult.failWithMsg(errMsg);
         }
 
+        /*String type = notifyReceiver.getType();
+        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByType(type);
+        if (notifyReceiver1 != null) {
+            String errMsg = String.format("NotifyType %s already exist", type);
+            return WebResult.failWithMsg(errMsg);
+        }*/
+        String type = notifyReceiver.getType();
         if (type.equals(NotifyType.email.name())) {
             List<EmailAccount> list = emailAccountRepository.findAll();
             if (list.isEmpty()) {
@@ -77,6 +84,23 @@ public class ReceiverController {
         return WebResult.success();
     }
 
+    @ApiOperation(value = "更新通知接收")
+    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    @PostMapping(value = "/default/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String updateDefaultReceiver(@PathVariable("name") String name) {
+        NotifyReceiver notifyReceiver1 = notifyReceiverRepository.findByName(name);
+        if (notifyReceiver1 == null || notifyReceiver1.getSetdefault()) {
+            String errMsg = String.format("NotifyReceiver %s not exist or it is default receiver", name);
+            return WebResult.failWithMsg(errMsg);
+        }
+
+        NotifyReceiver notifyReceiver2 = notifyReceiverRepository.findByTypeAndSetdefaultIsTrue(notifyReceiver1.getType());
+        notifyReceiver1.setSetdefault(true);
+        notifyReceiver2.setSetdefault(false);
+        notifyReceiverRepository.saveAll(List.of(notifyReceiver1, notifyReceiver2));
+        return WebResult.success();
+    }
+
     @ApiOperation(value = "删除通知接收")
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     @DeleteMapping(value = "/delete/{name}", produces = MediaType.APPLICATION_JSON_VALUE)

+ 2 - 1
web/src/main/java/cn/reghao/devops/web/admin/sys/db/repository/NotifyReceiverRepository.java

@@ -9,5 +9,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
  */
 public interface NotifyReceiverRepository extends JpaRepository<NotifyReceiver, Integer> {
     NotifyReceiver findByName(String name);
-    NotifyReceiver findByType(String type);
+    NotifyReceiver findByTypeAndSetdefaultIsTrue(String type);
+    NotifyReceiver findBySetdefaultIsTrue();
 }

+ 5 - 0
web/src/main/java/cn/reghao/devops/web/admin/sys/model/po/NotifyReceiver.java

@@ -27,4 +27,9 @@ public class NotifyReceiver extends BaseEntity {
     private String type;
     @NotBlank
     private String url;
+    private Boolean setdefault;
+
+    public NotifyReceiver() {
+        this.setdefault = false;
+    }
 }

+ 4 - 4
web/src/main/java/cn/reghao/devops/web/admin/sys/service/NotifyService.java

@@ -27,7 +27,7 @@ public class NotifyService {
     private final DingNotify dingNotify;
     private final EmailNotify emailNotify;
     private final NotifyReceiverRepository notifyReceiverRepository;
-    private SysMessageService sysMessageService;
+    private final SysMessageService sysMessageService;
 
     public NotifyService(DingNotify dingNotify, EmailNotify emailNotify,
                          NotifyReceiverRepository notifyReceiverRepository, SysMessageService sysMessageService) {
@@ -40,14 +40,14 @@ public class NotifyService {
     public <T> void notify(T msg) {
         String receiver;
         if (msg instanceof DingMsg) {
-            NotifyReceiver notifyReceiver = notifyReceiverRepository.findByType(NotifyType.webhook.getName());
+            NotifyReceiver notifyReceiver = notifyReceiverRepository.findByTypeAndSetdefaultIsTrue(NotifyType.webhook.getName());
             if (notifyReceiver != null) {
                 receiver = notifyReceiver.getUrl();
                 DingMsg dingMsg = (DingMsg) msg;
                 threadPool.execute(new NotifyTask<>(sysMessageService, dingNotify, receiver, dingMsg));
             }
         } else if (msg instanceof EmailMsg) {
-            NotifyReceiver notifyReceiver = notifyReceiverRepository.findByType(NotifyType.email.getName());
+            NotifyReceiver notifyReceiver = notifyReceiverRepository.findByTypeAndSetdefaultIsTrue(NotifyType.email.getName());
             if (notifyReceiver != null) {
                 receiver = notifyReceiver.getUrl();
                 EmailMsg emailMsg = (EmailMsg) msg;
@@ -71,7 +71,7 @@ public class NotifyService {
      * @date 2021-06-23 上午9:29
      */
     static class NotifyTask<T> implements Runnable {
-        private SysMessageService sysMessageService;
+        private final SysMessageService sysMessageService;
         private final Notify<T> notify;
         private final String receiver;
         private final T msg;

+ 4 - 0
web/src/main/resources/templates/admin/notify/receiver.html

@@ -26,6 +26,7 @@
                     <th class="sortable" data-field="notifyType">通知类型</th>
                     <th class="sortable" data-field="notifyName">通知名字</th>
                     <th class="sortable" data-field="receiver">接收地址</th>
+                    <th class="sortable" data-field="setdefault">默认通知</th>
                     <th>操作</th>
                 </tr>
                 </thead>
@@ -34,9 +35,12 @@
                     <td th:text="${item.type}">通知类型</td>
                     <td th:text="${item.name}">通知名字</td>
                     <td th:text="${item.url}">接收地址</td>
+                    <td th:text="${item.setdefault}">默认通知</td>
                     <td>
                         <a class="open-popup" data-title="编辑" th:attr="data-url=@{'/sys/notify/receiver/edit/'+${item.name}}"
                            data-size="640,480" href="#">编辑</a>
+                        <a class="ajax-post" th:attr="data-msg='确定使用 '+ ${item.name} + ' 接收通知?'"
+                           th:href="@{'/api/sys/notify/receiver/default/' + ${item.name}}">设为默认</a>
                         <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.name} + '?'"
                            th:href="@{'/api/sys/notify/receiver/delete/' + ${item.name}}">删除</a>
                     </td>