reghao 4 лет назад
Родитель
Сommit
f892767539

+ 0 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/view/AppPageController.java

@@ -136,21 +136,4 @@ public class AppPageController {
         model.addAttribute("list", pageList.getList());
         return "/app/log";
     }
-
-    @ApiOperation(value = "应用备份还原页面")
-    @GetMapping("/bak")
-    public String appBakPage(Model model) {
-        String env = EnvType.test.name();
-        int page = 1;
-        int size = 10;
-        PageRequest pageRequest =
-                PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
-
-        Page<AppBuilding> appBuildings = appBuildingRepository.findAllByEnv(env, pageRequest);
-        PageList<AppBuilding> pageList = PageList.pageList(appBuildings);
-
-        model.addAttribute("page", appBuildings);
-        model.addAttribute("list", pageList.getList());
-        return "/app/bak";
-    }
 }

+ 82 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/SystemPageController.java

@@ -0,0 +1,82 @@
+package cn.reghao.autodop.dmaster.view.controller;
+
+import cn.reghao.autodop.dmaster.auth.entity.Role;
+import cn.reghao.autodop.dmaster.auth.repository.RoleRepository;
+import cn.reghao.autodop.dmaster.common.config.SysConfig;
+import cn.reghao.autodop.dmaster.utils.SpringBootUtil;
+import cn.reghao.autodop.dmaster.utils.WebBody;
+import cn.reghao.autodop.dmaster.utils.db.PageList;
+import cn.reghao.autodop.dmaster.utils.db.PageSort;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+
+/**
+ * @author reghao
+ * @date 2021-04-04 21:24:18
+ */
+@Api(tags = "用户页面")
+@RequestMapping("/sys")
+@Controller
+public class SystemPageController {
+    private RoleRepository roleRepository;
+
+    public SystemPageController(RoleRepository roleRepository) {
+        this.roleRepository = roleRepository;
+    }
+
+    @ApiOperation(value = "系统备份还原页面")
+    @GetMapping("/bak")
+    public String sysBakPage(Model model) {
+        PageRequest pageRequest = PageSort.pageRequest();
+        Page<Role> rolePage = roleRepository.findAll(pageRequest);
+        PageList<Role> pageList = PageList.pageList(rolePage);
+
+        model.addAttribute("page", rolePage);
+        model.addAttribute("list", pageList.getList());
+        return "/sys/bak";
+    }
+
+    @ApiOperation(value = "数据备份")
+    @GetMapping("/bak/export/{filename}")
+    public String download(@PathVariable("filename") String filename, HttpServletResponse response) throws IOException {
+        String filepath = SysConfig.packDir + "/" + filename;
+        File file = new File(filepath);
+        if (file.exists()) {
+            response.setHeader("content-type", "application/octet-stream");
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition",
+                    "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
+
+            byte[] buffer = new byte[1024];
+            FileInputStream fis = new FileInputStream(file);
+            BufferedInputStream bis = new BufferedInputStream(fis);
+            OutputStream os = response.getOutputStream();
+            int i = bis.read(buffer);
+            while (i != -1) {
+                os.write(buffer, 0, i);
+                i = bis.read(buffer);
+            }
+            return WebBody.success("文件已下载");
+        }
+
+        return WebBody.success("文件不存在");
+    }
+
+    @ApiOperation(value = "数据还原")
+    @PostMapping("/bak/import")
+    public String upload(@RequestParam("file") MultipartFile file) {
+        String filename = file.getOriginalFilename();
+        String filePath = SpringBootUtil.saveFile(file, "/tmp");
+        return WebBody.success(filePath);
+    }
+}

+ 0 - 96
dmaster/src/main/resources/templates/app/bak.html

