Forráskód Böngészése

修改 AppBuilding, AppDeploying 和 AppRunning 数据模型和数据操作接口

reghao 4 éve
szülő
commit
92ee4ab530
25 módosított fájl, 444 hozzáadás és 266 törlés
  1. 3 14
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildDeployController.java
  2. 3 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/BuildDeployPageController.java
  3. 2 23
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppBuildingCrud.java
  4. 41 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppBuildingCrudImpl.java
  5. 2 23
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppDeployingCrud.java
  6. 41 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppDeployingCrudImpl.java
  7. 2 23
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppRunningCrud.java
  8. 41 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppRunningCrudImpl.java
  9. 44 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppBuildingQuery.java
  10. 4 42
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppDeployingQuery.java
  11. 70 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppDeployingQueryImpl.java
  12. 4 34
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppRunningQuery.java
  13. 55 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppRunningQueryImpl.java
  14. 0 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/repository/AppBuildingRepository.java
  15. 4 38
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/model/po/AppBuilding.java
  16. 8 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/model/vo/AppBuildingVO.java
  17. 18 10
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java
  18. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/AppConfigService.java
  19. 13 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/AppConfigServiceImpl.java
  20. 13 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/impl/BuildDeployConfigServiceImpl.java
  21. 8 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/page/BuildDeployPageImpl.java
  22. 24 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/impl/rpcresult/AppRpcClazzResultImpl.java
  23. 6 5
      dmaster/src/main/resources/templates/app/bd/deploy.html
  24. 0 1
      dmaster/src/main/resources/templates/app/bd/index.html
  25. 37 0
      dmaster/src/test/java/cn/reghao/autodop/dmaster/app/service/impl/BuildDeployConfigServiceImplTest.java

+ 3 - 14
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildDeployController.java

@@ -53,23 +53,12 @@ public class BuildDeployController {
     @ApiOperation(value = "部署应用")
     @ApiImplicitParams({
             @ApiImplicitParam(name="appId", value="应用 ID", paramType="query", dataType = "String"),
-            @ApiImplicitParam(name="commitId", value="代码版本", paramType="query", dataType = "String")
+            @ApiImplicitParam(name="buildLogId", value="构建 ID", paramType="query", dataType = "String")
     })
     @PostMapping(value = "/deploy", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deploy(@RequestParam("appId") String appId, @RequestParam("commitId") String commitId) {
+    public String deploy(@RequestParam("appId") String appId, @RequestParam("buildLogId") String buildLogId) {
         //buildDeployService.deploy(appId, commitId);
-        buildDeployDispatcher.deploy(appId, commitId);
-        return WebBody.success();
-    }
-
-    @ApiOperation(value = "部署应用")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="appId", value="应用 ID", paramType="query", dataType = "String"),
-            @ApiImplicitParam(name="commitId", value="代码版本", paramType="query", dataType = "String")
-    })
-    @PostMapping(value = "/deploy/{appId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deployApp(@PathVariable("appId") String appId) {
-        log.info("部署 {}", appId);
+        //buildDeployDispatcher.deploy(appId, commitId);
         return WebBody.success();
     }
 

+ 3 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/page/BuildDeployPageController.java

