Browse Source

[BUG][#731]repair swagger annotation,interface path:/escheduler/projects/{projectName}/process/batch-delete and /escheduler/projects/{projectName}/process/delete (#764)

* 增加工作流导出导入功能,前端定时器表达式的秒和分钟的默认值从*修改成0

* 修改工作流导出导入功能由excel改为json减少依赖

* [BUG][#731]repair swagger annotation ,interface path:/escheduler/projects/{projectName}/process/batch-delete and /escheduler/projects/{projectName}/process/delete

* [BUG][#771] The edit timer did not assign the original data

* [FEATURE][#236] Cross-project dependency

* [FEATURE][#236] Cross-project dependency(增加跨项目依赖)
黄聪 5 years ago
parent
commit
c7da656b53
22 changed files with 328 additions and 19 deletions
  1. 6 0
      dockerfile/conf/escheduler/conf/i18n/messages.properties
  2. 6 0
      dockerfile/conf/escheduler/conf/i18n/messages_en_US.properties
  3. 6 0
      dockerfile/conf/escheduler/conf/i18n/messages_zh_CN.properties
  4. 36 4
      escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java
  5. 21 0
      escheduler-api/src/main/java/cn/escheduler/api/controller/ProjectController.java
  6. 18 0
      escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java
  7. 26 0
      escheduler-api/src/main/java/cn/escheduler/api/service/ProjectService.java
  8. 6 0
      escheduler-api/src/main/resources/i18n/messages.properties
  9. 6 0
      escheduler-api/src/main/resources/i18n/messages_en_US.properties
  10. 6 0
      escheduler-api/src/main/resources/i18n/messages_zh_CN.properties
  11. 22 0
      escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java
  12. 15 0
      escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java
  13. 16 0
      escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProjectMapper.java
  14. 13 0
      escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProjectMapperProvider.java
  15. 74 11
      escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/dependItemList.vue
  16. 5 1
      escheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue
  17. 5 1
      escheduler-ui/src/js/conf/home/pages/dag/index.vue
  18. 5 1
      escheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue
  19. 4 1
      escheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue
  20. 29 0
      escheduler-ui/src/js/conf/home/store/dag/actions.js
  21. 1 0
      escheduler-ui/src/js/conf/home/store/dag/mutations.js
  22. 2 0
      escheduler-ui/src/js/conf/home/store/dag/state.js

+ 6 - 0
dockerfile/conf/escheduler/conf/i18n/messages.properties

@@ -111,6 +111,7 @@ UPDATE_PROJECT_NOTES=update project
 PROJECT_ID=project id
 QUERY_PROJECT_BY_ID_NOTES=query project info by project id
 QUERY_PROJECT_LIST_PAGING_NOTES=QUERY PROJECT LIST PAGING 
+QUERY_ALL_PROJECT_LIST_NOTES=query all project list 
 DELETE_PROJECT_BY_ID_NOTES=delete project by id 
 QUERY_UNAUTHORIZED_PROJECT_NOTES=query unauthorized project
 QUERY_AUTHORIZED_PROJECT_NOTES=query authorized project
@@ -152,10 +153,12 @@ VERIFY_PROCCESS_DEFINITION_NAME_NOTES=verify proccess definition name
 LOGIN_NOTES=user login
 UPDATE_PROCCESS_DEFINITION_NOTES=update proccess definition
 PROCESS_DEFINITION_ID=process definition id
+PROCESS_DEFINITION_IDS=process definition ids
 RELEASE_PROCCESS_DEFINITION_NOTES=release proccess definition
 QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=query proccess definition by id
 QUERY_PROCCESS_DEFINITION_LIST_NOTES=query proccess definition list
 QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=query proccess definition list paging
+QUERY_ALL_DEFINITION_LIST_NOTES=query all definition list
 PAGE_NO=page no
 PROCESS_INSTANCE_ID=process instance id
 PROCESS_INSTANCE_JSON=process instance info(json format)
@@ -170,6 +173,9 @@ LIMIT=limit
 VIEW_TREE_NOTES=view tree
 GET_NODE_LIST_BY_DEFINITION_ID_NOTES=get task node list by process definition id
 PROCESS_DEFINITION_ID_LIST=process definition id list
+QUERY_PROCCESS_DEFINITION_All_BY_PROJECT_ID_NOTES=query proccess definition all by project id
+DELETE_PROCESS_DEFINITION_BY_ID_NOTES=delete process definition by process definition id
+BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES=batch delete process definition by process definition ids
 QUERY_PROCESS_INSTANCE_BY_ID_NOTES=query process instance by process instance id
 DELETE_PROCESS_INSTANCE_BY_ID_NOTES=delete process instance by process instance id
 TASK_ID=task instance id

+ 6 - 0
dockerfile/conf/escheduler/conf/i18n/messages_en_US.properties

@@ -111,6 +111,7 @@ UPDATE_PROJECT_NOTES=update project
 PROJECT_ID=project id
 QUERY_PROJECT_BY_ID_NOTES=query project info by project id
 QUERY_PROJECT_LIST_PAGING_NOTES=QUERY PROJECT LIST PAGING 
+QUERY_ALL_PROJECT_LIST_NOTES=query all project list
 DELETE_PROJECT_BY_ID_NOTES=delete project by id 
 QUERY_UNAUTHORIZED_PROJECT_NOTES=query unauthorized project
 QUERY_AUTHORIZED_PROJECT_NOTES=query authorized project
@@ -152,10 +153,12 @@ VERIFY_PROCCESS_DEFINITION_NAME_NOTES=verify proccess definition name
 LOGIN_NOTES=user login
 UPDATE_PROCCESS_DEFINITION_NOTES=update proccess definition
 PROCESS_DEFINITION_ID=process definition id
+PROCESS_DEFINITION_IDS=process definition ids
 RELEASE_PROCCESS_DEFINITION_NOTES=release proccess definition
 QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=query proccess definition by id
 QUERY_PROCCESS_DEFINITION_LIST_NOTES=query proccess definition list
 QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=query proccess definition list paging
+QUERY_ALL_DEFINITION_LIST_NOTES=query all definition list
 PAGE_NO=page no
 PROCESS_INSTANCE_ID=process instance id
 PROCESS_INSTANCE_JSON=process instance info(json format)
@@ -170,6 +173,9 @@ LIMIT=limit
 VIEW_TREE_NOTES=view tree
 GET_NODE_LIST_BY_DEFINITION_ID_NOTES=get task node list by process definition id
 PROCESS_DEFINITION_ID_LIST=process definition id list
+QUERY_PROCCESS_DEFINITION_All_BY_PROJECT_ID_NOTES=query proccess definition all by project id
+DELETE_PROCESS_DEFINITION_BY_ID_NOTES=delete process definition by process definition id
+BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES=batch delete process definition by process definition ids
 QUERY_PROCESS_INSTANCE_BY_ID_NOTES=query process instance by process instance id
 DELETE_PROCESS_INSTANCE_BY_ID_NOTES=delete process instance by process instance id
 TASK_ID=task instance id

+ 6 - 0
dockerfile/conf/escheduler/conf/i18n/messages_zh_CN.properties

@@ -110,6 +110,7 @@ UPDATE_PROJECT_NOTES=更新项目
 PROJECT_ID=项目ID
 QUERY_PROJECT_BY_ID_NOTES=通过项目ID查询项目信息
 QUERY_PROJECT_LIST_PAGING_NOTES=分页查询项目列表
+QUERY_ALL_PROJECT_LIST_NOTES=查询所有项目
 DELETE_PROJECT_BY_ID_NOTES=删除项目通过ID
 QUERY_UNAUTHORIZED_PROJECT_NOTES=查询未授权的项目
 QUERY_AUTHORIZED_PROJECT_NOTES=查询授权项目
@@ -155,8 +156,10 @@ RELEASE_PROCCESS_DEFINITION_NOTES=发布流程定义
 QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=查询流程定义通过流程定义ID
 QUERY_PROCCESS_DEFINITION_LIST_NOTES=查询流程定义列表
 QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=分页查询流程定义列表
+QUERY_ALL_DEFINITION_LIST_NOTES=查询所有流程定义
 PAGE_NO=页码号
 PROCESS_INSTANCE_ID=流程实例ID
+PROCESS_INSTANCE_IDS=流程实例ID集合
 PROCESS_INSTANCE_JSON=流程实例信息(json格式)
 SCHEDULE_TIME=定时时间
 SYNC_DEFINE=更新流程实例的信息是否同步到流程定义
@@ -168,6 +171,9 @@ LIMIT=显示多少条
 VIEW_TREE_NOTES=树状图
 GET_NODE_LIST_BY_DEFINITION_ID_NOTES=获得任务节点列表通过流程定义ID
 PROCESS_DEFINITION_ID_LIST=流程定义id列表
+QUERY_PROCCESS_DEFINITION_All_BY_PROJECT_ID_NOTES=查询流程定义通过项目ID
+DELETE_PROCESS_DEFINITION_BY_ID_NOTES=删除流程定义通过流程定义ID
+BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES=批量删除流程定义通过流程定义ID集合
 QUERY_PROCESS_INSTANCE_BY_ID_NOTES=查询流程实例通过流程实例ID
 DELETE_PROCESS_INSTANCE_BY_ID_NOTES=删除流程实例通过流程实例ID
 TASK_ID=任务实例ID

+ 36 - 4
escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java

@@ -390,10 +390,14 @@ public class ProcessDefinitionController extends BaseController{
      * @param processDefinitionId
      * @return
      */
+    @ApiOperation(value = "deleteProcessDefinitionById", notes= "DELETE_PROCESS_DEFINITION_BY_ID_NOTES")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "processDefinitionId", value = "PROCESS_DEFINITION_ID", dataType = "Int", example = "100")
+    })
     @GetMapping(value="/delete")
     @ResponseStatus(HttpStatus.OK)
-    public Result deleteProcessDefinitionById(@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                            @PathVariable String projectName,
+    public Result deleteProcessDefinitionById(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                              @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
                                             @RequestParam("processDefinitionId") Integer processDefinitionId
     ){
         try{
@@ -415,10 +419,14 @@ public class ProcessDefinitionController extends BaseController{
      * @param processDefinitionIds
      * @return
      */
+    @ApiOperation(value = "batchDeleteProcessDefinitionByIds", notes= "BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "processDefinitionIds", value = "PROCESS_DEFINITION_IDS", type = "String")
+    })
     @GetMapping(value="/batch-delete")
     @ResponseStatus(HttpStatus.OK)
-    public Result batchDeleteProcessDefinitionByIds(@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                              @PathVariable String projectName,
+    public Result batchDeleteProcessDefinitionByIds(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                                    @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
                                               @RequestParam("processDefinitionIds") String processDefinitionIds
     ){
         try{
@@ -459,4 +467,28 @@ public class ProcessDefinitionController extends BaseController{
         }
     }
 
+
+
+    /**
+     * query proccess definition all by project id
+     *
+     * @param loginUser
+     * @return
+     */
+    @ApiOperation(value = "queryProccessDefinitionAllByProjectId", notes= "QUERY_PROCCESS_DEFINITION_All_BY_PROJECT_ID_NOTES")
+    @GetMapping(value="/queryProccessDefinitionAllByProjectId")
+    @ResponseStatus(HttpStatus.OK)
+    public Result queryProccessDefinitionAllByProjectId(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                                        @RequestParam("projectId") Integer projectId){
+        try{
+            logger.info("query proccess definition list, login user:{}, project id:{}",
+                    loginUser.getUserName(),projectId);
+            Map<String, Object> result = processDefinitionService.queryProccessDefinitionAllByProjectId(projectId);
+            return returnDataList(result);
+        }catch (Exception e){
+            logger.error(QUERY_PROCCESS_DEFINITION_LIST.getMsg(),e);
+            return error(QUERY_PROCCESS_DEFINITION_LIST.getCode(), QUERY_PROCCESS_DEFINITION_LIST.getMsg());
+        }
+    }
+
 }

+ 21 - 0
escheduler-api/src/main/java/cn/escheduler/api/controller/ProjectController.java

@@ -279,5 +279,26 @@ public class ProjectController extends BaseController {
         }
     }
 
+    /**
+     * query all project list
+     * @param loginUser
+     * @return
+     */
+    @ApiOperation(value = "queryAllProjectList", notes= "QUERY_ALL_PROJECT_LIST_NOTES")
+    @GetMapping(value = "/queryAllProjectList")
+    @ResponseStatus(HttpStatus.OK)
+    public Result queryAllProjectList(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser) {
+
+        try {
+            logger.info("login user {}, query all project list", loginUser.getUserName());
+            Map<String, Object> result = projectService.queryAllProjectList();
+            return returnDataList(result);
+        } catch (Exception e) {
+            logger.error(LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR.getMsg(), e);
+            return error(Status.LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR.getCode(), Status.LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR.getMsg());
+        }
+    }
+
+
 
 }

+ 18 - 0
escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java

@@ -862,6 +862,24 @@ public class ProcessDefinitionService extends BaseDAGService {
 
     }
 
+
+    /**
+     * query proccess definition all by project id
+     *
+     * @param projectId
+     * @return
+     */
+    public Map<String, Object> queryProccessDefinitionAllByProjectId(Integer projectId) {
+
+        HashMap<String, Object> result = new HashMap<>(5);
+
+        List<ProcessDefinition> resourceList = processDefineMapper.queryAllDefinitionList(projectId);
+        result.put(Constants.DATA_LIST, resourceList);
+        putMsg(result, Status.SUCCESS);
+
+        return result;
+    }
+
     /**
      * Encapsulates the TreeView structure
      *

+ 26 - 0
escheduler-api/src/main/java/cn/escheduler/api/service/ProjectService.java

@@ -367,4 +367,30 @@ public class ProjectService extends BaseService{
 
     }
 
+    /**
+     * query all project list
+     * @return
+     */
+    public Map<String, Object> queryAllProjectList() {
+        Map<String, Object> result = new HashMap<>();
+        List<Project> projects = projectMapper.queryAllProjectList();
+        List<ProcessDefinition>  processDefinitions = processDefinitionMapper.queryAll();
+        if(projects != null){
+            Set set = new HashSet<>();
+            for (ProcessDefinition processDefinition : processDefinitions){
+                set.add(processDefinition.getProjectId());
+            }
+            List<Project> tempDeletelist = new ArrayList<Project>();
+            for (Project project : projects) {
+                if(!set.contains(project.getId())){
+                    tempDeletelist.add(project);
+                }
+            }
+            projects.removeAll(tempDeletelist);
+        }
+        result.put(Constants.DATA_LIST, projects);
+        putMsg(result,Status.SUCCESS);
+        return result;
+    }
+
 }

+ 6 - 0
escheduler-api/src/main/resources/i18n/messages.properties

@@ -113,6 +113,7 @@ QUERY_PROJECT_BY_ID_NOTES=query project info by project id
 QUERY_PROJECT_LIST_PAGING_NOTES=QUERY PROJECT LIST PAGING 
 DELETE_PROJECT_BY_ID_NOTES=delete project by id 
 QUERY_UNAUTHORIZED_PROJECT_NOTES=query unauthorized project
+QUERY_ALL_PROJECT_LIST_NOTES=query all project list
 QUERY_AUTHORIZED_PROJECT_NOTES=query authorized project
 TASK_RECORD_TAG=task record related operation
 QUERY_TASK_RECORD_LIST_PAGING_NOTES=query task record list paging 
@@ -152,10 +153,12 @@ VERIFY_PROCCESS_DEFINITION_NAME_NOTES=verify proccess definition name
 LOGIN_NOTES=user login
 UPDATE_PROCCESS_DEFINITION_NOTES=update proccess definition
 PROCESS_DEFINITION_ID=process definition id
+PROCESS_DEFINITION_IDS=process definition ids
 RELEASE_PROCCESS_DEFINITION_NOTES=release proccess definition
 QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=query proccess definition by id
 QUERY_PROCCESS_DEFINITION_LIST_NOTES=query proccess definition list
 QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=query proccess definition list paging
+QUERY_ALL_DEFINITION_LIST_NOTES=query all definition list
 PAGE_NO=page no
 PROCESS_INSTANCE_ID=process instance id
 PROCESS_INSTANCE_JSON=process instance info(json format)
@@ -170,6 +173,9 @@ LIMIT=limit
 VIEW_TREE_NOTES=view tree
 GET_NODE_LIST_BY_DEFINITION_ID_NOTES=get task node list by process definition id
 PROCESS_DEFINITION_ID_LIST=process definition id list
+QUERY_PROCCESS_DEFINITION_All_BY_PROJECT_ID_NOTES=query proccess definition all by project id
+DELETE_PROCESS_DEFINITION_BY_ID_NOTES=delete process definition by process definition id
+BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES=batch delete process definition by process definition ids
 QUERY_PROCESS_INSTANCE_BY_ID_NOTES=query process instance by process instance id
 DELETE_PROCESS_INSTANCE_BY_ID_NOTES=delete process instance by process instance id
 TASK_ID=task instance id

+ 6 - 0
escheduler-api/src/main/resources/i18n/messages_en_US.properties

@@ -111,6 +111,7 @@ UPDATE_PROJECT_NOTES=update project
 PROJECT_ID=project id
 QUERY_PROJECT_BY_ID_NOTES=query project info by project id
 QUERY_PROJECT_LIST_PAGING_NOTES=QUERY PROJECT LIST PAGING 
+QUERY_ALL_PROJECT_LIST_NOTES=query all project list
 DELETE_PROJECT_BY_ID_NOTES=delete project by id 
 QUERY_UNAUTHORIZED_PROJECT_NOTES=query unauthorized project
 QUERY_AUTHORIZED_PROJECT_NOTES=query authorized project
@@ -152,10 +153,12 @@ VERIFY_PROCCESS_DEFINITION_NAME_NOTES=verify proccess definition name
 LOGIN_NOTES=user login
 UPDATE_PROCCESS_DEFINITION_NOTES=update proccess definition
 PROCESS_DEFINITION_ID=process definition id
+PROCESS_DEFINITION_IDS=process definition ids
 RELEASE_PROCCESS_DEFINITION_NOTES=release proccess definition
 QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=query proccess definition by id
 QUERY_PROCCESS_DEFINITION_LIST_NOTES=query proccess definition list
 QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=query proccess definition list paging
+QUERY_ALL_DEFINITION_LIST_NOTES=query all definition list
 PAGE_NO=page no
 PROCESS_INSTANCE_ID=process instance id
 PROCESS_INSTANCE_JSON=process instance info(json format)
@@ -170,6 +173,9 @@ LIMIT=limit
 VIEW_TREE_NOTES=view tree
 GET_NODE_LIST_BY_DEFINITION_ID_NOTES=get task node list by process definition id
 PROCESS_DEFINITION_ID_LIST=process definition id list
+QUERY_PROCCESS_DEFINITION_All_BY_PROJECT_ID_NOTES=query proccess definition all by project id
+DELETE_PROCESS_DEFINITION_BY_ID_NOTES=delete process definition by process definition id
+BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES=batch delete process definition by process definition ids
 QUERY_PROCESS_INSTANCE_BY_ID_NOTES=query process instance by process instance id
 DELETE_PROCESS_INSTANCE_BY_ID_NOTES=delete process instance by process instance id
 TASK_ID=task instance id

+ 6 - 0
escheduler-api/src/main/resources/i18n/messages_zh_CN.properties

@@ -110,6 +110,7 @@ UPDATE_PROJECT_NOTES=更新项目
 PROJECT_ID=项目ID
 QUERY_PROJECT_BY_ID_NOTES=通过项目ID查询项目信息
 QUERY_PROJECT_LIST_PAGING_NOTES=分页查询项目列表
+QUERY_ALL_PROJECT_LIST_NOTES=查询所有项目
 DELETE_PROJECT_BY_ID_NOTES=删除项目通过ID
 QUERY_UNAUTHORIZED_PROJECT_NOTES=查询未授权的项目
 QUERY_AUTHORIZED_PROJECT_NOTES=查询授权项目
@@ -155,8 +156,10 @@ RELEASE_PROCCESS_DEFINITION_NOTES=发布流程定义
 QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=查询流程定义通过流程定义ID
 QUERY_PROCCESS_DEFINITION_LIST_NOTES=查询流程定义列表
 QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=分页查询流程定义列表
+QUERY_ALL_DEFINITION_LIST_NOTES=查询所有流程定义
 PAGE_NO=页码号
 PROCESS_INSTANCE_ID=流程实例ID
+PROCESS_INSTANCE_IDS=流程实例ID集合
 PROCESS_INSTANCE_JSON=流程实例信息(json格式)
 SCHEDULE_TIME=定时时间
 SYNC_DEFINE=更新流程实例的信息是否同步到流程定义
@@ -168,6 +171,9 @@ LIMIT=显示多少条
 VIEW_TREE_NOTES=树状图
 GET_NODE_LIST_BY_DEFINITION_ID_NOTES=获得任务节点列表通过流程定义ID
 PROCESS_DEFINITION_ID_LIST=流程定义id列表
+QUERY_PROCCESS_DEFINITION_All_BY_PROJECT_ID_NOTES=查询流程定义通过项目ID
+BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES=批量删除流程定义通过流程定义ID集合
+DELETE_PROCESS_DEFINITION_BY_ID_NOTES=删除流程定义通过流程定义ID
 QUERY_PROCESS_INSTANCE_BY_ID_NOTES=查询流程实例通过流程实例ID
 DELETE_PROCESS_INSTANCE_BY_ID_NOTES=删除流程实例通过流程实例ID
 TASK_ID=任务实例ID

+ 22 - 0
escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java

@@ -255,4 +255,26 @@ public interface ProcessDefinitionMapper {
     int updateReceiversAndCcById(@Param("receivers") String receivers,
                                  @Param("receiversCc") String receiversCc,
                                  @Param("processDefinitionId") int processDefinitionId);
+
+    /**
+     * query all
+     * @return
+     */
+    @Results(value = {@Result(property = "id", column = "id", id = true, javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "name", column = "name", javaType = String.class, jdbcType = JdbcType.VARCHAR),
+            @Result(property = "version", column = "version", javaType = Integer.class, jdbcType = JdbcType.TINYINT),
+            @Result(property = "releaseState", column = "release_state",  typeHandler = EnumOrdinalTypeHandler.class, javaType = ReleaseState.class, jdbcType = JdbcType.TINYINT),
+            @Result(property = "projectId", column = "project_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "userId", column = "user_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "desc", column = "desc", javaType = String.class, jdbcType = JdbcType.VARCHAR),
+            @Result(property = "createTime", column = "create_time", javaType = Timestamp.class, jdbcType = JdbcType.DATE),
+            @Result(property = "updateTime", column = "update_time", javaType = Timestamp.class, jdbcType = JdbcType.DATE),
+            @Result(property = "flag", column = "flag", typeHandler = EnumOrdinalTypeHandler.class, javaType = Flag.class, jdbcType = JdbcType.TINYINT),
+            @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR),
+            @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "tenantId", column = "tenant_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "projectName", column = "project_name", javaType = String.class, jdbcType = JdbcType.VARCHAR)
+    })
+    @SelectProvider(type = ProcessDefinitionMapperProvider.class, method = "queryAll")
+    List<ProcessDefinition> queryAll();
 }

+ 15 - 0
escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java

@@ -297,4 +297,19 @@ public class ProcessDefinitionMapperProvider {
             }
         }.toString();
     }
+
+
+    /**
+     * query all
+     * @return
+     */
+    public String queryAll() {
+        return new SQL() {{
+            SELECT("id,name,version,release_state,project_id,user_id,`desc`,create_time,update_time,flag,global_params,receivers,receivers_cc");
+
+            FROM(TABLE_NAME );
+
+            ORDER_BY("create_time desc ");
+        }}.toString();
+    }
 }