@@ -1,96 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org"
-      xmlns:mo="https://gitee.com/aun/Timo">
-<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})"></head>
-
-<body class="timo-layout-page">
-<div class="layui-card" th:attr="data-url=@{'/app/build/list?env=' + ${env}}">
-    <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-left layui-form-pane">
-                <div class="layui-inline">
-                    <label class="layui-form-label">环境</label>
-                    <div class="layui-input-block timo-search-status">
-                        <select id="getPageByEnv" class="timo-search-select" name="env" onchange="getPageByEnv()"
-                                mo:dict="ENVIRONMENT" mo-selected="${env}"></select>
-                    </div>
-                </div>
-                <div class="layui-inline timo-search-box">
-                    <label class="layui-form-label">应用 ID</label>
-                    <div class="layui-input-block">
-                        <input type="text" name="appId" th:value="${param.appName}" placeholder="请输入应用 ID"
-                               autocomplete="off" class="layui-input">
-                    </div>
-                </div>
-                <div class="layui-inline">
-                    <button class="layui-btn timo-search-btn">
-                        <i class="fa fa-search"></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="appId">应用 ID</th>
-                    <th class="sortable" data-field="branch">分支</th>
-                    <th class="sortable" data-field="commitId">版本</th>
-                    <th class="sortable" data-field="commitTime">提交时间</th>
-                    <th class="sortable" data-field="result">构建结果</th>
-                    <th class="sortable" data-field="buildTime">构建时间</th>
-                    <th class="sortable" data-field="buildBy">构建用户</th>
-                    <th>操作</th>
-                </tr>
-                </thead>
-                <tbody>
-                <tr th:each="item:${list}">
-                    <td><label class="timo-checkbox"><input type="checkbox" th:value="${item.appId}">
-                        <i class="layui-icon layui-icon-ok"></i></label></td>
-                    <td>
-                        <a class="open-popup" data-title="应用配置详情" data-size="1200,600" href="#"
-                           th:text="${item.appId}" th:attr="data-url=@{'/app/config/app/detail/'+${item.appId}}"></a>
-                    </td>
-                    <td th:text="${item.branch}">分支</td>
-                    <td th:text="${item.commitId}">版本</td>
-                    <td th:text="${item.commitTime}">提交时间</td>
-                    <td>
-                        <a class="open-popup" data-title="构建结果" data-size="640,480" href="#"
-                           th:text="${item.buildResult}" th:attr="data-url=@{'/app/log/build/'+${item.buildLogId} + '/result'}"></a>
-                    </td>
-                    <td th:text="${item.buildTime}">构建时间</td>
-                    <td th:text="${item.buildBy}">构建用户</td>
-                    <td>
-                        <a class="ajax-post" th:href="@{'/api/app/bd/update?appId='+${item.appId}}">更新</a>
-                        <a class="ajax-post" th:href="@{'/api/app/bd/build?appId='+${item.appId}}">构建</a>
-                        <a class="open-popup" data-title="应用部署" th:attr="data-url=@{'/app/deploy/' + ${item.buildLogId}}"
-                           data-size="1000,600" href="#">部署</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" th:src="@{/js/plugins/jquery-2.2.4.min.js}"></script>
-<script type="text/javascript">
-    function getPageByEnv() {
-        var selectedOption = $("#getPageByEnv option:selected")
-        var param = selectedOption.text()
-        url = '?env=' + param
-        window.location.href = window.location.pathname + url;
-    }
-</script>
-</body>
-</html>

+ 56 - 0
dmaster/src/main/resources/templates/sys/bak.html

@@ -0,0 +1,56 @@
+<!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" th:attr="data-url=@{/sys/bak}">
+    <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="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="title">角色</th>
+                    <th class="sortable" data-field="name">角色名</th>
+                    <th class="sortable" data-field="createTime">创建时间</th>
+                    <th class="sortable" data-field="updateTime">更新时间</th>
+                    <th>备份</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.title}">角色</td>
+                    <td th:text="${item.name}">角色名</td>
+                    <td th:text="${item.createTime}">创建时间</td>
+                    <td th:text="${item.updateTime}">更新时间</td>
+                    <td>
+                        <a th:href="@{/sys/bak/export}"><i class="fa fa-download"></i></a>
+                    </td>
+                    <td>
+                        <button type="button" class="layui-btn upload-image" name="image[]"
+                                th:attr="up-url=@{/sys/bak/import}" up-field="path">
+                            <i class="fa fa-upload"></i>
+                        </button>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+</div>
+
+<script th:replace="/common/template :: script"></script>
+<script type="text/javascript">
+</script>
+</body>
+</html>