Browse Source

钉钉账户页面和接口

reghao 4 năm trước cách đây
mục cha
commit
b173dbbada

+ 18 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/notification/controller/NotificationController.java

@@ -1,8 +1,10 @@
 package cn.reghao.autodop.dmaster.notification.controller;
 
+import cn.reghao.autodop.dmaster.notification.entity.DingAccount;
 import cn.reghao.autodop.dmaster.notification.entity.EmailAccount;
 import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
 import cn.reghao.autodop.dmaster.notification.entity.SmsAccount;
+import cn.reghao.autodop.dmaster.notification.repository.DingAccountRepository;
 import cn.reghao.autodop.dmaster.notification.repository.NotifyGroupRepository;
 import cn.reghao.autodop.dmaster.notification.repository.EmailAccountRepository;
 import cn.reghao.autodop.dmaster.notification.repository.SmsAccountRepository;
@@ -27,13 +29,16 @@ import org.springframework.web.bind.annotation.RestController;
 public class NotificationController {
     private EmailAccountRepository emailRepository;
     private SmsAccountRepository smsRepository;
+    private DingAccountRepository dingRepository;
     private NotifyGroupRepository receiverRepository;
 
     public NotificationController(EmailAccountRepository emailRepository,
                                   SmsAccountRepository smsRepository,
+                                  DingAccountRepository dingRepository,
                                   NotifyGroupRepository receiverRepository) {
         this.emailRepository = emailRepository;
         this.smsRepository = smsRepository;
+        this.dingRepository = dingRepository;
         this.receiverRepository = receiverRepository;
     }
 
@@ -63,6 +68,19 @@ public class NotificationController {
         return ResponseEntity.ok().body(WebBody.success());
     }
 
+    @ApiOperation(value = "添加/修改钉钉通知账户")
+    @PostMapping(value = "/ding", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<String> addDingAccount(@Validated DingAccount dingAccount) {
+        dingRepository.save(dingAccount);
+        return ResponseEntity.ok().body(WebBody.success());
+    }
+
+    @ApiOperation(value = "删除钉钉通知账户")
+    @DeleteMapping(value = "/ding", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<String> deleteDingAccount(@Validated DingAccount dingAccount) {
+        return ResponseEntity.ok().body(WebBody.success());
+    }
+
     @ApiOperation(value = "添加/修改全局通知接收")
     @PostMapping(value = "/receiver", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<String> addNotifyReceiver(@Validated NotifyGroup notifyReceiver) {

+ 28 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/notification/controller/NotificationPageController.java

@@ -1,8 +1,10 @@
 package cn.reghao.autodop.dmaster.notification.controller;
 
+import cn.reghao.autodop.dmaster.notification.entity.DingAccount;
 import cn.reghao.autodop.dmaster.notification.entity.EmailAccount;
 import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
 import cn.reghao.autodop.dmaster.notification.entity.SmsAccount;
+import cn.reghao.autodop.dmaster.notification.repository.DingAccountRepository;
 import cn.reghao.autodop.dmaster.notification.repository.NotifyGroupRepository;
 import cn.reghao.autodop.dmaster.notification.repository.EmailAccountRepository;
 import cn.reghao.autodop.dmaster.notification.repository.SmsAccountRepository;
@@ -26,13 +28,16 @@ import org.springframework.web.bind.annotation.*;
 public class NotificationPageController {
     private EmailAccountRepository emailRepository;
     private SmsAccountRepository smsRepository;
+    private DingAccountRepository dingRepository;
     private NotifyGroupRepository receiverRepository;
 
     public NotificationPageController(EmailAccountRepository emailRepository,
                                       SmsAccountRepository smsRepository,
+                                      DingAccountRepository dingRepository,
                                       NotifyGroupRepository receiverRepository) {
         this.emailRepository = emailRepository;
         this.smsRepository = smsRepository;
+        this.dingRepository = dingRepository;
         this.receiverRepository = receiverRepository;
     }
 
@@ -82,6 +87,29 @@ public class NotificationPageController {
         return "/sys/notify/smsadd";
     }
 
+    @ApiOperation(value = "钉钉通知配置页面")
+    @GetMapping("/notify/ding")
+    public String dingNotifyConfigPage(Model model) {
+        PageRequest pageRequest = PageSort.pageRequest();
+        Page<DingAccount> page = dingRepository.findAll(pageRequest);
+        PageList<DingAccount> pageList = PageList.pageList(page);
+
+        model.addAttribute("page", page);
+        model.addAttribute("list", pageList.getList());
+        return "/sys/notify/ding";
+    }
+
+    @GetMapping("/notify/ding/add")
+    public String dingNotifyConfigAddPage(Model model) {
+        return "/sys/notify/dingadd";
+    }
+
+    @GetMapping("/notify/ding/edit/{id}")
+    public String dingNotifyConfigEditPage(@PathVariable("id") DingAccount dingAccount, Model model) {
+        model.addAttribute("dingAccount", dingAccount);
+        return "/sys/notify/dingadd";
+    }
+
     @ApiOperation(value = "全局通知接收配置页面")
     @GetMapping("/notify/receiver")
     public String receiverConfigPage(Model model) {

+ 0 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/notification/entity/DingAccount.java

@@ -18,5 +18,4 @@ import javax.persistence.Entity;
 @Entity
 public class DingAccount extends NotifyAccount {
     // 若没有启用签名,password 字段默认为 none
-    private String personal;
 }

+ 61 - 0
dmaster/src/main/resources/templates/sys/notify/ding.html

@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})"></head>
+
+<body class="timo-layout-page">
+<div class="layui-card">
+    <div class="layui-card-header timo-card-header">
+        <span><i class="fa fa-bars"></i> 钉钉账户配置</span>
+        <i class="layui-icon layui-icon-refresh refresh-btn"></i>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-row timo-card-screen put-row">
+            <div class="pull-right screen-btn-group">
+                <div class="btn-group-right">
+                    <button class="layui-btn open-popup" data-title="添加钉钉账户" th:attr="data-url=@{/sys/notify/ding/add}"
+                            data-size="640,480">
+                        <i class="fa fa-plus"></i> 添加
+                    </button>
+                </div>
+            </div>
+        </div>
+        <div class="timo-table-wrap">
+            <table class="layui-table timo-table">
+                <thead>
+                <tr>
+                    <th class="timo-table-checkbox">
+                        <label class="timo-checkbox"><input type="checkbox">
+                            <i class="layui-icon layui-icon-ok"></i></label>
+                    </th>
+                    <th class="sortable" data-field="notifyAccountId">账户 ID</th>
+                    <th class="sortable" data-field="username">用户名</th>
+                    <th class="sortable" data-field="password">密码</th>
+                    <th>操作</th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr th:each="item:${list}">
+                    <td><label class="timo-checkbox"><input type="checkbox" th:value="${item.id}">
+                        <i class="layui-icon layui-icon-ok"></i></label></td>
+                    <td th:text="${item.notifyAccountId}">账户 ID</td>
+                    <td th:text="${item.username}">用户名</td>
+                    <td th:text="${item.password}">密码</td>
+                    <td>
+                        <a class="open-popup" data-title="编辑" th:attr="data-url=@{'/sys/notify/ding/edit/'+${item.id}}"
+                           data-size="640,480" href="#">编辑</a>
+                        <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.notifyAccountId} + '?'"
+                           th:href="@{'/api/sys/notify/ding/' + ${item.id}}">删除</a>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+        <div th:replace="/common/fragment :: page"></div>
+    </div>
+</div>
+
+<script th:replace="/common/template :: script"></script>
+<script type="text/javascript">
+</script>
+</body>
+</html>

+ 38 - 0
dmaster/src/main/resources/templates/sys/notify/dingadd.html

@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+
+<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})"></head>
+
+<body>
+<div class="layui-form timo-compile">
+    <form th:action="@{/api/sys/notify/ding}">
+        <input type="hidden" name="id" th:value="${dingAccount?.id}"/>
+        <div class="layui-form-item">
+            <label class="layui-form-label required">账户 ID</label>
+            <div class="layui-input-inline">
+                <input class="layui-input" type="text" name="notifyAccountId" placeholder="请输入账户 ID" required th:value="${dingAccount?.notifyAccountId}">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label required">用户名</label>
+            <div class="layui-input-inline">
+                <input class="layui-input" type="text" name="username" placeholder="请输入用户名" required th:value="${dingAccount?.username}">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label required">密码</label>
+            <div class="layui-input-inline">
+                <input class="layui-input" type="text" name="password" placeholder="请输入密码" required th:value="${dingAccount?.password}">
+            </div>
+        </div>
+        <div class="layui-form-item timo-finally">
+            <button class="layui-btn ajax-submit"><i class="fa fa-check-circle"></i> 保存</button>
+            <button class="layui-btn btn-secondary close-popup"><i class="fa fa-times-circle"></i> 关闭</button>
+        </div>
+    </form>
+</div>
+<script th:replace="/common/template :: script"></script>
+<script type="text/javascript">
+</script>
+</body>
+</html>