+ 16 - 0
escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProjectMapper.java

@@ -192,5 +192,21 @@ public interface ProjectMapper {
     @SelectProvider(type = ProjectMapperProvider.class, method = "queryProjectExceptUserId")
     List<Project> queryProjectExceptUserId(@Param("userId") Integer userId);
 
+    /**
+     * query all project list
+     * @return
+     */
+    @Results(value = {@Result(property = "id", column = "id", id = true, javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "userId", column = "user_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "name", column = "name", javaType = String.class, jdbcType = JdbcType.VARCHAR),
+            @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR),
+            @Result(property = "desc", column = "desc", javaType = String.class, jdbcType = JdbcType.VARCHAR),
+            @Result(property = "perm", column = "perm", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
+            @Result(property = "createTime", column = "create_time", javaType = Timestamp.class, jdbcType = JdbcType.DATE),
+            @Result(property = "updateTime", column = "update_time", javaType = Timestamp.class, jdbcType = JdbcType.DATE),
+    })
+    @SelectProvider(type = ProjectMapperProvider.class, method = "queryAllProjectList")
+    List<Project> queryAllProjectList();
+
 
 }

+ 13 - 0
escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProjectMapperProvider.java

@@ -240,4 +240,17 @@ public class ProjectMapperProvider {
         }}.toString();
     }
 
