From 552fa5b00cad782a2163b11196c5450c2e7e65ee Mon Sep 17 00:00:00 2001 From: lenboo Date: Fri, 28 Jun 2019 18:40:28 +0800 Subject: [PATCH] add tenant id in process definition --- .../api/service/ProcessDefinitionService.java | 2 ++ .../api/service/ProcessInstanceService.java | 7 ++++- .../java/cn/escheduler/dao/ProcessDao.java | 29 +++++++++++++++++++ .../dao/mapper/ProcessDefinitionMapper.java | 5 ++++ .../ProcessDefinitionMapperProvider.java | 1 + .../mapper/ProcessInstanceMapperProvider.java | 6 ++-- .../cn/escheduler/dao/model/ProcessData.java | 10 +++++++ .../dao/model/ProcessDefinition.java | 13 +++++++++ 8 files changed, 69 insertions(+), 4 deletions(-) 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 45ff487f5e..55b72ae145 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 @@ -127,6 +127,7 @@ public class ProcessDefinitionService extends BaseDAGService { processDefine.setLocations(locations); processDefine.setConnects(connects); processDefine.setTimeout(processData.getTimeout()); + processDefine.setTenantId(processData.getTenantId()); //custom global params List globalParamsList = processData.getGlobalParams(); @@ -291,6 +292,7 @@ public class ProcessDefinitionService extends BaseDAGService { processDefine.setLocations(locations); processDefine.setConnects(connects); processDefine.setTimeout(processData.getTimeout()); + processDefine.setTenantId(processData.getTenantId()); //custom global params List globalParamsList = new ArrayList<>(); diff --git a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessInstanceService.java b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessInstanceService.java index 6475b42cee..3cbf5f1414 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessInstanceService.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessInstanceService.java @@ -364,6 +364,7 @@ public class ProcessInstanceService extends BaseDAGService { String globalParams = null; String originDefParams = null; int timeout = processInstance.getTimeout(); + ProcessDefinition processDefinition = processDao.findProcessDefineById(processInstance.getProcessDefinitionId()); if (StringUtils.isNotEmpty(processInstanceJson)) { ProcessData processData = JSONUtils.parseObject(processInstanceJson, ProcessData.class); //check workflow json is valid @@ -379,6 +380,11 @@ public class ProcessInstanceService extends BaseDAGService { processInstance.getCmdTypeIfComplement(), schedule); timeout = processData.getTimeout(); processInstance.setTimeout(timeout); + Tenant tenant = processDao.getTenantForProcess(processData.getTenantId(), + processDefinition.getUserId()); + if(tenant != null){ + processInstance.setTenantCode(tenant.getTenantCode()); + } processInstance.setProcessInstanceJson(processInstanceJson); processInstance.setGlobalParams(globalParams); } @@ -387,7 +393,6 @@ public class ProcessInstanceService extends BaseDAGService { int update = processDao.updateProcessInstance(processInstance); int updateDefine = 1; if (syncDefine && StringUtils.isNotEmpty(processInstanceJson)) { - ProcessDefinition processDefinition = processDao.findProcessDefineById(processInstance.getProcessDefinitionId()); processDefinition.setProcessDefinitionJson(processInstanceJson); processDefinition.setGlobalParams(originDefParams); processDefinition.setLocations(locations); diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java b/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java index 0241016941..387c61635a 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java @@ -100,6 +100,9 @@ public class ProcessDao extends AbstractBaseDao { @Autowired private WorkerServerMapper workerServerMapper; + @Autowired + private TenantMapper tenantMapper; + /** * task queue impl */ @@ -127,6 +130,7 @@ public class ProcessDao extends AbstractBaseDao { workerGroupMapper = getMapper(WorkerGroupMapper.class); workerServerMapper = getMapper(WorkerServerMapper.class); taskQueue = TaskQueueFactory.getTaskQueueInstance(); + tenantMapper = getMapper(TenantMapper.class); } @@ -490,9 +494,34 @@ public class ProcessDao extends AbstractBaseDao { processInstance.setProcessInstancePriority(command.getProcessInstancePriority()); processInstance.setWorkerGroupId(command.getWorkerGroupId()); processInstance.setTimeout(processDefinition.getTimeout()); + Tenant tenant = getTenantForProcess(processDefinition.getTenantId(), + processDefinition.getUserId()); + if(tenant!= null){ + processInstance.setTenantCode(tenant.getTenantCode()); + } return processInstance; } + /** + * get process tenant + * there is tenant id in definition, use the tenant of the definition. + * if there is not tenant id in the definiton or the tenant not exist + * use definition creator's tenant. + * @param tenantId + * @param userId + * @return + */ + public Tenant getTenantForProcess(int tenantId, int userId){ + Tenant tenant = null; + if(tenantId >= 0){ + tenant = tenantMapper.queryById(tenantId); + } + if(tenant == null){ + User user = userMapper.queryById(userId); + tenant = tenantMapper.queryById(user.getTenantId()); + } + return tenant; + } /** * check command parameters is valid diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java index b750b9dbcf..0c88fa7161 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java @@ -95,6 +95,7 @@ public interface ProcessDefinitionMapper { @Result(property = "connects", column = "connects", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "projectName", column = "project_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 = "receivers", column = "receivers", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "receiversCc", column = "receivers_cc", javaType = String.class, jdbcType = JdbcType.VARCHAR) @@ -123,6 +124,7 @@ public interface ProcessDefinitionMapper { @Result(property = "locations", column = "locations", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "connects", column = "connects", 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 = "queryByDefineName") @@ -160,6 +162,7 @@ public interface ProcessDefinitionMapper { @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 = "queryAllDefinitionList") @@ -187,6 +190,7 @@ public interface ProcessDefinitionMapper { @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "scheduleReleaseState", column = "schedule_release_state", typeHandler = EnumOrdinalTypeHandler.class, javaType = ReleaseState.class, jdbcType = JdbcType.TINYINT), @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 = "queryDefineListPaging") @@ -216,6 +220,7 @@ public interface ProcessDefinitionMapper { @Result(property = "connects", column = "connects", javaType = String.class, jdbcType = JdbcType.VARCHAR), @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 = "queryDefinitionListByIdList") diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java index a619ee4ad5..ef494c23e0 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java @@ -102,6 +102,7 @@ public class ProcessDefinitionMapperProvider { SET("`create_time`=#{processDefinition.createTime}"); SET("`update_time`=#{processDefinition.updateTime}"); SET("`timeout`=#{processDefinition.timeout}"); + SET("`tenant_id`=#{processDefinition.tenantId}"); SET("`flag`="+EnumFieldUtil.genFieldStr("processDefinition.flag", Flag.class)); SET("`user_id`=#{processDefinition.userId}"); diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java index 9ff57fc3c4..047c2a375e 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java @@ -220,11 +220,11 @@ public class ProcessInstanceMapperProvider { public String queryDetailById(Map parameter) { return new SQL() { { - SELECT("inst.*,q.queue_name as queue,t.tenant_code,UNIX_TIMESTAMP(inst.end_time)-UNIX_TIMESTAMP(inst.start_time) as duration"); + SELECT("inst.*,q.queue_name as queue,UNIX_TIMESTAMP(inst.end_time)-UNIX_TIMESTAMP(inst.start_time) as duration"); - FROM(TABLE_NAME + " inst, t_escheduler_user u,t_escheduler_tenant t,t_escheduler_queue q"); + FROM(TABLE_NAME + " inst, t_escheduler_user u,t_escheduler_queue q"); - WHERE("inst.executor_id = u.id AND u.tenant_id = t.id AND t.queue_id = q.id AND inst.id = #{processId}"); + WHERE("inst.executor_id = u.id AND t.queue_id = q.id AND inst.id = #{processId}"); } }.toString(); } diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java index 0623144142..28dea1f887 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java @@ -39,6 +39,8 @@ public class ProcessData { private int timeout; + private int tenantId; + public ProcessData() { } @@ -92,4 +94,12 @@ public class ProcessData { public void setTimeout(int timeout) { this.timeout = timeout; } + + public int getTenantId() { + return tenantId; + } + + public void setTenantId(int tenantId) { + this.tenantId = tenantId; + } } diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java index fb0c1d0f98..868078b600 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java @@ -141,6 +141,11 @@ public class ProcessDefinition { */ private int timeout; + /** + * tenant id + */ + private int tenantId; + public String getName() { return name; @@ -354,7 +359,15 @@ public class ProcessDefinition { ", receiversCc='" + receiversCc + '\'' + ", scheduleReleaseState=" + scheduleReleaseState + ", timeout=" + timeout + + ", tenantId=" + tenantId + '}'; } + public int getTenantId() { + return tenantId; + } + + public void setTenantId(int tenantId) { + this.tenantId = tenantId; + } }