瀏覽代碼

调整应用模块中的配置接口

reghao 5 年之前
父節點
當前提交
fa55b555d5

+ 94 - 102
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/BuildCrudController.java

@@ -1,139 +1,131 @@
 package cn.reghao.autodop.dmaster.app.controller.crud;
 
-import cn.reghao.autodop.common.deploy.PackerType;
 import cn.reghao.autodop.common.result.WebResult;
 import cn.reghao.autodop.common.utils.data.db.PageList;
-import cn.reghao.autodop.dmaster.app.constant.*;
-import cn.reghao.autodop.dmaster.app.service.ConfigService;
+import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
+import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
+import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
+import cn.reghao.autodop.dmaster.app.entity.build.AppUpdate;
+import cn.reghao.autodop.dmaster.app.service.crud.build.AppCompileCrudService;
+import cn.reghao.autodop.dmaster.app.service.crud.build.AppPackCrudService;
+import cn.reghao.autodop.dmaster.app.service.crud.build.AppUpdateCrudService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * @author reghao
  * @date 2019-08-30 18:49:15
  */
 @Slf4j
-@Api(tags = "配置 CRUD 接口")
+@Api(tags = "应用构建配置 CRUD 接口")
 @RestController
-@RequestMapping("/api/config1")
+@RequestMapping("/api/config/build")
 public class BuildCrudController {
-    private ConfigService configService;
+    private AppUpdateCrudService updateCrudService;
+    private AppCompileCrudService compileCrudService;
+    private AppPackCrudService packCrudService;
 
-    public BuildCrudController(ConfigService configService) {
-        this.configService = configService;
+    public BuildCrudController(AppUpdateCrudService updateCrudService,
+                               AppCompileCrudService compileCrudService,
+                               AppPackCrudService packCrudService) {
+        this.updateCrudService = updateCrudService;
+        this.compileCrudService = compileCrudService;
+        this.packCrudService = packCrudService;
     }
 
-    @ApiOperation(value = "添加配置")
-    @PostMapping(value = "/{configType}", consumes = "application/json")
-    public ResponseEntity<String> addConfig(@PathVariable("configType") String configType,
-                                            @RequestBody String json) throws Exception {
-        configService.addOrModify(configType, json);
+    /* 应用更新配置 */
+    @ApiOperation(value = "添加应用更新配置")
+    @PostMapping(value = "/update", consumes = "application/json")
+    public ResponseEntity<String> addUpdateConfig(@RequestBody String json) throws Exception {
+        AppUpdate appUpdate = (AppUpdate) JsonConverter.jsonToObject(json, AppUpdate.class);
+        updateCrudService.addOrModify(appUpdate);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
-    @ApiOperation(value = "分页获取配置(更新时间倒序)")
-    @GetMapping("/{configType}")
-    public ResponseEntity<String> getConfigByPage(@PathVariable("configType") String configType,
-                                                  @RequestParam("page") int page,
-                                                  @RequestParam("size") int size) throws Exception {
-        PageRequest pageRequest =
-                PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
-        PageList pageList = configService.getByPage(configType, pageRequest);
+    @ApiOperation(value = "分页获取应用更新配置")
+    @GetMapping("/update")
+    public ResponseEntity<String> getUpdateConfigByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        PageList<AppUpdate> pageList = updateCrudService.getByPage(page, size);
         return ResponseEntity.ok().body(WebResult.success(pageList));
     }
 
-    @ApiOperation(value = "修改配置")
-    @PutMapping("/{configType}")
-    public ResponseEntity<String> modifyConfig(@PathVariable("configType") String configType,
-                                               @RequestBody String json) throws Exception {
-        configService.addOrModify(configType, json);
+    @ApiOperation(value = "修改应用更新配置")
+    @PutMapping("/update")
+    public ResponseEntity<String> modifyUpdateConfig(@RequestBody String json) throws Exception {
+        AppUpdate appUpdate = (AppUpdate) JsonConverter.jsonToObject(json, AppUpdate.class);
+        updateCrudService.addOrModify(appUpdate);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
-    @ApiOperation(value = "删除配置")
-    @DeleteMapping("/{configType}/{uniqueKey}")
-    public ResponseEntity<String> deleteConfig(@PathVariable("configType") String configType,
-                                               @PathVariable("uniqueKey") String uniqueKey) throws Exception {
-        configService.delete(configType, uniqueKey);
+    @ApiOperation(value = "删除应用更新配置")
+    @DeleteMapping("/update/{uniqueKey}")
+    public ResponseEntity<String> deleteUpdateConfig(@PathVariable("uniqueKey") String uniqueKey) throws Exception {
+        updateCrudService.delete(uniqueKey);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+    
+    /* 应用编译配置 */
+    @ApiOperation(value = "添加应用编译配置")
+    @PostMapping(value = "/compile", consumes = "application/json")
+    public ResponseEntity<String> addCompileConfig(@RequestBody String json) throws Exception {
+        AppCompile appCompile = (AppCompile) JsonConverter.jsonToObject(json, AppCompile.class);
+        compileCrudService.addOrModify(appCompile);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
-    /**
-     * 各种配置类型
-     *
-     * @param
-     * @return
-     * @date 2020-09-16 下午2:12
-     */
-    @GetMapping("/types/{configType}")
-    public ResponseEntity<String> getConfigType(@PathVariable("configType") String configType) {
-        Map<String, String> map = new HashMap<>();
-        // TODO 配置类型可以动态修改
-        switch (ConfigType.valueOf(configType)) {
-            case localDir:
-                for (EnvType config : EnvType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case notifier:
-                for (NotifierType config : NotifierType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case repo:
-                for (RepoType config : RepoType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case compiler:
-                for (CompilerType config : CompilerType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case packer:
-                for (PackerType config : PackerType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case repoAuth:
-                for (RepoAuthType config : RepoAuthType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case app:
-                for (AppType config : AppType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case env:
-                for (EnvType config : EnvType.values()) {
-                    map.put(config.name(), config.getValue());
-                }
-                break;
-            case proj:
-            case update:
-            case compile:
-            case pack:
-            case notify:
-                map.putAll(configService.buildConfigs(configType));
-                break;
-            default:
-        }
+    @ApiOperation(value = "分页获取应用编译配置")
+    @GetMapping("/compile")
+    public ResponseEntity<String> getCompileConfigByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        PageList<AppCompile> pageList = compileCrudService.getByPage(page, size);
+        return ResponseEntity.ok().body(WebResult.success(pageList));
+    }
+
+    @ApiOperation(value = "修改应用编译配置")
+    @PutMapping("/compile")
+    public ResponseEntity<String> modifyCompileConfig(@RequestBody String json) throws Exception {
+        AppCompile appCompile = (AppCompile) JsonConverter.jsonToObject(json, AppCompile.class);
+        compileCrudService.addOrModify(appCompile);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
 
-        return ResponseEntity.ok().body(WebResult.success(map));
+    @ApiOperation(value = "删除应用编译配置")
+    @DeleteMapping("/compile/{uniqueKey}")
+    public ResponseEntity<String> deleteCompileConfig(@PathVariable("uniqueKey") String uniqueKey) throws Exception {
+        compileCrudService.delete(uniqueKey);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
-    @GetMapping("/{configType}/list")
-    public ResponseEntity<String> getConfigList(@PathVariable("configType") String configType) throws Exception {
-        configService.buildConfigs("");
-        return ResponseEntity.ok().body(WebResult.success("pageList"));
+    /* 应用打包配置 */
+    @ApiOperation(value = "添加应用打包配置")
+    @PostMapping(value = "/pack", consumes = "application/json")
+    public ResponseEntity<String> addPackConfig(@RequestBody String json) throws Exception {
+        AppPack appPack = (AppPack) JsonConverter.jsonToObject(json, AppPack.class);
+        packCrudService.addOrModify(appPack);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    @ApiOperation(value = "分页获取应用打包配置")
+    @GetMapping("/pack")
+    public ResponseEntity<String> getPackConfigByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        PageList<AppPack> pageList = packCrudService.getByPage(page, size);
+        return ResponseEntity.ok().body(WebResult.success(pageList));
+    }
+
+    @ApiOperation(value = "修改应用打包配置")
+    @PutMapping("/pack")
+    public ResponseEntity<String> modifyPackConfig(@RequestBody String json) throws Exception {
+        AppPack appPack = (AppPack) JsonConverter.jsonToObject(json, AppPack.class);
+        packCrudService.addOrModify(appPack);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    @ApiOperation(value = "删除应用打包配置")
+    @DeleteMapping("/pack/{uniqueKey}")
+    public ResponseEntity<String> deletePackConfig(@PathVariable("uniqueKey") String uniqueKey) throws Exception {
+        packCrudService.delete(uniqueKey);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 }

+ 95 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/GlobalCrudController.java

@@ -0,0 +1,95 @@
+package cn.reghao.autodop.dmaster.app.controller.crud;
+
+import cn.reghao.autodop.common.result.WebResult;
+import cn.reghao.autodop.common.utils.data.db.PageList;
+import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
+import cn.reghao.autodop.dmaster.app.entity.LocalDir;
+import cn.reghao.autodop.dmaster.app.entity.Notification;
+import cn.reghao.autodop.dmaster.app.service.crud.LocalDirCrudService;
+import cn.reghao.autodop.dmaster.app.service.crud.NotificationCrudService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author reghao
+ * @date 2019-08-30 18:49:15
+ */
+@Slf4j
+@Api(tags = "全局配置 CRUD 接口")
+@RestController
+@RequestMapping("/api/config/global")
+public class GlobalCrudController {
+    private LocalDirCrudService localDirCrudService;
+    private NotificationCrudService notificationCrudService;
+
+    public GlobalCrudController(LocalDirCrudService localDirCrudService,
+                                NotificationCrudService notificationCrudService) {
+        this.localDirCrudService = localDirCrudService;
+        this.notificationCrudService = notificationCrudService;
+    }
+
+    /* 本地目录配置 */
+    @ApiOperation(value = "添加本地目录配置")
+    @PostMapping(value = "/localdir", consumes = "application/json")
+    public ResponseEntity<String> addLocalDir(@RequestBody String json) throws Exception {
+        LocalDir localDir = (LocalDir) JsonConverter.jsonToObject(json, LocalDir.class);
+        localDirCrudService.addOrModify(localDir);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    @ApiOperation(value = "分页获取本地目录配置")
+    @GetMapping("/localdir")
+    public ResponseEntity<String> getLocalDirByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        PageList<LocalDir> pageList = localDirCrudService.getByPage(page, size);
+        return ResponseEntity.ok().body(WebResult.success(pageList));
+    }
+
+    @ApiOperation(value = "修改本地目录配置")
+    @PutMapping("/localdir")
+    public ResponseEntity<String> modifyLocalDir(@RequestBody String json) throws Exception {
+        LocalDir localDir = (LocalDir) JsonConverter.jsonToObject(json, LocalDir.class);
+        localDirCrudService.addOrModify(localDir);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    @ApiOperation(value = "删除本地目录配置")
+    @DeleteMapping("/localdir/{uniqueKey}")
+    public ResponseEntity<String> deleteLocalDir(@PathVariable("uniqueKey") String uniqueKey) throws Exception {
+        localDirCrudService.delete(uniqueKey);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    /* 通知配置 */
+    @ApiOperation(value = "添加通知配置")
+    @PostMapping(value = "/notification", consumes = "application/json")
+    public ResponseEntity<String> addNotification(@RequestBody String json) throws Exception {
+        Notification notification = (Notification) JsonConverter.jsonToObject(json, Notification.class);
+        notificationCrudService.addOrModify(notification);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    @ApiOperation(value = "分页获取通知配置")
+    @GetMapping("/notification")
+    public ResponseEntity<String> getNotificationByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        PageList<Notification> pageList = notificationCrudService.getByPage(page, size);
+        return ResponseEntity.ok().body(WebResult.success(pageList));
+    }
+
+    @ApiOperation(value = "修改通知配置")
+    @PutMapping("/notification")
+    public ResponseEntity<String> modifyNotification(@RequestBody String json) throws Exception {
+        Notification notification = (Notification) JsonConverter.jsonToObject(json, Notification.class);
+        notificationCrudService.addOrModify(notification);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    @ApiOperation(value = "删除通知配置")
+    @DeleteMapping("/notification/{uniqueKey}")
+    public ResponseEntity<String> deleteNotification(@PathVariable("uniqueKey") String uniqueKey) throws Exception {
+        notificationCrudService.delete(uniqueKey);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+}

+ 59 - 51
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/OrchestrateCrudController.java

@@ -1,13 +1,15 @@
 package cn.reghao.autodop.dmaster.app.controller.crud;
 
 import cn.reghao.autodop.common.result.WebResult;
-import cn.reghao.autodop.dmaster.app.constant.EnvType;
-import cn.reghao.autodop.dmaster.app.service.OrchestrateService;
+import cn.reghao.autodop.common.utils.data.db.PageList;
+import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
+import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
+import cn.reghao.autodop.dmaster.app.entity.orchestration.ProjOrchestration;
+import cn.reghao.autodop.dmaster.app.service.crud.orchestarte.AppCrudService;
+import cn.reghao.autodop.dmaster.app.service.crud.orchestarte.ProjCrudService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
@@ -18,69 +20,75 @@ import org.springframework.web.bind.annotation.*;
 @Slf4j
 @Api(tags = "应用编排 CRUD 接口")
 @RestController
-@RequestMapping("/api/app/orchestrate1")
+@RequestMapping("/api/config/orchestrate")
 public class OrchestrateCrudController {
-    private OrchestrateService orchestrateService;
+    private AppCrudService appCrudService;
+    private ProjCrudService projCrudService;
 
-    public OrchestrateCrudController(OrchestrateService orchestrateService) {
-        this.orchestrateService = orchestrateService;
+    public OrchestrateCrudController(AppCrudService appCrudService, ProjCrudService projCrudService) {
+        this.appCrudService = appCrudService;
+        this.projCrudService = projCrudService;
     }
 
-    @ApiOperation(value = "添加项目/应用编排")
-    @PostMapping(value = "/{type}", consumes = "application/json")
-    public ResponseEntity<String> addOrchestration(@PathVariable("type") int type, @RequestBody String json)
-            throws Exception {
-        orchestrateService.addOrModify(type, json);
+    /* 应用编排 */
+    @ApiOperation(value = "添加应用编排")
+    @PostMapping(value = "/app", consumes = "application/json")
+    public ResponseEntity<String> addAppOrchestration(@RequestBody String json) throws Exception {
+        AppOrchestration app = (AppOrchestration) JsonConverter.jsonToObject(json, AppOrchestration.class);
+        appCrudService.addOrModify(app);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
-    @ApiOperation(value = "拷贝项目/应用编排")
-    @PostMapping(value = "/copy/{type}")
-    public ResponseEntity<String> copyOrchestration(@PathVariable("type") int type,
-                                                    @RequestParam("from") String from,
-                                                    @RequestParam("to") String to) throws Exception {
-        boolean res = orchestrateService.copy(type, from, to);
-        if (res) {
-            return ResponseEntity.ok().body(WebResult.success("拷贝成功"));
-        } else {
-            return ResponseEntity.ok().body(WebResult.fail("拷贝失败"));
-        }
+    @ApiOperation(value = "分页获取应用编排")
+    @GetMapping("/app")
+    public ResponseEntity<String> getAppOrchestrationByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        PageList<AppOrchestration> pageList = appCrudService.getByPage(page, size);
+        return ResponseEntity.ok().body(WebResult.success(pageList));
     }
 
-    @ApiOperation(value = "获取项目/应用编排")
-    @GetMapping("/{type}/{id}")
-    public ResponseEntity<String> getOrchestration(@PathVariable("type") int type, @PathVariable("id") String id) {
-        Object res = orchestrateService.get(type, id);
-        return ResponseEntity.ok().body(WebResult.success(res));
+    @ApiOperation(value = "修改应用编排")
+    @PutMapping("/app")
+    public ResponseEntity<String> modifyAppOrchestration(@RequestBody String json) throws Exception {
+        AppOrchestration app = (AppOrchestration) JsonConverter.jsonToObject(json, AppOrchestration.class);
+        appCrudService.addOrModify(app);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    @ApiOperation(value = "删除应用编排")
+    @DeleteMapping("/app/{uniqueKey}")
+    public ResponseEntity<String> deleteAppOrchestration(@PathVariable("uniqueKey") String uniqueKey) throws Exception {
+        appCrudService.delete(uniqueKey);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
+    /* 项目编排 */
+    @ApiOperation(value = "添加项目编排")
+    @PostMapping(value = "/proj", consumes = "application/json")
+    public ResponseEntity<String> addProjOrchestration(@RequestBody String json) throws Exception {
+        ProjOrchestration proj = (ProjOrchestration) JsonConverter.jsonToObject(json, ProjOrchestration.class);
+        projCrudService.addOrModify(proj);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
-    @ApiOperation(value = "分页获取项目/应用编排(更新时间倒序)")
-    @GetMapping("/{type}")
-    public ResponseEntity<String> getOrchestrationByPage(@PathVariable("type") int type,
-                                                        @RequestParam("env") String env,
-                                                        @RequestParam("page") int page,
-                                                        @RequestParam("size") int size) {
-        String env1 = EnvType.valueOf(env).name();
-        PageRequest pageRequest =
-                PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
-        Object res = orchestrateService.getByPage(type, env1, pageRequest);
-        return ResponseEntity.ok().body(WebResult.success(res));
+    @ApiOperation(value = "分页获取项目编排")
+    @GetMapping("/proj")
+    public ResponseEntity<String> getProjOrchestrationByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
+        PageList<ProjOrchestration> pageList = projCrudService.getByPage(page, size);
+        return ResponseEntity.ok().body(WebResult.success(pageList));
     }
 
-    @ApiOperation(value = "修改项目/应用编排")
-    @PutMapping("/{type}")
-    public ResponseEntity<String> modifyOrchestration(@PathVariable("type") int type, @RequestBody String json)
-            throws Exception {
-        // TODO 修改仓库相关的字段时应该删除本地仓库
-        orchestrateService.addOrModify(type, json);
+    @ApiOperation(value = "修改项目编排")
+    @PutMapping("/proj")
+    public ResponseEntity<String> modifyProjOrchestration(@RequestBody String json) throws Exception {
+        ProjOrchestration proj = (ProjOrchestration) JsonConverter.jsonToObject(json, ProjOrchestration.class);
+        projCrudService.addOrModify(proj);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
-    @ApiOperation(value = "删除项目/应用编排")
-    @DeleteMapping("/{type}/{appId}")
-    public ResponseEntity<String> deleteOrchestration(@PathVariable("type") int type,
-                                                      @PathVariable("appId") String appId) throws Exception {
-        orchestrateService.delete(type, appId);
+    @ApiOperation(value = "删除项目编排")
+    @DeleteMapping("/proj/{uniqueKey}")
+    public ResponseEntity<String> deleteProjOrchestration(@PathVariable("uniqueKey") String uniqueKey) throws Exception {
+        projCrudService.delete(uniqueKey);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 }

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

@@ -1,7 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service;
 
 import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
-import cn.reghao.autodop.dmaster.app.entity.deploy.AppDeploy;
 import cn.reghao.autodop.dmaster.app.entity.deploy.AppLog;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.vo.LogFile;

+ 3 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/orchestarte/AppCrudService.java

@@ -62,6 +62,9 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
         appRepository.save(app);
     }
 
+    public void copy() {
+    }
+
     @Override
     public PageList<AppOrchestration> getByPage(int page, int size) {
         // 默认按更新时间倒序

+ 3 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/orchestarte/ProjCrudService.java

@@ -49,6 +49,9 @@ public class ProjCrudService implements CrudOps<ProjOrchestration> {
         projRepository.save(proj);
     }
 
+    public void copy() {
+    }
+
     @Override
     public PageList<ProjOrchestration> getByPage(int page, int size) {
         // 默认按更新时间倒序