+    /**
+     * query  all project list
+     * @return
+     */
+    public String queryAllProjectList() {
+        return new SQL() {{
+            SELECT("*");
+            FROM(TABLE_NAME);
+            WHERE("flag = 1");
+            ORDER_BY("create_time desc");
+        }}.toString();
+    }
+
 }

+ 74 - 11
escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/dependItemList.vue

@@ -1,15 +1,19 @@
 <template>
   <div class="dep-list-model">
     <div v-for="(el,$index) in dependItemList" class="list" @click="itemIndex = $index">
-      <x-select filterable :style="{width:isInstance ? '140px' : '162px'}" :disabled="isDetails" v-model="el.definitionId" @on-change="_onChangeDefinitionId">
+      <x-select filterable :style="{width:isInstance ? '450px' : '450px'}" :disabled="isDetails" v-model="el.projectId" @on-change="_onChangeProjectId">
+        <x-option v-for="item in projectList" :key="item.value" :value="item.value" :label="item.label">
+        </x-option>
+      </x-select>
+      <x-select filterable :style="{width:isInstance ? '450px' : '450px'}" :disabled="isDetails" v-model="el.definitionId" @on-change="_onChangeDefinitionId">
         <x-option v-for="item in definitionList" :key="item.value" :value="item.value" :label="item.label">
         </x-option>
       </x-select>