@@ -58,6 +58,9 @@ public class BuildDeployPageController {
     @GetMapping("/deploy/{appId}")
     public String deployStatusPage(@PathVariable("appId") String appId, Model model) {
         List<AppDeployingVO> list = buildDeployPage.deployStatus(appId);
+
+        model.addAttribute("appId", appId);
+        model.addAttribute("buildLogId", "list");
         model.addAttribute("list", list);
         return "/app/bd/deploy";
     }

+ 2 - 23
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppBuildingCrud.java

@@ -1,32 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud;
 
 import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
-import cn.reghao.autodop.dmaster.app.db.repository.AppBuildingRepository;
-import org.springframework.stereotype.Service;
+import cn.reghao.jdkutil.db.BaseCrud;
 
 /**
  * @author reghao
  * @date 2020-11-10 21:58:00
  */
-@Service
-public class AppBuildingCrud {
-    private AppBuildingRepository buildingRepository;
-
-    public AppBuildingCrud(AppBuildingRepository buildingRepository) {
-        this.buildingRepository = buildingRepository;
-    }
-
-    public void insertOrUpdate(AppBuilding appBuilding) {
-    }
-
-    public void delete(AppBuilding appBuilding) {
-    }
-
-    public AppBuilding selectByPk(Integer id) {
-        return null;
-    }
-
-    public AppBuilding selectByUk(String uk) {
-        return null;
-    }
+public interface AppBuildingCrud extends BaseCrud<AppBuilding> {
 }

+ 41 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppBuildingCrudImpl.java

@@ -0,0 +1,41 @@
+package cn.reghao.autodop.dmaster.app.db.crud;
+
+import cn.reghao.autodop.dmaster.app.db.repository.AppBuildingRepository;
+import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class AppBuildingCrudImpl implements AppBuildingCrud {
+    private final AppBuildingRepository buildingRepository;
+
+    public AppBuildingCrudImpl(AppBuildingRepository buildingRepository) {
+        this.buildingRepository = buildingRepository;
+    }
+    
+    @Override
+    public AppBuilding save(AppBuilding appBuilding) {
+        buildingRepository.save(appBuilding);
+        return appBuilding;
+    }
+
+    @Override
+    public void saveAll(List<AppBuilding> list) {
+        buildingRepository.saveAll(list);
+    }
+
+    @Override
+    public void update(AppBuilding appBuilding) {
+        buildingRepository.save(appBuilding);
+    }
+
+    @Override
+    public void delete(AppBuilding appBuilding) {
+        buildingRepository.delete(appBuilding);
+    }
+}

+ 2 - 23
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppDeployingCrud.java

@@ -1,32 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud;
 
 import cn.reghao.autodop.dmaster.app.model.po.AppDeploying;
-import cn.reghao.autodop.dmaster.app.db.repository.AppDeployingRepository;
-import org.springframework.stereotype.Service;
+import cn.reghao.jdkutil.db.BaseCrud;
 
 /**
  * @author reghao
  * @date 2020-11-10 21:58:00
  */
-@Service
-public class AppDeployingCrud {
-    private AppDeployingRepository deployingRepository;
-
-    public AppDeployingCrud(AppDeployingRepository deployingRepository) {
-        this.deployingRepository = deployingRepository;
-    }
-
-    public void insertOrUpdate(AppDeploying appDeploying) {
-    }
-
-    public void delete(AppDeploying appDeploying) {
-    }
-
-    public AppDeploying selectByPk(Integer id) {
-        return null;
-    }
-
-    public AppDeploying selectByUk(String uk) {
-        return null;
-    }
+public interface AppDeployingCrud extends BaseCrud<AppDeploying> {
 }

+ 41 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppDeployingCrudImpl.java

@@ -0,0 +1,41 @@
+package cn.reghao.autodop.dmaster.app.db.crud;
+
+import cn.reghao.autodop.dmaster.app.db.repository.AppDeployingRepository;
+import cn.reghao.autodop.dmaster.app.model.po.AppDeploying;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class AppDeployingCrudImpl implements AppDeployingCrud {
+    private final AppDeployingRepository deployingRepository;
+
+    public AppDeployingCrudImpl(AppDeployingRepository deployingRepository) {
+        this.deployingRepository = deployingRepository;
+    }
+
+    @Override
+    public AppDeploying save(AppDeploying appDeploying) {
+        deployingRepository.save(appDeploying);
+        return appDeploying;
+    }
+
+    @Override
+    public void saveAll(List<AppDeploying> list) {
+        deployingRepository.saveAll(list);
+    }
+
+    @Override
+    public void update(AppDeploying appDeploying) {
+        deployingRepository.save(appDeploying);
+    }
+
+    @Override
+    public void delete(AppDeploying appDeploying) {
+        deployingRepository.delete(appDeploying);
+    }
+}

+ 2 - 23
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppRunningCrud.java

@@ -1,32 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud;
 
 import cn.reghao.autodop.dmaster.app.model.po.AppRunning;
-import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
-import org.springframework.stereotype.Service;
+import cn.reghao.jdkutil.db.BaseCrud;
 
 /**
  * @author reghao
  * @date 2020-11-10 21:58:00
  */
-@Service
-public class AppRunningCrud {
-    private AppRunningRepository runningRepository;
-
-    public AppRunningCrud(AppRunningRepository runningRepository) {
-        this.runningRepository = runningRepository;
-    }
-
-    public void insertOrUpdate(AppRunning appRunning) {
-    }
-
-    public void delete(AppRunning appRunning) {
-    }
-
-    public AppRunning selectByPk(Integer id) {
-        return null;
-    }
-
-    public AppRunning selectByUk(String id) {
-        return null;
-    }
+public interface AppRunningCrud extends BaseCrud<AppRunning> {
 }

+ 41 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/AppRunningCrudImpl.java

@@ -0,0 +1,41 @@
+package cn.reghao.autodop.dmaster.app.db.crud;
+
+import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
+import cn.reghao.autodop.dmaster.app.model.po.AppRunning;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class AppRunningCrudImpl implements AppRunningCrud {
+    private final AppRunningRepository runningRepository;
+
+    public AppRunningCrudImpl(AppRunningRepository runningRepository) {
+        this.runningRepository = runningRepository;
+    }
+
+    @Override
+    public AppRunning save(AppRunning appRunning) {
+        runningRepository.save(appRunning);
+        return appRunning;
+    }
+
+    @Override
+    public void saveAll(List<AppRunning> list) {
+        runningRepository.saveAll(list);
+    }
+
+    @Override
+    public void update(AppRunning appRunning) {
+        runningRepository.save(appRunning);
+    }
+
+    @Override
+    public void delete(AppRunning appRunning) {
+        runningRepository.delete(appRunning);
+    }
+}

+ 44 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppBuildingQuery.java

@@ -2,15 +2,21 @@ package cn.reghao.autodop.dmaster.app.db.query;
 
 import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
 import cn.reghao.autodop.dmaster.app.db.repository.AppBuildingRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
+import cn.reghao.autodop.dmaster.app.model.vo.AppBuildingVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.Join;
+import javax.persistence.criteria.JoinType;
 import javax.persistence.criteria.Predicate;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -24,25 +30,56 @@ public class AppBuildingQuery {
         this.buildingRepository = buildingRepository;
     }
 
-    public List<AppBuilding> queryAll(Map<String, String> kv) {
-        Specification<AppBuilding> specification = specification(kv);
-        return buildingRepository.findAll(specification);
+    public Page<AppBuildingVO> queryByPage(Map<String, String> kv, Pageable pageable) {
+        Page<AppBuilding> appBuildings = innerJoin(kv, pageable);
+        return appBuildings.map(AppBuildingVO::new);
     }
 
-    public Page<AppBuilding> queryByPage(Map<String, String> kv, Pageable pageable) {
+    public List<AppBuildingVO> queryAll(Map<String, String> kv) {
         Specification<AppBuilding> specification = specification(kv);
-        return buildingRepository.findAll(specification, pageable);
+        List<AppBuilding> appBuildings = buildingRepository.findAll(specification);
+        return appBuildings.stream().map(AppBuildingVO::new).collect(Collectors.toList());
+    }
+
+    public AppBuilding findByAppId(String appId) {
+        Specification<AppBuilding> specification = (root, query, cb) -> {
+            Join<AppBuilding, AppConfig> innerJoin = root.join("appConfig", JoinType.INNER);
+            Predicate predicate = cb.equal(innerJoin.get("appId"), appId);
+            return cb.and(predicate);
+        };
+
+        List<AppBuilding> list = buildingRepository.findAll(specification);
+        if (!list.isEmpty()) {
+            return list.get(0);
+        } else {
+            return null;
+        }
     }
 
     private Specification<AppBuilding> specification(Map<String, String> kv) {
         return (root, query, cb) -> {
+            Join<AppBuilding, AppConfig> innerJoin = root.join("appConfig", JoinType.INNER);
+            List<Predicate> predicates = new ArrayList<>();
+            kv.forEach((name, value) -> {
+                predicates.add(cb.like(innerJoin.get(name), "%" + value + "%"));
+            });
+
+            return cb.and(predicates.toArray(new Predicate[0]));
+        };
+    }
+
+    private Page<AppBuilding> innerJoin(Map<String, String> kv, Pageable pageable) {
+        Specification<AppBuilding> specification = (root, query, cb) -> {
+            Join<AppBuilding, AppConfig> innerJoin = root.join("appConfig", JoinType.INNER);
             List<Predicate> predicates = new ArrayList<>();
             kv.forEach((name, value) -> {
-                predicates.add(cb.like(root.get(name), "%" + value + "%"));
+                //predicates.add(cb.like(innerJoin.get(name), "%" + value + "%"));
+                predicates.add(cb.equal(innerJoin.get(name), value));
             });
 
-            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
             return cb.and(predicates.toArray(new Predicate[0]));
         };
+
+        return buildingRepository.findAll(specification, pageable);
     }
 }

+ 4 - 42
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppDeployingQuery.java

@@ -1,14 +1,7 @@
 package cn.reghao.autodop.dmaster.app.db.query;
 
 import cn.reghao.autodop.dmaster.app.model.po.AppDeploying;
-import cn.reghao.autodop.dmaster.app.db.repository.AppDeployingRepository;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
 
-import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -16,39 +9,8 @@ import java.util.Map;
  * @author reghao
  * @date 2021-06-02 15:01:18
  */
-@Service
-public class AppDeployingQuery {
-    private AppDeployingRepository deployingRepository;
-
-    public AppDeployingQuery(AppDeployingRepository deployingRepository) {
-        this.deployingRepository = deployingRepository;
-    }
-
-    public AppDeploying query(Map<String, String> kv) {
-        Specification<AppDeploying> specification = specification(kv);
-        List<AppDeploying> list = deployingRepository.findAll(specification);
-        return list.get(0);
-    }
-
-    public List<AppDeploying> queryAll(Map<String, String> kv) {
-        Specification<AppDeploying> specification = specification(kv);
-        return deployingRepository.findAll(specification);
-    }
-
-    public Page<AppDeploying> queryByPage(Map<String, String> kv, Pageable pageable) {
-        Specification<AppDeploying> specification = specification(kv);
-        return deployingRepository.findAll(specification, pageable);
-    }
-
-    private Specification<AppDeploying> specification(Map<String, String> kv) {
-        return (root, query, cb) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            kv.forEach((name, value) -> {
-                predicates.add(cb.like(root.get(name), "%" + value + "%"));
-            });
-
-            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
-            return cb.and(predicates.toArray(new Predicate[0]));
-        };
-    }
+public interface AppDeployingQuery {
+    List<AppDeploying> findByAppId(String appId);
+    AppDeploying findByAppIdAndMachineId(String appId, String machineId);
+    AppDeploying query(Map<String, String> kv);
 }

+ 70 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppDeployingQueryImpl.java

@@ -0,0 +1,70 @@
+package cn.reghao.autodop.dmaster.app.db.query;
+
+import cn.reghao.autodop.dmaster.app.db.repository.AppDeployingRepository;
+import cn.reghao.autodop.dmaster.app.model.po.AppDeploying;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2021-06-02 15:01:18
+ */
+@Service
+public class AppDeployingQueryImpl implements AppDeployingQuery {
+    private final AppDeployingRepository deployingRepository;
+
+    public AppDeployingQueryImpl(AppDeployingRepository deployingRepository) {
+        this.deployingRepository = deployingRepository;
+    }
+
+    @Override
+    public List<AppDeploying> findByAppId(String appId) {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public AppDeploying findByAppIdAndMachineId(String appId, String machineId) {
+        return deployingRepository.findByAppIdAndMachineId(appId, machineId);
+    }
+
+    @Override
+    public AppDeploying query(Map<String, String> kv) {
+        Specification<AppDeploying> specification = specification(kv);
+        List<AppDeploying> list = deployingRepository.findAll(specification);
+        if (!list.isEmpty()) {
+            return list.get(0);
+        } else {
+            return null;
+        }
+    }
+
+    public List<AppDeploying> queryAll(Map<String, String> kv) {
+        Specification<AppDeploying> specification = specification(kv);
+        return deployingRepository.findAll(specification);
+    }
+
+    public Page<AppDeploying> queryByPage(Map<String, String> kv, Pageable pageable) {
+        Specification<AppDeploying> specification = specification(kv);
+        return deployingRepository.findAll(specification, pageable);
+    }
+
+    private Specification<AppDeploying> specification(Map<String, String> kv) {
+        return (root, query, cb) -> {
+            List<Predicate> predicates = new ArrayList<>();
+            kv.forEach((name, value) -> {
+                predicates.add(cb.like(root.get(name), "%" + value + "%"));
+            });
+
+            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
+            return cb.and(predicates.toArray(new Predicate[0]));
+        };
+    }
+}

+ 4 - 34
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppRunningQuery.java

@@ -1,14 +1,9 @@
 package cn.reghao.autodop.dmaster.app.db.query;
 
 import cn.reghao.autodop.dmaster.app.model.po.AppRunning;
-import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
 
-import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -16,33 +11,8 @@ import java.util.Map;
  * @author reghao
  * @date 2021-06-02 15:01:18
  */
-@Service
-public class AppRunningQuery {
-    private AppRunningRepository runningRepository;
-
-    public AppRunningQuery(AppRunningRepository runningRepository) {
-        this.runningRepository = runningRepository;
-    }
-
-    public List<AppRunning> queryAll(Map<String, String> kv) {
-        Specification<AppRunning> specification = specification(kv);
-        return runningRepository.findAll(specification);
-    }
-
-    public Page<AppRunning> queryByPage(Map<String, String> kv, Pageable pageable) {
-        Specification<AppRunning> specification = specification(kv);
-        return runningRepository.findAll(specification, pageable);
-    }
-
-    private Specification<AppRunning> specification(Map<String, String> kv) {
-        return (root, query, cb) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            kv.forEach((name, value) -> {
-                predicates.add(cb.like(root.get(name), "%" + value + "%"));
-            });
-
-            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
-            return cb.and(predicates.toArray(new Predicate[0]));
-        };
-    }
+public interface AppRunningQuery {
+    AppRunning findByAppIdAndMachineId(String appId, String machineId);
+    List<AppRunning> queryAll(Map<String, String> kv);
+    Page<AppRunning> queryByPage(Map<String, String> kv, Pageable pageable);
 }

+ 55 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppRunningQueryImpl.java

@@ -0,0 +1,55 @@
+package cn.reghao.autodop.dmaster.app.db.query;
+
+import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
+import cn.reghao.autodop.dmaster.app.model.po.AppRunning;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2021-06-02 15:01:18
+ */
+@Service
+public class AppRunningQueryImpl implements AppRunningQuery {
+    private final AppRunningRepository runningRepository;
+
+    public AppRunningQueryImpl(AppRunningRepository runningRepository) {
+        this.runningRepository = runningRepository;
+    }
+
+    @Override
+    public AppRunning findByAppIdAndMachineId(String appId, String machineId) {
+        return runningRepository.findByAppIdAndMachineId(appId, machineId);
+    }
+
+    @Override
+    public List<AppRunning> queryAll(Map<String, String> kv) {
+        Specification<AppRunning> specification = specification(kv);
+        return runningRepository.findAll(specification);
+    }
+
+    @Override
+    public Page<AppRunning> queryByPage(Map<String, String> kv, Pageable pageable) {
+        Specification<AppRunning> specification = specification(kv);
+        return runningRepository.findAll(specification, pageable);
+    }
+
+    private Specification<AppRunning> specification(Map<String, String> kv) {
+        return (root, query, cb) -> {
+            List<Predicate> predicates = new ArrayList<>();
+            kv.forEach((name, value) -> {
+                predicates.add(cb.like(root.get(name), "%" + value + "%"));
+            });
+
+            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
+            return cb.and(predicates.toArray(new Predicate[0]));
+        };
+    }
+}

+ 0 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/repository/AppBuildingRepository.java

@@ -10,5 +10,4 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  */
 public interface AppBuildingRepository
         extends JpaRepository<AppBuilding, Integer>, JpaSpecificationExecutor<AppBuilding> {
-    AppBuilding findByAppId(String appId);
 }

+ 4 - 38
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/model/po/AppBuilding.java

@@ -10,6 +10,7 @@ import cn.reghao.jdkutil.converter.DateTimeConverter;
 import lombok.*;
 
 import javax.persistence.Entity;
+import javax.persistence.OneToOne;
 import java.time.LocalDateTime;
 
 /**
@@ -23,13 +24,8 @@ import java.time.LocalDateTime;
 @Setter
 @Entity
 public class AppBuilding extends BaseEntity<Integer> {
-    private String appId;
-    private String appName;
-    private String appType;
-    private String env;
-    private String repoBranch;
-    private Integer httpPort;
-
+    @OneToOne
+    private AppConfig appConfig;
     private String buildLogId;
     private String commitId;
     private LocalDateTime commitTime;
@@ -39,41 +35,11 @@ public class AppBuilding extends BaseEntity<Integer> {
     private String buildBy;
 
     public AppBuilding(AppConfig app) {
-        this.appId = app.getAppId();
-        this.appName = app.getAppName();
-        this.env = app.getEnv();
-        this.appType = app.getAppType();
-        this.repoBranch = app.getRepoBranch();
-        RunningConfig runningConfig = app.getRunningConfig();
-        if (runningConfig != null) {
-            this.httpPort = runningConfig.getHttpPort();
-        } else {
-            this.httpPort = 0;
-        }
-    }
-
-    public AppBuilding refresh(AppConfig app) {
-        this.appName = app.getAppName();
-        this.env = app.getEnv();
-        this.appType = app.getAppType();
-        this.repoBranch = app.getRepoBranch();
-        RunningConfig runningConfig = app.getRunningConfig();
-        if (runningConfig != null) {
-            this.httpPort = runningConfig.getHttpPort();
-        } else {
-            this.httpPort = 0;
-        }
-
-        return this;
+        this.appConfig = app;
     }
 
     public void update(BuildLog buildLog) {
         this.setBuildLogId(buildLog.getId());
-        this.setAppId(buildLog.getAppId());
-        this.setEnv(buildLog.getEnv());
-        this.setAppType(buildLog.getAppType());
-        this.setRepoBranch(buildLog.getRepoBranch());
-
         CommitInfo commitInfo = buildLog.getCommitInfo();
         if (commitInfo != null) {
             this.setCommitId(commitInfo.getCommitId());

+ 8 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/model/vo/AppBuildingVO.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.app.model.vo;
 
 import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
+import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.jdkutil.converter.DateTimeConverter;
 import lombok.Data;
 
@@ -26,12 +27,13 @@ public class AppBuildingVO {
     private String buildBy;
 
     public AppBuildingVO(AppBuilding appBuilding) {
-        this.appId = appBuilding.getAppId();
-        this.appName = appBuilding.getAppName();
-        this.appType = appBuilding.getAppType();
-        this.env = appBuilding.getEnv();
-        this.repoBranch = appBuilding.getRepoBranch();
-        this.httpPort = appBuilding.getHttpPort();
+        AppConfig appConfig = appBuilding.getAppConfig();
+        this.appId = appConfig.getAppId();
+        this.appName = appConfig.getAppName();
+        this.appType = appConfig.getAppType();
+        this.env = appConfig.getEnv();
+        this.repoBranch = appConfig.getRepoBranch();
+        this.httpPort = appConfig.getRunningConfig() != null ? appConfig.getRunningConfig().getHttpPort() : 0;
 
         this.buildLogId = appBuilding.getBuildLogId();
         this.commitId = appBuilding.getCommitId();

+ 18 - 10
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java

@@ -1,5 +1,9 @@
 package cn.reghao.autodop.dmaster.app.service;
 
+import cn.reghao.autodop.dmaster.app.db.crud.AppBuildingCrud;
+import cn.reghao.autodop.dmaster.app.db.crud.AppDeployingCrud;
+import cn.reghao.autodop.dmaster.app.db.query.AppBuildingQuery;
+import cn.reghao.autodop.dmaster.app.db.query.AppDeployingQuery;
 import cn.reghao.jdkutil.result.ResultStatus;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
@@ -35,8 +39,10 @@ import java.util.concurrent.*;
 @Slf4j
 @Service
 public class BuildDeployDispatcher {
-    private AppBuildingRepository appBuildingRepository;
-    private AppDeployingRepository appDeployingRepository;
+    private AppBuildingQuery appBuildingQuery;
+    private AppBuildingCrud appBuildingCrud;
+    private AppDeployingQuery appDeployingQuery;
+    private AppDeployingCrud appDeployingCrud;
     private BuildLogRepository buildLogRepository;
     private AppIntegrateReinitInterceptor reinitInterceptor;
     // TODO 多线程访问的集合
@@ -48,15 +54,17 @@ public class BuildDeployDispatcher {
     private AppDeployer appDeployer;
     private NotifyService notifyService;
 
-    public BuildDeployDispatcher(AppBuildingRepository appBuildingRepository,
-                                 AppDeployingRepository appDeployingRepository,
+    public BuildDeployDispatcher(AppBuildingQuery appBuildingQuery, AppBuildingCrud appBuildingCrud,
+                                 AppDeployingQuery appDeployingQuery, AppDeployingCrud appDeployingCrud,
                                  AppIntegrateReinitInterceptor reinitInterceptor,
                                  AppConfigQuery appConfigQuery,
                                  BuildLogRepository buildLogRepository,
                                  NotifyService notify,
                                  AppDeployer appDeployer) {
-        this.appBuildingRepository = appBuildingRepository;
-        this.appDeployingRepository = appDeployingRepository;
+        this.appBuildingQuery = appBuildingQuery;
+        this.appBuildingCrud = appBuildingCrud;
+        this.appDeployingQuery = appDeployingQuery;
+        this.appDeployingCrud = appDeployingCrud;
         this.reinitInterceptor = reinitInterceptor;
         this.appConfigQuery = appConfigQuery;
         this.buildLogRepository = buildLogRepository;
@@ -107,18 +115,18 @@ public class BuildDeployDispatcher {
                     }
 
                     buildLog = buildLogRepository.save(buildLog);
-                    AppBuilding appBuilding = appBuildingRepository.findByAppId(appId);
+                    AppBuilding appBuilding = appBuildingQuery.findByAppId(appId);
                     if (appBuilding != null) {
                         appBuilding.update(buildLog);
-                        appBuildingRepository.save(appBuilding);
+                        appBuildingCrud.save(appBuilding);
                     }
 
-                    List<AppDeploying> appDeployings = appDeployingRepository.findByAppId(appId);
+                    List<AppDeploying> appDeployings = appDeployingQuery.findByAppId(appId);
                     if (!appDeployings.isEmpty()) {
                         for (AppDeploying appDeploying : appDeployings) {
                             appDeploying.setBuildLogId(buildLog.getId());
                         }
-                        appDeployingRepository.saveAll(appDeployings);
+                        appDeployingCrud.saveAll(appDeployings);
                     }
                     log.info("{} 构建完成", appId);
                 })

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

@@ -15,6 +15,7 @@ import java.util.List;
 public interface AppConfigService {
     Result add(AppConfig appConfig);
     Result setDeployConfig(int id, List<DeployConfigDto> deployConfigDtos);
+    @Deprecated
     Result setNotify(int id, List<NotifyGroup> notifyGroups);
     Result copy(AppConfig from, NewApp to);
     Result modify(AppConfig appConfig);

+ 13 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/AppConfigServiceImpl.java

@@ -1,9 +1,12 @@
 package cn.reghao.autodop.dmaster.app.service.config.impl;
 
+import cn.reghao.autodop.dmaster.app.db.crud.AppDeployingCrud;
 import cn.reghao.autodop.dmaster.app.db.crud.config.AppConfigCrud;
+import cn.reghao.autodop.dmaster.app.db.query.AppDeployingQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
 import cn.reghao.autodop.dmaster.app.model.dto.DeployConfigDto;
+import cn.reghao.autodop.dmaster.app.model.po.AppDeploying;
 import cn.reghao.autodop.dmaster.app.model.po.AppRunning;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.DeployConfig;
@@ -33,16 +36,21 @@ public class AppConfigServiceImpl implements AppConfigService {
     private final SharedEntityChecker sharedEntityChecker;
     private final BuildDeployConfigServiceImpl appBuildService;
     private final AppRunningRepository runningRepository;
+    private AppDeployingQuery appDeployingQuery;
+    private AppDeployingCrud appDeployingCrud;
 
     public AppConfigServiceImpl(AppConfigQuery appConfigQuery, AppConfigCrud appConfigCrud,
                                 MachineHostQuery machineHostQuery, SharedEntityChecker sharedEntityChecker,
-                                BuildDeployConfigServiceImpl appBuildService, AppRunningRepository runningRepository) {
+                                BuildDeployConfigServiceImpl appBuildService, AppRunningRepository runningRepository,
+                                AppDeployingQuery appDeployingQuery, AppDeployingCrud appDeployingCrud) {
         this.appConfigQuery = appConfigQuery;
         this.appConfigCrud = appConfigCrud;
         this.machineHostQuery = machineHostQuery;
         this.sharedEntityChecker = sharedEntityChecker;
         this.appBuildService = appBuildService;
         this.runningRepository = runningRepository;
+        this.appDeployingQuery = appDeployingQuery;
+        this.appDeployingCrud = appDeployingCrud;
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -87,6 +95,10 @@ public class AppConfigServiceImpl implements AppConfigService {
 
         app.setDeployConfigs(list);
         appConfigCrud.save(app);
+
+        List<AppDeploying> appDeployings = list.stream()
+                .map(deployConfig -> new AppDeploying(app, deployConfig)).collect(Collectors.toList());
+        appDeployingCrud.saveAll(appDeployings);
         return Result.result(ResultStatus.SUCCESS);
     }
 

+ 13 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/impl/BuildDeployConfigServiceImpl.java

@@ -1,5 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.impl;
 
+import cn.reghao.autodop.dmaster.app.db.crud.AppBuildingCrud;
+import cn.reghao.autodop.dmaster.app.db.query.AppBuildingQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
 import cn.reghao.autodop.dmaster.app.model.po.AppDeploying;
@@ -21,18 +23,21 @@ import java.util.stream.Collectors;
 @Service
 public class BuildDeployConfigServiceImpl implements BuildDeployConfigService {
     private AppConfigQuery appConfigQuery;
-    private AppBuildingRepository buildingRepository;
+    private AppBuildingQuery appBuildingQuery;
+    private AppBuildingCrud appBuildingCrud;
     private AppDeployingRepository deployingRepository;
     private AppRunningRepository runningRepository;
 
     public BuildDeployConfigServiceImpl(AppConfigQuery appConfigQuery,
-                                        AppBuildingRepository buildingRepository,
+                                        AppBuildingQuery appBuildingQuery,
+                                        AppBuildingCrud appBuildingCrud,
                                         AppDeployingRepository deployingRepository,
                                         AppRunningRepository runningRepository) {
         this.appConfigQuery = appConfigQuery;
-        this.buildingRepository = buildingRepository;
         this.deployingRepository = deployingRepository;
         this.runningRepository = runningRepository;
+        this.appBuildingQuery = appBuildingQuery;
+        this.appBuildingCrud = appBuildingCrud;
     }
 
     /**
@@ -44,13 +49,13 @@ public class BuildDeployConfigServiceImpl implements BuildDeployConfigService {
      */
     @Override
     public void refreshAppBuilding(AppConfig app) {
-        AppBuilding appBuilding = buildingRepository.findByAppId(app.getAppId());
+        AppBuilding appBuilding = appBuildingQuery.findByAppId(app.getAppId());
         if (appBuilding == null) {
             appBuilding = new AppBuilding(app);
         } else {
-            appBuilding.refresh(app);
+            //appBuilding.refresh(app);
         }
-        buildingRepository.save(appBuilding);
+        appBuildingCrud.save(appBuilding);
     }
 
     /**
@@ -105,9 +110,9 @@ public class BuildDeployConfigServiceImpl implements BuildDeployConfigService {
 
     @Override
     public void delete(String appId) {
-        AppBuilding appBuilding = buildingRepository.findByAppId(appId);
+        AppBuilding appBuilding = appBuildingQuery.findByAppId(appId);
         if (appBuilding != null) {
-            buildingRepository.delete(appBuilding);
+            appBuildingCrud.delete(appBuilding);
         }
 
         List<AppDeploying> appDeployings = deployingRepository.findByAppId(appId);

+ 8 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/page/BuildDeployPageImpl.java

@@ -3,9 +3,7 @@ package cn.reghao.autodop.dmaster.app.service.page;
 import cn.reghao.autodop.dmaster.app.db.query.AppBuildingQuery;
 import cn.reghao.autodop.dmaster.app.db.query.AppDeployingQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
-import cn.reghao.autodop.dmaster.app.db.query.log.BuildLogQuery;
 import cn.reghao.autodop.dmaster.app.model.constant.AppType;
-import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
 import cn.reghao.autodop.dmaster.app.model.po.AppDeploying;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.DeployConfig;
@@ -13,7 +11,6 @@ import cn.reghao.autodop.dmaster.app.model.vo.AppBuildingVO;
 import cn.reghao.autodop.dmaster.app.model.vo.AppDeployingVO;
 import cn.reghao.autodop.dmaster.rbac.UserContext;
 import cn.reghao.autodop.dmaster.rbac.model.constant.RoleType;
-import cn.reghao.autodop.dmaster.util.db.PageSort;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
@@ -27,17 +24,15 @@ import java.util.*;
  */
 @Service
 public class BuildDeployPageImpl implements BuildDeployPage {
-    private AppConfigQuery appConfigQuery;
-    private AppBuildingQuery buildingQuery;
-    private AppDeployingQuery deployingQuery;
-    private BuildLogQuery buildLogQuery;
+    private final AppConfigQuery appConfigQuery;
+    private final AppBuildingQuery buildingQuery;
+    private final AppDeployingQuery deployingQuery;
 
     public BuildDeployPageImpl(AppConfigQuery appConfigQuery, AppBuildingQuery buildingQuery,
-                               AppDeployingQuery deployingQuery, BuildLogQuery buildLogQuery) {
+                               AppDeployingQuery deployingQuery) {
         this.appConfigQuery = appConfigQuery;
         this.buildingQuery = buildingQuery;
         this.deployingQuery = deployingQuery;
-        this.buildLogQuery = buildLogQuery;
     }
 
     @Override
@@ -56,27 +51,23 @@ public class BuildDeployPageImpl implements BuildDeployPage {
             appType = AppType.maven.name();
         }
 
-        Page<AppBuilding> appBuildings;
         Map<String, String> queryMap = new HashMap<>();
         if (set.contains(RoleType.ROLE_ADMIN.name())) {
             queryMap.put("env", env);
-            appBuildings = buildingQuery.queryByPage(queryMap, pageRequest);
+            return buildingQuery.queryByPage(queryMap, pageRequest);
         } else {
             queryMap.put("env", env);
             queryMap.put("appType", appType);
-            appBuildings = buildingQuery.queryByPage(queryMap, pageRequest);
+            return buildingQuery.queryByPage(queryMap, pageRequest);
         }
-
-        return appBuildings.map(AppBuildingVO::new);
     }
 
     @Override
     public Page<AppBuildingVO> searchResultPage(String appName) {
         Map<String, String> map = new HashMap<>();
         map.put("appName", appName);
-        List<AppBuilding> list = buildingQuery.queryAll(map);
-        Page<AppBuilding> page = new PageImpl<>(list);
-        return page.map(AppBuildingVO::new);
+        List<AppBuildingVO> list = buildingQuery.queryAll(map);
+        return new PageImpl<>(list);
     }
 
     @Override

+ 24 - 13
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/impl/rpcresult/AppRpcClazzResultImpl.java

@@ -4,6 +4,10 @@ import cn.reghao.autodop.common.http.DefaultWebRequest;
 import cn.reghao.autodop.common.http.WebRequest;
 import cn.reghao.autodop.common.msg.rpc.dto.app.StatusResult;
 import cn.reghao.autodop.common.msg.rpc.dto.app.DeployResult;
+import cn.reghao.autodop.dmaster.app.db.crud.AppDeployingCrud;
+import cn.reghao.autodop.dmaster.app.db.crud.AppRunningCrud;
+import cn.reghao.autodop.dmaster.app.db.query.AppDeployingQuery;
+import cn.reghao.autodop.dmaster.app.db.query.AppRunningQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.repository.AppDeployingRepository;
 import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
@@ -30,27 +34,31 @@ import java.util.Optional;
  */
 @Service
 public class AppRpcClazzResultImpl {
-    private AppRunningRepository runningRepository;
+    private AppRunningQuery appRunningQuery;
+    private AppRunningCrud appRunningCrud;
     private NotifyService notifyService;
     private WebRequest webRequest;
     private BuildLogRepository buildLogRepository;
     private DeployLogRepository deployLogRepository;
-    private AppDeployingRepository deployingRepository;
     private AppConfigQuery appConfigQuery;
+    private AppDeployingQuery appDeployingQuery;
+    private AppDeployingCrud appDeployingCrud;
 
-    public AppRpcClazzResultImpl(AppRunningRepository runningRepository,
+    public AppRpcClazzResultImpl(AppRunningQuery appRunningQuery, AppRunningCrud appRunningCrud,
                                  NotifyService notifyService,
                                  BuildLogRepository buildLogRepository,
                                  DeployLogRepository deployLogRepository,
-                                 AppDeployingRepository deployingRepository,
-                                 AppConfigQuery appConfigQuery) {
-        this.runningRepository = runningRepository;
+                                 AppConfigQuery appConfigQuery, AppDeployingQuery appDeployingQuery,
+                                 AppDeployingCrud appDeployingCrud) {
+        this.appRunningQuery = appRunningQuery;
+        this.appRunningCrud = appRunningCrud;
         this.notifyService = notifyService;
         this.webRequest = new DefaultWebRequest();
         this.buildLogRepository = buildLogRepository;
         this.deployLogRepository = deployLogRepository;
-        this.deployingRepository = deployingRepository;
         this.appConfigQuery = appConfigQuery;
+        this.appDeployingQuery = appDeployingQuery;
+        this.appDeployingCrud = appDeployingCrud;
     }
 
     public void deployResult(DeployResult deployResult) {
@@ -71,20 +79,23 @@ public class AppRpcClazzResultImpl {
     private void updateDeployingStatus(BuildLog buildLog, DeployResult deployResult) {
         String appId = buildLog.getAppId();
         String machineId = deployResult.getMachineId();
-        AppDeploying deploying = deployingRepository.findByAppIdAndMachineId(appId, machineId);
+        AppDeploying deploying = appDeployingQuery.findByAppIdAndMachineId(appId, machineId);
         if (deploying != null) {
             deploying.update(buildLog, deployResult);
-            deployingRepository.save(deploying);
+            appDeployingCrud.update(deploying);
         }
     }
 
     private void updateRunningStatus(BuildLog buildLog, DeployResult deployResult) {
         String appId = buildLog.getAppId();
         String machineId = deployResult.getMachineId();
-        AppRunning running = runningRepository.findByAppIdAndMachineId(appId, machineId);
+        AppRunning running = appRunningQuery.findByAppIdAndMachineId(appId, machineId);
         if (running != null) {
             running.update(buildLog, deployResult.getAppStatus());
-            runningRepository.save(running);
+            appRunningCrud.update(running);
+        } else {
+            running = new AppRunning();
+            appRunningCrud.save(running);
         }
     }
 
@@ -110,10 +121,10 @@ public class AppRpcClazzResultImpl {
     public void statusResult(StatusResult appStatus) {
         String appId = appStatus.getAppId();
         String machineId = appStatus.getMachineId();
-        AppRunning appRunning = runningRepository.findByAppIdAndMachineId(appId, machineId);
+        AppRunning appRunning = appRunningQuery.findByAppIdAndMachineId(appId, machineId);
         if (appRunning != null) {
             appRunning.update(appStatus);
-            runningRepository.save(appRunning);
+            appRunningCrud.update(appRunning);
         }
     }
 }

+ 6 - 5
dmaster/src/main/resources/templates/app/bd/deploy.html

@@ -19,12 +19,13 @@
                 <tbody>
                 <tr th:each="item:${list}">
                     <td th:text="${item.machineIpv4}">机器地址</td>
-                    <td th:text="${item.commitId}">当前部署版本</td>
-                    <td th:text="${item.deployTime}">部署时间</td>
-                    <td th:text="${item.deployResult}">部署结果</td>
-                    <td th:text="${item.deployBy}">部署用户</td>
+                    <td th:text="${item?.commitId}">当前部署版本</td>
+                    <td th:text="${item?.deployTime}">部署时间</td>
+                    <td th:text="${item?.deployResult}">部署结果</td>
+                    <td th:text="${item?.deployBy}">部署用户</td>
                     <td>
-                        <a class="ajax-post" th:href="@{'/api/app/bd/deploy/'+${item.appId}}">部署</a>
+                        <a class="ajax-post"
+                           th:href="@{'/api/app/bd/deploy?appId='+${appId}+'&buildLogId='+${buildLogId}}">部署</a>
                     </td>
                 </tr>
                 </tbody>

+ 0 - 1
dmaster/src/main/resources/templates/app/bd/index.html

@@ -75,7 +75,6 @@
                     <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="ajax-post" th:href="@{'/api/app/bd/deploy?appId='+${item.buildLogId}}">部署</a>
                         <a class="open-popup" data-title="应用部署状态" th:attr="data-url=@{'/app/bd/deploy/'+${item.appId}}"
                            data-size="1000,500" href="#">部署状态</a>
                     </td>

+ 37 - 0
dmaster/src/test/java/cn/reghao/autodop/dmaster/app/service/impl/BuildDeployConfigServiceImplTest.java

@@ -0,0 +1,37 @@
+package cn.reghao.autodop.dmaster.app.service.impl;
+
+import cn.reghao.autodop.dmaster.DmasterApplication;
+import cn.reghao.autodop.dmaster.app.db.crud.AppBuildingCrud;
+import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
+import cn.reghao.autodop.dmaster.app.model.constant.EnvList;
+import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
+import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@ActiveProfiles("dev")
+@SpringBootTest(classes = DmasterApplication.class)
+@RunWith(SpringRunner.class)
+public class BuildDeployConfigServiceImplTest {
+    @Autowired
+    private AppConfigQuery appConfigQuery;
+    @Autowired
+    private AppBuildingCrud appBuildingCrud;
+
+    @Test
+    public void test() {
+        List<AppBuilding> list = appConfigQuery.findAll().stream()
+                .filter(appConfig -> appConfig.getEnv().equals(EnvList.test.getName()))
+                .map(AppBuilding::new)
+                .collect(Collectors.toList());
+        appBuildingCrud.saveAll(list);
+        System.out.println();
+    }
+}