Selaa lähdekoodia

规范数据库 CRUD 操作

reghao 5 vuotta sitten
vanhempi
commit
1ebd6e2fd9
33 muutettua tiedostoa jossa 323 lisäystä ja 111 poistoa
  1. 1 1
      common/src/main/java/cn/reghao/autodop/common/httpc/DefaultWebRequest.java
  2. 1 1
      common/src/main/java/cn/reghao/autodop/common/httpc/HttpApi.java
  3. 1 1
      common/src/main/java/cn/reghao/autodop/common/httpc/WebRequest.java
  4. 1 1
      common/src/main/java/cn/reghao/autodop/common/httpc/WebResponse.java
  5. 3 3
      common/src/main/java/cn/reghao/autodop/common/notification/DingNotify.java
  6. 6 4
      common/src/main/java/cn/reghao/autodop/common/result/WebResult.java
  7. 0 28
      common/src/main/java/cn/reghao/autodop/common/utils/JsonUtil.java
  8. 23 0
      common/src/main/java/cn/reghao/autodop/common/utils/data/db/CrudOps.java
  9. 1 1
      common/src/main/java/cn/reghao/autodop/common/utils/data/db/PageList.java
  10. 29 0
      common/src/main/java/cn/reghao/autodop/common/utils/data/serializer/DefaultJsonSerializer.java
  11. 61 0
      common/src/main/java/cn/reghao/autodop/common/utils/data/serializer/JsonSerializer.java
  12. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java
  13. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ConfigController.java
  14. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ManageController.java
  15. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/BaseEntity.java
  16. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/dao/BaseDAO.java
  17. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildService.java
  18. 1 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigService.java
  19. 3 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/OrchestrateService.java
  20. 0 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/CrudService.java
  21. 0 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/App3Service.java
  22. 68 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/controller/App3CrudController.java
  23. 8 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/controller/App3OpsController.java
  24. 7 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3.java
  25. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3Bak.java
  26. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/repository/App3BakRepository.java
  27. 12 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/repository/App3Repository.java
  28. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/scheduler/BackupScheduler.java
  29. 67 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/service/App3CrudService.java
  30. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/controller/UserController.java
  31. 15 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/JwtTokenFilter.java
  32. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/service/UserService.java
  33. 2 2
      dmaster/src/main/resources/application-dev.yml

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/http/DefaultWebRequest.java → common/src/main/java/cn/reghao/autodop/common/httpc/DefaultWebRequest.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.http;
+package cn.reghao.autodop.common.httpc;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HeaderElement;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/http/HttpApi.java → common/src/main/java/cn/reghao/autodop/common/httpc/HttpApi.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.http;
+package cn.reghao.autodop.common.httpc;
 
 /**
  * @author reghao

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/http/WebRequest.java → common/src/main/java/cn/reghao/autodop/common/httpc/WebRequest.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.http;
+package cn.reghao.autodop.common.httpc;
 
 import java.util.Map;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/http/WebResponse.java → common/src/main/java/cn/reghao/autodop/common/httpc/WebResponse.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.http;
+package cn.reghao.autodop.common.httpc;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;

+ 3 - 3
common/src/main/java/cn/reghao/autodop/common/notification/DingNotify.java

@@ -1,8 +1,8 @@
 package cn.reghao.autodop.common.notification;
 
-import cn.reghao.autodop.common.http.DefaultWebRequest;
-import cn.reghao.autodop.common.http.WebRequest;
-import cn.reghao.autodop.common.http.WebResponse;
+import cn.reghao.autodop.common.httpc.DefaultWebRequest;
+import cn.reghao.autodop.common.httpc.WebRequest;
+import cn.reghao.autodop.common.httpc.WebResponse;
 import cn.reghao.autodop.common.notification.ding.DingText;
 import cn.reghao.autodop.common.utils.JsonUtil;
 

+ 6 - 4
common/src/main/java/cn/reghao/autodop/common/result/WebResult.java

@@ -1,7 +1,8 @@
 package cn.reghao.autodop.common.result;
 
 import cn.reghao.autodop.common.utils.DateTimeUtil;
-import cn.reghao.autodop.common.utils.JsonUtil;
+import cn.reghao.autodop.common.utils.data.serializer.DefaultJsonSerializer;
+import cn.reghao.autodop.common.utils.data.serializer.JsonSerializer;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -20,6 +21,7 @@ public class WebResult {
     private String status;
     private String timestamp;
     private Object data;
+    private static JsonSerializer<Object> jsonSerializer = new DefaultJsonSerializer<>();
 
     private WebResult(Integer code, String status) {
         this.code = code;
@@ -30,20 +32,20 @@ public class WebResult {
         WebResult webResult = new WebResult(SUCCESS.getCode(), SUCCESS.getStatus());
         webResult.setTimestamp(DateTimeUtil.now());
         webResult.setData(data);
-        return JsonUtil.objectToJson(webResult);
+        return jsonSerializer.toJson(webResult);
     }
 
     public static String fail(Object data) {
         WebResult webResult = new WebResult(FAIL.getCode(), FAIL.getStatus());
         webResult.setTimestamp(DateTimeUtil.now());
         webResult.setData(data);
-        return JsonUtil.objectToJson(webResult);
+        return jsonSerializer.toJson(webResult);
     }
 
     public static String error(Object data) {
         WebResult webResult = new WebResult(ERROR.getCode(), ERROR.getStatus());
         webResult.setTimestamp(DateTimeUtil.now());
         webResult.setData(data);
-        return JsonUtil.objectToJson(webResult);
+        return jsonSerializer.toJson(webResult);
     }
 }

+ 0 - 28
common/src/main/java/cn/reghao/autodop/common/utils/JsonUtil.java

@@ -42,16 +42,6 @@ public class JsonUtil<T> {
         return objects;
     }
 
-    // TODO 实现泛型到普通对象的转换
-    public List<T> jsonToList(String json, T t) {
-        return null;
-    }
-
-    public static Object jsonToObject(File jsonFile, Class clazz) throws IOException {
-        String json = FileUtils.readFileToString(jsonFile, StandardCharsets.UTF_8);
-        return gson.fromJson(json, clazz);
-    }
-
     public static String objectToJson(Object object) {
         return gson.toJson(object);
     }
@@ -64,22 +54,4 @@ public class JsonUtil<T> {
     public static JsonObject jsonObject(String json) {
         return new JsonParser().parse(json).getAsJsonObject();
     }
-
-    public static List<Object> arrayToList(String json, Class clazz) {
-        List<Object> list = new ArrayList<>();
-        Gson gson = new Gson();
-        JsonParser parser = new JsonParser();
-        JsonElement jsonElement = parser.parse(json);
-        if (jsonElement.isJsonArray()) {
-            jsonElement.getAsJsonArray().forEach(jsonElement1 -> {
-                String json1 = jsonElement1.getAsJsonObject().toString();
-                list.add(gson.fromJson(json1, clazz));
-            });
-        } else {
-            String json1 = jsonElement.getAsJsonObject().toString();
-            list.add(gson.fromJson(json1, clazz));
-        }
-
-        return list;
-    }
 }

+ 23 - 0
common/src/main/java/cn/reghao/autodop/common/utils/data/db/CrudOps.java

@@ -0,0 +1,23 @@
+package cn.reghao.autodop.common.utils.data.db;
+
+import java.util.List;
+
+/**
+ * 数据 CRUD 操作接口
+ *
+ * @author reghao
+ * @date 2020-06-25 01:34:27
+ */
+public interface CrudOps<T> {
+    void addOrModify(T t);
+    default void batchaddOrModify(List<T> list) {
+    }
+
+    PageList<T> getByPage(int page, int size);
+    default void get(String uniqueKey) {
+    }
+
+    void delete(String uniqueKey) throws Exception;
+    default void batchDelete(String[] uniqueKeys) {
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/PageList.java → common/src/main/java/cn/reghao/autodop/common/utils/data/db/PageList.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.app.vo;
+package cn.reghao.autodop.common.utils.data.db;
 
 import lombok.Data;
 

+ 29 - 0
common/src/main/java/cn/reghao/autodop/common/utils/data/serializer/DefaultJsonSerializer.java

@@ -0,0 +1,29 @@
+package cn.reghao.autodop.common.utils.data.serializer;
+
+import com.google.gson.Gson;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2019-11-29 00:05:57
+ */
+public class DefaultJsonSerializer<T> implements JsonSerializer<T> {
+    // TODO 采用 Jackson
+    private Gson gson = new Gson();
+
+    @Override
+    public String toJson(T t) {
+        return gson.toJson(t);
+    }
+
+    @Override
+    public String listToJson(List<T> t) {
+        return gson.toJson(t);
+    }
+
+    @Override
+    public T fromJson(String json, Class<T> clazz) {
+        return gson.fromJson(json, clazz);
+    }
+}

+ 61 - 0
common/src/main/java/cn/reghao/autodop/common/utils/data/serializer/JsonSerializer.java

@@ -0,0 +1,61 @@
+package cn.reghao.autodop.common.utils.data.serializer;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * JSON 序列化和反序列化
+ *
+ * @author reghao
+ * @date 2020-11-11 16:57:04
+ */
+public interface JsonSerializer<T> {
+    /**
+     * 对象转换为 JSON
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:10
+     */
+    String toJson(T t);
+
+    /**
+     * 对象集合转换为 JSON
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:10
+     */
+    String listToJson(List<T> t);
+
+    /**
+     * JSON 转换为对象
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:11
+     */
+    T fromJson(String json, Class<T> clazz);
+
+    /**
+     * JSON 数组转换为对象集合
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:14
+     */
+    default T fromJsonArry(String json, Class<T> clazz) {
+        return null;
+    }
+
+    /**
+     * JSON 文件转换为对象
+     *
+     * @param
+     * @return
+     * @date 2020-11-11 下午5:11
+     */
+    default T fromJson(File jsonFile, Class<T> clazz) {
+        return null;
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java

@@ -4,7 +4,7 @@ import cn.reghao.autodop.dmaster.app.constant.EnvType;
 import cn.reghao.autodop.dmaster.app.vo.SuccessfullyBuildVO;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployResult;
 import cn.reghao.autodop.dmaster.app.service.BuildService;
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildLogVO;
 import cn.reghao.autodop.dmaster.app.vo.log.CommitLogVO;
 import cn.reghao.autodop.dmaster.app.vo.log.DeployLogVO;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ConfigController.java

@@ -4,7 +4,7 @@ import cn.reghao.autodop.common.deploy.PackerType;
 import cn.reghao.autodop.dmaster.app.constant.*;
 import cn.reghao.autodop.dmaster.app.service.ConfigService;
 import cn.reghao.autodop.dmaster.app.constant.RepoAuthType;
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.common.result.WebResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ManageController.java

@@ -6,7 +6,7 @@ import cn.reghao.autodop.dmaster.app.constant.EnvType;
 import cn.reghao.autodop.dmaster.app.service.LogManager;
 import cn.reghao.autodop.dmaster.app.service.StatusManager;
 import cn.reghao.autodop.dmaster.app.vo.LogFile;
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.common.result.WebResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/BaseEntity.java

@@ -24,7 +24,7 @@ public class BaseEntity implements Serializable {
     @Id
     @GeneratedValue(strategy = GenerationType.TABLE)
     protected Long id;
-    // 记录是否已删除
+    // 逻辑删除
     private Boolean isDelete;
 
     @CreationTimestamp

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/dao/BaseDAO.java

@@ -1,7 +1,7 @@
 package cn.reghao.autodop.dmaster.app.repository.dao;
 
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.app.vo.log.CommitLogVO;
 import org.hibernate.Session;
 import org.hibernate.query.Query;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildService.java

@@ -10,7 +10,7 @@ import cn.reghao.autodop.dmaster.app.repository.log.CommitLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.log.DeployLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.*;
 import cn.reghao.autodop.dmaster.app.service.tools.updater.CommitLog;
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.app.vo.SuccessfullyBuildVO;
 import cn.reghao.autodop.dmaster.app.vo.log.*;
 import org.springframework.data.domain.Page;

+ 1 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigService.java

@@ -2,7 +2,6 @@ package cn.reghao.autodop.dmaster.app.service;
 
 import cn.reghao.autodop.common.deploy.PackerType;
 import cn.reghao.autodop.common.shell.ShellExecutor;
-import cn.reghao.autodop.common.shell.ShellResult;
 import cn.reghao.autodop.common.utils.JsonUtil;
 import cn.reghao.autodop.dmaster.app.constant.ConfigType;
 import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
@@ -17,7 +16,7 @@ import cn.reghao.autodop.dmaster.app.repository.build.AppUpdateRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.LocalDirRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.NotificationRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationRepository;
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;

+ 3 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/OrchestrateService.java

@@ -15,6 +15,7 @@ import cn.reghao.autodop.dmaster.app.repository.orchestration.*;
 import cn.reghao.autodop.dmaster.app.vo.*;
 import cn.reghao.autodop.dmaster.app.vo.orchestration.AppVO;
 import cn.reghao.autodop.dmaster.app.vo.orchestration.ProjVO;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
@@ -192,7 +193,7 @@ public class OrchestrateService {
                 projVOs.setTotalSize(projPages.getTotalElements());
                 projVOs.setTotalPages(projPages.getTotalPages());
                 projVOs.setList(projPages.getContent().stream()
-                        .map(proj -> new ProjVO().from(proj))
+                        .map(proj -> ProjVO.from(proj))
                         .collect(Collectors.toList()));
                 return projVOs;
             case 2:
@@ -201,7 +202,7 @@ public class OrchestrateService {
                 appVOs.setTotalSize(appPages.getTotalElements());
                 appVOs.setTotalPages(appPages.getTotalPages());
                 appVOs.setList(appPages.getContent().stream()
-                        .map(app -> new AppVO().from(app))
+                        .map(app -> AppVO.from(app))
                         .collect(Collectors.toList()));
                 return appVOs;
             default:

+ 0 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/CrudService.java

@@ -1,17 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.crud;
-
-import cn.reghao.autodop.dmaster.app.vo.PageList;
-
-/**
- * CRUD 接口
- *
- * @author reghao
- * @date 2020-06-25 01:34:27
- */
-public interface CrudService<T> {
-    void add(T t);
-    T get(String uniqueKey);
-    PageList<T> getByPage(int page, int size);
-    void update(T t);
-    void delete(T t);
-}

+ 0 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/App3Service.java

@@ -1,17 +0,0 @@
-package cn.reghao.autodop.dmaster.app3;
-
-import cn.reghao.autodop.dmaster.common.mongo.MongoManager;
-import org.springframework.stereotype.Service;
-
-/**
- * @author reghao
- * @date 2020-11-10 21:58:00
- */
-@Service
-public class App3Service {
-    private MongoManager mongoManager;
-
-    public App3Service(MongoManager mongoManager) {
-        this.mongoManager = mongoManager;
-    }
-}

+ 68 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/controller/App3CrudController.java

@@ -0,0 +1,68 @@
+package cn.reghao.autodop.dmaster.app3.controller;
+
+import cn.reghao.autodop.common.result.WebResult;
+import cn.reghao.autodop.dmaster.app3.entity.App3;
+import cn.reghao.autodop.dmaster.app3.service.App3CrudService;
+import cn.reghao.autodop.common.utils.data.serializer.DefaultJsonSerializer;
+import cn.reghao.autodop.common.utils.data.serializer.JsonSerializer;
+import cn.reghao.autodop.common.utils.data.db.PageList;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author reghao
+ * @date 2019-11-15 08:44:50
+ */
+@Api(tags = "第三方应用 CRUD 接口")
+@RestController
+@RequestMapping("/api/app3")
+public class App3CrudController {
+    private App3CrudService app3CrudService;
+    private JsonSerializer<App3> jsonSerializer = new DefaultJsonSerializer<>();
+
+    public App3CrudController(App3CrudService app3CrudService) {
+        this.app3CrudService = app3CrudService;
+    }
+
+    @PostMapping
+    public String addApp3(@RequestBody String jsonData) {
+        App3 app3 = jsonSerializer.fromJson(jsonData, App3.class);
+        if (isArgsValid(app3)) {
+            app3CrudService.addOrModify(app3);
+            return WebResult.success("add done...");
+        }
+
+        return WebResult.fail("add failed...");
+    }
+
+    @GetMapping
+    public String getApp3ByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        if (page < 0 || size <0) {
+            return WebResult.fail("get failed...");
+        }
+
+        PageList<App3> list = app3CrudService.getByPage(page, size);
+        return WebResult.success(list);
+    }
+
+    @PutMapping
+    public String modifyApp3(@RequestBody String jsonData) {
+        App3 app3 = jsonSerializer.fromJson(jsonData, App3.class);
+        if (isArgsValid(app3)) {
+            app3CrudService.addOrModify(app3);
+            return WebResult.success("put done...");
+        }
+
+        return WebResult.fail("modify failed...");
+    }
+
+    @DeleteMapping("/{app3Name}")
+    public String deleteApp3(@PathVariable("app3Name") String app3Name) throws Exception {
+        app3CrudService.delete(app3Name);
+        return WebResult.success("delete done...");
+    }
+
+    private boolean isArgsValid(App3 app3) {
+        return app3.getApp3Name() != null && app3.getExecPath() != null;
+    }
+}

+ 8 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/App3Controller.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/controller/App3OpsController.java

@@ -1,49 +1,41 @@
-package cn.reghao.autodop.dmaster.app3;
+package cn.reghao.autodop.dmaster.app3.controller;
 
 import cn.reghao.autodop.common.result.WebResult;
 import cn.reghao.autodop.common.utils.JsonUtil;
-import cn.reghao.autodop.common.utils.text.TextFile;
 import cn.reghao.autodop.dmaster.app3.backup.BackupService;
 import cn.reghao.autodop.dmaster.app3.entity.App3BakLog;
-import cn.reghao.autodop.dmaster.app3.entity.App3Bak;
 import cn.reghao.autodop.dmaster.common.mongo.MongoManager;
 import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.*;
 
-import java.io.File;
 import java.util.List;
 
 /**
  * @author reghao
  * @date 2019-11-15 08:44:50
  */
-@Api(tags = "第三方应用接口")
+@Api(tags = "第三方应用操作接口")
 @RestController
 @RequestMapping("/api/app3")
-public class App3Controller {
+public class App3OpsController {
     private BackupService backupService;
     private MongoManager mongoManager;
 
-    public App3Controller(BackupService backupService, MongoManager mongoManager) {
+    public App3OpsController(BackupService backupService, MongoManager mongoManager) {
         this.backupService = backupService;
         this.mongoManager = mongoManager;
     }
 
-    @PostMapping("/")
-    public String addService(App3Bak app3Bak) throws Exception {
-        String scriptPath = "/tmp/test.sh";
+    @PostMapping("/bak")
+    public String backup(String jsonData) throws Exception {
+        /*String scriptPath = "/tmp/test.sh";
         TextFile.write(new File(scriptPath), app3Bak.getBakScript());
         app3Bak.setBakScriptPath(scriptPath);
-        backupService.backup(app3Bak);
+        backupService.backup(app3Bak);*/
 
         return WebResult.success("ok");
     }
 
-    @GetMapping("/")
-    public String serviceList() {
-        return WebResult.success("ok");
-    }
-
     @PostMapping("/restore/{serviceName}")
     public String restore(@PathVariable("serviceName") String serviceName) throws Exception {
         return WebResult.success("ok");

+ 7 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3.java

@@ -3,7 +3,11 @@ package cn.reghao.autodop.dmaster.app3.entity;
 import cn.reghao.autodop.dmaster.app.entity.BaseEntity;
 import lombok.Data;
 
+import javax.persistence.Column;
+import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import java.util.Set;
 
 /**
  * @author reghao
@@ -12,12 +16,14 @@ import javax.persistence.Entity;
 @Data
 @Entity
 public class App3 extends BaseEntity {
+    @Column(nullable = false, unique = true)
     private String app3Name;
     private String ip;
     private int port;
     private String execPath;
     private String configDir;
-    private String configFile;
+    @ElementCollection(fetch = FetchType.EAGER)
+    private Set<String> configFile;
     private String logDir;
     private String logFile;
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3Bak.java

@@ -16,7 +16,7 @@ import javax.persistence.Entity;
 @Entity
 public class App3Bak extends BaseEntity {
     @Column(nullable = false, unique = true)
-    private String app3name;
+    private String app3Name;
     private String bakScript;
     private String bakScriptPath;
     private String bakDir;

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/repository/App3BakRepository.java

@@ -8,4 +8,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
  * @date 2020-01-21 14:53:03
  */
 public interface App3BakRepository extends JpaRepository<App3Bak, Long> {
+    App3Bak findByIsDeleteFalseAndApp3Name(String app3Name);
 }

+ 12 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/repository/App3Repository.java

@@ -0,0 +1,12 @@
+package cn.reghao.autodop.dmaster.app3.repository;
+
+import cn.reghao.autodop.dmaster.app3.entity.App3;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author reghao
+ * @date 2020-01-21 14:53:03
+ */
+public interface App3Repository extends JpaRepository<App3, Long> {
+    App3 findByIsDeleteFalseAndApp3Name(String app3Name);
+}

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/scheduler/BackupScheduler.java

@@ -33,18 +33,18 @@ public class BackupScheduler {
         jobDataMap.put(app3Bak.getBakScriptPath(), executor);
         jobDataMap.put("mongo", mongoManager);
         JobDetail jobDetail = JobBuilder.newJob(ScriptBakJob.class)
-                .withIdentity(app3Bak.getApp3name())
+                .withIdentity(app3Bak.getApp3Name())
                 .usingJobData(jobDataMap)
                 .build();
 
         TriggerBuilder<CronTrigger> triggerBuilder = TriggerBuilder
                 .newTrigger()
-                .withIdentity(app3Bak.getApp3name() + "@trigger")
+                .withIdentity(app3Bak.getApp3Name() + "@trigger")
                 .withSchedule(CronScheduleBuilder.cronSchedule(app3Bak.getCronExp()));
         CronTrigger cronTrigger = triggerBuilder.build();
 
         scheduler.scheduleJob(jobDetail, cronTrigger);
-        log.info("添加新定时任务 {}...", app3Bak.getApp3name());
+        log.info("添加新定时任务 {}...", app3Bak.getApp3Name());
     }
 
     public void remove() {

+ 67 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/service/App3CrudService.java

@@ -0,0 +1,67 @@
+package cn.reghao.autodop.dmaster.app3.service;
+
+import cn.reghao.autodop.dmaster.app3.entity.App3;
+import cn.reghao.autodop.dmaster.app3.repository.App3Repository;
+import cn.reghao.autodop.common.utils.data.db.CrudOps;
+import cn.reghao.autodop.common.utils.data.db.PageList;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class App3CrudService implements CrudOps<App3> {
+    private App3Repository app3Repository;
+
+    public App3CrudService(App3Repository app3Repository) {
+        this.app3Repository = app3Repository;
+    }
+
+    @Override
+    public void addOrModify(App3 app3) {
+        App3 app3Entity = app3Repository.findByIsDeleteFalseAndApp3Name(app3.getApp3Name());
+        if (app3Entity != null) {
+            // 若是新增,这三项值数据库会自动生成
+            app3.setId(app3Entity.getId());
+            app3.setCreateTime(app3Entity.getCreateTime());
+            app3.setUpdateTime(LocalDateTime.now());
+        }
+
+        app3.setIsDelete(false);
+        app3Repository.save(app3);
+    }
+
+    @Override
+    public PageList<App3> getByPage(int page, int size) {
+        // 默认按更新时间倒序
+        PageRequest pageRequest =
+                PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
+        Page<App3> app3Page = app3Repository.findAll(pageRequest);
+
+        PageList<App3> pageList = new PageList<>();
+        pageList.setTotalSize(app3Page.getTotalElements());
+        pageList.setTotalPages(app3Page.getTotalPages());
+        pageList.setList(app3Page.getContent());
+
+        return pageList;
+    }
+
+    @Override
+    public void delete(String uniqueKey) throws Exception {
+        App3 app3Entity = app3Repository.findByIsDeleteFalseAndApp3Name(uniqueKey);
+        if (app3Entity == null) {
+            throw new Exception(uniqueKey + " 不存在...");
+        }
+
+        app3Entity.setUpdateTime(LocalDateTime.now());
+        // TODO 只做逻辑删除,但如何复用 unique key?
+        app3Entity.setIsDelete(false);
+        app3Repository.save(app3Entity);
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/controller/UserController.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.auth.controller;
 
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.auth.service.UserService;
 import cn.reghao.autodop.common.result.WebResult;
 import io.swagger.annotations.Api;

+ 15 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/JwtTokenFilter.java

@@ -12,6 +12,7 @@ import javax.servlet.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -22,14 +23,26 @@ import java.util.stream.Collectors;
  * @date 2019-11-18 10:00:22
  */
 public class JwtTokenFilter extends OncePerRequestFilter {
+    private final String uriPattern = "/api/app3&/api/monitor&/api/vm";
+
+    private boolean matchUri(String uri) {
+        for (String str : uriPattern.split("&")) {
+            if (uri.startsWith(str)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     @Override
     protected void doFilterInternal(HttpServletRequest request,
                                     HttpServletResponse response,
                                     FilterChain chain) throws ServletException, IOException {
         String uri = request.getRequestURI();
         String method = request.getMethod();
-        // TODO 不处理 OPTIONS 请求、webhook 接口和非 /api 开头的请求
-        if ("OPTIONS".equals(method) || uri.startsWith("/api/app3") || uri.startsWith("/api/monitor") || uri.startsWith("/api/vm") || !uri.startsWith("/api")) {
+        // TODO 不处理 OPTIONS 请求和匹配 uriPattern 的请求
+        if ("OPTIONS".equals(method) || matchUri(uri)) {
             chain.doFilter(request, response);
             return;
         }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/service/UserService.java

@@ -4,7 +4,7 @@ import cn.reghao.autodop.common.utils.JsonUtil;
 import cn.reghao.autodop.common.utils.security.Cryptor;
 import cn.reghao.autodop.common.utils.security.Md5Cryptor;
 import cn.reghao.autodop.common.utils.security.Salt;
-import cn.reghao.autodop.dmaster.app.vo.PageList;
+import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.auth.entity.GrantedAuthorityImpl;
 import cn.reghao.autodop.dmaster.auth.entity.Permission;
 import cn.reghao.autodop.dmaster.auth.entity.Role;

+ 2 - 2
dmaster/src/main/resources/application-dev.yml

@@ -1,11 +1,11 @@
 spring:
   datasource:
-    url: jdbc:mysql://localhost:3306/reghao_autodop_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
+    url: jdbc:mysql://localhost/reghao_autodop_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
     username: reghao
     password: 12345678
   data:
     mongodb:
-      uri: mongodb://localhost/test
+      uri: mongodb://localhost/log
   rabbitmq:
     host: mq.srv.iquizoo.com
     port: 5672