-      <x-select filterable :style="{width:isInstance ? '144px' : '156px'}" :disabled="isDetails" v-model="el.depTasks">
+      <x-select filterable :style="{width:isInstance ? '450px' : '450px'}" :disabled="isDetails" v-model="el.depTasks">
         <x-option v-for="item in el.depTasksList || []" :key="item" :value="item" :label="item">
         </x-option>
       </x-select>
-      <x-select style="width: 80px;" v-model="el.cycle" :disabled="isDetails" @on-change="_onChangeCycle">
+      <x-select style="width: 150px;" v-model="el.cycle" :disabled="isDetails" @on-change="_onChangeCycle">
         <x-option v-for="item in cycleList" :key="item.value" :value="item.value" :label="item.label">
         </x-option>
       </x-select>
@@ -45,6 +49,7 @@
       return {
         list: [],
         definitionList: [],
+        projectList: [],
         cycleList: cycleList,
         isInstance: false,
         itemIndex: null
@@ -93,6 +98,17 @@
           })
         }
       },
+      _getProjectList () {
+        return new Promise((resolve, reject) => {
+          this.projectList = _.map(_.cloneDeep(this.store.state.dag.projectListS), v => {
+            return {
+              value: v.id,
+              label: v.name
+            }
+          })
+          resolve()
+        })
+      },
       /**
        * get processlist
        */
