From 995706f094b2cacb3525fc86993d4c4ca7656aac Mon Sep 17 00:00:00 2001 From: ligang Date: Fri, 10 May 2019 11:25:37 +0800 Subject: [PATCH] update create and upgrade function --- .../ProcessDefinitionController.java | 25 ++++++++ .../java/cn/escheduler/api/enums/Status.java | 3 + .../api/service/ProcessDefinitionService.java | 59 +++++++++++++++++++ .../service/ProcessDefinitionServiceTest.java | 12 ++++ .../escheduler/dao/mapper/ScheduleMapper.java | 8 ++- .../dao/mapper/ScheduleMapperProvider.java | 17 ++++++ 6 files changed, 123 insertions(+), 1 deletion(-) diff --git a/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java b/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java index ec1f38b0ce..8ba272071a 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java @@ -323,4 +323,29 @@ public class ProcessDefinitionController extends BaseController{ } } + /** + * delete process definition by id + * + * @param loginUser + * @param projectName + * @param processDefinitionId + * @return + */ + @GetMapping(value="/delete") + @ResponseStatus(HttpStatus.OK) + public Result deleteProcessDefinitionById(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, + @PathVariable String projectName, + @RequestParam("processDefinitionId") Integer processDefinitionId + ){ + try{ + logger.info("delete process definition by id, login user:{}, project name:{}, process definition id:{}", + loginUser.getUserName(), projectName, processDefinitionId); + Map result = processDefinitionService.deleteProcessDefinitionById(loginUser, projectName, processDefinitionId); + return returnDataList(result); + }catch (Exception e){ + logger.error(DELETE_PROCESS_DEFINE_BY_ID_ERROR.getMsg(),e); + return error(Status.DELETE_PROCESS_DEFINE_BY_ID_ERROR.getCode(), Status.DELETE_PROCESS_DEFINE_BY_ID_ERROR.getMsg()); + } + } + } diff --git a/escheduler-api/src/main/java/cn/escheduler/api/enums/Status.java b/escheduler-api/src/main/java/cn/escheduler/api/enums/Status.java index e569390127..24b92b8382 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/enums/Status.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/enums/Status.java @@ -200,6 +200,9 @@ public enum Status { DATA_IS_NULL(50018,"data %s is null"), PROCESS_NODE_HAS_CYCLE(50019,"process node has cycle"), PROCESS_NODE_S_PARAMETER_INVALID(50020,"process node %s parameter invalid"), + PROCESS_DEFINE_STATE_ONLINE(50021, "process definition {0} is already on line"), + DELETE_PROCESS_DEFINE_BY_ID_ERROR(50022,"delete process definition by id error"), + SCHEDULE_CRON_STATE_ONLINE(50023,"the status of schedule {0} is already on line"), HDFS_NOT_STARTUP(60001,"hdfs not startup"), diff --git a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java index bb7133817c..cfa3814616 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java @@ -336,6 +336,65 @@ public class ProcessDefinitionService extends BaseDAGService { return result; } + /** + * delete process definition by id + * + * @param loginUser + * @param projectName + * @param processDefinitionId + * @return + */ + @Transactional(value = "TransactionManager", rollbackFor = Exception.class) + public Map deleteProcessDefinitionById(User loginUser, String projectName, Integer processDefinitionId) { + + Map result = new HashMap<>(5); + Project project = projectMapper.queryByName(projectName); + + Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); + Status resultEnum = (Status) checkResult.get(Constants.STATUS); + if (resultEnum != Status.SUCCESS) { + return checkResult; + } + + + ProcessDefinition processDefinition = processDefineMapper.queryByDefineId(processDefinitionId); + + if (processDefinition == null) { + putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processDefinitionId); + return result; + } + // check process definition is already online + if (processDefinition.getReleaseState() == ReleaseState.ONLINE) { + putMsg(result, Status.PROCESS_DEFINE_STATE_ONLINE,processDefinitionId); + return result; + } + + // get the timing according to the process definition + List schedules = scheduleMapper.selectAllByProcessDefineArray(new int[processDefinitionId]); + if (!schedules.isEmpty() && schedules.size() > 1) { + logger.warn("scheduler num is {},Greater than 1",schedules.size()); + putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_ID_ERROR); + return result; + }else if(schedules.size() == 1){ + Schedule schedule = schedules.get(0); + if(schedule.getReleaseState() == ReleaseState.OFFLINE){ + scheduleMapper.delete(schedule.getId()); + }else if(schedule.getReleaseState() == ReleaseState.ONLINE){ + putMsg(result, Status.SCHEDULE_CRON_STATE_ONLINE,schedule.getId()); + return result; + } + } + + int delete = processDefineMapper.delete(processDefinitionId); + + if (delete > 0) { + putMsg(result, Status.SUCCESS); + } else { + putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_ID_ERROR); + } + return result; + } + /** * release process definition: online / offline * diff --git a/escheduler-api/src/test/java/cn/escheduler/api/service/ProcessDefinitionServiceTest.java b/escheduler-api/src/test/java/cn/escheduler/api/service/ProcessDefinitionServiceTest.java index 7a6b069f59..48dcd043fa 100644 --- a/escheduler-api/src/test/java/cn/escheduler/api/service/ProcessDefinitionServiceTest.java +++ b/escheduler-api/src/test/java/cn/escheduler/api/service/ProcessDefinitionServiceTest.java @@ -63,4 +63,16 @@ public class ProcessDefinitionServiceTest { Assert.assertEquals(Status.SUCCESS, map.get(Constants.STATUS)); logger.info(JSON.toJSONString(map)); } + + @Test + public void deleteProcessDefinitionByIdTest() throws Exception { + + User loginUser = new User(); + loginUser.setId(2); + loginUser.setUserType(UserType.GENERAL_USER); + Map map = processDefinitionService.deleteProcessDefinitionById(loginUser, "li_sql_test", 6); + + Assert.assertEquals(Status.SUCCESS, map.get(Constants.STATUS)); + logger.info(JSON.toJSONString(map)); + } } \ No newline at end of file diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapper.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapper.java index f1a48bde94..4806979b82 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapper.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapper.java @@ -173,6 +173,12 @@ public interface ScheduleMapper { @SelectProvider(type = ScheduleMapperProvider.class, method = "selectAllByProcessDefineArray") List selectAllByProcessDefineArray(@Param("processDefineIds") int[] processDefineIds); - + /** + * delete schedule by id + * @param scheduleId + * @return + */ + @DeleteProvider(type = ScheduleMapperProvider.class, method = "delete") + int delete(@Param("scheduleId") int scheduleId); } diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapperProvider.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapperProvider.java index 5674675a25..bdfeb409e2 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapperProvider.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ScheduleMapperProvider.java @@ -180,4 +180,21 @@ public class ScheduleMapperProvider { WHERE("release_state = 1"); }}.toString(); } + + /** + * delete schedule by id + * + * @param parameter + * @return + */ + public String delete(Map parameter) { + return new SQL() { + { + DELETE_FROM(DB_NAME); + + WHERE("`id`=#{scheduleId}"); + } + }.toString(); + } + }