@@ -9,6 +9,23 @@
/////////////////////////////////////////////////////////////
package com.gitee.dbswitch.admin.service ;
import java.io.File ;
import java.io.IOException ;
import java.net.URLEncoder ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Objects ;
import java.util.function.Supplier ;
import java.util.stream.Collectors ;
import javax.annotation.Resource ;
import javax.servlet.http.HttpServletResponse ;
import org.apache.commons.collections4.CollectionUtils ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import com.alibaba.excel.EasyExcel ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
import com.gitee.dbswitch.admin.common.exception.DbswitchException ;
import com.gitee.dbswitch.admin.common.response.PageResult ;
@@ -16,6 +33,7 @@ import com.gitee.dbswitch.admin.common.response.Result;
import com.gitee.dbswitch.admin.common.response.ResultCode ;
import com.gitee.dbswitch.admin.controller.converter.AssignmentDetailConverter ;
import com.gitee.dbswitch.admin.controller.converter.AssignmentInfoConverter ;
import com.gitee.dbswitch.admin.controller.converter.AssignmentsConverter ;
import com.gitee.dbswitch.admin.dao.AssignmentConfigDAO ;
import com.gitee.dbswitch.admin.dao.AssignmentTaskDAO ;
import com.gitee.dbswitch.admin.dao.DatabaseConnectionDAO ;
@@ -29,6 +47,7 @@ import com.gitee.dbswitch.admin.model.request.AssigmentUpdateRequest;
import com.gitee.dbswitch.admin.model.request.AssignmentSearchRequest ;
import com.gitee.dbswitch.admin.model.response.AssignmentDetailResponse ;
import com.gitee.dbswitch.admin.model.response.AssignmentInfoResponse ;
import com.gitee.dbswitch.admin.model.response.AssignmentsDataResponse ;
import com.gitee.dbswitch.admin.type.JobStatusEnum ;
import com.gitee.dbswitch.admin.type.ScheduleModeEnum ;
import com.gitee.dbswitch.admin.util.PageUtils ;
@@ -39,309 +58,356 @@ import com.gitee.dbswitch.data.entity.GlobalParamConfigProperties;
import com.gitee.dbswitch.data.entity.SourceDataSourceProperties ;
import com.gitee.dbswitch.data.entity.TargetDataSourceProperties ;
import com.gitee.dbswitch.data.util.JsonUtils ;
import java.io.File ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Objects ;
import java.util.function.Supplier ;
import java.util.stream.Collectors ;
import javax.annotation.Resource ;
import org.apache.commons.collections4.CollectionUtils ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
@Service
public class AssignmentService {
@Resource
private AssignmentTaskDAO assignmentTaskDAO ;
@Resource
private AssignmentTaskDAO assignmentTaskDAO ;
@Resource
private AssignmentConfigDAO assignmentConfigDAO ;
@Resource
private AssignmentConfigDAO assignmentConfigDAO ;
@Resource
private ScheduleService scheduleService ;
@Resource
private ScheduleService scheduleService ;
@Resource
private DatabaseConnectionDAO databaseConnectionDAO ;
@Resource
private DatabaseConnectionDAO databaseConnectionDAO ;
@Resource
private DriverLoadService driverLoadService ;
@Resource
private DriverLoadService driverLoadService ;
@Resource
private AssignmentJobMapper assignmentJobMapper ;
@Resource
private AssignmentJobMapper assignmentJobMapper ;
@Transactional ( rollbackFor = Exception . class )
public AssignmentInfoResponse createAssignment ( AssigmentCreateRequest request ) {
AssignmentTaskEntity assignment = request . toAssignmentTask ( ) ;
assignmentTaskDAO . insert ( assignment ) ;
// @Resource
// private AssignmentConvert assignmentConvert;
AssignmentConfigEntity assignmentConfigEntity = request . toAssignmentConfig ( assignment . getId ( ) ) ;
a ssignmentConfigDAO . insert ( a ssign mentConfigEntity ) ;
@Transactional ( rollbackFor = Exception . class )
public A ssignmentInfoResponse createAssignment ( A ssigmentCreateRequest request ) {
AssignmentTaskEntity assignment = request . toAssignmentTask ( ) ;
assignmentTaskDAO . insert ( assignment ) ;
Long targetConnectionId = assignmentConfigEntity . getTargetConnection Id( ) ;
DatabaseConnectionEntity targetEntity = databaseConnectionDAO . getById ( targetConnectionId ) ;
if ( ProductTypeEnum . SQLITE3 = = targetEntity . getType ( ) ) {
if ( ProductTypeEnum . isUnsupportedTargetSqlite ( targetEntity . getUrl ( ) ) ) {
throw new DbswitchException ( ResultCode . ERROR_INVALID_ASSIGNMENT_CONFIG ,
" 不支持目的端数据源为远程服务器上的SQLite或内存方式下的SQLite " ) ;
}
}
AssignmentConfigEntity assignmentConfigEntity = request . toAssignmentConfig ( assignment . get Id( ) ) ;
assignmentConfigDAO . insert ( assignmentConfigEntity ) ;
Long source ConnectionId = assignmentConfigEntity . getSource ConnectionId ( ) ;
DatabaseConnectionEntity source Entity = databaseConnectionDAO . getById ( source ConnectionId) ;
if ( ProductTypeEnum . ELASTICSEARCH = = source Entity. getType ( ) ) {
throw new DbswitchException ( ResultCode . ERROR_INVALID_ASSIGNMENT_CONFIG ,
" 不支持源端数据源为ElasticSearch类型 " ) ;
}
Long target ConnectionId = assignmentConfigEntity . getTarget ConnectionId ( ) ;
DatabaseConnectionEntity target Entity = databaseConnectionDAO . getById ( target ConnectionId) ;
if ( ProductTypeEnum . SQLITE3 = = target Entity. getType ( ) ) {
if ( ProductTypeEnum . isUnsupportedTargetSqlite ( targetEntity . getUrl ( ) ) ) {
throw new DbswitchException ( ResultCode . ERROR_INVALID_ASSIGNMENT_CONFIG ,
" 不支持目的端数据源为远程服务器上的SQLite或内存方式下的SQLite " ) ;
}
}
return ConverterFactory . getConverter ( A ssignmentInfoConverter . class )
. convert ( assignmentTaskDAO . getById ( assignment . getId ( ) ) ) ;
}
Long sourceConnectionId = a ssignmentConfigEntity . getSourceConnectionId ( ) ;
DatabaseConnectionEntity sourceEntity = databaseConnectionDAO . getById ( sourceConnectionId ) ;
if ( ProductTypeEnum . ELASTICSEARCH = = sourceEntity . getType ( ) ) {
throw new DbswitchException ( ResultCode . ERROR_INVALID_ASSIGNMENT_CONFIG ,
" 不支持源端数据源为ElasticSearch类型 " ) ;
}
public void deleteAssignment ( Long id ) {
A ssignmentTaskEntity taskEntity = assignmentTaskDAO . getBy Id ( id ) ;
if ( null ! = taskEntity & & null ! = taskEntity . getPublished ( ) & & taskEntity . getPublished ( ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_HAS_DEPLOY ,
" 已经发布的任务需先下线后方可执行删除操作 " ) ;
}
assignmentTaskDAO . deleteById ( id ) ;
}
return ConverterFactory . getConverter ( AssignmentInfoConverter . class )
. convert ( a ssignmentTaskDAO . getById ( assignment . getId ( ) ) ) ;
}
@Transactional ( rollbackFor = Exception . class )
public void updateAssignment ( AssigmentUpdateRequest request ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( request . getI d ( ) ) ;
if ( Objects . isNull ( assignmentTaskEntity ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_NOT_EXISTS , " ID= " + request . getId ( ) ) ;
} else if ( assignmentTaskEntity . getPublished ( ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_HAS_DEPLOY , " ID= " + request . get Id( ) ) ;
}
public void deleteAssignment ( Long id ) {
AssignmentTaskEntity taskEntity = assignmentTaskDAO . getById ( id ) ;
if ( null ! = taskEntity & & null ! = t askEntity . getPublished ( ) & & taskEntity . getPublishe d( ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_HAS_DEPLOY ,
" 已经发布的任务需先下线后方可执行删除操作 " ) ;
}
assignmentTaskDAO . deleteBy Id( id ) ;
}
AssignmentTaskEntity newAssignmentTaskEntity = request . toAssignmentTask ( ) ;
assignmentTaskDAO . updateById ( new Assign mentTaskEntity ) ;
@Transactional ( rollbackFor = Exception . class )
public void updateAssignment ( AssigmentUpdateRequest request ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( request . getId ( ) ) ;
if ( Objects . isNull ( assignmentTaskEntity ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_NOT_EXISTS , " ID= " + request . getId ( ) ) ;
} else if ( assignmentTaskEntity . getPublished ( ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_HAS_DEPLOY , " ID= " + request . getId ( ) ) ;
}
AssignmentConfig Entity a ssignmentConfig Entity = request
. toAssignmentConfig ( a ssignmentTaskEntity. getId ( ) );
assignmentConfigDAO . deleteByAssignmentTaskId ( assignmentTaskEntity . getId ( ) ) ;
assignmentConfigDAO . insert ( assignmentConfigEntity ) ;
AssignmentTask Entity newA ssignmentTask Entity = request . toAssignmentTask ( ) ;
assignmentTaskDAO . updateById ( newA ssignmentTaskEntity) ;
Long targetConnectionId = assignmentConfigEntity . getTargetConnectionId ( ) ;
DatabaseConnectionEntity entity = databaseConnectionDAO . getBy Id ( targetConnectionId ) ;
if ( ProductTypeEnum . SQLITE3 = = e ntity. getType ( ) ) {
if ( ProductTypeEnum . isUnsupportedTargetSqlite ( entity . getUrl ( ) ) ) {
throw new DbswitchException ( ResultCode . ERROR_INVALID_ASSIGNMENT_CONFIG ,
" 不支持目的端数据源为远程服务器上的SQLite或内存方式下的SQLite " ) ;
}
}
}
AssignmentConfigEntity assignmentConfigEntity = request
. toAssignmentConfig ( assignmentTaskEntity . getId ( ) ) ;
assignmentConfigDAO . deleteByAssignmentTaskId ( assignmentTaskE ntity. getId ( ) ) ;
assignmentConfigDAO . insert ( assignmentConfigEntity ) ;
public PageResult < A ssignmentInfoResponse > listAll ( AssignmentSearchRequest request ) {
Supplier < List < AssignmentInfoResponse > > method = ( ) - > {
List < AssignmentInfoResponse > assignmentInfoResponseList = ConverterFactory . getConverter ( AssignmentInfoConverter . class )
. convert ( assignmentTaskDAO . l istAll ( request . getSearchText ( ) ) ) ;
assignmentInfoResponseList . forEach ( ( e ) - > {
AssignmentConfigEntity assignmentConfigEntity = this . assignmentConfigDAO . getByAssignmentTaskId ( e . getId ( ) ) ;
Long targetConnectionId = a ssignmentConfigEntity . getTargetConnectionId ( ) ;
DatabaseConnectionEntity entity = databaseConnectionDAO . getById ( targetConnectionId ) ;
if ( ProductTypeEnum . SQLITE3 = = entity . getType ( ) ) {
if ( ProductTypeEnum . isUnsupportedTargetSqlite ( entity . getUrl ( ) ) ) {
throw new DbswitchException ( ResultCode . ERROR_INVALID_ASSIGNMENT_CONFIG ,
" 不支持目的端数据源为远程服务器上的SQLite或内存方式下的SQLite " ) ;
}
}
}
Long sourceConnectionId = a ssignmentConfigEntity . getSourceConnectionId ( ) ;
DatabaseConnectionEntity databaseConnectionEntity = this . databaseConnectionDAO . getById ( sourceConnectionId ) ;
String sourceSchema = assignmentConfigEntity . getSourceSchema ( ) ;
e . setSourceSchema ( sourceSchema ) ;
String sourceType = databaseConnectionEntity . getType ( ) . getName ( ) ;
e . setSourceType ( sourceType ) ;
public PageResult < A ssignmentInfoResponse > listAll ( AssignmentSearchRequest request ) {
Supplier < List < AssignmentInfoResponse > > method = ( ) - > {
List < AssignmentInfoResponse > assignmentInfoResponseList = ConverterFactory . getConverter ( AssignmentInfoConverter . class )
. convert ( assignmentTaskDAO . listAll ( request . getSearchText ( ) ) ) ;
assignmentInfoResponseList . forEach ( ( e ) - > {
AssignmentConfigEntity assignmentConfigEntity = this . assignmentConfigDAO . getByAssignmentTaskId ( e . getId ( ) ) ;
Long target ConnectionId = assignmentConfigEntity . getTarget ConnectionId ( ) ;
DatabaseConnectionEntity databaseConnectionEntity1 = this . databaseConnectionDAO . getById ( target ConnectionId) ;
String target Schema = assignmentConfigEntity . getTarget Schema ( ) ;
e . setTarget Schema ( target Schema) ;
String target Type = databaseConnectionEntity1 . getType ( ) . getName ( ) ;
e . setTarget Type ( target Type) ;
Long source ConnectionId = assignmentConfigEntity . getSource ConnectionId ( ) ;
DatabaseConnectionEntity databaseConnectionEntity = this . databaseConnectionDAO . getById ( source ConnectionId) ;
String source Schema = assignmentConfigEntity . getSource Schema ( ) ;
e . setSource Schema ( source Schema) ;
String source Type = databaseConnectionEntity . getType ( ) . getName ( ) ;
e . setSource Type ( source Type) ;
AssignmentJobEntity assignmentJobEntity = this . assignmentJobMapper . selectOne (
new LambdaQueryWrapper < AssignmentJobEntity > ( )
. eq ( AssignmentJobEntity : : getAssignmentId , e . getId ( ) ) . orderByDesc ( A ssignmentJob Entity: : getCreateTime )
. last ( " limit 1 " ) ) ;
Integer s tatus = ( assignmentJobEntity = = null | | assignmentJob Entity. getStatus ( ) = = null ) ?
JobStatusEnum . INIT . getValue ( ) :
assignmentJobEntity . getStatus ( ) ;
e . setRunStatus ( JobStatusEnum . of ( status ) . getName ( ) ) ;
Long targetConnectionId = assignmentConfigEntity . getTargetConnectionId ( ) ;
DatabaseConnectionEntity databaseConnectionEntity1 = this . databaseConnectionDAO . getById ( targetConnectionId ) ;
String targetSchema = a ssignmentConfig Entity. getTargetSchema ( ) ;
e . setTargetSchema ( targetSchema ) ;
String targetType = databaseConnection Entity1 . getType ( ) . getName ( ) ;
e . setTargetType ( targetType ) ;
} ) ;
return assignmentInfoResponseList ;
} ;
return PageUtils . getPage ( method , request . getPage ( ) , request . getSize ( ) ) ;
}
AssignmentJobEntity assignmentJobEntity = this . assignmentJobMapper . selectOne (
new LambdaQueryWrapper < AssignmentJobEntity > ( )
. eq ( AssignmentJobEntity : : getAssignmentId , e . getId ( ) ) . orderByDesc ( AssignmentJobEntity : : getCreateTime )
. last ( " limit 1 " ) ) ;
Integer status = ( assignmentJobEntity = = null | | assignmentJobEntity . getStatus ( ) = = null ) ?
JobStatusEnum . INIT . getValue ( ) :
assignmentJobEntity . getStatus ( ) ;
e . setRunStatus ( JobStatusEnum . of ( status ) . getName ( ) ) ;
public Result < AssignmentDetailResponse > detailAssignment ( Long id ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( Objects . isNull ( assignmentTaskEntity ) ) {
return Result . failed ( ResultCode . ERROR_RESOURCE_NOT_EXISTS , " ID= " + id ) ;
}
} ) ;
return assignmentInfoResponseList ;
} ;
return PageUtils . getPage ( method , request . getPage ( ) , request . getSize ( ) ) ;
}
AssignmentDetailResponse detailResponse = ConverterFactory
. getConverter ( A ssignmentDetailConverter . class ) . convert ( assignmentTaskEntity ) ;
return Result . success ( detailResponse ) ;
}
public Result < AssignmentDetailResponse > detailAssignment ( Long id ) {
AssignmentTaskEntity a ssignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( Objects . isNull ( assignmentTaskEntity ) ) {
return Result . failed ( ResultCode . ERROR_RESOURCE_NOT_EXISTS , " ID= " + id ) ;
}
@Transactional ( rollbackFor = Exception . class )
public void deployAssignments ( List < Long > ids ) {
checkAssignmentAllExist ( ids ) ;
ids . forEach ( id - > {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( assignmentTaskEntity . getPublished ( ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_HAS_DEPLOY , " ID= " + id ) ;
}
} ) ;
AssignmentDetailResponse detailResponse = ConverterFactory
. getConverter ( AssignmentDetailConverter . class ) . convert ( assignmentTaskEntity ) ;
return Result . success ( detailResponse ) ;
}
for ( Long id : ids ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
AssignmentConfigEntity assignmentConfigEntity = assignmentConfigDAO . getByAssignmentTaskId ( id ) ;
@Transactional ( rollbackFor = Exception . class )
public void deployAssignments ( List < Long > ids ) {
check AssignmentAllExist ( ids ) ;
ids . forEach ( id - > {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( assignmentTaskEntity . getPublished ( ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_HAS_DEPLOY , " ID= " + id ) ;
}
} ) ;
DbswichPropertiesConfiguration properties = new DbswichPropertiesConfiguration ( ) ;
properties . setSource ( this . getSourceDataSourceProperties ( assignmentConfigEntity ) ) ;
properties . setTarget ( this . getTargetDataSourceProperties ( assignmentConfigEntity ) ) ;
properties . setConfig ( this . getGlobalParamConfigProperties ( assignmentConfigEntity ) ) ;
for ( Long id : ids ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
AssignmentConfigEntity assignmentConfigEntity = assignmentConfigDAO . getByAssignmentTaskId ( id ) ;
assignmentTaskEntity . setPublished ( Boolean . TRUE ) ;
assignmentTaskEntity . setContent ( JsonUtils . toJsonString ( properties ) ) ;
assignmentTaskDAO . updateById ( assignmentTask Entity ) ;
DbswichPropertiesConfiguration properties = new DbswichPropertiesConfiguration ( ) ;
properties . setSource ( this . getSourceDataSourceProperties ( assignmentConfigEntity ) ) ;
properties . setTarget ( this . getTargetDataSourceProperties ( assignmentConfig Entity ) ) ;
properties . setConfig ( this . getGlobalParamConfigProperties ( assignmentConfigEntity ) ) ;
ScheduleModeEnum systemScheduled = ScheduleModeEnum . SYSTEM_SCHEDULED ;
if ( assignmentTaskEntity . g etScheduleMode ( ) = = systemScheduled ) {
scheduleService . scheduleTask ( assignmentTaskEntity . getId ( ) , systemScheduled ) ;
}
}
assignmentTaskEntity . setPublished ( Boolean . TRUE ) ;
assignmentTaskEntity . s etContent ( JsonUtils . toJsonString ( properties ) ) ;
assignmentTaskDAO . updateById ( assignmentTaskEntity ) ;
}
ScheduleModeEnum systemScheduled = ScheduleModeEnum . SYSTEM_SCHEDULED ;
if ( assignmentTaskEntity . getScheduleMode ( ) = = systemScheduled ) {
scheduleService . scheduleTask ( assignmentTaskEntity . getId ( ) , systemScheduled ) ;
}
}
@Transactional ( rollbackFor = Exception . class )
public void runAssignments ( List < Long > ids ) {
checkAssignmentAllExist ( ids ) ;
List < AssignmentTaskEntity > tasks = new ArrayList < > ( ) ;
for ( Long id : ids ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( assignmentTaskEntity . getPublished ( ) ) {
tasks . add ( assignmentTaskEntity ) ;
} else {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_NOT_DEPLOY , " ID= " + id ) ;
}
}
}
tasks . forEach ( assignmentTask - > {
scheduleService . scheduleTask ( assignmentTask . getId ( ) , ScheduleModeEnum . MANUAL ) ;
} ) ;
@Transactional ( rollbackFor = Exception . class )
public void runAssignments ( List < Long > ids ) {
checkAssignmentAllExist ( ids ) ;
List < AssignmentTaskEntity > tasks = new ArrayList < > ( ) ;
for ( Long id : ids ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( assignmentTaskEntity . getPublished ( ) ) {
tasks . add ( assignmentTaskEntity ) ;
} else {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_NOT_DEPLOY , " ID= " + id ) ;
}
}
}
tasks . forEach ( assignmentTask - > {
scheduleService . scheduleTask ( assignmentTask . getId ( ) , ScheduleModeEnum . MANUAL ) ;
} ) ;
@Transactional ( rollbackFor = Exception . class )
public void retireAssignments ( List < Long > ids ) {
checkAssignmentAllExist ( ids ) ;
for ( Long id : ids ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( Objects . nonNull ( assignmentTaskEntity . getPublished ( ) )
& & assignmentTaskEntity . getPublished ( ) ) {
String jobKey = assignmentTaskEntity . getJobKey ( ) ;
scheduleService . cancelByJobKey ( jobKey ) ;
scheduleService . cancelManualJob ( id ) ;
assignmentTaskEntity . setPublished ( Boolean . FALSE ) ;
assignmentTaskEntity . setContent ( " {} " ) ;
assignmentTaskEntity . setJobKey ( " " ) ;
assignmentTaskDAO . updateById ( assignmentTaskEntity ) ;
}
}
}
}
private void checkAssignmentAllExist ( List < Long > ids ) {
for ( Long id : ids ) {
if ( Objects . isNull ( assignmentTaskDAO . getById ( id ) ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_NOT_EXISTS , " ID= " + id ) ;
}
}
}
@Transactional ( rollbackFor = Exception . class )
public void retireAssignments ( List < Long > ids ) {
checkAssignmentAllExist ( ids ) ;
for ( Long id : ids ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
if ( Objects . nonNull ( assignmentTaskEntity . getPublished ( ) )
& & assignmentTaskEntity . getPublished ( ) ) {
String jobKey = assignmentTaskEntity . getJobKey ( ) ;
scheduleService . cancelByJobKey ( jobKey ) ;
scheduleService . cancelManualJob ( id ) ;
assignmentTaskEntity . setPublished ( Boolean . FALSE ) ;
assignmentTaskEntity . setContent ( " {} " ) ;
assignmentTaskEntity . setJobKey ( " " ) ;
assignmentTaskDAO . updateById ( assignmentTaskEntity ) ;
}
}
}
private SourceDataSourceProperties getSourceDataSourceProperties (
AssignmentConfigEntity assignmentConfigEntity ) {
SourceDataSourceProperties sourceDataSourceProperties = new SourceDataSourceProperties ( ) ;
DatabaseConnectionEntity sourceDatabaseConnectionEntity = databaseConnectionDAO . getById (
assignmentConfigEntity . getSourceConnectionId ( )
) ;
File driverVersionFile = driverLoadService . getVersionDriverFile (
sourceDatabaseConnectionEntity . getType ( ) ,
sourceDatabaseConnectionEntity . getVersion ( ) ) ;
sourceDataSourceProperties . setUrl ( sourceDatabaseConnectionEntity . getUrl ( ) ) ;
sourceDataSourceProperties . setDriverClassName ( sourceDatabaseConnectionEntity . getDriver ( ) ) ;
sourceDataSourceProperties . setDriverPath ( driverVersionFile . getAbsolutePath ( ) ) ;
sourceDataSourceProperties . setUsername ( sourceDatabaseConnectionEntity . getUsername ( ) ) ;
sourceDataSourceProperties . setPassword ( sourceDatabaseConnectionEntity . getPassword ( ) ) ;
private void checkAssignmentAllExist ( List < Long > ids ) {
for ( Long id : ids ) {
if ( Objects . isNull ( assignmentTaskDAO . getById ( id ) ) ) {
throw new DbswitchException ( ResultCode . ERROR_RESOURCE_NOT_EXISTS , " ID= " + id ) ;
}
}
}
String s ourceSchema = assignmentConfigEntity . getSourceSchema ( ) ;
if ( assignmentConfigEntity . getExcluded ( ) ) {
if ( CollectionU til s. isEmpty ( assignmentConfigEntity . getSourceTables ( ) ) ) {
sourceDataSourceProperties . s etSourceExcludes ( " " ) ;
} else {
sourceDataSourceProperties . setSourceExcludes (
assignmentConfigEntity . getSourceTab les ( )
. stream ( ) . collect ( Collectors . joining ( " , " ) )
) ;
}
} else {
if ( CollectionU til s. isEmpty ( assignmentConfigEntity . getSourceTables ( ) ) ) {
sourceDataSourceProperties . setSourceIncludes ( " " ) ;
} else {
sourceDataSourceProperties . setSourceIncludes (
assignmentConfigEntity . getSourceTables ( )
. stream ( ) . collect ( Collectors . joining ( " , " ) )
) ;
}
}
sourceDataSourceProperties . setSourceSchema ( sourceSchema ) ;
sourceDataSourceProperties . setRegexTableMapper ( assignmentConfigEntity . getTableNameMap ( ) ) ;
sourceDataSourceProperties . setRegexColumnMapper ( assignmentConfigEntity . getColumnNameMap ( ) ) ;
sourceDataSourceProperties . setFetchSize ( assignmentConfigEntity . getBatchSize ( ) ) ;
sourceDataSourceProperties . setTableType ( assignmentConfigEntity . getTableType ( ) . name ( ) ) ;
return sourceDataSourceProperties ;
}
private S ourceDataSourceProperties getSourceDataSourceProperties (
AssignmentConfigEntity assignmentConfigEntity ) {
SourceDataSourceProperties sourceDataSourceProper tie s = new SourceDataSourceProperties ( ) ;
DatabaseConnectionEntity sourceDatabaseConnectionEntity = databaseConnectionDAO . g etById (
assignmentConfigEntity . getSourceConnectionId ( )
) ;
File driverVersionFile = driverLoadService . getVersionDriverFi le(
sourceDatabaseConnectionEntity . getType ( ) ,
sourceDatabaseConnectionEntity . getVersion ( ) ) ;
sourceDataSourceProperties . setUrl ( sourceDatabaseConnectionEntity . getUrl ( ) ) ;
sourceDataSourceProperties . setDriverClassName ( sourceDatabaseConnectionEntity . getDriver ( ) ) ;
sourceDataSourceProper tie s. setDriverPath ( driverVersionFile . getAbsolutePath ( ) ) ;
sourceDataSourceProperties . setUsername ( sourceDatabaseConnectionEntity . getUsername ( ) ) ;
sourceDataSourceProperties . setPassword ( sourceDatabaseConnectionEntity . getPassword ( ) ) ;
private TargetDataSourceProperties getTargetDataSourceProperties (
A ssignmentConfigEntity assignmentConfigEntity ) {
TargetDataSourceProperties targetDataSourceProper tie s = new TargetDataSourceProperties ( ) ;
DatabaseConnectionEntity targetDatabaseConnectionEntity = databaseConnectionDAO
. getById ( assignmentConfigEntity . getTargetConnectionId ( ) ) ;
File driverVersionFile = driverLoadService . g etVersionDriverFile (
targetDatabaseConnection Entity. getType ( ) ,
targetDatabaseConnectionEntity . getVersion ( ) ) ;
targetDataSourceProperties . setUrl ( targetDatabaseConnectionEntity . getUrl ( ) ) ;
targetDataSourceProperties . setDriverClassName ( targetDatabaseConnectionEntity . getDriver ( ) ) ;
targetDataSourceProperties . setDriverPath ( driverVersionFile . getAbsolutePath ( ) ) ;
targetDataSourceProper tie s. setUsername ( targetDatabaseConnection Entity. getUsername ( ) ) ;
target DataSourceProperties. setPassword ( targetDatabaseConnectionEntity . getPassword ( ) ) ;
targetDataSourceProperties . setTargetSchema ( assignmentConfigEntity . getTargetSchema ( ) ) ;
if ( assignmentConfigEntity . g etTargetDropTable ( ) ) {
targetDataSourceProperties . setTargetDrop ( Boolean . TRUE ) ;
targetDataSourceProperties . setChangeDataSync ( Boolean . FALSE ) ;
} else {
targetDataSourceProperties . setTargetDrop ( Boolean . FALSE ) ;
targetDataSourceProperties . setChangeDataSync ( Boolean . TRUE ) ;
}
if ( assignmentConfigEntity . getTargetOnlyCreate ( ) ) {
target DataSourceProperties. setOnlyCreate ( Boolean . TRUE ) ;
}
if ( assignmentConfigEntity . getTargetAutoIncrement ( ) ) {
targetDataSourceProperties . setCreateTableAutoIncrement ( Boolean . TRUE ) ;
}
targetDataSourceProperties . setTableNameCase ( assignmentConfigEntity . getTableNameCase ( ) ) ;
targetDataSourceProperties . setColumnNameCase ( assignmentConfigEntity . getColumnNameCase ( ) ) ;
targetDataSourceProperties . setTargetSyncOption ( assignmentConfigEntity . getTargetSyncOption ( ) ) ;
targetDataSourceProperties . setBeforeSqlScripts ( assignmentConfigEntity . getBeforeSqlScripts ( ) ) ;
targetDataSourceProperties . setAfterSqlScripts ( assignmentConfigEntity . getAfterSqlScripts ( ) ) ;
String sourceSchema = assignmentConfigEntity . getSourceSchema ( ) ;
if ( a ssignmentConfigEntity. getExcluded ( ) ) {
if ( CollectionU til s. isEmpty ( assignmentConfigEntity . getSourceTables ( ) ) ) {
sourceDataSourceProperties . setSourceExcludes ( " " ) ;
} else {
sourceDataSourceProperties . s etSourceExcludes (
assignmentConfig Entity. getSourceTables ( )
. stream ( ) . collect ( Collectors . joining ( " , " ) )
) ;
}
} else {
if ( CollectionU til s. isEmpty ( assignmentConfig Entity. getSourceTables ( ) ) ) {
source DataSourceProperties. setSourceIncludes ( " " ) ;
} else {
sourceDataSourceProperties . s etSourceIncludes (
assignmentConfigEntity . getSourceTables ( )
. stream ( ) . collect ( Collectors . joining ( " , " ) )
) ;
}
}
sourceDataSourceProperties . setSourceSchema ( sourceSchema ) ;
sourceDataSourceProperties . setRegexTableMapper ( assignmentConfigEntity . getTableNameMap ( ) ) ;
source DataSourceProperties. setRegexColumnMapper ( assignmentConfigEntity . getColumnNameMap ( ) ) ;
sourceDataSourceProperties . setFetchSize ( assignmentConfigEntity . getBatchSize ( ) ) ;
sourceDataSourceProperties . setTableType ( assignmentConfigEntity . getTableType ( ) . name ( ) ) ;
return sourceDataSourceProperties ;
}
return t argetDataSourceProperties;
}
private TargetDataSourceProperties getT argetDataSourceProperties(
AssignmentConfigEntity assignmentConfigEntity ) {
TargetDataSourceProperties targetDataSourceProperties = new TargetDataSourceProperties ( ) ;
DatabaseConnectionEntity targetDatabaseConnectionEntity = databaseConnectionDAO
. getById ( assignmentConfigEntity . getTargetConnectionId ( ) ) ;
File driverVersionFile = driverLoadService . getVersionDriverFile (
targetDatabaseConnectionEntity . getType ( ) ,
targetDatabaseConnectionEntity . getVersion ( ) ) ;
targetDataSourceProperties . setUrl ( targetDatabaseConnectionEntity . getUrl ( ) ) ;
targetDataSourceProperties . setDriverClassName ( targetDatabaseConnectionEntity . getDriver ( ) ) ;
targetDataSourceProperties . setDriverPath ( driverVersionFile . getAbsolutePath ( ) ) ;
targetDataSourceProperties . setUsername ( targetDatabaseConnectionEntity . getUsername ( ) ) ;
targetDataSourceProperties . setPassword ( targetDatabaseConnectionEntity . getPassword ( ) ) ;
targetDataSourceProperties . setTargetSchema ( assignmentConfigEntity . getTargetSchema ( ) ) ;
if ( assignmentConfigEntity . getTargetDropTable ( ) ) {
targetDataSourceProperties . setTargetDrop ( Boolean . TRUE ) ;
targetDataSourceProperties . setChangeDataSync ( Boolean . FALSE ) ;
} else {
targetDataSourceProperties . setTargetDrop ( Boolean . FALSE ) ;
targetDataSourceProperties . setChangeDataSync ( Boolean . TRUE ) ;
}
if ( assignmentConfigEntity . getTargetOnlyCreate ( ) ) {
targetDataSourceProperties . setOnlyCreate ( Boolean . TRUE ) ;
}
if ( assignmentConfigEntity . getTargetAutoIncrement ( ) ) {
targetDataSourceProperties . setCreateTableAutoIncrement ( Boolean . TRUE ) ;
}
targetDataSourceProperties . setTableNameCase ( assignmentConfigEntity . getTableNameCase ( ) ) ;
targetDataSourceProperties . setColumnNameCase ( assignmentConfigEntity . getColumnNameCase ( ) ) ;
targetDataSourceProperties . setTargetSyncOption ( assignmentConfigEntity . getTargetSyncOption ( ) ) ;
targetDataSourceProperties . setBeforeSqlScripts ( assignmentConfigEntity . getBeforeSqlScripts ( ) ) ;
targetDataSourceProperties . setAfterSqlScripts ( assignmentConfigEntity . getAfterSqlScripts ( ) ) ;
private GlobalParamConfigProperties getGlobalParamConfig Properties(
AssignmentConfigEntity assignmentConfigEntity ) {
GlobalParamConfigProperties configProperties = new GlobalParamConfigProperties ( ) ;
configProperties . setChannelQueueSize ( assignmentConfigEntity . getChannelSize ( ) ) ;
return configProperties ;
}
return targetDataSource Properties;
}
private GlobalParamConfigProperties getGlobalParamConfigProperties (
AssignmentConfigEntity assignmentConfigEntity ) {
GlobalParamConfigProperties configProperties = new GlobalParamConfigProperties ( ) ;
configProperties . setChannelQueueSize ( assignmentConfigEntity . getChannelSize ( ) ) ;
return configProperties ;
}
public void exportAssignments ( List < Long > ids , HttpServletResponse response ) {
checkAssignmentAllExist ( ids ) ;
List < AssignmentsDataResponse > assignmentsDataResponses = new ArrayList < > ( ) ;
// TODO 任务导出
for ( Long id : ids ) {
AssignmentTaskEntity assignmentTaskEntity = assignmentTaskDAO . getById ( id ) ;
// AssignmentsDataResponse assignmentsDataResponse =
// this.assignmentConvert.toAssignmentsDataResponse(assignmentTaskEntity);
AssignmentsDataResponse assignmentsDataResponse = ConverterFactory . getConverter ( AssignmentsConverter . class )
. convert ( assignmentTaskEntity ) ;
AssignmentConfigEntity assignmentConfigEntity = this . assignmentConfigDAO . getByAssignmentTaskId ( id ) ;
Long sourceConnectionId = assignmentConfigEntity . getSourceConnectionId ( ) ;
DatabaseConnectionEntity databaseConnectionEntity = this . databaseConnectionDAO . getById ( sourceConnectionId ) ;
String sourceSchema = assignmentConfigEntity . getSourceSchema ( ) ;
assignmentsDataResponse . setSourceSchema ( sourceSchema ) ;
String sourceType = databaseConnectionEntity . getType ( ) . getName ( ) ;
assignmentsDataResponse . setSourceType ( sourceType ) ;
Long targetConnectionId = assignmentConfigEntity . getTargetConnectionId ( ) ;
DatabaseConnectionEntity databaseConnectionEntity1 = this . databaseConnectionDAO . getById ( targetConnectionId ) ;
String targetSchema = assignmentConfigEntity . getTargetSchema ( ) ;
assignmentsDataResponse . setTargetSchema ( targetSchema ) ;
String targetType = databaseConnectionEntity1 . getType ( ) . getName ( ) ;
assignmentsDataResponse . setTargetType ( targetType ) ;
AssignmentJobEntity assignmentJobEntity = this . assignmentJobMapper . selectOne (
new LambdaQueryWrapper < AssignmentJobEntity > ( )
. eq ( AssignmentJobEntity : : getAssignmentId , assignmentsDataResponse . getId ( ) ) . orderByDesc ( AssignmentJobEntity : : getCreateTime )
. last ( " limit 1 " ) ) ;
Integer status = ( assignmentJobEntity = = null | | assignmentJobEntity . getStatus ( ) = = null ) ?
JobStatusEnum . INIT . getValue ( ) :
assignmentJobEntity . getStatus ( ) ;
assignmentsDataResponse . setRunStatus ( JobStatusEnum . of ( status ) . getName ( ) ) ;
assignmentsDataResponses . add ( assignmentsDataResponse ) ;
}
try {
// 这里注意 有同学反应使用swagger 会导致各种问题, 请直接用浏览器或者用postman
// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response . setContentType ( " application/vnd.ms-excel " ) ;
response . setCharacterEncoding ( " utf-8 " ) ;
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder . encode ( " 测试 " , " UTF-8 " ) . replaceAll ( " \\ + " , " %20 " ) ;
// response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
response . setHeader ( " Content-disposition " , " attachment;filename= " + fileName + " .xlsx " ) ;
EasyExcel . write ( response . getOutputStream ( ) , AssignmentsDataResponse . class )
. sheet ( " 模板 " )
. doWrite ( assignmentsDataResponses ) ;
} catch ( IOException ex ) {
throw new DbswitchException ( ResultCode . ERROR_INTERNAL_ERROR , ex . getMessage ( ) ) ;
}
}
}