@@ -107,6 +123,19 @@
           resolve()
         })
       },
+      _getProcessByProjectId (id) {
+        return new Promise((resolve, reject) => {
+          this.store.dispatch('dag/getProcessByProjectId', { projectId: id }).then(res => {
+            this.definitionList = _.map(_.cloneDeep(res), v => {
+              return {
+                value: v.id,
+                label: v.name
+              }
+            })
+            resolve(res)
+          })
+        })
+      },
       /**
        * get dependItemList
        */
@@ -126,6 +155,19 @@
       /**
        * change process get dependItemList
        */
+      _onChangeProjectId ({ value }) {
+        this._getProcessByProjectId(value).then(definitionList => {
+          /*this.$set(this.dependItemList, this.itemIndex, this._dlOldParams(value, definitionList, item))*/
+          let definitionId = definitionList[0].id
+          this._getDependItemList(definitionId).then(depTasksList => {
+            let item = this.dependItemList[this.itemIndex]
+            // init set depTasks All
+            item.depTasks = 'ALL'
+            // set dependItemList item data
+            this.$set(this.dependItemList, this.itemIndex, this._cpOldParams(value,definitionId, definitionList,depTasksList, item))
+          })
+        })
+      },
       _onChangeDefinitionId ({ value }) {
         // get depItem list data
         this._getDependItemList(value).then(depTasksList => {
@@ -141,19 +183,21 @@
         this.$set(this.dependItemList[this.itemIndex], 'dateValue', list[0].value)
         this.$set(this.dependItemList[this.itemIndex], 'dateValueList', list)
       },
-      _rtNewParams (value, depTasksList) {
+      _rtNewParams (value, depTasksList,projectId) {
         return {
+          projectId: projectId,
           definitionId: value,
           depTasks: 'ALL',
           depTasksList: depTasksList,
           cycle: 'day',
-          dateValue: 'last1Days',
+          dateValue: 'today',
           dateValueList: _.cloneDeep(dateValueList['day']),
           state: ''
         }
       },
-      _rtOldParams (value, depTasksList, item) {
+      _rtOldParams (value,depTasksList, item) {
         return {
+          projectId: item.projectId,
           definitionId: value,
           depTasks: item.depTasks || 'ALL',
           depTasksList: depTasksList,
@@ -163,6 +207,20 @@
           state: item.state
         }
       },
+
+      _cpOldParams (value,definitionId, definitionList,depTasksList, item) {
+        return {
+          projectId: value,
+          definitionList: definitionList,
+          definitionId: definitionId,
+          depTasks: item.depTasks || 'ALL',
+          depTasksList: depTasksList,
+          cycle: item.cycle,
+          dateValue: item.dateValue,
+          dateValueList: _.cloneDeep(dateValueList[item.cycle]),
+          state: item.state
+        }
+      },
       /**
        * remove tip
        */
@@ -178,11 +236,14 @@
       // is type projects-instance-details
       this.isInstance = this.router.history.current.name === 'projects-instance-details'
       // get processlist
-      this._getProcessList().then(() => {
+      this._getProjectList().then(() => {
+        let projectId = this.projectList[0].value
         if (!this.dependItemList.length) {
-          let value = this.definitionList[0].value
-          this._getDependItemList(value).then(depTasksList => {
-            this.$emit('dependItemListEvent', _.concat(this.dependItemList, this._rtNewParams(value, depTasksList)))
+          this._getProcessByProjectId(projectId).then(definitionList => {
+            let value = this.definitionList[0].value
+            this._getDependItemList(value).then(depTasksList => {
+              this.$emit('dependItemListEvent', _.concat(this.dependItemList, this._rtNewParams(value, depTasksList,projectId)))
+            })
           })
         } else {
           // get definitionId ids
@@ -190,7 +251,9 @@
           // get item list
           this._getDependItemList(ids, false).then(res => {
             _.map(this.dependItemList, (v, i) => {
-              this.$set(this.dependItemList, i, this._rtOldParams(v.definitionId, ['ALL'].concat(_.map(res[v.definitionId] || [], v => v.name)), v))
+              this._getProcessByProjectId(v.projectId).then(definitionList => {
+                this.$set(this.dependItemList, i, this._rtOldParams(v.definitionId, ['ALL'].concat(_.map(res[v.definitionId] || [], v => v.name)), v))
+              })
             })
           })
         }

+ 5 - 1
escheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue

@@ -25,7 +25,7 @@
     props: {},
     methods: {
       ...mapMutations('dag', ['resetParams', 'setIsDetails']),
-      ...mapActions('dag', ['getProcessList', 'getResourcesList', 'getProcessDetails']),
+      ...mapActions('dag', ['getProcessList','getProcessByProjectId','getProjectList', 'getResourcesList', 'getProcessDetails']),
       ...mapActions('security', ['getTenantList','getWorkerGroupsAll']),
       /**
        * init
@@ -40,6 +40,10 @@
           this.getProcessDetails(this.$route.params.id),
           // get process definition
           this.getProcessList(),
+          // get project
+          this.getProjectList(),
+          // get process definition by project id
+          this.getProcessByProjectId(),
           // get resource
           this.getResourcesList(),
           // get worker group list

+ 5 - 1
escheduler-ui/src/js/conf/home/pages/dag/index.vue

@@ -24,7 +24,7 @@
     props: {},
     methods: {
       ...mapMutations('dag', ['resetParams']),
-      ...mapActions('dag', ['getProcessList', 'getResourcesList']),
+      ...mapActions('dag', ['getProcessList','getProcessByProjectId','getProjectList', 'getResourcesList']),
       ...mapActions('security', ['getTenantList','getWorkerGroupsAll']),
       /**
        * init
@@ -37,6 +37,10 @@
         Promise.all([
           // get process definition
           this.getProcessList(),
+          // get project
+          this.getProjectList(),
+          // get process definition by project id
+          this.getProcessByProjectId(),
           // get resource
           this.getResourcesList(),
           // get worker group list

+ 5 - 1
escheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue

@@ -27,7 +27,7 @@
     props: {},
     methods: {
       ...mapMutations('dag', ['setIsDetails', 'resetParams']),
-      ...mapActions('dag', ['getProcessList', 'getResourcesList', 'getInstancedetail']),
+      ...mapActions('dag', ['getProcessList','getProcessByProjectId','getProjectList', 'getResourcesList', 'getInstancedetail']),
       ...mapActions('security', ['getTenantList','getWorkerGroupsAll']),
       /**
        * init
@@ -42,6 +42,10 @@
           this.getInstancedetail(this.$route.params.id),
           // get process definition
           this.getProcessList(),
+          // get project
+          this.getProjectList(),
+          // get process definition by project id
+          this.getProcessByProjectId(),
           // get resources
           this.getResourcesList(),
           // get worker group list

+ 4 - 1
escheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue

@@ -48,7 +48,7 @@
     <div class="clearfix list">
       <div style = "padding-left: 150px;">{{$t('Next five execution times')}}</div>
       <ul style = "padding-left: 150px;">
-          <li v-for="time in previewTimes">{{time}}</li>
+        <li v-for="(time,i) in previewTimes" :key='i'>{{time}}</li>
       </ul>
     </div>
 
@@ -289,6 +289,9 @@
     watch: {
     },
     created () {
+      if(this.item.crontab !== null){
+        this.crontab = this.item.crontab
+      }
       this.receivers = _.cloneDeep(this.receiversD)
       this.receiversCc = _.cloneDeep(this.receiversCcD)
     },

+ 29 - 0
escheduler-ui/src/js/conf/home/store/dag/actions.js

@@ -261,6 +261,35 @@ export default {
       })
     })
   },
+  /**
+   * Get a list of project
+   */
+  getProjectList ({ state }, payload) {
+    return new Promise((resolve, reject) => {
+      if (state.projectListS.length) {
+      resolve()
+      return
+    }
+    io.get(`projects/queryAllProjectList`, payload, res => {
+      state.projectListS = res.data
+      resolve(res.data)
+  }).catch(res => {
+      reject(res)
+    })
+  })
+  },
+  /**
+   * Get a list of process definitions by project id
+   */
+  getProcessByProjectId ({ state }, payload) {
+    return new Promise((resolve, reject) => {
+      io.get(`projects/${state.projectName}/process/queryProccessDefinitionAllByProjectId`, payload, res => {
+        resolve(res.data)
+  }).catch(res => {
+      reject(res)
+    })
+  })
+  },
   /**
    * get datasource
    */

+ 1 - 0
escheduler-ui/src/js/conf/home/store/dag/mutations.js

@@ -109,6 +109,7 @@ export default {
     state.tenantId = payload && payload.tenantId || -1
     state.processListS = payload && payload.processListS || []
     state.resourcesListS = payload && payload.resourcesListS || []
+    state.projectListS = payload && payload.projectListS || []
     state.isDetails = payload && payload.isDetails || false
     state.runFlag = payload && payload.runFlag || ''
     state.locations = payload && payload.locations || {}

+ 2 - 0
escheduler-ui/src/js/conf/home/store/dag/state.js

@@ -47,6 +47,8 @@ export default {
   syncDefine: true,
   // tasks processList
   processListS: [],
+  // projectList
+  projectListS: [],
   // tasks resourcesList
   resourcesListS: [],
   // tasks datasource Type